From aeaea0b3253a0131a13c62267dc59a27e6c14ced Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Wed, 26 Feb 2025 13:35:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InventoryRecordSaveDTO.java | 18 ++- .../supermarket/entity/SmErpCgDdEntity.java | 9 ++ .../supermarket/entity/SmErpCgPlanEntity.java | 5 + .../entity/SmErpInventoryRecordsEntity.java | 4 + .../supermarket/vo/cgdd/SmErpCgDdVo.java | 18 ++- .../supermarket/vo/cgplan/SmErpCgPlanVo.java | 4 + .../controller/SmErpCgDdController.java | 2 +- .../SmErpInventoryRecordsController.java | 4 +- .../supermarket/service/SmErpCgDdService.java | 3 + .../service/SmErpInventoryRecordsService.java | 10 ++ .../service/impl/SmErpCgDdServiceImpl.java | 104 ++++++++++++++++-- .../service/impl/SmErpCgPlanServiceImpl.java | 45 +++++++- .../SmErpInventoryRecordsServiceImpl.java | 47 +++++++- .../service/impl/SmErpSpuServiceImpl.java | 21 +++- .../resources/mapper/SmErpStockMapper.xml | 4 +- .../admin/api/feign/RemoteUserService.java | 12 ++ .../admin/controller/SysUserController.java | 15 ++- 17 files changed, 285 insertions(+), 40 deletions(-) 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 cc8ff2384..e0a81aa1b 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 @@ -12,12 +12,12 @@ import java.util.List; * 新增一个采购计划 */ @Data -@Schema(description = "采购计划保存对象") +@Schema(description = "采购保存对象") public class InventoryRecordSaveDTO { /** - * 采购计划编号 + * 采编号 */ @Schema(description="编号") private String inventoryCode; @@ -74,6 +74,20 @@ public class InventoryRecordSaveDTO { @Schema(description="关联码") private String linkCode; + + /** + * 单据类型(字典inventory_type)采购入库、采购退货、盘点入库等 + */ + @Schema(description="单据类型(字典inventory_type)采购入库、采购退货、盘点入库等") + private String inventoryType; + + + /** + * 订单类型(1入库 2出库) + */ + @Schema(description="订单类型(1入库 2出库)") + private String orderType; + /** * @Link SmCgPlanSaveItemDTO */ diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java index 3537fbe7a..312282781 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java @@ -161,4 +161,13 @@ public class SmErpCgDdEntity extends Model { @Schema(description="关联编码") private String linkCode; + + + @Schema(description="商品名称") + @TableField(exist = false) + private String productName; + + @Schema(description="经办人名称") + @TableField(exist = false) + public String handlerUserName; } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java index e9f094bad..b830f420c 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java @@ -139,4 +139,9 @@ public class SmErpCgPlanEntity extends Model { @TableField(exist = false) @Schema(description="商品名称") private String productName; + + @Schema(description="经办人名称") + @TableField(exist = false) + public String handlerUserName; + } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java index 3a7ef281b..9d61e4b12 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java @@ -161,4 +161,8 @@ public class SmErpInventoryRecordsEntity extends Model wrapper = Wrappers.lambdaQuery(); - return R.ok(smErpCgDdService.page(page, wrapper)); + return R.ok(smErpCgDdService.pageScope(page, wrapper)); } 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 7947e128f..cefa6a880 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 @@ -66,7 +66,7 @@ public class SmErpInventoryRecordsController { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(Objects.nonNull(smErpInventoryRecords.getHandlerUserId()),SmErpInventoryRecordsEntity::getHandlerUserId,smErpInventoryRecords.getHandlerUserId()); wrapper.eq(StrUtil.isNotBlank(smErpInventoryRecords.getCheckStatus()),SmErpInventoryRecordsEntity::getCheckStatus,smErpInventoryRecords.getCheckStatus()); - return R.ok(smErpInventoryRecordsService.page(page, wrapper)); + return R.ok(smErpInventoryRecordsService.pageScope(page, wrapper)); } @@ -220,7 +220,7 @@ public class SmErpInventoryRecordsController { //todo 审核成功条件 // wrapper.eq(SmErpCgPlanEntity::getCheckStatus,); - return R.ok(smErpCgDdService.pageScope(page, wrapper)); + return R.ok(smErpCgDdService.pageCgddScope(page, wrapper)); } } \ 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 11705744c..7ba991bfa 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 @@ -33,5 +33,8 @@ public interface SmErpCgDdService extends IService { * @param wrapper * @return */ + Object pageCgddScope(Page page, LambdaQueryWrapper wrapper); + + 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 dd30b9874..ebe22aef1 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,5 +1,7 @@ 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.inventoryrecords.InventoryRecordSaveDTO; import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity; @@ -13,4 +15,12 @@ public interface SmErpInventoryRecordsService extends IService wrapper); } \ 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 6613d4866..89f22ca9d 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 @@ -3,6 +3,8 @@ 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.admin.api.entity.SysUser; +import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; @@ -13,13 +15,8 @@ import com.bsd.pjcloud.supermarket.dto.cgdd.SmCgDDEditItemDTO; import com.bsd.pjcloud.supermarket.dto.cgdd.SmCgDDSaveItemDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanEditItemDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanSaveItemDTO; -import com.bsd.pjcloud.supermarket.entity.SmErpCgDdEntity; -import com.bsd.pjcloud.supermarket.entity.SmErpCgDdItemEntity; -import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanEntity; -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.mapper.SmErpCgPlanMapper; +import com.bsd.pjcloud.supermarket.entity.*; +import com.bsd.pjcloud.supermarket.mapper.*; import com.bsd.pjcloud.supermarket.service.SmErpCgDdService; import com.bsd.pjcloud.supermarket.vo.cgdd.SmErpCgDdVo; import com.bsd.pjcloud.supermarket.vo.cgdd.SmeErpCgDdItemVo; @@ -49,6 +46,13 @@ public class SmErpCgDdServiceImpl extends ServiceImpl wrapper) { + public Object pageCgddScope(Page page, LambdaQueryWrapper wrapper) { // 1. 查询主表分页数据 Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of()); List records = pageData.getRecords(); @@ -110,30 +114,112 @@ public class SmErpCgDdServiceImpl extends ServiceImpl> itemMap; + List items; + List unitList; if (!planIds.isEmpty()) { LambdaQueryWrapper itemWrapper = new LambdaQueryWrapper<>(); itemWrapper.in(SmErpCgDdItemEntity::getHId, planIds); - List items = smErpCgDDItemMapper.selectList(itemWrapper); + items = smErpCgDDItemMapper.selectList(itemWrapper); // 按planId分组建立映射关系 itemMap = items.stream() .collect(Collectors.groupingBy(SmErpCgDdItemEntity::getHId)); + //获取采购item下已选择的item的所有包装单位 + List spuIds =items.stream().map(vo -> vo.getErpSpuId()).collect(Collectors.toList()); + unitList = smErpUnitMapper.selectList(new LambdaQueryWrapper().in(SmErpUnitEntity::getSpuId, spuIds)); } else { itemMap = Collections.emptyMap(); + items= Collections.emptyList(); + unitList = Collections.emptyList(); } // 4. 转换主表VO并关联子表数据 + Set erpSpuIds = items.stream().map(SmErpCgDdItemEntity::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)); List voList = BeanUtils.toBean(records, SmErpCgDdVo.class); voList.forEach(vo -> { List itemVos = BeanUtils.toBean( itemMap.getOrDefault(vo.getId(), Collections.emptyList()), SmeErpCgDdItemVo.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); }); + + // 分组商品名称 + Map> planGoodsMap = items.stream() + .collect(Collectors.groupingBy( + SmErpCgDdItemEntity::getHId, + 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; } + + @Override + public Object pageScope(Page page, LambdaQueryWrapper wrapper) { + Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of()); + List records = pageData.getRecords(); + // 2. 提前收集所有主表ID(去重处理) + Set planIds = records.stream() + .map(SmErpCgDdEntity::getId) + .collect(Collectors.toSet()); + //收集userids + Set userIds = records.stream() + .map(SmErpCgDdEntity::getHandlerUserId) + .collect(Collectors.toSet()); + //请求得到所有的userIds + Map userMap = remoteUserService.getUserMap(userIds).getData(); + + + LambdaQueryWrapper smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpCgDdItemEntity::getHId,planIds); + List cgPlanItemEntities = smErpCgDDItemMapper.selectList(smErpCgPlanItemEntityLambdaQueryWrapper); + + Set erpSpuIds = cgPlanItemEntities.stream().map(SmErpCgDdItemEntity::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 = cgPlanItemEntities.stream() + .collect(Collectors.groupingBy( + SmErpCgDdItemEntity::getHId, + Collectors.mapping( + item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(), + Collectors.toList() + ) + )); + + // 设置商品名称到主表实体 + records.forEach(plan -> { + SysUser sysUser = userMap.getOrDefault(plan.getHandlerUserId(), new SysUser()); + plan.setHandlerUserName(sysUser.getUsername()); + List names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList()); + plan.setProductName(String.join(", ", names)); + }); + + return pageData; + } } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java index 3e5c165e7..5285dfd25 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java @@ -4,6 +4,8 @@ import com.alibaba.nacos.common.utils.CollectionUtils; 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.admin.api.entity.SysUser; +import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; @@ -12,10 +14,7 @@ import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanEditDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanSaveDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanEditItemDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.SmCgPlanSaveItemDTO; -import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanEntity; -import com.bsd.pjcloud.supermarket.entity.SmErpCgPlanItemEntity; -import com.bsd.pjcloud.supermarket.entity.SmErpSpuEntity; -import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity; +import com.bsd.pjcloud.supermarket.entity.*; import com.bsd.pjcloud.supermarket.mapper.SmErpCgPlanItemMapper; import com.bsd.pjcloud.supermarket.mapper.SmErpCgPlanMapper; import com.bsd.pjcloud.supermarket.mapper.SmErpSpuMapper; @@ -46,6 +45,8 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl> itemMap; List unitList; + List items; if (!planIds.isEmpty()) { LambdaQueryWrapper itemWrapper = new LambdaQueryWrapper<>(); itemWrapper.in(SmErpCgPlanItemEntity::getPlanId, planIds); - List items = smErpCgPlanItemMapper.selectList(itemWrapper); + items = smErpCgPlanItemMapper.selectList(itemWrapper); //获取采购item下已选择的item的所有包装单位 List spuIds =items.stream().map(vo -> vo.getErpSpuId()).collect(Collectors.toList()); @@ -124,6 +126,7 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl erpSpuIds = items.stream().map(SmErpCgPlanItemEntity::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( + SmErpCgPlanItemEntity::getPlanId, + 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; } @@ -164,10 +185,20 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl planIds = records.stream() .map(SmErpCgPlanEntity::getId) .collect(Collectors.toSet()); + //收集userids + Set userIds = records.stream() + .map(SmErpCgPlanEntity::getHandlerUserId) + .collect(Collectors.toSet()); + //请求得到所有的userIds + Map userMap = remoteUserService.getUserMap(userIds).getData(); + + + //查询出采购计划下的所有item LambdaQueryWrapper smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpCgPlanItemEntity::getPlanId,planIds); List cgPlanItemEntities = smErpCgPlanItemMapper.selectList(smErpCgPlanItemEntityLambdaQueryWrapper); + //获取所有的erpspu,分组 Set erpSpuIds = cgPlanItemEntities.stream().map(SmErpCgPlanItemEntity::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)); @@ -182,8 +213,12 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl { + + SysUser sysUser = userMap.getOrDefault(plan.getHandlerUserId(), new SysUser()); + plan.setHandlerUserName(sysUser.getUsername()); List names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList()); plan.setProductName(String.join(", ", names)); }); 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 37ec4bc0d..543927122 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,26 +1,25 @@ 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.data.datascope.DataScope; 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.*; -import com.bsd.pjcloud.supermarket.mapper.SmErpCgDdMapper; -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.mapper.*; 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; +import java.util.*; +import java.util.stream.Collectors; /** * 出入库记录表 @@ -37,6 +36,8 @@ 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(SmErpInventoryRecordsEntity::getId) + .collect(Collectors.toSet()); + LambdaQueryWrapper smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpInventoryRecordsItemEntity::getInventoryId,planIds); + List cgPlanItemEntities = smErpInventoryRecordsItemMapper.selectList(smErpCgPlanItemEntityLambdaQueryWrapper); + + Set erpSpuIds = cgPlanItemEntities.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 = cgPlanItemEntities.stream() + .collect(Collectors.groupingBy( + SmErpInventoryRecordsItemEntity::getInventoryId, + Collectors.mapping( + item -> spuMap.getOrDefault(item.getErpSpuId(), new SmErpSpuEntity()).getProductName(), + Collectors.toList() + ) + )); + // 设置商品名称到主表实体 + records.forEach(plan -> { + List names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList()); + plan.setProductName(String.join(", ", names)); + }); + return pageData; + } + } \ 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 32e7ed9db..264361863 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 @@ -1,6 +1,7 @@ package com.bsd.pjcloud.supermarket.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.common.core.util.BeanUtils; @@ -9,12 +10,14 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.supermarket.dto.SupermarketSpuQueryDTO; import com.bsd.pjcloud.supermarket.dto.SupermarketSpuUpdateStockReqDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO; import com.bsd.pjcloud.supermarket.entity.*; import com.bsd.pjcloud.supermarket.mapper.SmErpSpuMapper; import com.bsd.pjcloud.supermarket.mapper.SmErpStockMapper; import com.bsd.pjcloud.supermarket.mapper.SmSpuMapper; import com.bsd.pjcloud.supermarket.service.SmErpAuxiliaryCodeService; import com.bsd.pjcloud.supermarket.service.SmErpSpuService; +import com.bsd.pjcloud.supermarket.service.SmErpStockService; import com.bsd.pjcloud.supermarket.service.SmErpUnitService; import com.bsd.pjcloud.supermarket.vo.app.SupermarketAppSpuDetailsVo; import com.bsd.pjcloud.supermarket.vo.app.SupermarketAppUnitVo; @@ -52,6 +55,8 @@ public class SmErpSpuServiceImpl extends ServiceImpl updateStockDTOS=new ArrayList(); for (SupermarketSpuUpdateStockReqDTO.Item v : updateStockReqDTO.getItems()) { // 查询当前库存 SmErpSpuEntity spu = baseMapper.selectById(v.getId()); if (spu == null) { return R.failed(spu.getProductName() + "商品不存在"); } + if (v.getIncrCount() == 0){ + return R.failed("扣减不能为0"); + } + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(SmErpStockEntity::getErpSpuId, v.getId()); + SmErpStockEntity smErpStockEntity = smErpStockMapper.selectOne(lambdaUpdateWrapper); + + // 检查库存是否足够 - if (v.getIncrCount() < 0 && Math.abs(v.getIncrCount()) > spu.getStock()) { + if (v.getIncrCount() < 0 && Math.abs(v.getIncrCount()) > smErpStockEntity.getCurrentStock()) { return R.failed(spu.getProductName() + "库存不足,无法完成操作"); } - int i = baseMapper.updateStock(v.getId(), v.getIncrCount()); + + UpdateStockDTO updateStockDTO = new UpdateStockDTO(v.getId(), v.getIncrCount()); + updateStockDTOS.add(updateStockDTO); } + smErpStockService.updateStock(updateStockDTOS); return R.ok(); } 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 478c4c4f6..09f78fdbb 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 @@ -37,7 +37,7 @@ SELECT stock.inventory_upper_limit, stock.inventory_lower_limit, - stock.current_stock+stock+base_stock as stock, + stock.current_stock as stock, spu.product_code, spu.product_name, spu.barcode, @@ -52,7 +52,7 @@ ELSE '1' END AS warn_type FROM sm_erp_stock stock - LEFT JOIN sm_erp_spu spu ON stock.spu_id = spu.id + LEFT JOIN sm_erp_spu spu ON stock.erp_spu_id = spu.id (stock.current_stock) < stock.inventory_lower_limit or ( stock.current_stock) > stock.inventory_upper_limit diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java index 2fb62de99..192035788 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java @@ -19,6 +19,7 @@ package com.bsd.pjcloud.admin.api.feign; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bsd.pjcloud.admin.api.dto.UserDTO; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysUser; @@ -26,10 +27,13 @@ import com.bsd.pjcloud.admin.api.vo.UserVO; import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.feign.annotation.NoToken; +import io.swagger.v3.oas.annotations.media.Schema; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; +import java.util.Set; /** * @author pjcloud @@ -163,4 +167,12 @@ public interface RemoteUserService { @NoToken @GetMapping("/user/getUserByMobile") R> getUserByMobile(@RequestParam("mobile") String mobile); + + /** + * 根据ids获取map集合 + * @param userIds + * @return + */ + @GetMapping("/user/getUserMap") + R> getUserMap(@RequestParam(value = "userIds") Set userIds); } 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 f6f8f81fc..5171e7914 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 @@ -56,6 +56,9 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * @author pjcloud @@ -385,7 +388,17 @@ public class SysUserController { 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); } + + + @GetMapping("/getUserMap") + @Schema(description = "根据ids获取用户map") + public R> getUserMap(@RequestParam(value = "userIds") Set userIds) { + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.in(SysUser::getUserId, userIds); + List list = userService.list(sysUserLambdaQueryWrapper); + Map userMap = list.stream().collect(Collectors.toMap(SysUser::getUserId, user -> user)); + return R.ok(userMap); + } }