diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/OrderTypeEnum.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/OrderTypeEnum.java index e7257e3bb..e68f989df 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/OrderTypeEnum.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/OrderTypeEnum.java @@ -12,10 +12,10 @@ import java.util.List; */ @AllArgsConstructor @Getter -public enum OrderTypeEnum { +public enum OrderTypeEnum { RK("1", "入库"), - CK("2", "出库"), + CK("2", "出库") ; private final String type; private final String description; 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 index 79c64a1ce..cd8980ac1 100644 --- 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 @@ -22,5 +22,5 @@ public class CGDdLinkQueryDTO { * 采购计划单据日期 */ @Schema(description="单据日期") - private LocalDate dDate; + private LocalDate ddDate; } diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryLinkQueryDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryLinkQueryDTO.java new file mode 100644 index 000000000..e412c51f0 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryLinkQueryDTO.java @@ -0,0 +1,28 @@ +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 InventoryLinkQueryDTO { + + /** + * 编号 + */ + @Schema(description="订单编号") + private String code; + + /** + * 单据日期 + */ + @Schema(description="单据日期") + private LocalDate ddDate; + + @Schema(description="单据类型(字典inventory_type)采购入库、采购退货、盘点入库等") + private Integer InventoryType; +} 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 index e0a81aa1b..7872acb7f 100644 --- 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 @@ -2,6 +2,7 @@ package com.bsd.pjcloud.supermarket.dto.inventoryrecords; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.time.LocalDate; @@ -86,6 +87,7 @@ public class InventoryRecordSaveDTO { * 订单类型(1入库 2出库) */ @Schema(description="订单类型(1入库 2出库)") + @NotNull private String orderType; /** 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 index cbd2dd769..c9882bf28 100644 --- 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 @@ -29,6 +29,9 @@ public class InventoryRecordVo { private LocalDate inventoryDate; + @Schema(description="商品名称") + private String productName; + /** * 经办人id */ 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 cefa6a880..603fddbd2 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 @@ -13,6 +13,7 @@ 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.InventoryLinkQueryDTO; import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; import com.bsd.pjcloud.supermarket.entity.*; import com.bsd.pjcloud.supermarket.service.*; @@ -216,11 +217,30 @@ public class SmErpInventoryRecordsController { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.like(StrUtil.isNotBlank(cgDdLinkQueryDTO.getCode()),SmErpCgDdEntity::getCode,cgDdLinkQueryDTO.getCode()); - wrapper.eq(Objects.nonNull(cgDdLinkQueryDTO.getDDate()),SmErpCgDdEntity::getDdDate,cgDdLinkQueryDTO.getDDate()); + wrapper.eq(Objects.nonNull(cgDdLinkQueryDTO.getDdDate()),SmErpCgDdEntity::getDdDate,cgDdLinkQueryDTO.getDdDate()); //todo 审核成功条件 // wrapper.eq(SmErpCgPlanEntity::getCheckStatus,); return R.ok(smErpCgDdService.pageCgddScope(page, wrapper)); } + + + /** + * 分页查询 + * @param page 分页对象 + * @return + */ + @Operation(summary = "获取出入库订单分页" , description = "关联订单" ) + @GetMapping("/inventory/page" ) + public R getInventoryPage(@ParameterObject Page page, @ParameterObject InventoryLinkQueryDTO inventoryLinkQueryDTO) { + + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.like(StrUtil.isNotBlank(inventoryLinkQueryDTO.getCode()),SmErpInventoryRecordsEntity::getInventoryCode,inventoryLinkQueryDTO.getCode()); + wrapper.eq(Objects.nonNull(inventoryLinkQueryDTO.getDdDate()),SmErpInventoryRecordsEntity::getInventoryDate,inventoryLinkQueryDTO.getDdDate()); + wrapper.eq(SmErpInventoryRecordsEntity::getInventoryType,inventoryLinkQueryDTO.getInventoryType()); + //todo 审核成功条件 +// wrapper.eq(SmErpCgPlanEntity::getCheckStatus,); + return R.ok(smErpInventoryRecordsService.pageInventoryScope(page, 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 ebe22aef1..1485f93a1 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 @@ -23,4 +23,13 @@ public interface SmErpInventoryRecordsService extends IService wrapper); + + + /** + * 关联接口分页 + * @param page + * @param wrapper + * @return + */ + Object pageInventoryScope(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/impl/SmErpInventoryRecordsServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java index 543927122..5ffec4e34 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 @@ -6,6 +6,7 @@ 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.common.security.util.SecurityUtils; +import com.bsd.pjcloud.supermarket.constant.OrderTypeEnum; import com.bsd.pjcloud.supermarket.dto.cgdd.SmCgDDSaveItemDTO; import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveItemDTO; @@ -14,6 +15,10 @@ import com.bsd.pjcloud.supermarket.entity.*; import com.bsd.pjcloud.supermarket.mapper.*; import com.bsd.pjcloud.supermarket.service.SmErpInventoryRecordsService; import com.bsd.pjcloud.supermarket.service.SmErpStockService; +import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanItemVo; +import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanVo; +import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordItemVo; +import com.bsd.pjcloud.supermarket.vo.inventoryrecord.InventoryRecordVo; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +43,8 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl items = inventoryRecordSaveDTO.getItems(); List cgPlanItemEntities = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class); List updateStockDTOS = new ArrayList<>(); @@ -58,7 +64,13 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl wrapper) { + Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of()); + + List records = pageData.getRecords(); + + // 2. 提前收集所有主表ID(去重处理) + Set planIds = records.stream() + .map(SmErpCgPlanEntity::getId) + .collect(Collectors.toSet()); + + // 3. 批量查询所有子表数据(仅1次数据库查询) + Map> itemMap; + List unitList; + List items; + if (!planIds.isEmpty()) { + LambdaQueryWrapper itemWrapper = new LambdaQueryWrapper<>(); + itemWrapper.in(SmErpInventoryRecordsItemEntity::getInventoryId, planIds); + items = smErpInventoryRecordsItemMapper.selectList(itemWrapper); + + //获取采购item下已选择的item的所有包装单位 + List spuIds =items.stream().map(vo -> vo.getErpSpuId()).collect(Collectors.toList()); + unitList = smErpUnitMapper.selectList(new LambdaQueryWrapper().in(SmErpUnitEntity::getSpuId, spuIds)); + + // 按planId分组建立映射关系 + itemMap = items.stream() + .collect(Collectors.groupingBy(SmErpInventoryRecordsItemEntity::getInventoryId)); + + + } else { + itemMap = Collections.emptyMap(); + unitList = Collections.emptyList(); + items= Collections.emptyList(); + } + + + + // 4. 转换主表VO并关联子表数据 + List voList = BeanUtils.toBean(records,InventoryRecordVo.class); + voList.forEach(vo -> { + List itemVos = BeanUtils.toBean( + itemMap.getOrDefault(vo.getId(), Collections.emptyList()), + InventoryRecordItemVo.class + ); + itemVos.forEach(item -> { + List unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(item.getErpSpuId())).collect(Collectors.toList()); + unitEntities.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()); + } + }); + }); + vo.setItems(itemVos); + }); + //商品名称赋值 + Set erpSpuIds = items.stream().map(SmErpInventoryRecordsItemEntity::getErpSpuId).collect(Collectors.toSet()); + List smErpSpuEntities = smErpSpuMapper.selectList(new LambdaQueryWrapper().in(SmErpSpuEntity::getId, erpSpuIds)); + Map spuMap = smErpSpuEntities.stream().collect(Collectors.toMap(SmErpSpuEntity::getId, spu -> spu)); + // 分组商品名称 + Map> planGoodsMap = items.stream() + .collect(Collectors.groupingBy( + SmErpInventoryRecordsItemEntity::getInventoryId, + Collectors.mapping( + item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(), + Collectors.toList() + ) + )); + Page resultPage = new Page<>(); + org.springframework.beans.BeanUtils.copyProperties(pageData, resultPage, "records"); // 复制分页参数 + + resultPage.setRecords(voList); + // 设置商品名称到主表实体 + resultPage.getRecords().forEach(plan -> { + List names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList()); + plan.setProductName(String.join(", ", names)); + }); + return resultPage; + } + } \ No newline at end of file