diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceStorageDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceStorageDetail.java index c25585e7..6d8f880d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceStorageDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceStorageDetail.java @@ -50,10 +50,10 @@ public class OutsourceStorageDetail extends BaseEntity { private String processMethod; /** 计划委外数 */ - private BigDecimal plannedOutsourceAmount; + private Integer plannedOutsourceAmount; // 实际委外数 - private BigDecimal actualOutsourceAmount; + private Integer actualOutsourceAmount; // 关联单号 private String correlationCodes; @@ -73,13 +73,17 @@ public class OutsourceStorageDetail extends BaseEntity { // 交付时间信息 private String deliveryTimeInfo; - /** 已委外入库数 */ - @Excel(name = "已委外入库数") - private BigDecimal takenMaterial; + /** 已入库数 */ + @Excel(name = "已入库数") + private Integer hasStorageNum; - /** 本次委外入库数 */ - @Excel(name = "本次委外入库数") - private BigDecimal takingMaterial; + /** 通知已到货数 (未保存)*/ + @Excel(name = "通知已到货数") + private Integer notifyHasArrivedNum; + + /** 通知到货数 */ + @Excel(name = "通知到货数") + private Integer notifyArrivedNum; public Long getOutsourceStorageDetailId() { return outsourceStorageDetailId; @@ -169,19 +173,19 @@ public class OutsourceStorageDetail extends BaseEntity { this.processMethod = processMethod; } - public BigDecimal getPlannedOutsourceAmount() { + public Integer getPlannedOutsourceAmount() { return plannedOutsourceAmount; } - public void setPlannedOutsourceAmount(BigDecimal plannedOutsourceAmount) { + public void setPlannedOutsourceAmount(Integer plannedOutsourceAmount) { this.plannedOutsourceAmount = plannedOutsourceAmount; } - public BigDecimal getActualOutsourceAmount() { + public Integer getActualOutsourceAmount() { return actualOutsourceAmount; } - public void setActualOutsourceAmount(BigDecimal actualOutsourceAmount) { + public void setActualOutsourceAmount(Integer actualOutsourceAmount) { this.actualOutsourceAmount = actualOutsourceAmount; } @@ -233,20 +237,28 @@ public class OutsourceStorageDetail extends BaseEntity { this.deliveryTimeInfo = deliveryTimeInfo; } - public BigDecimal getTakenMaterial() { - return takenMaterial; + public Integer getHasStorageNum() { + return hasStorageNum; + } + + public void setHasStorageNum(Integer hasStorageNum) { + this.hasStorageNum = hasStorageNum; + } + + public Integer getNotifyArrivedNum() { + return notifyArrivedNum; } - public void setTakenMaterial(BigDecimal takenMaterial) { - this.takenMaterial = takenMaterial; + public void setNotifyArrivedNum(Integer notifyArrivedNum) { + this.notifyArrivedNum = notifyArrivedNum; } - public BigDecimal getTakingMaterial() { - return takingMaterial; + public Integer getNotifyHasArrivedNum() { + return notifyHasArrivedNum; } - public void setTakingMaterial(BigDecimal takingMaterial) { - this.takingMaterial = takingMaterial; + public void setNotifyHasArrivedNum(Integer notifyHasArrivedNum) { + this.notifyHasArrivedNum = notifyHasArrivedNum; } public String getOutsourcePlanCode() { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IOutsourceStorageOrderService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IOutsourceStorageOrderService.java index b0146476..9a7aa496 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IOutsourceStorageOrderService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IOutsourceStorageOrderService.java @@ -33,7 +33,7 @@ public interface IOutsourceStorageOrderService /** * 新增委外入库 * - * @param warehouseStorageOrder 委外入库 + * @param outsourceStorage 委外入库 * @return 结果 */ public int insertWarehouseStorageOrder(OutsourceStorage outsourceStorage); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/OutsourceStorageOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/OutsourceStorageOrderServiceImpl.java index 4949304e..c714c260 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/OutsourceStorageOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/OutsourceStorageOrderServiceImpl.java @@ -6,8 +6,10 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.system.domain.OutsourceOrderDetail; import com.ruoyi.system.domain.OutsourceStorage; import com.ruoyi.system.domain.OutsourceStorageDetail; +import com.ruoyi.system.mapper.OutsourceOrderDetailMapper; import com.ruoyi.system.mapper.OutsourceStorageDetailMapper; import com.ruoyi.system.service.IOutsourceStorageOrderService; import com.ruoyi.warehouse.domain.WarehouseStorageOrder; @@ -17,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import com.ruoyi.common.utils.StringUtils; @@ -39,6 +42,9 @@ public class OutsourceStorageOrderServiceImpl implements IOutsourceStorageOrderS @Autowired private OutsourceStorageDetailMapper outsourceStorageDetailMapper; + @Autowired + private OutsourceOrderDetailMapper orderDetailMapper; + @Autowired private RedisCache redisCache; @@ -61,14 +67,27 @@ public class OutsourceStorageOrderServiceImpl implements IOutsourceStorageOrderS * @param outsourceStorage 委外入库 * @return 结果 */ - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public int insertWarehouseStorageOrder(OutsourceStorage outsourceStorage) { WarehouseStorageOrder warehouseStorageOrder = new WarehouseStorageOrder(); String loginName = ShiroUtils.getLoginName(); - warehouseStorageOrder.setCreateBy(loginName); + String outsourceOrderNo = outsourceStorage.getRelatedOrderCode(); + + List outsourceStorageDetails = outsourceStorage.getStorageDetailList(); + + for (OutsourceStorageDetail detail:outsourceStorageDetails) { + int actualOutNum = Optional.ofNullable(detail.getActualOutsourceAmount()).orElse(0); + int notifyHasArriveNum = Optional.ofNullable(detail.getNotifyHasArrivedNum()).orElse(0); + /** 检查总通知到货数 > 实际委外数?*/ + int allArrivedNum = notifyHasArriveNum + detail.getNotifyArrivedNum(); + if(allArrivedNum > actualOutNum){ + throw new BusinessException("物料" + detail.getMaterialNo() +"总通知到货数大于实际委外数,请检查"); + } + } String warehouseStorageCode = redisCache.generateBillNo("RK"); + warehouseStorageOrder.setCreateBy(loginName); warehouseStorageOrder.setCreateTime(DateUtils.getNowDate()); warehouseStorageOrder.setWarehouseOrderType("3");//委外订单 warehouseStorageOrder.setWarehouseStorageType("4");//委外入库 @@ -81,39 +100,62 @@ public class OutsourceStorageOrderServiceImpl implements IOutsourceStorageOrderS warehouseStorageOrder.setWarehouseStorageCode(warehouseStorageCode); warehouseStorageOrder.setNotifyArrivedNum(outsourceStorage.getNotifyArrivedNum()); warehouseStorageOrder.setArrivedTime(DateUtils.getNowDate()); - warehouseStorageOrder.setRelatedOrderCode(outsourceStorage.getRelatedOrderCode()); - List outsourceStorageDetails = outsourceStorage.getStorageDetailList(); - if(StringUtils.isEmpty(outsourceStorageDetails)){ - throw new BusinessException("新增委外入库单失败!入库单详情为空"); - } + warehouseStorageOrder.setRelatedOrderCode(outsourceOrderNo); + + List storageOrderDetails = new ArrayList<>(); + for (OutsourceStorageDetail detail:outsourceStorageDetails) { detail.setWarehouseStorageCode(warehouseStorageCode); - outsourceStorageDetailMapper.insertOutsourceStorageDetail(detail); - } - List warehouseStorageOrderDetailList = new ArrayList<>(); - // 使用 Map 分组 - Map> groupedByMaterialNo = outsourceStorageDetails.stream() - .collect(Collectors.groupingBy(OutsourceStorageDetail::getMaterialNo)); - - // 遍历 Map 的每一个条目 - for (Map.Entry> entry : groupedByMaterialNo.entrySet()) { - String materialNo = entry.getKey(); - List details = entry.getValue(); - - // 获取列表中的第一条记录 - if (!details.isEmpty()) { - OutsourceStorageDetail firstDetail = details.get(0); -// System.out.println("Material No: " + materialNo + ", First Detail: " + firstDetail); - WarehouseStorageOrderDetail warehouseStorageOrderDetail = generateWarehouseStorageOrderDetail(firstDetail); - warehouseStorageOrderDetail.setWarehouseStorageCode(warehouseStorageCode); - warehouseStorageOrderDetailList.add(warehouseStorageOrderDetail); + detail.setHasStorageNum(0); + detail.setCreateBy(loginName); + detail.setCreateTime(DateUtils.getNowDate()); + int insertResult = outsourceStorageDetailMapper.insertOutsourceStorageDetail(detail); + if(insertResult <= 0){ + throw new BusinessException("新增委外入库详情失败!"); } } - if(warehouseStorageOrderDetailList!=null){ - warehouseStorageOrder.setWarehouseStorageOrderDetailList(warehouseStorageOrderDetailList); - insertWarehouseStorageOrderDetail(warehouseStorageOrder); - } + // 去除重复的料号 + List uniqueStorageDetails = outsourceStorageDetails.stream() + .collect(Collectors.toMap( + OutsourceStorageDetail::getMaterialNo, + detail -> detail, + (existing, replacement) -> existing + )) + .values() + .stream() + .collect(Collectors.toList()); + + for (OutsourceStorageDetail detail:uniqueStorageDetails) { + OutsourceOrderDetail tempDetail = new OutsourceOrderDetail(); + tempDetail.setMaterialNo(detail.getMaterialNo()); + tempDetail.setOutsourceOrderNo(outsourceOrderNo); + /** 更新委外订单通知已到货数 += 通知到货数(本次入库数)*/ + List orderDetails = orderDetailMapper.selectOutsourceOrderDetailByNos(tempDetail); + if(StringUtils.isEmpty(orderDetails)){ + throw new BusinessException("关联委外订单详情为空"); + } + for (OutsourceOrderDetail orderDetail: orderDetails) { + int notifyHasArrivedNum = Optional.ofNullable(orderDetail.getNotifyHasArrivedNum()).orElse(0); + notifyHasArrivedNum = notifyHasArrivedNum + detail.getNotifyArrivedNum(); + orderDetail.setNotifyHasArrivedNum(notifyHasArrivedNum); + orderDetail.setUpdateBy(loginName); + orderDetail.setUpdateTime(DateUtils.getNowDate()); + int orderUpdateResult = orderDetailMapper.updateOutsourceOrderDetail(orderDetail); + if(orderUpdateResult<=0){ + throw new BusinessException("更新订单物料信息失败"); + } + } + /** 根据委外入库单详情生成入库单详情*/ + WarehouseStorageOrderDetail storageOrderDetail = generateWarehouseStorageOrderDetail(detail); + storageOrderDetail.setWarehouseStorageCode(warehouseStorageCode); + storageOrderDetails.add(storageOrderDetail); + + if(storageOrderDetails!=null){ + warehouseStorageOrder.setWarehouseStorageOrderDetailList(storageOrderDetails); + insertWarehouseStorageOrderDetail(warehouseStorageOrder); + } + } int rows = warehouseStorageOrderMapper.insertWarehouseStorageOrder(warehouseStorageOrder); return rows; } @@ -121,13 +163,12 @@ public class OutsourceStorageOrderServiceImpl implements IOutsourceStorageOrderS public WarehouseStorageOrderDetail generateWarehouseStorageOrderDetail(OutsourceStorageDetail outstorageDetail){ WarehouseStorageOrderDetail storageOrderDetail = new WarehouseStorageOrderDetail(); storageOrderDetail.setRelatedOrderCode(outstorageDetail.getOutsourceOrderNo()); - storageOrderDetail.setWarehouseStorageStatus("0"); - storageOrderDetail.setWarehouseQualityStatus("0"); - storageOrderDetail.setWarehouseStorageType("4"); - storageOrderDetail.setWarehouseOrderType("3"); - storageOrderDetail.setNotifyArriveNum(outstorageDetail.getTakingMaterial().intValue()); -// storageOrderDetail.setActualHasArrivedNum(outstorageDetail.getTakingMaterial().intValue()); - storageOrderDetail.setNotifyHasArrivedNum(outstorageDetail.getTakingMaterial().intValue()); + storageOrderDetail.setWarehouseStorageStatus("0");//待暂收 + storageOrderDetail.setWarehouseQualityStatus("0");//待品质 + storageOrderDetail.setWarehouseStorageType("4");//委外入库 + storageOrderDetail.setWarehouseOrderType("3");//委外订单 + storageOrderDetail.setNotifyArriveNum(outstorageDetail.getNotifyArrivedNum()); + storageOrderDetail.setNotifyHasArrivedNum(outstorageDetail.getNotifyArrivedNum()); storageOrderDetail.setHasStorageNum(0); storageOrderDetail.setActualHasArrivedNum(0); storageOrderDetail.setTemporaryHasQualifiedNum(0); diff --git a/ruoyi-admin/src/main/resources/mapper/system/OutsourceStorageDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/OutsourceStorageDetailMapper.xml index b9b67a86..49f29583 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/OutsourceStorageDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/OutsourceStorageDetailMapper.xml @@ -20,17 +20,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + + + + + - select outsource_storage_detail_id, warehouse_storage_code, outsource_order_no, outsource_plan_code, correlation_codes, material_no, material_name, material_type, material_photo_url, description, brand, unit, process_method, planned_outsource_amount, actual_outsource_amount, taken_material, taking_material, outsource_process_info, charge_unit_info, single_material_info, supplier_info, delivery_time_info from outsource_storage_detail + select outsource_storage_detail_id, warehouse_storage_code, outsource_order_no, + outsource_plan_code, correlation_codes, material_no, material_name, + material_type, material_photo_url, description, brand, unit, + process_method, planned_outsource_amount, actual_outsource_amount, + notify_arrived_num, has_storage_num, outsource_process_info, + charge_unit_info, single_material_info, supplier_info,create_by,create_time, + delivery_time_info,update_by,update_time from outsource_storage_detail +
  • - +
  • @@ -30,13 +36,18 @@
  • -
  • - - -
  • -
  • + + + + + + + +
  • - + + - +
  •  搜索