From 95dd8ae93249d863706e7ef4cf59416f13d46b44 Mon Sep 17 00:00:00 2001 From: wusiyu <2015098864@qq.com> Date: Sat, 25 Apr 2026 19:40:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springblade/wms/pojo/entity/StGoods.java | 5 ++ .../wms/pojo/vo/StStorehouseVO.java | 7 ++ .../wms/controller/StComboxController.java | 30 +++++--- .../wms/controller/StGoodsController.java | 5 +- .../StOtherReceiptRecordController.java | 4 +- .../controller/StStorehouseController.java | 50 +++++++++++++- .../wms/mapper/StOtherOutRecordMapper.xml | 5 ++ .../mapper/StOtherReceiptRecordMapper.java | 6 ++ .../wms/mapper/StOtherReceiptRecordMapper.xml | 11 +++ .../wms/mapper/StStockInoutRecordMapper.xml | 1 + .../service/IStOtherReceiptRecordService.java | 3 +- .../impl/StAllotRecordServiceImpl.java | 2 +- .../wms/service/impl/StGoodsServiceImpl.java | 19 ++++++ .../impl/StOtherReceiptRecordServiceImpl.java | 68 +++++++++++++++++-- 14 files changed, 195 insertions(+), 21 deletions(-) diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoods.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoods.java index 748f0b43..399f5aa7 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoods.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoods.java @@ -181,6 +181,11 @@ public class StGoods extends BaseEntity { @JsonSerialize(nullsUsing = NullSerializer.class) @Schema(description = "物料类别") private Long gcId; + /** + * 物料类别名称 + */ + @Schema(description = "物料类别名称") + private String gcName; /** * 生命周期状态 */ diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StStorehouseVO.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StStorehouseVO.java index d94a0289..715bf9e8 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StStorehouseVO.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StStorehouseVO.java @@ -1,5 +1,6 @@ package org.springblade.wms.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.wms.pojo.entity.StStorehouse; @@ -21,5 +22,11 @@ public class StStorehouseVO extends StStorehouse { @Serial private static final long serialVersionUID = 1L; + /** + * 保管员姓名 + */ + @Schema(description = "保管员姓名") + private String saveUserName; + } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StComboxController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StComboxController.java index 1ca36a77..44b58e1d 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StComboxController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StComboxController.java @@ -30,7 +30,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; /** @@ -80,10 +79,20 @@ public class StComboxController { ); List records = new ArrayList<>(pages.getRecords()); - Iterator iterator = records.iterator(); - while (iterator.hasNext()) { - StRealtimeStockVO vo = iterator.next(); - StGoods goods = stGoodsService.getById(vo.getGoodsId()); + List newList = new ArrayList<>(); +// Iterator iterator = records.iterator(); +// while (iterator.hasNext()) { + for (StRealtimeStockVO vo : records) { +// StRealtimeStockVO vo = iterator.next(); + Long goodsId = vo.getGoodsId(); + // 1. 没有 goodsId → 跳过 + if (goodsId == null) { + continue; + } + StGoods goods = stGoodsService.getById(goodsId); + if (goods == null) { + continue; + } vo.setGoodsCodeAndGoodsName(goods.getGoodsCode()+ "(" + vo.getPiNo() + ")"); Long shId = stRealtimeStock.getShId(); @@ -92,12 +101,17 @@ public class StComboxController { if (surplus < vo.getQuantity()) { vo.setQuantity(surplus); } - if (surplus <= 0) { - iterator.remove(); // 安全删除元素 +// if (surplus <= 0) { +// iterator.remove(); // 安全删除元素 +// } + if (surplus > 0) { // 只有库存>0才保留 + newList.add(vo); } + } else { + newList.add(vo); } } - pages.setRecords(records); + pages.setRecords(newList); return R.data(pages); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGoodsController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGoodsController.java index 46aa678c..3ffc1799 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGoodsController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGoodsController.java @@ -67,8 +67,9 @@ public class StGoodsController extends BladeController { @Operation(summary = "分页", description = "传入stGoods") public R> list(@Parameter(hidden = true) @RequestParam Map stGoods, Query query) { QueryWrapper wrapper = Condition.getQueryWrapper(stGoods, StGoods.class); - wrapper.eq("is_deleted", 0); - IPage pages = stGoodsService.page(Condition.getPage(query), Condition.getQueryWrapper(stGoods, StGoods.class)); + wrapper.eq("is_deleted", 0) + .orderByDesc("create_time"); + IPage pages = stGoodsService.page(Condition.getPage(query), wrapper); return R.data(StGoodsWrapper.build().pageVO(pages)); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherReceiptRecordController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherReceiptRecordController.java index d3a815f0..6d7f1dc6 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherReceiptRecordController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherReceiptRecordController.java @@ -226,8 +226,8 @@ public class StOtherReceiptRecordController extends BladeController { @ApiOperationSupport(order = 11) @ApiLog("物料id和车间订单号获取玻璃饼信息") @Operation(summary = "根据物料id和车间订单号获取玻璃饼信息", description = "传入goodsId、woCode") - public R> getGlassCakeByWoCode(@RequestParam String woCode) { - return R.data(stOtherReceiptRecordService.getGlassCakeByWoCode(woCode)); + public R getGlassCakeByWoCode(@RequestParam String woCode, @RequestParam String goodsCode) { + return R.data(stOtherReceiptRecordService.getGlassCakeByWoCode(woCode, goodsCode)); } /** diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StStorehouseController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StStorehouseController.java index e2060e51..cb224179 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StStorehouseController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StStorehouseController.java @@ -22,6 +22,9 @@ import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.SpringUtil; +import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; import org.springblade.wms.excel.StStorehouseExcel; import org.springblade.wms.pojo.entity.StStorageLocation; import org.springblade.wms.pojo.entity.StStorehouse; @@ -36,6 +39,8 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; /** * @version 1.0 @@ -59,6 +64,14 @@ public class StStorehouseController extends BladeController { private final IStStorageLocationService stStorageLocationService; private final IStUserRightService stUserRightService; + private static IUserClient userClient; + + private static IUserClient getUserClient() { + if (userClient == null) { + userClient = SpringUtil.getBean(IUserClient.class); + } + return userClient; + } /** * 库房维护表 详情 @@ -93,7 +106,42 @@ public class StStorehouseController extends BladeController { wrapper.orderByAsc("sh_code"); } IPage pages = stStorehouseService.page(Condition.getPage(query), wrapper); - return R.data(StStorehouseWrapper.build().pageVO(pages)); + // 转换为 VO + IPage voPage = StStorehouseWrapper.build().pageVO(pages); + + // ========== 新增:批量查询保管员姓名 ========== + if (voPage.getRecords() != null && !voPage.getRecords().isEmpty()) { + // 1. 提取所有保管员ID + List keeperIdList = voPage.getRecords().stream() + .map(StStorehouseVO::getSaveUser) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (!keeperIdList.isEmpty()) { + // 2. 把 List 转成 逗号分隔的字符串 "1,2,3" + String ids = keeperIdList.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + + List userList = getUserClient().userListByIds(ids); + Map userMap = userList.stream() + .collect(Collectors.toMap( + User::getId, + User::getRealName + )); + + // 循环赋值保管员姓名 + for (StStorehouseVO vo : voPage.getRecords()) { + Long saveUserId = vo.getSaveUser(); + if (saveUserId != null) { + // 从map里取出姓名,set到VO + vo.setSaveUserName(userMap.get(saveUserId)); + } + } + + } + } + return R.data(voPage); } /** diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherOutRecordMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherOutRecordMapper.xml index 91b17b7d..9e87303c 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherOutRecordMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherOutRecordMapper.xml @@ -67,6 +67,11 @@ AND sir.sir_code LIKE '%' || #{stOtherOutRecord.sirCode} || '%' + + + AND sir.cr_code LIKE '%' || #{stOtherOutRecord.crCode} || '%' + + AND soor.approval_status = 0 diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.java index f8646fb0..195ce21c 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.wms.excel.StOtherReceiptRecordExcel; import org.springblade.wms.pojo.entity.StOtherReceiptRecord; import org.springblade.wms.pojo.vo.StOtherReceiptRecordVO; @@ -40,5 +42,9 @@ public interface StOtherReceiptRecordMapper extends BaseMapper exportStOtherReceiptRecord(@Param("ew") Wrapper queryWrapper); List selectByWoCode(String woCode); + + WorkOrder getByWoCode(String woCode); + + YieldOrder getByYoId(Long yoId); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.xml index fcbb0f61..ef905aa0 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StOtherReceiptRecordMapper.xml @@ -111,4 +111,15 @@ SELECT * FROM ST_OTHER_RECEIPT_RECORD ${ew.customSqlSegment} + + + diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml index fb9892ca..01481cd1 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml @@ -56,6 +56,7 @@ sir.in_out_source, sir.check_no , sir.buy_code , + sir.unit_price , -- 关联物料表(ST_GOODS):补充物料相关字段 g.goods_code , g.goods_name , diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java index 5ffd7e6c..e1a8a6c8 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java @@ -7,6 +7,7 @@ import org.springblade.core.secure.BladeUser; import org.springblade.wms.excel.StOtherReceiptRecordExcel; import org.springblade.wms.pojo.dto.InitStockDTO; import org.springblade.wms.pojo.entity.StOtherReceiptRecord; +import org.springblade.wms.pojo.entity.StStockInoutRecord; import org.springblade.wms.pojo.vo.StOtherReceiptRecordVO; import java.util.List; @@ -43,6 +44,6 @@ public interface IStOtherReceiptRecordService extends BaseService getGlassCakeByWoCode(String woCode); + StStockInoutRecord getGlassCakeByWoCode(String woCode, String goodsCode); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StAllotRecordServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StAllotRecordServiceImpl.java index feea40aa..e68550dc 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StAllotRecordServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StAllotRecordServiceImpl.java @@ -82,7 +82,7 @@ public class StAllotRecordServiceImpl extends BaseServiceImpl private StHttpRequestService stHttpRequestService; @Resource private IStGoodsExtService stGoodsExtService; + @Resource + private IStGoodsClassService stGoodsClassService; @Override public IPage selectStGoodsPage(IPage page, StGoodsVO stGoods) { @@ -69,6 +75,10 @@ public class StGoodsServiceImpl extends BaseServiceImpl List pdmPartInfo = stHttpRequestService.getPdmPartInfo(prtnoList); log.debug("pdmPartInfo:{}", pdmPartInfo); + if (CollectionUtils.isEmpty(pdmPartInfo)) { + throw new Exception("PDM未查询到物料信息!"); + } + if (pdmPartInfo != null) { for (StPdmPartDTO dto : pdmPartInfo) { //保存物料信息 @@ -101,6 +111,15 @@ public class StGoodsServiceImpl extends BaseServiceImpl goods.setIsDeleted(0); goods.setCreateTime(new Date()); goods.setReleaseNoTime(dto.getRcdchgdatd()); + String goodsName = dto.getPrtdesc(); + if (goodsName != null && (goodsName.contains("环规") || goodsName.contains("塞规"))) { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("gc_name", "量具") + .eq("is_deleted", 0); + StGoodsClass goodsClass = stGoodsClassService.getOne(qw); + goods.setGcId(goodsClass.getId()); + goods.setGcName("量具"); + } this.save(goods); } } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java index 8b5f15d8..d3b786e4 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java @@ -1,17 +1,22 @@ package org.springblade.wms.service.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.annotation.Resource; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; +import org.springblade.desk.dashboard.feign.IPartClient; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; +import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.wms.excel.StOtherReceiptRecordExcel; import org.springblade.wms.mapper.StOtherReceiptRecordMapper; -import org.springblade.wms.mapper.StStockInoutRecordMapper; import org.springblade.wms.pojo.dto.InitStockDTO; import org.springblade.wms.pojo.entity.*; import org.springblade.wms.pojo.vo.StOtherReceiptRecordVO; @@ -22,7 +27,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -49,6 +53,15 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl selectStOtherReceiptRecordPage(IPage page, StOtherReceiptRecordVO stOtherReceiptRecord) { return page.setRecords(baseMapper.selectStOtherReceiptRecordPage(page, stOtherReceiptRecord)); @@ -275,12 +288,55 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl getGlassCakeByWoCode(String woCode) { + public StStockInoutRecord getGlassCakeByWoCode(String woCode, String goodsCode) { List list = baseMapper.selectByWoCode(woCode); - if (CollUtil.isEmpty(list)) { + + WorkOrder workOrder = baseMapper.getByWoCode(woCode); + YieldOrder yieldOrder = baseMapper.getByYoId(workOrder.getYoId()); + + DsPartEntity partOne = partClient.getPart(workOrder.getPartCode(),yieldOrder.getPartVersion()); + List partRelationEntityList = partClient.getSubPart(partOne.getId()); + + List glassCakePartList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(partRelationEntityList)) { + // 步骤1:提取所有非空的childPartId并去重(避免null和重复ID,减少查询压力) + List childPartIdList = partRelationEntityList.stream() + .map(DsPartRelationEntity::getChildPartId) // 提取子件ID + .filter(Objects::nonNull) // 过滤null的ID + .distinct() // 去重,避免重复查询 + .collect(Collectors.toList()); + + // 步骤2:批量查询DS_PART表(一次SQL,性能最优) + if (!CollectionUtils.isEmpty(childPartIdList)) { + // 调用dsPartService的批量查询方法(根据ID列表查DS_PART) + List allChildPartList = partClient.batchParts(childPartIdList); + + // 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤) + if (!CollectionUtils.isEmpty(allChildPartList)) { + glassCakePartList = allChildPartList.stream() + .filter(part -> Boolean.TRUE.equals(part.getIsGlassCake())) + .collect(Collectors.toList()); + } + } + } + + StStockInoutRecord inoutRecord = new StStockInoutRecord(); + if (!CollectionUtils.isEmpty(glassCakePartList)) { + DsPartEntity targetPart = glassCakePartList.stream() + .filter(part -> goodsCode.equals(part.getPartCode())) + .findFirst() + .orElse(null); + + inoutRecord.setPrintMark(Boolean.valueOf(targetPart.getIsPrint())); + inoutRecord.setPowderWeight(String.valueOf(targetPart.getPowderWeight())); + inoutRecord.setMaterialNo(targetPart.getMaterial()); + inoutRecord.setThickness(String.valueOf(targetPart.getFormingThickness())); + } + + if (ObjectUtil.isEmpty(inoutRecord)) { throw new ServiceException("未找到对应的玻璃饼信息"); } - return StOtherReceiptRecordWrapper.build().listVO(list); + return inoutRecord; } @Override