From f71f1addce004217521fd0d8f0358c1cfb514d5a Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Thu, 10 Jul 2025 13:31:36 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0RCS=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=9B=20add:=E5=A2=9E=E5=8A=A0PC=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E5=88=86=E9=85=8D=E9=80=BB=E8=BE=91=EF=BC=9B=20opt:?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=9A=E7=94=A8API=E9=80=9A=E8=AE=AF?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/common/base/TableDataInfo.java | 7 + .../config/thread/ThreadPoolExecutorUtil.java | 17 +- .../org/nl/system/enums/SysParamConstant.java | 10 ++ .../service/IStructattrService.java | 10 +- .../service/dao/MdPbStoragevehicleext.java | 1 - .../service/dao/StructattrVechielDto.java | 6 + .../mapper/MdPbStoragevehicleextMapper.xml | 15 +- .../service/dao/mapper/StructattrMapper.java | 12 ++ .../service/dao/mapper/StructattrMapper.xml | 54 +++++- .../service/dto/MdPbStoragevehicleextDto.java | 8 +- .../service/impl/StructattrServiceImpl.java | 11 +- .../nl/wms/ext/service/WmsToAcsService.java | 2 + .../ext/service/impl/WmsToAcsServiceImpl.java | 6 +- .../gateway/controller/GateWayController.java | 4 +- .../org/nl/wms/gateway/dto/RcsResponse.java | 47 +++++ .../service/impl/GateWayServiceImpl.java | 77 +++++++- .../controller/PdaIosInController.java | 22 ++- .../controller/PdaIosOutController.java | 74 +++++--- .../ios_manage/service/PdaIosOutService.java | 15 +- .../service/impl/PdaIosInServiceImpl.java | 31 +++- .../service/impl/PdaIosOutServiceImpl.java | 91 ++++++++-- .../java/org/nl/wms/pda/util/PdaResponse.java | 4 +- .../service/impl/PmFormDataServiceImpl.java | 2 +- .../sch_manage/service/dao/SchBaseRegion.java | 2 + .../service/impl/SchBasePointServiceImpl.java | 6 +- .../impl/SchBaseRegionServiceImpl.java | 9 +- .../sch_manage/service/util/AbstractTask.java | 38 +--- .../sch_manage/service/util/AcsTaskDto.java | 34 ++++ .../wms/sch_manage/service/util/AutoTask.java | 68 +++++++- .../service/util/tasks/BackInTask.java | 19 +- .../service/util/tasks/MoveTask.java | 8 +- .../service/util/tasks/PdaPointTask.java | 8 +- .../service/util/tasks/StInTask.java | 7 + .../service/util/tasks/StOutTask.java | 8 +- .../service/util/tasks/TaskOrderDetail.java | 24 +++ .../service/util/tasks/VehicleInTask.java | 7 + .../service/util/tasks/VehicleOutTask.java | 7 + .../warehouse_management/enums/IOSEnum.java | 2 +- .../service/dao/mapper/IOStorInvMapper.xml | 6 +- .../dao/mapper/MdPbGroupplateMapper.xml | 6 +- .../service/dto/GroupPlateDto.java | 2 + .../service/impl/OutBillServiceImpl.java | 164 +++++++++++------- .../service/util/UpdateIvtUtils.java | 75 ++++++-- nladmin-ui/src/views/wms/sch/task/index.vue | 58 ++++--- .../src/views/wms/st/checkbill/AddDtl.vue | 4 +- .../src/views/wms/st/inAndOutReturn/index.vue | 2 +- .../src/views/wms/st/inbill/AddDialog.vue | 4 +- .../src/views/wms/st/inbill/DivDialog.vue | 7 +- .../src/views/wms/st/inbill/ViewDialog.vue | 8 +- nladmin-ui/src/views/wms/st/inbill/index.vue | 2 +- .../views/wms/st/moreorlessbill/AddDialog.vue | 12 +- .../views/wms/st/moreorlessbill/StructDiv.vue | 4 +- .../src/views/wms/st/moreorlessbill/index.vue | 7 +- .../src/views/wms/st/movebill/AddDialog.vue | 10 +- .../src/views/wms/st/movebill/AddDtl.vue | 4 +- .../src/views/wms/st/outbill/AddDialog.vue | 6 +- .../src/views/wms/st/outbill/AddDtl.vue | 4 +- .../src/views/wms/st/outbill/DivDialog.vue | 23 ++- .../src/views/wms/st/outbill/StructIvt.vue | 16 +- .../src/views/wms/st/outbill/ViewDialog.vue | 14 +- nladmin-ui/src/views/wms/st/outbill/index.vue | 4 +- .../views/wms/statement/structivt/index.vue | 4 +- 62 files changed, 918 insertions(+), 301 deletions(-) create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/gateway/dto/RcsResponse.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TaskOrderDetail.java diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java index bfef3b4..9c91810 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/TableDataInfo.java @@ -24,6 +24,12 @@ public class TableDataInfo implements Serializable { */ private long totalElements; + /** + * 信息 + */ + private String message; + + /** * 列表数据 */ @@ -62,6 +68,7 @@ public class TableDataInfo implements Serializable { return rspData; } + public static TableDataInfo build(List list) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(String.valueOf(HttpStatus.HTTP_OK)); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java index 00c1bfe..be71079 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java @@ -15,8 +15,8 @@ */ package org.nl.config.thread; - -import org.nl.config.SpringContextHolder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -27,16 +27,17 @@ import java.util.concurrent.TimeUnit; * @author Zheng Jie * @date 2019年10月31日18:16:47 */ +@Configuration public class ThreadPoolExecutorUtil { - public static ThreadPoolExecutor getPoll(){ - AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class); + @Bean(name = "meshandlerPool") + public ThreadPoolExecutor meshandlerPool(){ return new ThreadPoolExecutor( - properties.getCorePoolSize(), - properties.getMaxPoolSize(), - properties.getKeepAliveSeconds(), + 8, + 32, + 30, TimeUnit.SECONDS, - new ArrayBlockingQueue<>(properties.getQueueCapacity()), + new ArrayBlockingQueue<>(128), new TheadFactoryName() ); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java index 0c8f446..5e4f144 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java @@ -12,11 +12,21 @@ public class SysParamConstant { */ public final static String IS_CONNECT_ACS = "is_connect_acs"; + /** + * 是否连接RCS + */ + public final static String IS_CONNECT_RCS = "is_connect_rcs"; + /** * ACS系统IP */ public final static String ACS_URL = "acs_url"; + /** + * RCS系统IP + */ + public final static String RCS_URL = "rcs_url"; + /** * ERP系统IP */ 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 b0e810a..5303c11 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,7 +6,6 @@ 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 java.util.List; @@ -102,9 +101,16 @@ public interface IStructattrService extends IService { */ Structattr getByCode(String struct_code); - + /** + * 获取仓位库存 + */ List collectVechicle(Map query); + /** + * 获取点位库存 + */ + List getRegionIvt(Map query); + /** * 出库规则 */ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdPbStoragevehicleext.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdPbStoragevehicleext.java index ae1a6bc..a7bc323 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdPbStoragevehicleext.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdPbStoragevehicleext.java @@ -18,7 +18,6 @@ import java.math.BigDecimal; */ @Data @EqualsAndHashCode(callSuper = false) -@TableName("md_pb_storagevehicleext") public class MdPbStoragevehicleext implements Serializable { private static final long serialVersionUID = 1L; 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 730f4f3..448f66e 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 @@ -188,6 +188,12 @@ 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/dao/mapper/MdPbStoragevehicleextMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml index 01844ef..74f1465 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml @@ -21,12 +21,14 @@ attr.struct_code AS turnout_struct_code FROM md_pb_groupplate ext - INNER JOIN md_me_materialbase material ON material.material_id = ext.material_id - INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code + LEFT JOIN md_me_materialbase material ON material.material_id = ext.material_id + LEFT JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code attr.lock_type = '0' AND attr.is_used = "1" + AND ext.frozen_qty = 0 AND ext.qty > 0 + AND ext.status ='02' AND attr.stor_id LIKE #{param.stor_id} @@ -126,12 +128,13 @@ + SELECT group_id, storagevehicle_code, - gp.material_code,pcsn, + gp.material_id,pcsn, qty_unit_id, qty_unit_name,qty,frozen_qty,remark, status,ext_code,ext_type, - mater.material_name,mater.material_spec,mater.material_id + mater.material_name,mater.material_spec,mater.material_id,mater.material_code FROM md_pb_groupplate gp - LEFT JOIN md_me_materialbase mater ON mater.material_code = gp.material_code + LEFT JOIN md_me_materialbase mater ON mater.material_id = gp.material_id gp.status = '01' and frozen_qty = 0 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml index fe4801d..4bc447f 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml @@ -73,7 +73,11 @@ AND gro.status = #{params.status} - + + AND + gro.frozen_qty>0 + + AND gro.qty>0 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/GroupPlateDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/GroupPlateDto.java index 80057ca..bf34b01 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/GroupPlateDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/GroupPlateDto.java @@ -20,6 +20,8 @@ public class GroupPlateDto extends GroupPlate{ private String material_id; + private String material_code; + /** * 物料名称 */ 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 46529b1..6195ac3 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 @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; @@ -308,6 +309,7 @@ public class OutBillServiceImpl extends ServiceImpl i ioStorInvDtl.put("iostorinv_id", iostorinv_id); ioStorInvDtl.put("seq_no", (i + 1) + ""); ioStorInvDtl.put("material_id", row.getString("material_id")); + ioStorInvDtl.put("material_code", row.getString("material_code")); ioStorInvDtl.put("pcsn", row.getString("pcsn")); ioStorInvDtl.put("bill_status", IOSEnum.BILL_STATUS.code("生成")); ioStorInvDtl.put("qty_unit_id", row.get("qty_unit_id")); @@ -343,55 +345,46 @@ public class OutBillServiceImpl extends ServiceImpl i @Override @Transactional(rollbackFor = Exception.class) public void allDiv(JSONObject whereJson) { - String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); - 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)); + // 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(); 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); - int seq_no = 1; double allocation_canuse_qty = 0; for (MdPbStoragevehicleextDto outAllocation : outAllocationList) { @@ -404,6 +397,7 @@ public class OutBillServiceImpl extends ServiceImpl i ioStorInvDis.setSect_id(outAllocation.getSect_id()); ioStorInvDis.setPcsn(outAllocation.getPcsn()); ioStorInvDis.setMaterial_id(material_id); + ioStorInvDis.setMaterial_code(material_code); ioStorInvDis.setSect_name(outAllocation.getSect_name()); ioStorInvDis.setSect_code(outAllocation.getSect_code()); ioStorInvDis.setStruct_id(outAllocation.getStruct_id()); @@ -414,22 +408,20 @@ public class OutBillServiceImpl extends ServiceImpl i 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.getCanuse_qty().doubleValue(); - if (unassign_qty<0){ - unassign_qty=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.getCanuse_qty().doubleValue(); - ioStorInvDis.setPlan_qty(outAllocation.getCanuse_qty()); - + allocation_canuse_qty = allocation_canuse_qty + outAllocation.getQty().doubleValue(); + ioStorInvDis.setPlan_qty(outAllocation.getQty()); //锁定货位 JSONObject lock_map = new JSONObject(); lock_map.put("struct_code", outAllocation.getStruct_code()); @@ -437,11 +429,9 @@ public class OutBillServiceImpl extends ServiceImpl i 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); //生成分配明细 ioStorInvDisMapper.insert(ioStorInvDis); - //更新库存 加冻结减可用 List updateIvtList = new ArrayList<>(); JSONObject jsonIvt = new JSONObject(); @@ -454,13 +444,11 @@ public class OutBillServiceImpl extends ServiceImpl i jsonIvt.put("change_qty", ioStorInvDis.getPlan_qty()); updateIvtList.add(jsonIvt); iMdPbGroupPlateService.updateIvt(updateIvtList); - //分配完成 结束分配 if (unassign_qty==0){ break; } } - //更新详情 dtl.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); double assign_qty = allocation_canuse_qty + dtl.getAssign_qty().doubleValue(); @@ -468,7 +456,6 @@ public class OutBillServiceImpl extends ServiceImpl i dtl.setAssign_qty(BigDecimal.valueOf(assign_qty)); ioStorInvDtlMapper.updateById(dtl); } - //更新主表 //根据单据标识判断明细是否都已经分配完成 int disCount = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class) @@ -619,6 +606,7 @@ public class OutBillServiceImpl extends ServiceImpl i ioStorInvDis.setSect_id(outAllocation.getSect_id()); ioStorInvDis.setPcsn(outAllocation.getPcsn()); ioStorInvDis.setMaterial_id(material_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()); @@ -631,19 +619,19 @@ public class OutBillServiceImpl extends ServiceImpl i 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.getCanuse_qty().doubleValue(); - if (unassign_qty<0){ - unassign_qty=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.getCanuse_qty().doubleValue(); - ioStorInvDis.setPlan_qty(outAllocation.getCanuse_qty()); + allocation_canuse_qty = allocation_canuse_qty + outAllocation.getQty().doubleValue(); + ioStorInvDis.setPlan_qty(outAllocation.getQty()); //锁定货位 JSONObject lock_map = new JSONObject(); @@ -652,11 +640,10 @@ public class OutBillServiceImpl extends ServiceImpl i 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); //生成分配明细 ioStorInvDisMapper.insert(ioStorInvDis); - //更新库存 加冻结减可用 List updateIvtList = new ArrayList<>(); JSONObject jsonIvt = new JSONObject(); @@ -999,10 +986,10 @@ public class OutBillServiceImpl extends ServiceImpl i @Override public void allSetPoint(JSONObject whereJson) { //出库点 - String point_code = whereJson.getString("point_code"); + String regionCode = whereJson.getString("point_code"); - if (StrUtil.isBlank(point_code)){ - throw new BadRequestException("未选择出库点"); + if (StrUtil.isBlank(regionCode)) { + throw new BadRequestException("未选择出库区域"); } String iostorinv_id = whereJson.getString("iostorinv_id"); @@ -1011,40 +998,89 @@ public class OutBillServiceImpl extends ServiceImpl i if (ObjectUtil.isEmpty(ioStorInv)) { throw new BadRequestException("未查到相关出库单"); } - List ioStorInvDisList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class) - .eq(IOStorInvDis::getIostorinv_id,iostorinv_id) - .eq(IOStorInvDis::getIs_issued,BaseDataEnum.IS_YES_NOT.code("否")) - .and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).ne(IOStorInvDis::getStruct_code,"")) + .eq(IOStorInvDis::getIostorinv_id, iostorinv_id) + .eq(IOStorInvDis::getIs_issued, BaseDataEnum.IS_YES_NOT.code("否")) + .and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).ne(IOStorInvDis::getStruct_code, "")) ); - if (ObjectUtil.isEmpty(ioStorInvDisList)){ + if (ObjectUtil.isEmpty(ioStorInvDisList)) { throw new BadRequestException("当前没有可设置的分配明细"); } - - for (IOStorInvDis ioStorInvDis:ioStorInvDisList){ + for (IOStorInvDis ioStorInvDis : ioStorInvDisList) { + //获取终点 + String pointCode = getPointCode(regionCode); //创建任务 JSONObject task_form = new JSONObject(); task_form.put("task_type", "STOutTask"); - task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE")); + task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); task_form.put("PickingLocation", ioStorInvDis.getStruct_code()); - task_form.put("PlacedLocation", point_code); + task_form.put("PlacedLocation", pointCode); task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code()); - StOutTask stOutTask = SpringContextHolder.getBean("STOutTask"); - String task_id = stOutTask.create(task_form); - + //更新点位 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() + .eq(SchBasePoint::getPoint_code, pointCode) + .set(SchBasePoint::getVehicle_code, ioStorInvDis.getStoragevehicle_code()) + .set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")); + schBasePointMapper.update(new SchBasePoint(), wrapper); //分配明细表更新任务相关数据 IOStorInvDis dis = new IOStorInvDis(); dis.setIostorinvdis_id(ioStorInvDis.getIostorinvdis_id()); dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成")); dis.setTask_id(task_id); dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是")); - dis.setPoint_code(point_code); + dis.setPoint_code(regionCode); ioStorInvDisMapper.updateById(dis); } } + private String getPointCode(String regionCode) { + String pointCode = ""; + List pointList = schBasePointMapper.selectList(new LambdaQueryWrapper<>(SchBasePoint.class) + .eq(SchBasePoint::getRegion_code, regionCode) + .eq(SchBasePoint::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"))); + if (regionCode.contains("Y01")) { + Map> pointMap = pointList.stream().collect(Collectors.groupingBy(SchBasePoint::getParent_point_code)); + if (ObjectUtils.isEmpty(pointMap)) { + throw new RuntimeException("该暂存区已分配或放满了,请及时取走暂存区的物料!"); + } + + for (Map.Entry> entry : pointMap.entrySet()) { + List filteredSortedList = entry.getValue(); + filteredSortedList.sort(Comparator.comparingInt(SchBasePoint::getCol_num).reversed()); + boolean hasEmptyVehicle = true; + Optional emptyList = filteredSortedList.stream() + .filter(n -> n.getPoint_status().equals(IOSEnum.POINT_STATUS.code("无货"))) + .findFirst(); + //判断点位外层是否有空载具 + if (emptyList.isPresent()) { + Integer sortSeq = emptyList.get().getCol_num(); + //外层存在有货的阻挡,那么这一列都不能用了 + hasEmptyVehicle = filteredSortedList.stream() + .anyMatch(r -> r.getCol_num() < sortSeq && + r.getPoint_status().equals(IOSEnum.POINT_STATUS.code("有货"))); + } + if (!hasEmptyVehicle) { + pointCode = emptyList.get().getPoint_code(); + break; + } + } + if (StringUtils.isBlank(pointCode)) { + throw new BadRequestException("该暂存区暂无空闲货位,请检查暂存区是否存在同一列有物料阻挡未取走!"); + } + } else { + pointCode = pointList.stream() + .filter(r -> IOSEnum.POINT_STATUS.code("无货").equals(r.getPoint_status())) + .sorted(Comparator.comparing(SchBasePoint::getRow_num)) + .findFirst() + .orElseThrow(() -> new BadRequestException("该暂存区暂无空闲货位,请及时取走暂存区的物料!")) + .getPoint_code(); + } + return pointCode; + } + @Override public void confirm(JSONObject whereJson) { 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 4c5ca85..8d8481e 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 @@ -3,19 +3,30 @@ package org.nl.wms.warehouse_management.service.util; import cn.hutool.core.date.DateUtil; 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.QueryWrapper; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.tasks.TaskOrderDetail; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; /** @@ -32,6 +43,12 @@ public class UpdateIvtUtils { @Autowired private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + /** + * 任务服务 + */ + @Resource + private ISchBaseTaskService iSchBaseTaskService; + /** * 组盘信息服务 */ @@ -76,7 +93,7 @@ public class UpdateIvtUtils { // 加可用(加库存) updateAddCanuseIvt(where); break; - case IOSConstant.UPDATE_IVT_TYPE_SUB_CANUSE_IVT : + case IOSConstant.UPDATE_IVT_TYPE_SUB_CANUSE_IVT: // 减可用(减库存) updateSubCanuseIvt(where); break; @@ -85,8 +102,23 @@ public class UpdateIvtUtils { } } + + /** + * 任务校验 + * + * @param where 输入参数 + */ + public void checkTask(JSONObject where) { + List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", where.getString("vehicle_code")) + .lt("task_status", TaskStatus.FINISHED.getCode())); + if (!CollectionUtils.isEmpty(list)) { + throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))+",请在WMS任务列表中检查!"); + } + } + /** * 数据校验 + * * @param where 输入参数 */ private void checkData(JSONObject where) { @@ -158,13 +190,13 @@ public class UpdateIvtUtils { throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); } // 减可用数 - double canuse_qty = NumberUtil.sub(extDao.getQty(), where.getDoubleValue("change_qty")).doubleValue(); - if (canuse_qty < 0) { - throw new BadRequestException("可用数不能为负数,请检查变动数量!当前可用数为【" + extDao.getQty() + "】当前变动数为【" + where.getDoubleValue("change_qty") + "】"); - } + // double canuse_qty = NumberUtil.sub(extDao.getQty(), where.getDoubleValue("change_qty")).doubleValue(); + // if (canuse_qty < 0) { + // throw new BadRequestException("可用数不能为负数,请检查变动数量!当前可用数为【" + extDao.getQty() + "】当前变动数为【" + where.getDoubleValue("change_qty") + "】"); + // } // 加冻结数 double frozen_qty = NumberUtil.add(extDao.getFrozen_qty(), where.getDoubleValue("change_qty")).doubleValue(); - extDao.setQty(BigDecimal.valueOf(canuse_qty)); + //extDao.setQty(BigDecimal.valueOf(canuse_qty)); extDao.setFrozen_qty(BigDecimal.valueOf(frozen_qty)); extDao.setUpdate_optid(SecurityUtils.getCurrentUserId()); extDao.setUpdate_optname(SecurityUtils.getCurrentNickName()); @@ -225,14 +257,14 @@ public class UpdateIvtUtils { throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); } // 减冻结 - double qty = NumberUtil.sub(extDao.getQty(), extDao.getFrozen_qty()).doubleValue(); - if (qty < 0) { - throw new BadRequestException("冻结数不能为负数,请检查变动数量!当前冻结数为【" + extDao.getFrozen_qty() + "】当前变动数为【" + where.getDoubleValue("change_qty") + "】"); - } + // double qty = NumberUtil.sub(extDao.getQty(), extDao.getFrozen_qty()).doubleValue(); + // if (qty < 0) { + // throw new BadRequestException("冻结数不能为负数,请检查变动数量!当前冻结数为【" + extDao.getFrozen_qty() + "】当前变动数为【" + where.getDoubleValue("change_qty") + "】"); + // } // 加可用 // double canuse_qty = NumberUtil.add(extDao.getQty(), where.getDoubleValue("change_qty")).doubleValue(); extDao.setFrozen_qty(BigDecimal.ZERO); - extDao.setQty(BigDecimal.valueOf(qty)); + //extDao.setQty(BigDecimal.valueOf(qty)); extDao.setUpdate_optid(SecurityUtils.getCurrentUserId()); extDao.setUpdate_optname(SecurityUtils.getCurrentNickName()); extDao.setUpdate_time(DateUtil.now()); @@ -290,4 +322,25 @@ public class UpdateIvtUtils { iMdPbGroupPlateService.updateById(extDao); } + public String sendRcsParam(SchBaseTask taskDao) { + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setModelProcessCode(taskDao.getVehicle_type()); + acsTaskDto.setOrderId(taskDao.getTask_code()); + acsTaskDto.setFromSystem("WMS"); + acsTaskDto.setPriority(taskDao.getPriority()); + acsTaskDto.setShelfNumber(taskDao.getVehicle_code()); + TaskOrderDetail detail = new TaskOrderDetail(); + detail.setTaskPath(taskDao.getPoint_code2() + "," + taskDao.getPoint_code1()); + detail.setShelfNumber(taskDao.getVehicle_code()); + // Map extraInfo = new HashMap<>(); + // extraInfo.put("s", "1"); + // extraInfo.put("d", "2"); + // detail.setExtraInfo(extraInfo); + // 放到列表 + List detailList = new ArrayList<>(); + detailList.add(detail); + acsTaskDto.setTaskOrderDetail(detailList); + return JSON.toJSONString(acsTaskDto, true); + } + } diff --git a/nladmin-ui/src/views/wms/sch/task/index.vue b/nladmin-ui/src/views/wms/sch/task/index.vue index c59091d..3b74d1f 100644 --- a/nladmin-ui/src/views/wms/sch/task/index.vue +++ b/nladmin-ui/src/views/wms/sch/task/index.vue @@ -32,12 +32,13 @@ - + + :value="item.config_code" + > {{ item.config_code }} {{ item.task_name }} @@ -60,8 +61,8 @@ range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" - @change="crud.toQuery"> - + @change="crud.toQuery" + /> - - - + + + @@ -140,9 +141,9 @@ - - - + + + @@ -184,18 +185,18 @@ {{ scope.row.vehicle_code2 ? scope.row.vehicle_code2 : '-' }} --> - + - + - - +