From 3a8ca11b8834ebc4f42b9a135a4ccbc16919e0b6 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Mon, 8 Dec 2025 09:16:27 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E6=89=98=E7=9B=98?= =?UTF-8?q?=E5=80=92=E5=BA=93=E6=89=8B=E6=8C=81=E6=89=B9=E9=87=8F=E7=BB=84?= =?UTF-8?q?=E7=9B=98=EF=BC=9B=20=20=20=20=20=E7=94=9F=E4=BA=A7=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E6=89=98=E7=9B=98=E6=B7=B7=E6=89=98=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E5=9B=9E=E4=BC=A0=EF=BC=9B=20=20=20=20=20=E5=8F=91=E8=B4=A7?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=8D=95=EF=BC=8C=E9=94=80=E5=94=AE=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E5=8D=95=E5=9B=9E=E4=BC=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/common/enums/StatusEnum.java | 4 +- .../chainer/impl/EndDecisionChainer.java | 15 ++ .../handler/impl/GroupDickInStorageTask.java | 11 +- .../task/handler/impl/InStorageTask.java | 16 +- .../handler/impl/PalletInStorageTask.java | 124 +++++++----- .../behavior/impl/FormActivityBehavior.java | 1 - .../controller/MdGruopDickController.java | 13 ++ .../service/IMdGruopDickService.java | 4 + .../service/impl/MdGruopDickServiceImpl.java | 181 ++++++++++++++++-- .../pda_manage/group/dto/MaterGroupDto.java | 5 +- .../pda_manage/iostorage/PdaInController.java | 2 +- .../iostorage/sevice/PdaInIOService.java | 37 +++- 12 files changed, 325 insertions(+), 88 deletions(-) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java index af380582..1c663560 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java @@ -22,7 +22,7 @@ public enum StatusEnum { /** * 单据状态 */ - FORM_STATUS(ForkMap.of("生成", "10", null, "已分配", "13", null, "下发", "15", null, "执行中", "20", null, "暂停", "30", null, "完成", "80", null, "强制完成", "82", null, "取消", "90", null)), + FORM_STATUS(ForkMap.of("生成", "10", null, "已分配", "13", null, "下发", "15", null, "执行中", "20", null, "暂停", "30", null, "待回传", "40", null, "完成", "80", null, "强制完成", "82", null, "取消", "90", null)), /** * 出入库单据类型退货出库 @@ -45,7 +45,7 @@ public enum StatusEnum { */ ERP_TYPE(ForkMap.of("PRD_MO", "10", "生产订单", "PUR_ReceiveBill", "11", "收料通知单", "SAL_SaleOrder", "12", "销售订单", "PRD_INSTOCK", "13", "生产入库单", "STK_InStock", "14", "采购入库单", - "SAL_RETURNSTOCK", "15", "销售退货入库单", "PUR_MRB", "18", "采购退料出库单", + "SAL_RETURNSTOCK", "15", "销售退货入库单", "SAL_OUTSTOCK", "16", "销售出库单", "PUR_MRB", "18", "采购退料出库单", "SUB_PickMtrl", "19", "委外用料清单", "PRD_PPBOM", "20", "生产用料清单", "PRD_PickMtrl", "21", "生产领料单", "SP_PickMtrl", "22", "简单生产领料单", "STK_TransferDirect", "23", "调拨出库单", "STK_MisDelivery", "26", "其他出库单", "PRD_ReturnMtrl", "27", "生产退料单", "PRD_FeedMtrl", "28", "生产补料单", "SUB_RETURNMTRL", "29", "委外退料单")), diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java index 408fe90c..be0ad9c5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java @@ -1,7 +1,9 @@ package org.nl.wms.decision_manage.handler.chainer.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.javaparser.utils.Log; import lombok.Data; @@ -11,6 +13,8 @@ import org.nl.common.enums.StatusEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SpringContextHolder; import org.nl.wms.decision_manage.handler.chainer.DecisionerChain; +import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; +import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; @@ -55,9 +59,20 @@ public class EndDecisionChainer extends DecisionerChain { boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type); IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class); IMdPbVehicleMaterService iMdPbVehicleMaterService = SpringContextHolder.getBean(IMdPbVehicleMaterService.class); + ISchBaseTaskService iSchBaseTaskService = SpringContextHolder.getBean(ISchBaseTaskService.class); List structs = new ArrayList<>(); //入库分配 if (in_storage) { + //混托任务判断 + if (startParam.getString("vehicle_code").contains("T")) { + List schBaseTaskList = iSchBaseTaskService.list(new QueryWrapper() + .eq("vehicle_code", startParam.getString("vehicle_code")).select("point_code2") + .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + if (CollectionUtil.isNotEmpty(schBaseTaskList)) { + structs.add(schBaseTaskList.get(0).getPoint_code2()); + return structs; + } + } StIvtStructattr struct = (StIvtStructattr) transfers.get(0); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("lock_type", StatusEnum.LOCK.code("入库锁")) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java index ac5479dc..e9730a6a 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java @@ -70,11 +70,12 @@ public class GroupDickInStorageTask extends AbstractTask { } String groupId = item.get(0).getGroup_id(); MdGruopDick mst = iMdGruopDickService.getById(groupId); - SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper() - .eq("vehicle_code", vehicle_code).select("task_code") - .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (schBaseTask != null) { - throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + schBaseTask.getTask_code()); + List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) + .lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code")); + if (!CollectionUtils.isEmpty(list)){ + if (!list.get(0).getVehicle_code().contains("T")) { + throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); + } } JSONObject mstJ = (JSONObject) JSONObject.toJSON(mst); MdPbVehicleMaterVo vehicleMater = item.get(0); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java index 573632e4..cd0cacd9 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java @@ -53,16 +53,20 @@ public class InStorageTask extends AbstractTask { if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(start_point)||StringUtils.isEmpty(struct_code)){ throw new BadRequestException("创建任务失败:方法请求参数不能为空"); } - List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) - .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (!CollectionUtils.isEmpty(list)){ - throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); - } SchBaseTask task = new SchBaseTask(); + task.setStatus(StatusEnum.FORM_STATUS.code("生成")); + List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) + .lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code")); + if (!CollectionUtils.isEmpty(list)){ + if (!list.get(0).getVehicle_code().contains("T")) { + throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); + }else { + task.setStatus(StatusEnum.FORM_STATUS.code("待回传")); + } + } task.setId(IdUtil.getStringId()); task.setSource_form_id(from.getString("id")); task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); - task.setStatus(StatusEnum.FORM_STATUS.code("生成")); task.setHandle_class(this.getClass().getName()); task.setAcs_type(StatusEnum.ACS_TYPE.code("立库")); task.setCreate_time(DateUtil.now()); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java index 771a82b5..dc4cf551 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java @@ -29,7 +29,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** @@ -82,58 +84,80 @@ public class PalletInStorageTask extends AbstractTask { if (CollectionUtils.isEmpty(item)) { throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在"); } - MdPbVehicleMaterVo vehicleMaterVo = item.get(0); - String remark = vehicleMaterVo.getRemark(); - String isCheck = StringUtils.isNotBlank(vehicleMaterVo.getIs_check()) ? "1" : vehicleMaterVo.getIs_check(); - if ("空托盘入库".equals(remark)) { - iBmVehicleInfoService.update(new UpdateWrapper() - .set("h", Integer.valueOf(h)) - .set("update_time", DateUtil.now()) - .set("update_name", "ACS托盘入库申请") - .eq("vehicle_code", vehicle_code)); - MdPbVehicleMaterVo vehicleMater = item.get(0); - //拣选回库流程 - BussEventMulticaster.Publish( - new FlowStartEvent("pallet_in", - (proc_inst_id,empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper() - .set("proc_inst_id",proc_inst_id) - .eq("vehicle_code",vehicle_code) - .eq("is_delete",false)) - ,new JSONObject(MapOf.of("start_point", point_code1))) - .build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater)) - ); - }else { - String groupId = vehicleMaterVo.getGroup_id(); - MdGruopDick mst = iMdGruopDickService.getById(groupId); - if (mst == null) { - throw new BadRequestException("申请任务失败,载具没有组盘信息!"); + List newVehicleMater =new ArrayList<>(); + //混托任务判断 + if (item.get(0).getVehicle_code().contains("T")&&item.size() > 1) { + newVehicleMater= item.stream().filter(r -> r.getNeed_pick() == null || !r.getNeed_pick()).collect(Collectors.toList()); + if (newVehicleMater.size() ==item.size()) { + newVehicleMater.get(0).setNeed_pick(true); + }else{ + item.stream().filter(r -> r.getNeed_pick() != null && r.getNeed_pick()).findFirst().ifPresent(newVehicleMater::add); } - SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper() - .eq("vehicle_code", vehicle_code).select("task_code") - .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (schBaseTask != null) { - throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + schBaseTask.getTask_code()); - } - iBmVehicleInfoService.update(new UpdateWrapper() - .set("h", Integer.valueOf(h)) - .set("update_time", DateUtil.now()) - .set("update_name", "ACS托盘入库申请") - .eq("vehicle_code",vehicle_code)); - - JSONObject mstJ = (JSONObject) JSONObject.toJSON(mst); - MdPbVehicleMaterVo vehicleMater = vehicleMaterVo; - mstJ.put("stor_code", vehicleMater.getStor_code()); - BussEventMulticaster.Publish( - new FlowStartEvent("md_group", - (proc_inst_id, empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper() - .set("proc_inst_id", proc_inst_id) - .eq("vehicle_code", vehicle_code) - .eq("is_delete", false)) - , new JSONObject(MapOf.of("start_point", point_code1, "isCheck", isCheck))) - .build("md_group_dick", mst.getId(), mst.getSource_form_type(), mst.getSource_form_id(), mstJ) - .build("md_pb_vehicleMater", item) - ); + } else { + newVehicleMater = item; } + newVehicleMater.forEach(r -> { + String remark = r.getRemark(); + String isCheck = StringUtils.isNotBlank(r.getIs_check()) ? "1" : r.getIs_check(); + if ("空托盘入库".equals(remark)) { + iBmVehicleInfoService.update(new UpdateWrapper() + .set("h", Integer.valueOf(h)) + .set("update_time", DateUtil.now()) + .set("update_name", "ACS托盘入库申请") + .eq("vehicle_code", vehicle_code)); + MdPbVehicleMaterVo vehicleMater = item.get(0); + //拣选回库流程 + BussEventMulticaster.Publish( + new FlowStartEvent("pallet_in", + (proc_inst_id, empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("proc_inst_id", proc_inst_id) + .eq("vehicle_code", vehicle_code) + .eq("is_delete", false)) + , new JSONObject(MapOf.of("start_point", point_code1))) + .build("md_pb_vehicleMater", vehicleMater.getId(), null, null, (JSONObject) JSONObject.toJSON(vehicleMater)) + ); + } else { + String groupId = r.getGroup_id(); + MdGruopDick mst = iMdGruopDickService.getById(groupId); + if (mst == null) { + throw new BadRequestException("申请任务失败,载具没有组盘信息!"); + } + List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) + .lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code")); + if (!CollectionUtils.isEmpty(list)) { + if (!list.get(0).getVehicle_code().contains("T")) { + throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); + } + } + // SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper() + // .eq("vehicle_code", vehicle_code).select("task_code","vehicle_code") + // .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + // if (schBaseTask != null) { + // if (!schBaseTask.getVehicle_code().contains("T")) { + // throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + schBaseTask.getTask_code()); + // } + // } + iBmVehicleInfoService.update(new UpdateWrapper() + .set("h", Integer.valueOf(h)) + .set("update_time", DateUtil.now()) + .set("update_name", "ACS托盘入库申请") + .eq("vehicle_code", vehicle_code)); + + JSONObject mstJ = (JSONObject) JSONObject.toJSON(mst); + MdPbVehicleMaterVo vehicleMater = r; + mstJ.put("stor_code", vehicleMater.getStor_code()); + BussEventMulticaster.Publish( + new FlowStartEvent("md_group", + (proc_inst_id, empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("proc_inst_id", proc_inst_id) + .eq("vehicle_code", vehicle_code) + .eq("is_delete", false)) + , new JSONObject(MapOf.of("start_point", point_code1, "isCheck", isCheck))) + .build("md_group_dick", mst.getId(), mst.getSource_form_type(), mst.getSource_form_id(), mstJ) + .build("md_pb_vehicleMater", item) + ); + } + }); List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) .lt("status", StatusEnum.FORM_STATUS.code("完成"))); if (ObjectUtils.isNotEmpty(list)) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/FormActivityBehavior.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/FormActivityBehavior.java index d2590a89..3593246b 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/FormActivityBehavior.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/FormActivityBehavior.java @@ -98,7 +98,6 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior { mst_json.put("source_form_type",handler.getString("source_form_type")); StIvtIostorinv mst = mst_json.toJavaObject(StIvtIostorinv.class); handler.put("form_id",mst.getId()); - JSONArray itemArr = handler.getJSONArray("item"); if(itemArr !=null){ for (int i = 0; i < itemArr.size(); i++) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/controller/MdGruopDickController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/controller/MdGruopDickController.java index b47932ea..85a59c37 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/controller/MdGruopDickController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/controller/MdGruopDickController.java @@ -79,6 +79,19 @@ public class MdGruopDickController { return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); } + + @PostMapping("/mixingGroupDick") + @Log("托盘混料组盘") + @SaIgnore + public ResponseEntity mixingGroupDick(@RequestBody MaterGroupDto dicks) { + RedissonUtils.lock(() -> { + iMdGruopDickService.mixingGroupDick((JSONObject) JSONObject.toJSON(dicks)); + }, "托盘混料组盘", null); + return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); + } + + + @PostMapping @Log("人工组盘入库") @SaIgnore diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java index af181086..a4a4f42a 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java @@ -27,6 +27,10 @@ public interface IMdGruopDickService extends IService { Object queryAll(GroupDickQuery query, PageQuery page); void groupDick(JSONObject form); + void mixingGroupDick(JSONObject form); + + + void delete(@RequestBody String[] ids); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java index 7a927b10..c1353242 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java @@ -63,6 +63,7 @@ import java.util.stream.Collectors; @Service public class MdGruopDickServiceImpl extends ServiceImpl implements IMdGruopDickService { + @Autowired private IMdPbVehicleMaterService iMdPbVehicleMaterService; @Autowired @@ -121,6 +122,118 @@ public class MdGruopDickServiceImpl extends ServiceImpl tableData = (List) forms.remove("item"); + String vehicleCode = forms.getString("vehicle_code"); + if (CollectionUtils.isEmpty(forms)) { + throw new BadRequestException("组盘失败:入库明细数据不能为空"); + } + if (StringUtils.isBlank(vehicleCode)) { + throw new BadRequestException("组盘失败:载具" + vehicleCode + "信息不能为空!"); + } + if (!vehicleCode.contains("T")) { + throw new BadRequestException("组盘失败:载具" + vehicleCode + "不是托盘,不能进行混料组盘!"); + } + BmVehicleInfo vehicleInfo = iBmVehicleInfoService.vehileInfo(vehicleCode); + if (vehicleInfo == null) { + throw new BadRequestException("组盘失败:载具" + vehicleCode + "信息不存在请在载具信息中维护"); + } + Integer h = vehicleInfo.getH(); + RedissonUtils.lock(() -> { + //组盘前库存校验 + QueryWrapper ivtList = new QueryWrapper() + .eq("vehicle_code", vehicleInfo.getVehicle_code()); + List existList = iStIvtStructattrService.list(ivtList); + if (ObjectUtils.isNotEmpty(existList)) { + throw new BadRequestException(String.format("组盘失败:当前载具号在立库的库位中未出库:%s中,请核查库存记录!", existList.get(0).getStruct_code())); + } + if (!vehicleInfo.getVehicle_code().contains("T")) { + //组盘前符合条件库位数量校验 + QueryWrapper query = new QueryWrapper() + .eq("is_used", true) + .eq("lock_type", StatusEnum.LOCK.code("无锁")) + .eq("stor_code", forms.getString("stor_code")) + .isNull("vehicle_code"); + if (h != null) { + query.ge("h", h); + } + int structCount = iStIvtStructattrService.count(query); + if (structCount < DictConstantPool.STRUCT_COUNT) { + throw new BadRequestException("入库失败:当前仓库可用库位小于" + DictConstantPool.STRUCT_COUNT); + } + } + }, StatusEnum.STRATEGY_TYPE.code("入库") + forms.getString("stor_code"), 5); + String now = DateUtil.now(); + forms.put("create_name", SecurityUtils.getCurrentNickName()); + forms.put("create_time", now); + forms.put("status", StatusEnum.FORM_STATUS.code("生成")); + List vehicleMaters = new ArrayList<>(); + Map map = new HashMap<>(); + if (!CollectionUtils.isEmpty(forms)) { + //父级组盘 + MdGruopDick mdGruopDick = new MdGruopDick(); + String groupDick = null; + List tmpCount = iMdPbVehicleMaterService.list(new QueryWrapper() + .eq("is_delete", false) + .in("vehicle_code", forms.getString("vehicle_code"))); + if (tmpCount.size() > 0) { + groupDick = tmpCount.get(0).getGroup_id(); + mdGruopDick.setStatus(StatusEnum.FORM_STATUS.code("完成")); + mdGruopDick.setUpdate_name(SecurityUtils.getCurrentNickName()); + mdGruopDick.setUpdate_time(now); + mdGruopDick.setForm_data(forms.getJSONObject("form_data")); + } else { + MdGruopDick dick = forms.toJavaObject(MdGruopDick.class); + dick.setVehicle_code(vehicleCode); + dick.setCode(CodeUtil.getNewCode("md_group_dick")); + dick.setId(IdUtil.getStringId()); + groupDick = dick.getId(); + dick.setStatus(StatusEnum.FORM_STATUS.code("完成")); + dick.setCreate_name(SecurityUtils.getCurrentNickName()); + dick.setCreate_time(now); + dick.setForm_data(forms.getJSONObject("form_data")); + map.put(vehicleCode, dick); + } + for (int i = 0; i < tableData.size(); i++) { + Map itemMap = tableData.get(i); + JSONObject item = new JSONObject(itemMap); + //子级组盘 + MdPbVehicleMater vehicleMater = item.toJavaObject(MdPbVehicleMater.class); + vehicleMater.setGroup_id(groupDick); + vehicleMater.setVehicle_code(vehicleCode); + vehicleMater.setUnit_id("100438");//个 + vehicleMater.setStor_code(vehicleCode.toUpperCase().contains("T") ? "FStockPallet" : "FStockId"); + vehicleMater.setId(IdUtil.getStringId()); + vehicleMater.setCreate_time(now); + vehicleMater.setCreate_name(SecurityUtils.getCurrentNickName()); + vehicleMaters.add(vehicleMater); + } + } + boolean count = vehicleMaters.stream() + .filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T")) + //按载具和物料分组 + .collect(Collectors.groupingBy( + vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(), + Collectors.mapping(MdPbVehicleMater::getPcsn, Collectors.toSet()) + )) + .values().stream() + .anyMatch(pcsnSet -> pcsnSet.size() > 1); + if (count) { + throw new BadRequestException("组盘失败,原因:同一个载具存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!"); + } + //参数校验 + // List tmpCount2 = this.list(new QueryWrapper().in("vehicle_code", map.keySet()).lt("status", StatusEnum.FORM_STATUS.code("完成"))); + // if (tmpCount2.size() > 0) { + // throw new BadRequestException("组盘失败:当前载具存在未完成的组盘信息" + tmpCount2.stream().map(MdGruopDick::getVehicle_code).collect(Collectors.joining(","))); + // } + this.saveBatch(map.values()); + iMdPbVehicleMaterService.saveBatch(vehicleMaters); + } + + @Override @Transactional(rollbackFor = Exception.class) public void groupDick(JSONObject forms) { @@ -172,8 +285,11 @@ public class MdGruopDickServiceImpl extends ServiceImpl tmpCount2= this.list(new QueryWrapper().in("vehicle_code", map.keySet()).lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (tmpCount2.size()>0){ - throw new BadRequestException("组盘失败:当前载具存在未完成的组盘信息"+tmpCount2.stream().map(MdGruopDick::getVehicle_code).collect(Collectors.joining(","))); - } - int tmpCount = iBmVehicleInfoService.count(new QueryWrapper().in("vehicle_code", map.keySet())); - if (tmpCount tmpCount1 = iMdPbVehicleMaterService.list(new QueryWrapper() - .eq("is_delete",false) - .in("vehicle_code", map.keySet())); - if (tmpCount1.size()>0){ - //托盘组盘校验 - List collect = tmpCount1.stream().filter(mdPbVehicleMater -> mdPbVehicleMater.getNeed_pick()&&mdPbVehicleMater.getVehicle_code().contains("T")).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(collect)) { - String vehicles = collect.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(",")); - throw new BadRequestException("载具" + vehicles + "为拣选回库无需组盘"); + //混托不校验 + if (!vehicle0.contains("T")) { + List tmpCount2 = this.list(new QueryWrapper().in("vehicle_code", map.keySet()).lt("status", StatusEnum.FORM_STATUS.code("完成"))); + if (tmpCount2.size() > 0) { + throw new BadRequestException("组盘失败:当前载具存在未完成的组盘信息" + tmpCount2.stream().map(MdGruopDick::getVehicle_code).collect(Collectors.joining(","))); + } + } else { + //参数校验 + int tmpCount = iBmVehicleInfoService.count(new QueryWrapper().in("vehicle_code", map.keySet())); + if (tmpCount < map.size()) { + throw new BadRequestException("组盘失败:载具编号不存在"); + } + List checkMaterList = new ArrayList<>(vehicleMaters); + List vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper() + .eq("is_delete", false) + .eq("vehicle_code", vehicle0)); + if (ObjectUtils.isNotEmpty(vehicleMaterList)) { + checkMaterList.addAll(vehicleMaterList); + } + boolean count = checkMaterList.stream() + .filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T")) + //按载具和物料分组 + .collect(Collectors.groupingBy( + vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(), + Collectors.mapping(MdPbVehicleMater::getPcsn, Collectors.toSet()) + )) + .values().stream() + .anyMatch(pcsnSet -> pcsnSet.size() > 1); + if (count) { + throw new BadRequestException("组盘失败!原因:该托盘存在物料编码相同但批次不同的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!"); } - throw new BadRequestException("组盘失败:载具已经存在组盘信息" + tmpCount1.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(","))); } + // List tmpCount1 = iMdPbVehicleMaterService.list(new QueryWrapper() + // .eq("is_delete",false) + // .in("vehicle_code", map.keySet())); + // if (tmpCount1.size()>0){ + // //托盘组盘校验 + // List collect = tmpCount1.stream().filter(mdPbVehicleMater -> mdPbVehicleMater.getNeed_pick()&&mdPbVehicleMater.getVehicle_code().contains("T")).collect(Collectors.toList()); + // if (!CollectionUtils.isEmpty(collect)) { + // String vehicles = collect.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(",")); + // throw new BadRequestException("载具" + vehicles + "为拣选回库无需组盘"); + // } + // throw new BadRequestException("组盘失败:载具已经存在组盘信息" + tmpCount1.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(","))); + // } this.saveBatch(map.values()); iMdPbVehicleMaterService.saveBatch(vehicleMaters); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/dto/MaterGroupDto.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/dto/MaterGroupDto.java index f74c83ca..1b96fd43 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/dto/MaterGroupDto.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/dto/MaterGroupDto.java @@ -11,7 +11,10 @@ import java.util.List; @Data public class MaterGroupDto { - + /** + * 载具编号 + */ + private String vehicle_code; /** * 仓库编码 */ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java index 3a8ed82c..8cd57ac6 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java @@ -45,7 +45,7 @@ public class PdaInController { public ResponseEntity confirm(@RequestBody PdaFormInMst pdaFormInMst) { RedissonUtils.lock(() -> { pdaInIOService.pdaInIostorUseCode(pdaFormInMst); - }, pdaFormInMst.getBillNo(), null); + }, "合格证入库", null); return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java index b593c31e..4423c1b2 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java @@ -40,6 +40,40 @@ public class PdaInIOService { * 回传代码 */ public void pdaInIostorUseCode(PdaFormInMst mst) { +// if (CollectionUtils.isEmpty(mstList)) { +// throw new BadRequestException("组盘信息为空,请检查!"); +// } +// if (mstList.get(0).getVehicle_code().contains("T")) { +// boolean count = mstList.stream() +// .filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T")) +// .collect(Collectors.groupingBy( +// vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(), +// Collectors.mapping(PdaFormInMst::getPcsn, Collectors.toSet()) +// )) +// .values().stream() +// .anyMatch(pcsnSet -> pcsnSet.size() > 1); +// if (count) { +// throw new BadRequestException("组盘失败,原因:同一个载具存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!"); +// } +// } else { +// if (mstList.size() > 1) { +// throw new BadRequestException("组盘失败,原因:料箱组盘只能放入一种物料!"); +// } +// } +// mstList.forEach(mst -> { + if (mst.getVehicle_code().contains("T")) { +// boolean count = mstList.stream() +// .filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T")) +// .collect(Collectors.groupingBy( +// vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(), +// Collectors.mapping(PdaFormInMst::getPcsn, Collectors.toSet()) +// )) +// .values().stream() +// .anyMatch(pcsnSet -> pcsnSet.size() > 1); +// if (count) { +// throw new BadRequestException("组盘失败,原因:同一个载具存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!"); +// } + } String materialId = mst.getMaterial_id(); String vehicleCode = mst.getVehicle_code(); String unitId = mst.getUnit_id(); @@ -79,7 +113,7 @@ public class PdaInIOService { throw new BadRequestException("入库失败,物料单位ID在系统中不存在"); } BmVehicleInfo vehicleInfo = iBmVehicleInfoService.vehileInfo(vehicleCode); - if (vehicleInfo==null){ + if (vehicleInfo == null) { throw new BadRequestException("入库失败,载具编码在基础信息中不存在"); } groupDto.setSource_form_type(mst.getForm_type()); @@ -102,6 +136,7 @@ public class PdaInIOService { materItem.setForm_data(groupItemData); groupDto.setItem(ListOf.of(materItem)); iMdGruopDickService.groupDick((JSONObject) JSONObject.toJSON(groupDto)); +// }); }