From 607c50151c541e64f7a182f19334ac2430decdc9 Mon Sep 17 00:00:00 2001 From: zhangzq Date: Thu, 24 Jul 2025 21:22:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=87=BA=E5=BA=93=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=9Btodu:=E5=87=BA=E5=BA=93=E5=88=86=E9=85=8D=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E5=8D=95=E6=8D=AE=E5=AE=8C=E6=88=90=EF=BC=8C=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IStructattrService.java | 3 +- .../service/dao/StructattrVechielDto.java | 85 +------------- .../service/dto/StrategyStructMaterialVO.java | 22 +++- .../service/dto/StrategyStructParam.java | 1 + .../service/impl/StructattrServiceImpl.java | 2 +- .../decisioner/impl/base/FIFORuleHandler.java | 69 ++++------- .../service/impl/PdaIosOutServiceImpl.java | 7 +- .../service/impl/OutBillServiceImpl.java | 111 ++++++++---------- .../impl/RawAssistIStorServiceImpl.java | 14 ++- .../service/util/UpdateIvtUtils.java | 75 ++++++------ .../src/views/wms/st/outbill/DivDialog.vue | 14 +-- .../src/views/wms/st/outbill/StructIvt.vue | 12 +- 12 files changed, 167 insertions(+), 248 deletions(-) diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java index e296a06..81dc77e 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto; +import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto; @@ -115,7 +116,7 @@ public interface IStructattrService extends IService { /** * 出库规则 */ - List outBoundSectDiv(StrategyStructParam param); + List outBoundSectDiv(StrategyStructParam param); /** * 入库规则 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/StructattrVechielDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/StructattrVechielDto.java index 448f66e..375a96a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/StructattrVechielDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/StructattrVechielDto.java @@ -16,41 +16,21 @@ public class StructattrVechielDto extends GroupPlate { /** * 仓位标识 */ - private String id; - /** - * 载具物料id - */ - private String vm_id; - /** - * 入库类型 - */ - private String source_form_type; + private String struct_id; /** * 仓位编码 */ private String struct_code; - - /** - * 仓位名称 - */ - private String struct_name; - /** * 库区标识 */ private String sect_code; - /** * 仓库标识 */ private String stor_code; - /** - * 容量 - */ - private Integer capacity; - /** * 宽度 */ @@ -71,21 +51,6 @@ public class StructattrVechielDto extends GroupPlate { */ private Integer weight; - /** - * 起始X坐标 - */ - private BigDecimal xqty; - - /** - * 起始Y坐标 - */ - private BigDecimal yqty; - - /** - * 起始Z坐标 - */ - private BigDecimal zqty; - /** * 排 */ @@ -111,21 +76,6 @@ public class StructattrVechielDto extends GroupPlate { */ private String control_code; - /** - * 创建人 - */ - private String create_id; - - /** - * 创建人姓名 - */ - private String create_name; - - /** - * 创建时间 - */ - private String create_time; - /** * 是否临时仓位 */ @@ -149,33 +99,7 @@ public class StructattrVechielDto extends GroupPlate { /** * 存储载具号 */ - private String vehicle_code; - - /** - * 备注 - */ - private String remark; - - /** - * 背景图片 - */ - private String back_ground_pic; - - /** - * 前景色 - */ - private String front_ground_color; - - /** - * 背景色 - */ - private String back_ground_color; - - /** - * 字体显示方向 - */ - private String font_direction_scode; - + private String storagevehicle_code; /** * 物料编码 @@ -188,11 +112,6 @@ public class StructattrVechielDto extends GroupPlate { */ private String material_name; - /** - * 物料规格 - */ - private String material_spec; - diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java index df23140..1a5c19e 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java @@ -6,26 +6,37 @@ import java.math.BigDecimal; @Data public class StrategyStructMaterialVO { - + /** + * 分配的货位的仓库库区编码 + */ + private String stor_id; + private String stor_code; + private String stor_name; + private String sect_id; private String sect_code; + private String sect_name; /** * 仓位编码 */ private String struct_code; + private String struct_id; + private String struct_name; /** * 锁定类型 */ private String lock_type; /** - * 载具编码 + * 分配的载具编码 */ + private String group_id; private String storagevehicle_code; /** * 物料标识 */ private String material_code; + private String material_id; /** * 批次 @@ -33,13 +44,15 @@ public class StrategyStructMaterialVO { private String pcsn; /** - * 组盘数量 + * 托盘物料数量 */ private BigDecimal qty; /** - * 当前仓库冻结数 + * 当前托盘分配数量 */ private BigDecimal frozen_qty; + private String qty_unit_id; + private String qty_unit_name; /** * 来源单据号 @@ -51,4 +64,5 @@ public class StrategyStructMaterialVO { */ private String ext_type; + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java index e2504e5..6dfe8cf 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java @@ -26,6 +26,7 @@ public class StrategyStructParam { * 物料标识 */ private String material_code; + private String material_id; /** * 批次 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java index 19f24c3..baf55c1 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java @@ -353,7 +353,7 @@ public class StructattrServiceImpl extends ServiceImpl outBoundSectDiv(StrategyStructParam param) { + public List outBoundSectDiv(StrategyStructParam param) { //只校验仓库,库区 Assert.noNullElements(new Object[]{param.getStor_code(),param.getSect_code()},"请求参数不能为空"); StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper() diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/FIFORuleHandler.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/FIFORuleHandler.java index 870d0d2..bdebfe3 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/FIFORuleHandler.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/FIFORuleHandler.java @@ -7,7 +7,9 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.MapOf; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto; +import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -22,7 +24,7 @@ import java.util.stream.Collectors; */ @Service("fifo") @Slf4j -public class FIFORuleHandler extends Decisioner { +public class FIFORuleHandler extends Decisioner { /** * 出入库明细服务 @@ -31,66 +33,39 @@ public class FIFORuleHandler extends Decisioner handler(List list, JSONObject param) { + public List handler(List list, JSONObject param) { //分配数量 - int plan_qty = param.getInteger("qty"); - int finalPlan_qty = plan_qty; + BigDecimal planQty = param.getBigDecimal("qty"); //当前条件只有id,批次 log.info("---------执行fifo出库分配规则---------"); List vechielDtos = iStructattrService.collectVechicle(MapOf.of("material_id", param.getString("material_id") , "pcsn", param.getString("pcsn") , "stor_code", param.getString("stor_code") - , "plan_qty", plan_qty + , "plan_qty", planQty , "is_lock", "false" - , "order_by", "gro.pcsn asc") + , "order_by", "gro.create_time asc") ); if (ObjectUtils.isEmpty(vechielDtos)) { throw new BadRequestException("当前出库策略:先进先出,库存分配失败,失败原因:库存不足!"); } - List disList = new ArrayList<>(); - Map> groupedMap = vechielDtos.stream() - .collect(Collectors.groupingBy( - StructattrVechielDto::getPcsn, - Collectors.collectingAndThen( - Collectors.toList(), - r -> r.stream() - .sorted(Comparator.comparing(StructattrVechielDto::getPcsn)) - .collect(Collectors.toList()) - ) - )); - LinkedHashMap> sortedGroupMap = groupedMap.entrySet().stream() - .sorted(Comparator.comparing(entry -> entry.getValue().get(0).getPcsn())) - .collect(Collectors.toMap( - Map.Entry::getKey, - Map.Entry::getValue, - (r, s) -> r, - LinkedHashMap::new - )); - for (Map.Entry> entry : sortedGroupMap.entrySet()) { - List sortedList = new ArrayList<>(entry.getValue()); - for (StructattrVechielDto structattr : sortedList) { - BigDecimal qty = structattr.getQty() != null ? structattr.getQty() : BigDecimal.ZERO; - BigDecimal frozen = structattr.getFrozen_qty() != null ? structattr.getFrozen_qty() : BigDecimal.ZERO; - int available = qty.subtract(frozen).intValue(); - if (available <= 0) { - continue; - } - if (finalPlan_qty <= available) { - structattr.setFrozen_qty(frozen.add(new BigDecimal(finalPlan_qty))); - disList.add(structattr); - finalPlan_qty = 0; - break; - } else { - structattr.setFrozen_qty(frozen.add(new BigDecimal(available))); - disList.add(structattr); - finalPlan_qty -= available; - } - } - if (finalPlan_qty <= 0) { + List divStruct = new ArrayList<>(); + for (StructattrVechielDto vechielDto : vechielDtos) { + if (planQty.intValue()<=0){ break; } + BigDecimal qty = vechielDto.getQty(); + BigDecimal subQty = planQty.subtract(qty); + if (subQty.doubleValue()>=0){ + vechielDto.setFrozen_qty(vechielDto.getQty()); + }else { + vechielDto.setFrozen_qty(planQty); + } + planQty=subQty; + StrategyStructMaterialVO materialVO = new StrategyStructMaterialVO(); + BeanUtils.copyProperties(vechielDto,materialVO); + divStruct.add(materialVO); } - return disList; + return divStruct; } /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java index d532c1a..ee16d14 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java @@ -26,6 +26,7 @@ import org.nl.wms.basedata_manage.service.*; import org.nl.wms.basedata_manage.service.dao.*; import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; +import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.pda.ios_manage.service.PdaIosInService; import org.nl.wms.pda.ios_manage.service.PdaIosOutService; @@ -358,7 +359,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { .material_code(whereJson.getString("material_code")) .qty(BigDecimal.valueOf(qty)) .build(); - List structList = iStructattrService.outBoundSectDiv(strategyStructParam); + List structList = iStructattrService.outBoundSectDiv(strategyStructParam); if (CollectionUtils.isEmpty(structList)) { throw new BadRequestException("无可用库存!"); } @@ -376,7 +377,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { }); //更新组盘记录表 Set vehicleCodeSet = structList.stream() - .map(StructattrVechielDto::getStoragevehicle_code) + .map(StrategyStructMaterialVO::getStoragevehicle_code) .collect(Collectors.toSet()); mdPbGroupplateMapper.update( new GroupPlate(), @@ -387,7 +388,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { ); //锁定仓位 Set structCodeSet = structList.stream() - .map(StructattrVechielDto::getStruct_code) + .map(StrategyStructMaterialVO::getStruct_code) .collect(Collectors.toSet()); iStructattrService.update( new LambdaUpdateWrapper() diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java index 8b11dd8..80b4f52 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java @@ -24,8 +24,11 @@ import org.nl.wms.basedata_manage.enums.BaseDataEnum; import org.nl.wms.basedata_manage.service.IBsrealStorattrService; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.BsrealStorattr; +import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto; +import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; +import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto; import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.sch_manage.enums.TaskStatus; @@ -345,59 +348,59 @@ public class OutBillServiceImpl extends ServiceImpl @Override @Transactional(rollbackFor = Exception.class) public void allDiv(JSONObject whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); + String sectCode = whereJson.getString("sect_code"); String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 IOStorInv ioStorInv = ioStorInvMapper.selectById(iostorinv_id); if (ObjectUtil.isEmpty(ioStorInv)) { throw new BadRequestException("查不到出库单信息"); } + //查询生成和未分配完的明细 JSONObject queryDtl = new JSONObject(); queryDtl.put("bill_status", IOSEnum.BILL_STATUS.code("分配完")); queryDtl.put("unassign_flag", BaseDataEnum.IS_YES_NOT.code("是")); queryDtl.put("iostorinv_id", iostorinv_id); List dtls = ioStorInvMapper.getIODtl(queryDtl); - // List dtls = ioStorInvDtlMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDtl.class) - // .le(IOStorInvDtl::getBill_status,IOSEnum.BILL_STATUS.code("分配完")) - // .gt(IOStorInvDtl::getUnassign_qty,0) - // .eq(IOStorInvDtl::getIostorinv_id, iostorinv_id)); if (ObjectUtil.isEmpty(dtls)) { throw new BadRequestException("当前订单无可分配出库明细"); } + for (int i = 0; i < dtls.size(); i++) { IOStorInvDtlDto dtl = dtls.get(i); - double unassign_qty = dtl.getUnassign_qty().doubleValue(); + BigDecimal unassign_qty = dtl.getUnassign_qty(); String pcsn = dtl.getPcsn(); String material_id = dtl.getMaterial_id(); String material_code = dtl.getMaterial_code(); // 根据物料和批次号查询库存可用 - BigDecimal canuseSum = mdPbStoragevehicleextMapper.queryCanuseSum(pcsn,material_id); - if (ObjectUtil.isEmpty(canuseSum) || canuseSum.doubleValue() outAllocationList = mdPbStoragevehicleextMapper.queryOutAllocation(pcsn,material_id); + List structMaterials = iStructattrService.outBoundSectDiv( + StrategyStructParam.builder() + .qty(unassign_qty) + .pcsn(pcsn) + .material_code(material_code) + .material_id(material_id) + .stor_code(ioStorInv.getStor_code()) + .sect_code(sectCode) + .build() + ); int seq_no = 1; - double allocation_canuse_qty = 0; - for (MdPbStoragevehicleextDto outAllocation : outAllocationList) { + BigDecimal allocation_canuse_qty=BigDecimal.ZERO; + for (StrategyStructMaterialVO outAllocation : structMaterials) { //分配明细 IOStorInvDis ioStorInvDis = new IOStorInvDis(); - ioStorInvDis.setIostorinvdis_id(IdUtil.getStringId()); + ioStorInvDis.setIostorinvdis_id(org.nl.common.utils.IdUtil.getStringId()); ioStorInvDis.setIostorinv_id(dtl.getIostorinv_id()); ioStorInvDis.setIostorinvdtl_id(dtl.getIostorinvdtl_id()); ioStorInvDis.setSeq_no((seq_no++)+""); ioStorInvDis.setSect_id(outAllocation.getSect_id()); ioStorInvDis.setPcsn(outAllocation.getPcsn()); - ioStorInvDis.setMaterial_id(material_id); - ioStorInvDis.setMaterial_code(material_code); + ioStorInvDis.setMaterial_id(outAllocation.getMaterial_id()); + ioStorInvDis.setMaterial_code(outAllocation.getMaterial_code()); ioStorInvDis.setSect_name(outAllocation.getSect_name()); ioStorInvDis.setSect_code(outAllocation.getSect_code()); ioStorInvDis.setStruct_id(outAllocation.getStruct_id()); @@ -408,20 +411,7 @@ public class OutBillServiceImpl extends ServiceImpl ioStorInvDis.setQty_unit_id(outAllocation.getQty_unit_id()); ioStorInvDis.setQty_unit_name(outAllocation.getQty_unit_name()); ioStorInvDis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("未生成")); - // 未分配数量 - 该库位上的可用数量 < 0 目前做整出 - // double canuse_qty = outAllocation.getCanuse_qty().doubleValue(); - // if (unassign_qty-canuse_qty>=0){ - // ioStorInvDis.setPlan_qty(BigDecimal.valueOf(canuse_qty)); - // }else { - // ioStorInvDis.setPlan_qty(BigDecimal.valueOf(unassign_qty)); - // } - // unassign_qty = unassign_qty-canuse_qty; - unassign_qty = unassign_qty - outAllocation.getQty().doubleValue(); - if (unassign_qty < 0) { - unassign_qty = 0; - } - allocation_canuse_qty = allocation_canuse_qty + outAllocation.getQty().doubleValue(); - ioStorInvDis.setPlan_qty(outAllocation.getQty()); + ioStorInvDis.setPlan_qty(outAllocation.getFrozen_qty()); //锁定货位 JSONObject lock_map = new JSONObject(); lock_map.put("struct_code", outAllocation.getStruct_code()); @@ -429,33 +419,34 @@ public class OutBillServiceImpl extends ServiceImpl lock_map.put("inv_code", ioStorInv.getBill_code()); lock_map.put("inv_type", ioStorInv.getBill_type()); lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁")); - iStructattrService.updateStatusByCode("0", lock_map); + iStructattrService.updateStatusByCode("0",lock_map); + //更新组盘表冻结数量状态 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .set(GroupPlate::getFrozen_qty, outAllocation.getFrozen_qty()) + .set(GroupPlate::getUpdate_time, now) + .eq(GroupPlate::getStoragevehicle_code, outAllocation.getStoragevehicle_code()) + .eq(GroupPlate::getMaterial_id, outAllocation.getMaterial_id()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")); + if (StringUtils.isNotEmpty(outAllocation.getPcsn())){ + updateWrapper.eq(GroupPlate::getPcsn, outAllocation.getPcsn()); + } + iMdPbGroupPlateService.update(updateWrapper); //生成分配明细 ioStorInvDisMapper.insert(ioStorInvDis); - //更新库存 加冻结减可用 - List updateIvtList = new ArrayList<>(); - JSONObject jsonIvt = new JSONObject(); - jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_ADD_FROZEN); - jsonIvt.put("storagevehicle_code", outAllocation.getStoragevehicle_code()); - jsonIvt.put("material_id", outAllocation.getMaterial_id()); - jsonIvt.put("pcsn", outAllocation.getPcsn()); - jsonIvt.put("qty_unit_id", outAllocation.getQty_unit_id()); - jsonIvt.put("qty_unit_name", outAllocation.getQty_unit_name()); - jsonIvt.put("change_qty", ioStorInvDis.getPlan_qty()); - updateIvtList.add(jsonIvt); - iMdPbGroupPlateService.updateIvt(updateIvtList); + allocation_canuse_qty = allocation_canuse_qty.add(outAllocation.getFrozen_qty()); //分配完成 结束分配 - if (unassign_qty==0){ + unassign_qty=unassign_qty.subtract(allocation_canuse_qty); + if (unassign_qty.doubleValue() <= 0){ break; } } //更新详情 dtl.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); - double assign_qty = allocation_canuse_qty + dtl.getAssign_qty().doubleValue(); - dtl.setUnassign_qty(BigDecimal.valueOf(unassign_qty)); - dtl.setAssign_qty(BigDecimal.valueOf(assign_qty)); + dtl.setUnassign_qty(unassign_qty); + dtl.setAssign_qty(dtl.getAssign_qty().add(allocation_canuse_qty)); ioStorInvDtlMapper.updateById(dtl); } + //更新主表 //根据单据标识判断明细是否都已经分配完成 int disCount = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class) @@ -808,7 +799,7 @@ public class OutBillServiceImpl extends ServiceImpl double allocation_canuse_qty = 0; for (int i = 0; i < rows.size(); i++){ JSONObject ivt = rows.getJSONObject(i); - double canuse_qty = ivt.getDoubleValue("canuse_qty"); + double canuse_qty = ivt.getDoubleValue("qty"); //分配明细 IOStorInvDis ioStorInvDis = new IOStorInvDis(); ioStorInvDis.setIostorinvdis_id(IdUtil.getStringId()); @@ -1172,12 +1163,14 @@ public class OutBillServiceImpl extends ServiceImpl dtlSet.add(ioStorInvDis.getIostorinvdtl_id()); //更新组盘记录表 - mdPbGroupplateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class) - .set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库")) - .eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn()) - .eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id()) - .eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code()) - ); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(GroupPlate.class) + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) + .eq(GroupPlate::getMaterial_id, ioStorInvDis.getMaterial_id()) + .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()); + if (StringUtils.isNotEmpty(ioStorInvDis.getPcsn())){ + updateWrapper.eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()); + } + mdPbGroupplateMapper.update(new GroupPlate(),updateWrapper); } //更新出库明细单状态 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java index eb9a5c2..484e494 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java @@ -612,12 +612,14 @@ public class RawAssistIStorServiceImpl extends ServiceImpl(GroupPlate.class) - .set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("入库")) - .eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn()) - .eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id()) - .eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code()) - ); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(GroupPlate.class) + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .eq(GroupPlate::getMaterial_id, ioStorInvDis.getMaterial_id()) + .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()); + if (StringUtils.isNotEmpty(ioStorInvDis.getPcsn())){ + updateWrapper.eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()); + } + mdPbGroupplateService.update(new GroupPlate(),updateWrapper); } //更新主表状态 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/util/UpdateIvtUtils.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/util/UpdateIvtUtils.java index 65d1f8c..55cfa32 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/util/UpdateIvtUtils.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/util/UpdateIvtUtils.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -165,9 +166,6 @@ public class UpdateIvtUtils { if (ObjectUtil.isEmpty(where.getString("material_id"))) { throw new BadRequestException("物料标识不能为空!"); } - if (ObjectUtil.isEmpty(where.getString("pcsn"))) { - throw new BadRequestException("批次不能为空!"); - } if (ObjectUtil.isEmpty(where.getString("qty_unit_id"))) { throw new BadRequestException("计量单位标识不能为空!"); } @@ -214,12 +212,15 @@ public class UpdateIvtUtils { */ private void updateAddFrozenIvt(JSONObject where) { // 找当前托盘物料库存 - GroupPlate extDao = iMdPbGroupPlateService.getOne( - new QueryWrapper().lambda() - .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) - .eq(GroupPlate::getMaterial_id, where.getString("material_id")) - .eq(GroupPlate::getPcsn, where.getString("pcsn")) - ); + + LambdaQueryWrapper query = new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) + .eq(GroupPlate::getMaterial_id, where.getString("material_id")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")); + if (!StringUtils.isEmpty(where.getString("pcsn"))){ + query.eq(GroupPlate::getPcsn, where.getString("pcsn")); + } + GroupPlate extDao = iMdPbGroupPlateService.getOne(query); if (ObjectUtil.isEmpty(extDao)) { throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); } @@ -246,12 +247,14 @@ public class UpdateIvtUtils { */ private void updateSubFrozenIvt(JSONObject where) { // 找当前托盘物料库存 - GroupPlate extDao = iMdPbGroupPlateService.getOne( - new QueryWrapper().lambda() - .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) - .eq(GroupPlate::getMaterial_id, where.getString("material_id")) - .eq(GroupPlate::getPcsn, where.getString("pcsn")) - ); + LambdaQueryWrapper query = new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) + .eq(GroupPlate::getMaterial_id, where.getString("material_id")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")); + if (!StringUtils.isEmpty(where.getString("pcsn"))){ + query.eq(GroupPlate::getPcsn, where.getString("pcsn")); + } + GroupPlate extDao = iMdPbGroupPlateService.getOne(query); if (ObjectUtil.isEmpty(extDao)) { throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); } @@ -281,12 +284,14 @@ public class UpdateIvtUtils { */ private void updateSubFrozenAddIvt(JSONObject where) { // 找当前托盘物料库存 - GroupPlate extDao = iMdPbGroupPlateService.getOne( - new QueryWrapper().lambda() - .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) - .eq(GroupPlate::getMaterial_id, where.getString("material_id")) - .eq(GroupPlate::getPcsn, where.getString("pcsn")).eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) - ); + LambdaQueryWrapper query = new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) + .eq(GroupPlate::getMaterial_id, where.getString("material_id")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")); + if (!StringUtils.isEmpty(where.getString("pcsn"))){ + query.eq(GroupPlate::getPcsn,where.getString("pcsn")); + } + GroupPlate extDao = iMdPbGroupPlateService.getOne(query); if (ObjectUtil.isEmpty(extDao)) { throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); } @@ -311,12 +316,14 @@ public class UpdateIvtUtils { * @param where 输入参数 */ private void updateAddCanuseIvt(JSONObject where) { - GroupPlate extDao = iMdPbGroupPlateService.getOne( - new QueryWrapper().lambda() - .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) - .eq(GroupPlate::getMaterial_id, where.getString("material_id")) - .eq(GroupPlate::getPcsn, where.getString("pcsn")) - ); + LambdaQueryWrapper query = new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) + .eq(GroupPlate::getMaterial_id, where.getString("material_id")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")); + if (!StringUtils.isEmpty(where.getString("pcsn"))){ + query.eq(GroupPlate::getPcsn, where.getString("pcsn")); + } + GroupPlate extDao = iMdPbGroupPlateService.getOne(query); if (ObjectUtil.isEmpty(extDao)) { throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); } @@ -334,12 +341,14 @@ public class UpdateIvtUtils { * @param where 输入参数 */ private void updateSubCanuseIvt(JSONObject where) { - GroupPlate extDao = iMdPbGroupPlateService.getOne( - new QueryWrapper().lambda() - .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) - .eq(GroupPlate::getMaterial_id, where.getString("material_id")) - .eq(GroupPlate::getPcsn, where.getString("pcsn")) - ); + LambdaQueryWrapper query = new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) + .eq(GroupPlate::getMaterial_id, where.getString("material_id")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")); + if (!StringUtils.isEmpty(where.getString("pcsn"))){ + query.eq(GroupPlate::getPcsn, where.getString("pcsn")); + } + GroupPlate extDao = iMdPbGroupPlateService.getOne(query); if (ObjectUtil.isEmpty(extDao)) { throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); } diff --git a/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue b/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue index a157bc9..eb19341 100644 --- a/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue +++ b/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue @@ -321,7 +321,7 @@ export default { }, methods: { open() { - crudSectattr.getSect({ 'stor_id': this.storId }).then(res => { + crudSectattr.getSectCode({ 'stor_id': this.storId }).then(res => { this.sects = res.content }) crudRegion.getRegionList(this.mstrow).then(res => { @@ -355,16 +355,16 @@ export default { }, sectQueryChange(val) { if (val.length === 1) { - this.mstrow.stor_id = val[0] - this.mstrow.sect_id = '' + this.mstrow.stor_code = val[0] + this.mstrow.sect_code = '' } if (val.length === 0) { - this.mstrow.sect_id = '' - this.mstrow.stor_id = '' + this.mstrow.sect_code = '' + this.mstrow.stor_code = '' } if (val.length === 2) { - this.mstrow.stor_id = val[0] - this.mstrow.sect_id = val[1] + this.mstrow.stor_code = val[0] + this.mstrow.sect_code = val[1] } }, tabledisabled(row) { diff --git a/nladmin-ui/src/views/wms/st/outbill/StructIvt.vue b/nladmin-ui/src/views/wms/st/outbill/StructIvt.vue index 3b25b48..24052b4 100644 --- a/nladmin-ui/src/views/wms/st/outbill/StructIvt.vue +++ b/nladmin-ui/src/views/wms/st/outbill/StructIvt.vue @@ -93,7 +93,11 @@ - + + +