diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/cgdd/ErpCgDDSaveDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/cgdd/ErpCgDDSaveDTO.java index bf55bdae6..27af75cd8 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/cgdd/ErpCgDDSaveDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/cgdd/ErpCgDDSaveDTO.java @@ -72,6 +72,8 @@ public class ErpCgDDSaveDTO { private String orderNumber; + @Schema(description="关联码") + private String linkCode; /** * @Link SmCgPlanSaveItemDTO */ diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/CGDdLinkQueryDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/CGDdLinkQueryDTO.java new file mode 100644 index 000000000..79c64a1ce --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/CGDdLinkQueryDTO.java @@ -0,0 +1,26 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDate; + + + +@Data +@Schema(description = "分页查询采购订单条件") +public class CGDdLinkQueryDTO { + + /** + * 采购计划编号 + */ + @Schema(description="采购订单编号") + private String code; + + /** + * 采购计划单据日期 + */ + @Schema(description="单据日期") + private LocalDate dDate; +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveDTO.java new file mode 100644 index 000000000..cc8ff2384 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveDTO.java @@ -0,0 +1,86 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDate; +import java.util.List; + +/** + * + * 新增一个采购计划 + */ +@Data +@Schema(description = "采购计划保存对象") +public class InventoryRecordSaveDTO { + + + /** + * 采购计划编号 + */ + @Schema(description="编号") + private String inventoryCode; + + /** + * 采购计划单据日期 + */ + @Schema(description="单据日期") + private LocalDate inventoryDate; + + /** + * 仓库id + */ + @Schema(description="仓库id") + private String warehouseId; + + /** + * 经办人id + */ + @Schema(description="经办人id") + private Long handlerUserId; + + + /** + * 累计进货数量 + */ + @Schema(description="累计进货数量") + private Integer totalNumber; + + /** + * 累计总金额 + */ + @Schema(description="累计总金额") + private Integer totalAmount; + + /** + * 货商 + */ + @Schema(description="货商") + private Long supplierId; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + /** + * 订单编号 + */ + @Schema(description="订单编号") + private String orderNumber; + + + @Schema(description="关联码") + private String linkCode; + /** + * @Link SmCgPlanSaveItemDTO + */ + @Schema(description="采购计划-item") + private List items; + + + + +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveItemDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveItemDTO.java new file mode 100644 index 000000000..9d601bdc3 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveItemDTO.java @@ -0,0 +1,54 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 采购计划-item + * + * @author zjf + * @date 2025-02-11 17:11:41 + */ +@Data +@Schema(description = "采购计划-item") +public class InventoryRecordSaveItemDTO { + + + /** + * 库存商品id + */ + @Schema(description="库存商品id") + private Long erpSpuId; + + + /** + * 数量 + */ + @Schema(description="数量") + private Integer quantity; + + /** + * 进价 + */ + @Schema(description="进价") + private Integer unitPrice; + + /** + * 累计总金额 + */ + @Schema(description="累计总金额") + private Integer totalAmount; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + /** + * 包装单位id + */ + @Schema(description="包装单位id") + private Long unitId; + +} \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/UpdateStockDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/UpdateStockDTO.java new file mode 100644 index 000000000..bb16e1095 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/UpdateStockDTO.java @@ -0,0 +1,37 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 更新库存 DTO + * + * @author LeeYan9 + * @since 2022-08-26 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UpdateStockDTO { + + /** + * 商品 SKU 编号 + */ + @NotNull(message = "商品 SPU 编号不能为空") + private Long id; + + /** + * 库存变化数量 + * + * 正数:增加库存 + * 负数:扣减库存 + */ + @NotNull(message = "库存变化数量不能为空") + private Integer incrCount; + + +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpSpuEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpSpuEntity.java index 0e65f4aca..2d2f288e5 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpSpuEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpSpuEntity.java @@ -242,17 +242,6 @@ public class SmErpSpuEntity extends Model { @Schema(description="联营扣率") private BigDecimal jointDeductionRate; - /** - * 库存上限 - */ - @Schema(description="库存上限") - private Integer inventoryUpperLimit; - - /** - * 库存下限 - */ - @Schema(description="库存下限") - private Integer inventoryLowerLimit; /** * 毛利率 @@ -332,4 +321,18 @@ public class SmErpSpuEntity extends Model { @TableField(exist = false) private List smErpUnitEntityList; + /** + * 库存上限 + */ + @Schema(description="库存上限") + @TableField(exist = false) + private Integer inventoryUpperLimit; + + /** + * 库存下限 + */ + @Schema(description="库存下限") + @TableField(exist = false) + private Integer inventoryLowerLimit; + } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpStockEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpStockEntity.java index 464923ecf..5528e6121 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpStockEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpStockEntity.java @@ -33,7 +33,7 @@ public class SmErpStockEntity extends Model { * 基础库存数量 */ @Schema(description="基础库存数量") - private Integer baseStcok; + private Integer baseStock; /** * 乐观锁版本号 @@ -88,4 +88,19 @@ public class SmErpStockEntity extends Model { */ @Schema(description="租户编号") private Long tenantId; + + @Schema(description="当前库存") + private Integer currentStock; + + /** + * 库存上限 + */ + @Schema(description="库存上限") + private Integer inventoryUpperLimit; + + /** + * 库存下限 + */ + @Schema(description="库存下限") + private Integer inventoryLowerLimit; } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/inventoryrecord/InventoryRecordItemVo.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/inventoryrecord/InventoryRecordItemVo.java new file mode 100644 index 000000000..c9f294d7b --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/inventoryrecord/InventoryRecordItemVo.java @@ -0,0 +1,102 @@ +package com.bsd.pjcloud.supermarket.vo.inventoryrecord; + +import com.bsd.pjcloud.common.core.util.MoneyDeserializer; +import com.bsd.pjcloud.common.core.util.MoneySerializer; +import com.bsd.pjcloud.supermarket.vo.cgplan.ErpUnitVo; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 采购计划-item + * + * @author zjf + * @date 2025-02-11 17:11:41 + */ +@Data +@Schema(description = "采购计划-item") +public class InventoryRecordItemVo { + + @Schema(description = "id") + private Long id; + + /** + * 库存商品id + */ + @Schema(description="库存商品id") + private Long erpSpuId; + + /** + * 主表id + */ + @Schema(description="主表id") + private Long inventoryId; + /** + * 数量 + */ + @Schema(description="数量") + private Integer quantity; + + /** + * 进价 + */ + @Schema(description="进价") + @JsonSerialize(using = MoneySerializer.class) // 分 -> 元 + @JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分 + private Integer unitPrice; + + /** + * 累计总金额 + */ + @Schema(description="累计总金额") + @JsonSerialize(using = MoneySerializer.class) // 分 -> 元 + @JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分 + private Integer totalAmount; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + /** + * 包装单位id + */ + @Schema(description="包装单位id") + private Long unitId; + + + /** + * 规格 + */ + @Schema(description="规格") + private String spec; + + /** + * 单位 + */ + @Schema(description="单位") + private String unit; + + /** + * 装数 + */ + @Schema(description="装数") + private Integer packageNum; + + /** + * 进价(分为单位) + */ + @Schema(description="进价(分为单位)") + @JsonSerialize(using = MoneySerializer.class) // 分 -> 元 + @JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分 + private Integer purchasePrice; + + @Schema(description = "包装对象集合对象") + private List erpUnitVos; + + +} \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/inventoryrecord/InventoryRecordVo.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/inventoryrecord/InventoryRecordVo.java new file mode 100644 index 000000000..cbd2dd769 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/inventoryrecord/InventoryRecordVo.java @@ -0,0 +1,72 @@ +package com.bsd.pjcloud.supermarket.vo.inventoryrecord; + + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "采购根据id查询-编辑回显 vo") +@Data +public class InventoryRecordVo { + + @Schema(description ="id") + private Long id; + /** + * 采购计划编号 + */ + @Schema(description="编号") + private String inventoryCode; + + /** + * 采购计划单据日期 + */ + @Schema(description="单据日期") + private LocalDate inventoryDate; + + + /** + * 经办人id + */ + @Schema(description="经办人id") + private Long handlerUserId; + + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description="创建人") + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description="创建时间") + private LocalDateTime createTime; + + /** + * 审批状态 + */ + @Schema(description="审批状态") + private String checkStatus; + + + /** + * @link InventoryRecordItemVo + */ + @Schema(description="item") + private List items; + +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/stockwarn/StockWarnVO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/stockwarn/StockWarnVO.java new file mode 100644 index 000000000..31909124e --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/stockwarn/StockWarnVO.java @@ -0,0 +1,15 @@ +package com.bsd.pjcloud.supermarket.vo.stockwarn; + +import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity; +import lombok.Data; + +@Data +public class StockWarnVO extends SmErpSpuEntity { + private String warnType; // 预警类型字段 + + private Long spuId; + + private Integer baseStock; + + private Integer currentStock; +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/unit/UnitPriceInfo.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/unit/UnitPriceInfo.java new file mode 100644 index 000000000..7607fb4f0 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/unit/UnitPriceInfo.java @@ -0,0 +1,27 @@ +package com.bsd.pjcloud.supermarket.vo.unit; + +import com.bsd.pjcloud.common.core.util.MoneyDeserializer; +import com.bsd.pjcloud.common.core.util.MoneySerializer; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "包装单位价格信息") +public class UnitPriceInfo { + + /** + * 零售价/单位分 + */ + @Schema(description="零售价/单位分") + private Integer retailPrice; + + + /** + * 促销价 + */ + @Schema(description="促销价") + private Integer promotionPrice; + +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java index c4271529c..ad74d6a44 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java @@ -6,11 +6,19 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.supermarket.dto.cgdd.CGPlanLinkQueryDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.CGDdLinkQueryDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; import com.bsd.pjcloud.supermarket.entity.*; import com.bsd.pjcloud.supermarket.service.*; +import com.bsd.pjcloud.supermarket.vo.cgplan.ErpUnitVo; +import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordItemVo; +import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordVo; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -43,6 +51,7 @@ public class SmErpInventoryRecordsController { private final SmErpCgPlanService smErpCgPlanService; private final SmErpSpuService smErpSpuService; private final SmErpUnitService smErpUnitService; + private final SmErpCgDdService smErpCgDdService; /** * 分页查询 @@ -81,47 +90,43 @@ public class SmErpInventoryRecordsController { // -// SmErpCgPlanVo bean = BeanUtils.toBean(smErpCgPlanEntity, SmErpCgPlanVo.class, (source) -> { -// List smeErpCgPlanItemVos = BeanUtils.toBean(list, SmeErpCgPlanItemVo.class); -// smeErpCgPlanItemVos.stream().forEach(item -> { -// List unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(item.getErpSpuId())).collect(Collectors.toList()); -// -//// unitList.stream().forEach(unit -> { -//// if(unit.getId().equals(item.getUnitId())){ -//// item.setSpec(unit.getSpec()); -//// item.setUnit(unit.getUnit()); -//// item.setPackageNum(unit.getPackageNum()); -//// item.setPurchasePrice(unit.getPurchasePrice()); -//// } -//// }); -// item.setErpUnitVos(BeanUtils.toBean(unitEntities, ErpUnitVo.class)); -// }); -// source.setItems(smeErpCgPlanItemVos); -// }); + InventoryRecordVo bean = BeanUtils.toBean(smErpInventoryRecordsEntity, InventoryRecordVo.class, (source) -> { + List smeErpCgPlanItemVos = BeanUtils.toBean(list, InventoryRecordItemVo.class); + smeErpCgPlanItemVos.stream().forEach(item -> { + List unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(item.getErpSpuId())).collect(Collectors.toList()); +// unitList.stream().forEach(unit -> { +// if(unit.getId().equals(item.getUnitId())){ +// item.setSpec(unit.getSpec()); +// item.setUnit(unit.getUnit()); +// item.setPackageNum(unit.getPackageNum()); +// item.setPurchasePrice(unit.getPurchasePrice()); +// } +// }); + item.setErpUnitVos(BeanUtils.toBean(unitEntities, ErpUnitVo.class)); + }); + source.setItems(smeErpCgPlanItemVos); + }); -// voList.stream().forEach(vo -> { +// bean.stream().forEach(vo -> { // List unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(vo.getId())).collect(Collectors.toList()); // vo.setErpUnitVos(BeanUtils.toBean(unitEntities, ErpUnitVo.class)); // }); - - -// return R.ok(bean); - return R.ok(); + return R.ok(bean); } /** * 新增出入库记录表 - * @param smErpInventoryRecords 出入库记录表 + * @param inventoryRecordSaveDTO 出入库记录表 * @return R */ @Operation(summary = "新增出入库记录表" , description = "新增出入库记录表" ) @SysLog("新增出入库记录表" ) @PostMapping @PreAuthorize("@pms.hasPermission('supermarket_smErpInventoryRecords_add')" ) - public R save(@RequestBody SmErpInventoryRecordsEntity smErpInventoryRecords) { - return R.ok(smErpInventoryRecordsService.save(smErpInventoryRecords)); + public R save(@RequestBody InventoryRecordSaveDTO inventoryRecordSaveDTO) { + return R.ok(smErpInventoryRecordsService.saveInventoryRecord(inventoryRecordSaveDTO)); } /** @@ -198,4 +203,24 @@ public class SmErpInventoryRecordsController { } + + /** + * 分页查询 + * @param page 分页对象 + * @param cgDdLinkQueryDTO 采购计划 + * @return + */ + @Operation(summary = "采购订单分页查询" , description = "关联采购订单" ) + @GetMapping("/cgdd/page" ) + public R getSmErpCgPlanPage(@ParameterObject Page page, @ParameterObject CGDdLinkQueryDTO cgDdLinkQueryDTO) { + + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.like(StrUtil.isNotBlank(cgDdLinkQueryDTO.getCode()),SmErpCgDdEntity::getCode,cgDdLinkQueryDTO.getCode()); + wrapper.eq(Objects.nonNull(cgDdLinkQueryDTO.getDDate()),SmErpCgDdEntity::getDDate,cgDdLinkQueryDTO.getDDate()); + + //todo 审核成功条件 +// wrapper.eq(SmErpCgPlanEntity::getCheckStatus,); + return R.ok(smErpCgDdService.pageScope(page, wrapper)); + } + } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java index baf1c2c08..ae4f043c6 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java @@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.BeanUtils; @@ -20,6 +22,9 @@ import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity; import com.bsd.pjcloud.supermarket.service.*; import com.bsd.pjcloud.supermarket.vo.app.SupermarketAppSpuVo; import com.bsd.pjcloud.supermarket.vo.erpspu.SmErpSpuSimpleVo; +import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; @@ -107,7 +112,9 @@ public class SmErpSpuController { LambdaQueryWrapper smErpStockEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); smErpStockEntityLambdaQueryWrapper.eq(SmErpStockEntity::getSpuId, id); SmErpStockEntity smErpStockEntity = smErpStockService.list(smErpStockEntityLambdaQueryWrapper).get(0); - smErpSpuEntity.setStock(smErpStockEntity.getBaseStcok()); + smErpSpuEntity.setStock(smErpStockEntity.getBaseStock()); + smErpStockEntity.setInventoryLowerLimit(smErpStockEntity.getInventoryLowerLimit()); + smErpStockEntity.setInventoryUpperLimit(smErpStockEntity.getInventoryUpperLimit()); List list = smErpUnitService.list(new LambdaQueryWrapper().eq(SmErpUnitEntity::getSpuId, id)); smErpSpuEntity.setSmErpUnitEntityList(list); smErpSpuEntity.setSmErpAuxiliaryCodeEntityList( @@ -185,6 +192,22 @@ public class SmErpSpuController { return R.ok(bean); } + /** + * 分页查询 + * @param page 分页对象 + * @param supermarketSpu 商品spu + * @return + */ + @Operation(summary = "分页查询库存预警" , description = "分页查询库存预警" ) + @GetMapping("/warnStock/page" ) + @PreAuthorize("@pms.hasPermission('supermarket_supermarketSpu_view')" ) + public R getWarnStockPage(@ParameterObject Page page, @ParameterObject SmErpSpuEntity supermarketSpu) { + + IPage iPage = smErpStockService.selectWarnStockWithSpu(page, supermarketSpu); + + return R.ok(iPage); + + } // --------APP----------------- diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpUnitController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpUnitController.java index a37428ce7..5a5922d9d 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpUnitController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpUnitController.java @@ -12,6 +12,7 @@ import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity; import com.bsd.pjcloud.supermarket.service.SmErpUnitService; import com.bsd.pjcloud.supermarket.vo.sm.smspu.SmErpUnitVo; +import com.bsd.pjcloud.supermarket.vo.unit.UnitPriceInfo; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -141,6 +142,18 @@ public class SmErpUnitController { return smErpUnitService.list(Wrappers.lambdaQuery(supermarketUnit).in(ArrayUtil.isNotEmpty(ids), SmErpUnitEntity::getId, ids)); } + /** + * 通过条码查询商品信息和包装单位信息 + * @param barCode + * @return R + *///todo 还没做,后面做吧 +// @Operation(summary = "条码查询商品信息和包装单位信息" , description = "添加子单据扫码枪获取信息" ) +// @PostMapping("/ad/getSupermarketUnits" ) +// public R getSupermarketUnits(@RequestParam("barCode")String barCode) { +// List unitPriceInfos=smErpUnitService.listScope(barCode); +// return R.ok(unitPriceInfos); +// } + // -----------------APP------------------------------ @@ -155,4 +168,19 @@ public class SmErpUnitController { return R.ok(smErpUnitService.getSupermarketUnitsWithSpu(ids)); } + + + //--------------------------------AD---------------------- + + /** + * 通过条码查询对应的包装单位商品价格信息 + * @param barCode + * @return R + */ + @Operation(summary = "条码查询对应的包装单位商品价格" , description = "条码查询对应的包装单位商品价格" ) + @PostMapping("/ad/getSupermarketUnits" ) + public R getSupermarketUnits(@RequestParam("barCode")String barCode) { + List unitPriceInfos=smErpUnitService.listScope(barCode); + return R.ok(unitPriceInfos); + } } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/SmErpStockMapper.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/SmErpStockMapper.java index 011caebee..d46d9fdeb 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/SmErpStockMapper.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/SmErpStockMapper.java @@ -1,11 +1,22 @@ package com.bsd.pjcloud.supermarket.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO; +import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity; import com.bsd.pjcloud.supermarket.entity.SmErpStockEntity; +import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO; +import com.github.houbb.heaven.annotation.reflect.Param; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + @Mapper public interface SmErpStockMapper extends PjcloudBaseMapper { + IPage selectWarnStockWithSpu(Page page, @Param("param") SmErpSpuEntity param); + + } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java index 02703a82b..11705744c 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpCgDdService.java @@ -1,9 +1,12 @@ package com.bsd.pjcloud.supermarket.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDEditDTO; import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDSaveDTO; import com.bsd.pjcloud.supermarket.entity.SmErpCgDdEntity; +import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanEntity; public interface SmErpCgDdService extends IService { @@ -22,4 +25,13 @@ public interface SmErpCgDdService extends IService { * @return */ Object updateByErpCgDdEditDTO(ErpCgDDEditDTO erpCgDDEditDTO); + + + /** + * 关联采购订单分页查询 + * @param page + * @param wrapper + * @return + */ + Object pageScope(Page page, LambdaQueryWrapper wrapper); } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java index d2d408fa8..dd30b9874 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java @@ -1,8 +1,16 @@ package com.bsd.pjcloud.supermarket.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity; public interface SmErpInventoryRecordsService extends IService { + + /** + * 插入出入库信息 + * @param inventoryRecordSaveDTO + * @return + */ + Object saveInventoryRecord(InventoryRecordSaveDTO inventoryRecordSaveDTO); } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpStockService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpStockService.java index 389014f9e..7070913c2 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpStockService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpStockService.java @@ -1,8 +1,27 @@ package com.bsd.pjcloud.supermarket.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO; +import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity; import com.bsd.pjcloud.supermarket.entity.SmErpStockEntity; +import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO; +import com.github.houbb.heaven.annotation.reflect.Param; + +import java.util.List; public interface SmErpStockService extends IService { + + + IPage selectWarnStockWithSpu(Page page,SmErpSpuEntity param); + + + /** + * 更新库存 + * @param updateStockDTOS + * @return + */ + void updateStock(List updateStockDTOS); } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpUnitService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpUnitService.java index b40bf740e..990f0cce6 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpUnitService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpUnitService.java @@ -1,8 +1,10 @@ package com.bsd.pjcloud.supermarket.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity; import com.bsd.pjcloud.supermarket.vo.erp.SmErpUnitWithSpuVo; +import com.bsd.pjcloud.supermarket.vo.unit.UnitPriceInfo; import java.util.List; @@ -15,4 +17,12 @@ public interface SmErpUnitService extends IService { * @return */ List getSupermarketUnitsWithSpu(List ids); + + + /** + * 根据条形码获取价格信息 + * @param barCode + * @return + */ + List listScope(String barCode); } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java index b5907e593..cc557fbf2 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java @@ -1,8 +1,11 @@ package com.bsd.pjcloud.supermarket.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDEditDTO; import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDSaveDTO; @@ -17,10 +20,17 @@ import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanItemEntity; import com.bsd.pjcloud.supermarket.mapper.SmErpCgDdItemMapper; import com.bsd.pjcloud.supermarket.mapper.SmErpCgDdMapper; import com.bsd.pjcloud.supermarket.service.SmErpCgDdService; +import com.bsd.pjcloud.supermarket.vo.cgdd.SmErpCgDdVo; +import com.bsd.pjcloud.supermarket.vo.cgdd.SmeErpCgDdItemVo; +import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanItemVo; +import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanVo; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -34,6 +44,7 @@ import java.util.stream.Collectors; public class SmErpCgDdServiceImpl extends ServiceImpl implements SmErpCgDdService { private final SmErpCgDdItemMapper smErpCgDDItemMapper; + @Override public Object saveCGDD(ErpCgDDSaveDTO erpCgDDSaveDTO) { Long deptId = SecurityUtils.getUser().getDeptId(); @@ -73,4 +84,43 @@ public class SmErpCgDdServiceImpl extends ServiceImpl wrapper) { + // 1. 查询主表分页数据 + Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of()); + List records = pageData.getRecords(); + + // 2. 提前收集所有主表ID(去重处理) + Set planIds = records.stream() + .map(SmErpCgDdEntity::getId) + .collect(Collectors.toSet()); + + // 3. 批量查询所有子表数据(仅1次数据库查询) + Map> itemMap; + if (!planIds.isEmpty()) { + LambdaQueryWrapper itemWrapper = new LambdaQueryWrapper<>(); + itemWrapper.in(SmErpCgDdItemEntity::getHId, planIds); + List items = smErpCgDDItemMapper.selectList(itemWrapper); + // 按planId分组建立映射关系 + itemMap = items.stream() + .collect(Collectors.groupingBy(SmErpCgDdItemEntity::getHId)); + } else { + itemMap = Collections.emptyMap(); + } + + // 4. 转换主表VO并关联子表数据 + List voList = BeanUtils.toBean(records, SmErpCgDdVo.class); + voList.forEach(vo -> { + List itemVos = BeanUtils.toBean( + itemMap.getOrDefault(vo.getId(), Collections.emptyList()), + SmeErpCgDdItemVo.class + ); + vo.setItems(itemVos); + }); + Page resultPage = new Page<>(); + org.springframework.beans.BeanUtils.copyProperties(pageData, resultPage, "records"); // 复制分页参数 + resultPage.setRecords(voList); + return resultPage; + } } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java index 868d43f68..4247bffcb 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java @@ -1,10 +1,28 @@ package com.bsd.pjcloud.supermarket.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.common.core.util.BeanUtils; +import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.supermarket.dto.cgdd.SmCgDDSaveItemDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveItemDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO; +import com.bsd.pjcloud.supermarket.entity.SmErpCgDdEntity; +import com.bsd.pjcloud.supermarket.entity.SmErpCgDdItemEntity; import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity; +import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsItemEntity; +import com.bsd.pjcloud.supermarket.mapper.SmErpInventoryRecordsItemMapper; import com.bsd.pjcloud.supermarket.mapper.SmErpInventoryRecordsMapper; +import com.bsd.pjcloud.supermarket.mapper.SmErpStockMapper; import com.bsd.pjcloud.supermarket.service.SmErpInventoryRecordsService; +import com.bsd.pjcloud.supermarket.service.SmErpStockService; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + /** * 出入库记录表 * @@ -12,5 +30,43 @@ import org.springframework.stereotype.Service; * @date 2025-02-10 12:15:37 */ @Service +@AllArgsConstructor public class SmErpInventoryRecordsServiceImpl extends ServiceImpl implements SmErpInventoryRecordsService { + + private final SmErpInventoryRecordsItemMapper smErpInventoryRecordsItemMapper; + + private final SmErpStockService smErpStockService; + @Override + @Transactional + public Object saveInventoryRecord(InventoryRecordSaveDTO inventoryRecordSaveDTO) { + + Long deptId = SecurityUtils.getUser().getDeptId(); + SmErpInventoryRecordsEntity smErpCgDdEntity = BeanUtils.toBean(inventoryRecordSaveDTO, SmErpInventoryRecordsEntity.class); + smErpCgDdEntity.setDeptId(deptId); + smErpCgDdEntity.setCheckStatus("0"); + smErpCgDdEntity.setDeptId(deptId); + int insert = baseMapper.insert(smErpCgDdEntity); + + List items = inventoryRecordSaveDTO.getItems(); + List cgPlanItemEntities = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class); + List updateStockDTOS = new ArrayList<>(); + for (SmErpInventoryRecordsItemEntity cgPlanItemEntity : cgPlanItemEntities) { + cgPlanItemEntity.setInventoryId(smErpCgDdEntity.getId()); + cgPlanItemEntity.setDeptId(deptId); + + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(cgPlanItemEntity.getErpSpuId()); + updateStockDTO.setIncrCount(cgPlanItemEntity.getQuantity()); + updateStockDTOS.add(updateStockDTO); + } + smErpInventoryRecordsItemMapper.insert(cgPlanItemEntities); + + //todo 实际上应该审批后才会入库 + //更新库存 + smErpStockService.updateStock(updateStockDTOS); + + return insert; + } + + } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java index 00edac29d..95d2f783f 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java @@ -61,7 +61,9 @@ public class SmErpSpuServiceImpl extends ServiceImpl smErpStockEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); smErpStockEntityLambdaQueryWrapper.eq(SmErpStockEntity::getSpuId, supermarketSpu.getId()); SmErpStockEntity smErpStockEntity = new SmErpStockEntity(); - smErpStockEntity.setBaseStcok(stock); + smErpStockEntity.setBaseStock(stock); + smErpStockEntity.setInventoryLowerLimit(supermarketSpu.getInventoryLowerLimit()); + smErpStockEntity.setInventoryUpperLimit(supermarketSpu.getInventoryUpperLimit()); smErpStockMapper.update(smErpStockEntity,smErpStockEntityLambdaQueryWrapper); //新增包装类型 diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpStockServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpStockServiceImpl.java index dc0e1adce..431dbc6ab 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpStockServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpStockServiceImpl.java @@ -1,10 +1,23 @@ package com.bsd.pjcloud.supermarket.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveItemDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO; +import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity; import com.bsd.pjcloud.supermarket.entity.SmErpStockEntity; +import com.bsd.pjcloud.supermarket.mapper.SmErpSpuMapper; import com.bsd.pjcloud.supermarket.mapper.SmErpStockMapper; import com.bsd.pjcloud.supermarket.service.SmErpStockService; +import com.bsd.pjcloud.supermarket.vo.stockwarn.StockWarnVO; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + /** * 商品包装单位(sku) * @@ -12,5 +25,38 @@ import org.springframework.stereotype.Service; * @date 2025-01-23 13:50:24 */ @Service +@AllArgsConstructor public class SmErpStockServiceImpl extends ServiceImpl implements SmErpStockService { + + private final SmErpSpuMapper smErpSpuMapper; + + + @Override + public IPage selectWarnStockWithSpu(Page page, SmErpSpuEntity param) { + return baseMapper.selectWarnStockWithSpu(page, param); + } + + @Override + @Transactional + public void updateStock(List updateStockDTOS) { + // 更新库存(手动乐观锁) + for (UpdateStockDTO item : updateStockDTOS) { + // 1. 先查询当前版本号 + LambdaQueryWrapper smErpStockEntityLambdaQueryWrapper = new LambdaQueryWrapper(); + smErpStockEntityLambdaQueryWrapper.eq(SmErpStockEntity::getSpuId,item.getId()); + SmErpStockEntity smErpStockEntity = baseMapper.selectOne(smErpStockEntityLambdaQueryWrapper); + + LambdaQueryWrapper updateStockWithLockWrapper = new LambdaQueryWrapper(); + updateStockWithLockWrapper.eq(SmErpStockEntity::getSpuId,item.getId()); + updateStockWithLockWrapper.eq(SmErpStockEntity::getVersion,smErpStockEntity.getVersion()); + SmErpStockEntity updateSmErpStockEntity = new SmErpStockEntity(); + updateSmErpStockEntity.setCurrentStock(smErpStockEntity.getCurrentStock()+item.getIncrCount()); + int update = baseMapper.update(updateSmErpStockEntity, updateStockWithLockWrapper); + // 3. 检查更新结果 + if (update == 0) { + throw new RuntimeException("库存更新冲突,请重试操作"); + } + } + + } } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpUnitServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpUnitServiceImpl.java index 658a72d68..3d41a07c8 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpUnitServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpUnitServiceImpl.java @@ -1,10 +1,14 @@ package com.bsd.pjcloud.supermarket.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.common.core.util.BeanUtils; +import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity; import com.bsd.pjcloud.supermarket.mapper.SmErpUnitMapper; import com.bsd.pjcloud.supermarket.service.SmErpUnitService; import com.bsd.pjcloud.supermarket.vo.erp.SmErpUnitWithSpuVo; +import com.bsd.pjcloud.supermarket.vo.unit.UnitPriceInfo; import org.springframework.stereotype.Service; import java.util.List; @@ -22,4 +26,13 @@ public class SmErpUnitServiceImpl extends ServiceImpl listScope(String barCode) { + LambdaQueryWrapper smErpUnitEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + smErpUnitEntityLambdaQueryWrapper.eq(SmErpUnitEntity::getBarCode,barCode); + List smErpUnitEntities = baseMapper.selectListByScope(smErpUnitEntityLambdaQueryWrapper, DataScope.of()); + List bean = BeanUtils.toBean(smErpUnitEntities, UnitPriceInfo.class); + return bean; + } } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpStockMapper.xml b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpStockMapper.xml index 95ec7bbf9..73b2572a0 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpStockMapper.xml +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpStockMapper.xml @@ -5,7 +5,7 @@ - + @@ -14,5 +14,55 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/SimpleUserAllListVO.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/SimpleUserAllListVO.java new file mode 100644 index 000000000..c544d02f4 --- /dev/null +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/SimpleUserAllListVO.java @@ -0,0 +1,14 @@ +package com.bsd.pjcloud.admin.api.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "简要用户信息") +public class SimpleUserAllListVO { + + private Long id; + + private String nameWithMobile; +} diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java index 3945fd824..71c52e66f 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java @@ -21,11 +21,13 @@ package com.bsd.pjcloud.admin.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.dto.UserDTO; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysUser; +import com.bsd.pjcloud.admin.api.vo.SimpleUserAllListVO; import com.bsd.pjcloud.admin.api.vo.UserExcelFaceVo; import com.bsd.pjcloud.admin.api.vo.UserExcelVO; import com.bsd.pjcloud.admin.api.vo.UserVO; @@ -41,10 +43,12 @@ import com.bsd.pjcloud.common.security.annotation.HasPermission; import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.common.security.util.SecurityUtils; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.HttpHeaders; import org.springframework.transaction.annotation.Transactional; @@ -373,4 +377,16 @@ public class SysUserController { public R> getUserByMobile(@RequestParam("mobile") String mobile) { return R.ok(userService.list(Wrappers.lambdaQuery().eq(SysUser::getPhone, mobile))); } + + @GetMapping("/getSimpleUserAll") + @Schema(description = "简要用户信息") + public R> getSimpleUserAllList(@RequestParam(value = "mobile",required = false) String mobile, + @RequestParam(value = "name",required = false) String name){ + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(mobile),SysUser::getPhone,mobile); + sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(name),SysUser::getName,name); + List list = userService.listScope(sysUserLambdaQueryWrapper); + + return R.ok(list); + } } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java index 7527efdcc..da9ddc687 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java @@ -19,12 +19,14 @@ package com.bsd.pjcloud.admin.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.admin.api.dto.UserDTO; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysUser; +import com.bsd.pjcloud.admin.api.vo.SimpleUserAllListVO; import com.bsd.pjcloud.admin.api.vo.UserExcelFaceVo; import com.bsd.pjcloud.admin.api.vo.UserExcelVO; import com.bsd.pjcloud.admin.api.vo.UserVO; @@ -191,4 +193,12 @@ public interface SysUserService extends IService { R resetUserPassword(UserDTO userDto); List getUserDeptByIds(List userIds); + + + /** + * 查询所有用户简单信息 + * @param sysUserLambdaQueryWrapper + * @return + */ + List listScope(LambdaQueryWrapper sysUserLambdaQueryWrapper); } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java index a2d05e162..df9fe7bca 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java @@ -26,6 +26,7 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -38,10 +39,7 @@ import com.bsd.pjcloud.admin.api.dto.UserDTO; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.*; import com.bsd.pjcloud.admin.api.utils.DataUtil; -import com.bsd.pjcloud.admin.api.vo.SysUserFaceVo; -import com.bsd.pjcloud.admin.api.vo.UserExcelFaceVo; -import com.bsd.pjcloud.admin.api.vo.UserExcelVO; -import com.bsd.pjcloud.admin.api.vo.UserVO; +import com.bsd.pjcloud.admin.api.vo.*; import com.bsd.pjcloud.admin.mapper.SysUserFaceMapper; import com.bsd.pjcloud.admin.mapper.SysUserMapper; import com.bsd.pjcloud.admin.mapper.SysUserPostMapper; @@ -767,4 +765,17 @@ public class SysUserServiceImpl extends ServiceImpl impl public List getUserDeptByIds(List userIds) { return baseMapper.selectVoListByScope(new UserDTO(), userIds.toArray(new Long[0]), null); } + + @Override + public List listScope(LambdaQueryWrapper sysUserLambdaQueryWrapper) { + List sysUsers = baseMapper.selectListByScope(sysUserLambdaQueryWrapper,DataScope.of()); + List collect = sysUsers.stream().map(sysUser -> { + SimpleUserAllListVO vo = new SimpleUserAllListVO(); + vo.setId(sysUser.getUserId()); + vo.setNameWithMobile(sysUser.getName() + "-" + sysUser.getPhone()); + return vo; + }).collect(Collectors.toList()); + + return collect; + } }