From 39bc59067f0dd8c6f57aca2c61b65d33fde80192 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 25 Feb 2025 22:28:34 +0800 Subject: [PATCH] =?UTF-8?q?add:=E4=BA=8C=E6=A5=BC=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/common/TableDataInfo.java | 1 + .../java/org/nl/common/enums/StatusEnum.java | 36 ++- .../StIvtBsrealstorattrController.java | 4 +- .../impl/BmVehicleInfoServiceImpl.java | 2 +- .../impl/base/SameBlockNumRuleHandler.java | 4 + .../controller/SchBasePointController.java | 39 +++ .../point/service/ISchBasePointService.java | 24 ++ .../service/impl/SchBasePointServiceImpl.java | 123 +++++++++ .../handler/impl/GroupDickInStorageTask.java | 2 +- .../task/handler/impl/InStorageTask.java | 2 +- .../task/handler/impl/MoveStorageTask.java | 4 +- .../task/handler/impl/OutStorageTask.java | 2 +- .../handler/impl/PalletInStorageTask.java | 2 +- .../handler/impl/PalletOutStorageTask.java | 2 +- .../task/handler/impl/PickStorageTask.java | 2 +- .../impl/SecondFloorAgvTransferTask.java | 120 +++++++++ .../impl/SecondFloorEmptyShelfTask.java | 107 ++++++++ .../impl/SecondFloorInStorageTask.java | 83 +++--- .../impl/SecondFloorOutStorageTask.java | 247 ++++++++++++++++++ .../task/handler/impl/ToPickPlatformTask.java | 2 +- .../task/service/ISchBaseTaskService.java | 8 +- .../task/service/dao/SchBaseTask.java | 6 +- .../service/dao/mapper/SchBaseTaskMapper.java | 7 +- .../dao/mapper/xml/SchBaseTaskMapper.xml | 27 +- .../service/impl/SchBaseTaskServiceImpl.java | 34 ++- .../wms/external_system/GateWayService.java | 1 + .../acs/service/WmsToAcsService.java | 11 +- .../classprocessimpl/CtuProcessHandler.java | 53 ++++ .../StorageChangesProcessHandler.java | 4 +- .../service/dao/MdPbVehicleMater.java | 4 + .../impl/MdPbVehicleMaterServiceImpl.java | 11 + .../iostorage/IOStorageController.java | 8 +- .../iostorage/PdaOutController.java | 78 +++++- .../iostorage/server/dto/PdaFormOutMst.java | 11 +- .../iostorage/sevice/PdaIOService.java | 184 ++++++++++++- .../PalletStIvtIostorinvController.java | 64 +++-- .../form_data/service/IPmFormDataService.java | 2 + .../service/dao/mapper/PmFormDataMapper.java | 2 + .../dao/mapper/xml/PmFormDataMapper.xml | 23 +- .../form_data/service/dto/FormDataQuery.java | 2 + .../form_data/service/dto/PmFormDataDto.java | 15 +- .../service/impl/PmFormDataServiceImpl.java | 35 ++- .../service/IStIvtStructattrService.java | 7 +- .../dao/mapper/StIvtStructattrMapper.java | 2 + .../dao/mapper/xml/StIvtStructattrMapper.xml | 22 +- .../impl/StIvtStructattrServiceImpl.java | 63 +++-- .../task/ApplyShelfScheduleService.java | 119 +++++++++ .../quartz/task/TaskScheduleService.java | 70 +++-- .../views/wms/dispatch_manage/point/index.vue | 9 +- .../wms/flow_manage/act/execution/index.vue | 24 +- .../stor_manage/warehouse/pick/ViewDialog.vue | 4 +- .../wms/stor_manage/warehouse/pick/index.vue | 31 ++- 52 files changed, 1557 insertions(+), 192 deletions(-) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorAgvTransferTask.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/CtuProcessHandler.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/ApplyShelfScheduleService.java diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/TableDataInfo.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/TableDataInfo.java index 0be69ec5..36a76105 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/TableDataInfo.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/TableDataInfo.java @@ -68,6 +68,7 @@ public class TableDataInfo implements Serializable { return rspData; } + public static TableDataInfo buildByDivForm(IPage page,String json_field) { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(String.valueOf(HttpStatus.HTTP_OK)); 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 80121a43..869044a4 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 @@ -17,22 +17,22 @@ public enum StatusEnum { /** * 流程相关 */ - MODEL_STATUS(ForkMap.of("发布", "10",null, "未发布", "30",null)), - FLOW_STATUS(ForkMap.of("启动", "10",null, "节点完成", "20",null,"暂停", "30",null,"完成", "80",null,"异常完成", "82",null)), + MODEL_STATUS(ForkMap.of("发布", "10", null, "未发布", "30", null)), + FLOW_STATUS(ForkMap.of("启动", "10", null, "节点完成", "20", null, "暂停", "30", null, "完成", "80", null, "异常完成", "82", null)), /** * 单据状态 */ - 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, "完成", "80", null, "强制完成", "82", null, "取消", "90", null)), /** * 出入库单据类型 */ - IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask","盘点入库", "14","inStorageTask","托盘入库", "30","inStorageTask","二楼CTU入库", "80","inStorageTask")), - IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask","拣选出库", "23","conveyorOutStorageTask","盘点出库", "24","outStorageTask","出库拣选", "25","toPickPlatformTask","托盘出库", "40","outStorageTask","二楼CTU出库", "81","inStorageTask")), - IOBILL_TYPE_MOVE(ForkMap.of("移库", "50","moveStorageTask","异常位移库", "51","moveStorageTask")), - EXT_TASK_TYPE(ForkMap.of("盘点", "60","moveStorageTask")), - OTHER_TASK_TYPE(ForkMap.of("转运", "70","tranforTask")), - profit_loss(ForkMap.of("盘亏", "0",null,"盘盈", "1",null,"实盘", "2",null)), + IOBILL_TYPE_IN(ForkMap.of("生产入库", "10", "inStorageTask", "调拨入库", "11", "inStorageTask", "退货入库", "12", "inStorageTask", "拣选回库", "13", "inStorageTask", "盘点入库", "14", "inStorageTask", "托盘入库", "30", "inStorageTask", "二楼CTU入库", "80", "inStorageTask")), + IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20", "outStorageTask", "生产出库", "21", "outStorageTask", "调拨出库", "22", "outStorageTask", "拣选出库", "23", "conveyorOutStorageTask", "盘点出库", "24", "outStorageTask", "出库拣选", "25", "toPickPlatformTask", "托盘出库", "40", "outStorageTask", "二楼CTU出库", "81", "inStorageTask", "二楼出库AGV搬运", "82", "inStorageTask", "二楼空架AGV搬运", "83", "inStorageTask")), + IOBILL_TYPE_MOVE(ForkMap.of("移库", "50", "moveStorageTask", "异常位移库", "51", "moveStorageTask")), + EXT_TASK_TYPE(ForkMap.of("盘点", "60", "moveStorageTask")), + OTHER_TASK_TYPE(ForkMap.of("转运", "70", "tranforTask")), + profit_loss(ForkMap.of("盘亏", "0", null, "盘盈", "1", null, "实盘", "2", null)), /** * ERP回传单据类型 @@ -51,7 +51,7 @@ public enum StatusEnum { TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code, IOBILL_TYPE_OUT.code, IOBILL_TYPE_MOVE.code, EXT_TASK_TYPE.code, OTHER_TASK_TYPE.code)), ACS_TYPE(ForkMap.of( - "立库", "1", null, "AGV", "2", null, "CTU任务", "3", null + "立库", "1", null, "AGV任务", "2", null, "CTU任务", "3", null )), ACS_SYSTEM_TYPE(ForkMap.of( "NDC", "1", null, "海柔CTU", "5", null, "海康CTU", "6", null @@ -63,9 +63,21 @@ public enum StatusEnum { LOCK(ForkMap.of("无锁", "00", null, "入库锁", "10", null, "入库盘点锁", "16", null, "出库锁", "20", null, "盘点出库锁", "26", null, "移库锁", "50", null, "异常锁定", "60", null)), STRATEGY_TYPE(ForkMap.of("入库", "1", null, "出库", "2", null, "出入库", "3", null)), - PRODUCT_AREA(ForkMap.of("一层车间", "A1", null, "二层车间", "A2", null, "三层车间", "A3", null)), - ; + PRODUCT_AREA(ForkMap.of("一层车间", "A1", null, "二层车间", "A2", null, "三层车间", "A3", null)), + + + REGION_INFO(ForkMap.of("主存区拣选平台", "PICK01", null, "一楼出入库输送线", "IOConveyor", null, "二楼出入库输送线", "IOConveyor2", null, "拣选台秤重区", "WEIGH01", null, + "二楼CTU货架对接位", "CTU_POSITION", null, "二楼AGV产线对接位", "AGV_POSITION", null)), + + + STOCK_INFO(ForkMap.of("托盘库", "FStockPallet", null, "料箱库", "FStockId", null, "虚拟库", "FicStockId", null, "二楼ctu缓存库", "CStockId", null, + "二楼货架缓存库", "HStockId", null)), + + + SORT_TYPE(ForkMap.of( + "升序", "1", null, "降序", "2", null + )); /** * L:label * M:编码 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java index 9b1a256d..78a8b315 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java @@ -96,7 +96,7 @@ public class StIvtBsrealstorattrController { String pre = config.getString("pre"); String now = DateUtil.now(); ArrayList list = new ArrayList<>(); - for (int x = 6; x <= 排; x++) { + for (int x = 12; x <= 排; x++) { for (int y = 1; y <= 列; y++) { for (int z = 1; z <= 层; z++) { StIvtStructattr attr = new StIvtStructattr(); @@ -111,7 +111,7 @@ public class StIvtBsrealstorattrController { attr.setCreate_id("1"); attr.setRow_num(x); attr.setCol_num(y); - attr.setBlock_num(3); + attr.setBlock_num(12); attr.setLayer_num(z); attr.setCreate_time(now); attr.setCreate_name("Admin"); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/impl/BmVehicleInfoServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/impl/BmVehicleInfoServiceImpl.java index ca3e3a27..27d7f276 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/impl/BmVehicleInfoServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/impl/BmVehicleInfoServiceImpl.java @@ -148,7 +148,6 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl query(SchBasePointQuery whereJson, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(pointService.page(page.build(SchBasePoint.class), whereJson.build())), HttpStatus.OK); @@ -73,5 +80,37 @@ public class SchBasePointController { public ResponseEntity getRegion() { return new ResponseEntity<>(regionService.list(), HttpStatus.OK); } + + @PostMapping("/getPointStatus") + @Log("获取点位状态") + @SaIgnore + public ResponseEntity getPointStatus(@RequestBody JSONObject param) { + if (param == null || StringUtils.isEmpty(param.getString("site_code"))) { + throw new BadRequestException("请求参数不能为空"); + } + List pointList = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getCode, param.getString("site_code")).eq(SchBasePoint::getIs_used, true)); + if (ObjectUtils.isEmpty(pointList)) { + throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); + } + SchBasePoint point = pointList.get(0); + point.setRemark("00".equals(point.getLock_type()) ? "未绑定货架" : "已绑定货架"); + return new ResponseEntity<>(point, HttpStatus.OK); + } + + + /** + * 二楼货架与地面站点绑定或解绑 + */ + @PostMapping("bindOrUnbind") + @Log("二楼货架与地面站点绑定或解绑") + @SaIgnore + public ResponseEntity bindOrUnbind(@RequestBody JSONObject param) { + if (param == null || StringUtils.isEmpty(param.getString("site_code")) || StringUtils.isEmpty(param.getString("shelf_code")) || StringUtils.isEmpty(param.getString("mode"))) { + throw new BadRequestException("请求参数不能为空"); + } + pointService.bindOrUnbind(param.getString("site_code"),param.getString("shelf_code"), param.getString("mode")); + return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); + } + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java index 4d05ba9a..35be6b24 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java @@ -1,8 +1,11 @@ package org.nl.wms.dispatch_manage.point.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; +import java.util.List; + /** *

* 点位基础表 服务类 @@ -13,4 +16,25 @@ import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; */ public interface ISchBasePointService extends IService { + /** + * 二楼货架与地面站点绑定或解绑 + * @param siteCode 点位 + * @param shelfCode 货架编号 + * @param mode 0解绑1绑定 + */ + void bindOrUnbind(String siteCode,String shelfCode,String mode); + + + /** + * 查询没有搬运任务的空的目标点位 + * + * @param regionCode 点位类型 + * @param getLockType 锁定状态 + * @param sortType 点位排序规则1:升序2:降序 + @param pointType 0空载具1满载具 + * @return List + */ + List checkEndPointTask(String regionCode, String getLockType,String sortType,String pointType); + + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java index 457a8f43..d11a06ed 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java @@ -1,11 +1,31 @@ package org.nl.wms.dispatch_manage.point.service.impl; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.SecurityUtils; import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; import org.nl.wms.dispatch_manage.point.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; +import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; +import org.nl.wms.external_system.acs.service.WmsToAcsService; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + /** *

* 点位基础表 服务实现类 @@ -16,5 +36,108 @@ import org.springframework.stereotype.Service; */ @Service public class SchBasePointServiceImpl extends ServiceImpl implements ISchBasePointService { + @Autowired + private WmsToAcsService wmsToAcsService; + @Autowired + private ISchBaseTaskService iSchBaseTaskService; + + @Autowired + private IStIvtStructattrService iStIvtStructattrService; + + + /** + * 二楼货架与地面站点绑定或解绑 + * + * @param siteCode 点位 + * @param shelfCode 货架编号 + * @param mode 0解绑1绑定 + */ + @Override + public void bindOrUnbind(String siteCode, String shelfCode, String mode) { + List pointList = this.list(new LambdaQueryWrapper().eq(SchBasePoint::getCode, siteCode).eq(SchBasePoint::getIs_used, true)); + if (ObjectUtils.isEmpty(pointList)) { + throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); + } + //检查是否为空架 + List stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper() + .eq(StIvtStructattr::getIs_used, true) + .eq(StIvtStructattr::getSect_code, shelfCode)); + List notEmptyList = stIvtStructattrList.stream().filter(r -> StringUtils.isNotBlank(r.getVehicle_code())).collect(Collectors.toList()); + if (ObjectUtils.isNotEmpty(notEmptyList)) { + throw new BadRequestException("该货架的货位:" + notEmptyList.get(0).getStruct_code() + ",存在未出库的料箱:" + notEmptyList.get(0).getVehicle_code() + ",请检查!"); + } + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() + .eq(SchBasePoint::getCode, siteCode); + if ("1".equals(mode)) { + if (StringUtils.isNotBlank(pointList.get(0).getVehicle_code())) { + throw new BadRequestException("当前站点已绑定货架,货架编号:" + pointList.get(0).getVehicle_code() + ",请检查或解绑!"); + } + wrapper.set(SchBasePoint::getVehicle_code, shelfCode) + .set(SchBasePoint::getPoint_type, 0) + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")); + } else if ("0".equals(mode)) { + wrapper.set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")); + } + wrapper.set(SchBasePoint::getUpdate_time, DateUtil.now()) + .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()); + this.update(wrapper); + //绑定状态同步至ACS + wmsToAcsService.bindPodAndBerth(siteCode, shelfCode, mode, "bindPodAndBerth"); + } + + /** + * 查询没有搬运任务的空的目标点位 + * + * @param regionCode 点位类型 + * @param getLockType 锁定状态 + * @param sortType 点位排序规则1:升序2:降序 + * @param pointType 0空载具1满载具 + * @return List + */ + @Override + public List checkEndPointTask(String regionCode, String getLockType, String sortType, String + pointType) { + Set pointSets; + List taskList; + List returList = new ArrayList<>(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(SchBasePoint::getIs_used, true) + .eq(SchBasePoint::getRegion_code, regionCode); + if (StringUtils.isNotEmpty(getLockType)) { + queryWrapper.eq(SchBasePoint::getLock_type, getLockType); + } + if (StringUtils.isNotEmpty(pointType)) { + queryWrapper.eq(SchBasePoint::getPoint_type, pointType); + } + if (StatusEnum.SORT_TYPE.code("升序").equals(sortType)) { + queryWrapper.orderByAsc(SchBasePoint::getCode); + } else if (StatusEnum.SORT_TYPE.code("降序").equals(sortType)) { + queryWrapper.orderByDesc(SchBasePoint::getCode); + } else { + queryWrapper.orderByAsc(SchBasePoint::getCode); + } + List ivtList = this.list(queryWrapper); + Set pointIds = ivtList.stream() + .map(SchBasePoint::getCode) + .collect(Collectors.toSet()); + if (ObjectUtils.isEmpty(pointIds)) { + return returList; + } + //点位任务 + taskList = iSchBaseTaskService.getTaskList(pointIds, pointIds, null, null); + pointSets = taskList.stream() + .flatMap(task -> Stream.of( + task.getPoint_code1(), + task.getPoint_code2() + )) + .filter(point -> point != null && !point.trim().isEmpty()) + .collect(Collectors.toSet()); + //符合条件的库存点位过滤掉已存在任务的点位 + return ivtList.stream() + .filter(p -> !pointSets.contains(p.getCode()) && p.getLock_type().equals(getLockType)) + .collect(Collectors.toList()); + } + } 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 99aafa2e..66e749e9 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 @@ -120,7 +120,7 @@ public class GroupDickInStorageTask extends AbstractTask { this.updateTask(data); SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); //跟新库存 - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2()); } 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 469768a0..6e04eceb 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 @@ -84,7 +84,7 @@ public class InStorageTask extends AbstractTask { this.updateTask(data); SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); //跟新库存 - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2()); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java index 3b4c0ee1..049928f4 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java @@ -105,8 +105,8 @@ public class MoveStorageTask extends AbstractTask { data.put("status",StatusEnum.FORM_STATUS.code("完成")); this.updateTask(data); SchBaseTask schBaseTask = taskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE); - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2()); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2()); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java index 1f8ea355..13e04228 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java @@ -184,7 +184,7 @@ public class OutStorageTask extends AbstractTask { data.put("status",StatusEnum.FORM_STATUS.code("完成")); this.updateTask(data); SchBaseTask schBaseTask = taskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2()); } @Override 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 c865e1a9..149a2623 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 @@ -146,7 +146,7 @@ public class PalletInStorageTask extends AbstractTask { this.updateTask(data); SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); //跟新库存 - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2()); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletOutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletOutStorageTask.java index 79ac389d..0ea6ebe8 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletOutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletOutStorageTask.java @@ -117,7 +117,7 @@ public class PalletOutStorageTask extends AbstractTask { data.put("status",StatusEnum.FORM_STATUS.code("完成")); this.updateTask(data); SchBaseTask schBaseTask = taskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2()); } @Override diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java index ce3da499..723ddd9e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java @@ -94,7 +94,7 @@ public class PickStorageTask extends AbstractTask { this.updateTask(data); SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); //跟新库存 - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2()); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorAgvTransferTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorAgvTransferTask.java new file mode 100644 index 00000000..02bae279 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorAgvTransferTask.java @@ -0,0 +1,120 @@ +package org.nl.wms.dispatch_manage.task.handler.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; +import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; +import org.nl.wms.dispatch_manage.task.handler.AbstractTask; +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.record.service.IStIvtStructivtflowService; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author gbx + * @Date 2025/2/17 13:30 + * 二楼出库AGV搬运 + */ +@Service("secondFloorAgvTransfer") +@Slf4j +public class SecondFloorAgvTransferTask extends AbstractTask { + + @Autowired + private IStIvtStructivtflowService structIvtFlowService; + @Autowired + private IStIvtStructattrService iStIvtStructattrService; + @Autowired + private IMdPbVehicleMaterService iMdPbVehicleMaterService; + @Autowired + private ISchBasePointService iSchBasePointService; + @Autowired + private ISchBaseTaskService iSchBaseTaskService; + + @Override + public JSONObject createTask(JSONObject from) { + SchBaseTask task = new SchBaseTask(); + task.setId(IdUtil.getStringId()); + task.setSource_form_id(from.getString("id")); + task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间")); + 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("AGV任务")); + task.setCreate_time(DateUtil.now()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼出库AGV搬运")); + task.setVehicle_code(from.getString("vehicleCode")); + task.setPoint_code1(from.getString("pointCode1")); + task.setPoint_code2(from.getString("pointCode2")); + task.setPoint_code3(from.getString("pointCode3")); + task.setGroup_code(from.getString("group_code")); + iSchBaseTaskService.create(task); + //更新任务号 + iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() + .set(MdPbVehicleMater::getTask_code, task.getTask_code()) + .set(MdPbVehicleMater::getRemark,"该料箱正在出库到产线站点"+from.getString("pointCode2")+"-"+from.getString("pointCode3")) + .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code()) + .eq(MdPbVehicleMater::getIs_delete, false)); + return (JSONObject) JSON.toJSON(task); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void finish(JSONObject data) { + data.put("status", StatusEnum.FORM_STATUS.code("完成")); + this.updateTask(data); + SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); + //起点位解锁 + iSchBasePointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getUpdate_time, DateUtil.now()) + .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(SchBasePoint::getCode, schBaseTask.getPoint_code1())); + //终点点位绑定货架,Point_type为满架 + iSchBasePointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getPoint_type, "1") + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("出库锁")) + .set(SchBasePoint::getVehicle_code, schBaseTask.getPoint_code3()) + .set(SchBasePoint::getUpdate_time, DateUtil.now()) + .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(SchBasePoint::getCode, schBaseTask.getPoint_code2())); + } + + @Override + public void updateStatus(JSONObject data) { + this.updateTask(data); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancel(JSONObject data) { + try { + SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); + iSchBaseTaskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getTask_step, "1") + .eq(SchBaseTask::getTask_type, StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库")) + .in(SchBaseTask::getGroup_code, schBaseTask.getGroup_code())); + this.updateTask(data); + } catch (Exception e) { + throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage()); + } + } + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java new file mode 100644 index 00000000..c429b646 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java @@ -0,0 +1,107 @@ +package org.nl.wms.dispatch_manage.task.handler.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; +import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; +import org.nl.wms.dispatch_manage.task.handler.AbstractTask; +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.record.service.IStIvtStructivtflowService; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author gbx + * @Date 2025/2/17 13:30 + * 二楼空架AGV搬运任务 + */ +@Service("secondFloorEmptyShelves") +@Slf4j +public class SecondFloorEmptyShelfTask extends AbstractTask { + + @Autowired + private IStIvtStructivtflowService structIvtFlowService; + @Autowired + private IStIvtStructattrService iStIvtStructattrService; + @Autowired + private IMdPbVehicleMaterService iMdPbVehicleMaterService; + @Autowired + private ISchBasePointService iSchBasePointService; + @Autowired + private ISchBaseTaskService iSchBaseTaskService; + + @Override + public JSONObject createTask(JSONObject from) { + SchBaseTask task = new SchBaseTask(); + task.setId(IdUtil.getStringId()); + task.setSource_form_id(from.getString("id")); + task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间")); + 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("AGV任务")); + task.setCreate_time(DateUtil.now()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼空架AGV搬运")); + task.setVehicle_code(from.getString("vehicleCode")); + task.setPoint_code1(from.getString("pointCode1")); + task.setPoint_code2(from.getString("pointCode2")); + task.setGroup_code(from.getString("group_code")); + iSchBaseTaskService.create(task); + //更新任务号 + iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() + .set(MdPbVehicleMater::getTask_code, task.getTask_code()) + .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code()) + .eq(MdPbVehicleMater::getIs_delete, false)); + return (JSONObject) JSON.toJSON(task); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void finish(JSONObject data) { + data.put("status", StatusEnum.FORM_STATUS.code("完成")); + this.updateTask(data); + SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); + //起点解锁 + iSchBasePointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getUpdate_time, DateUtil.now()) + .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(SchBasePoint::getCode, schBaseTask.getPoint_code1())); + //货架绑定 + iSchBasePointService.bindOrUnbind(schBaseTask.getPoint_code2(), schBaseTask.getVehicle_code(), "1"); + + } + + @Override + public void updateStatus(JSONObject data) { + this.updateTask(data); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancel(JSONObject data) { + try { + this.updateTask(data); + } catch (Exception e) { + throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage()); + } + } + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorInStorageTask.java index 4bb73c69..fed04274 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorInStorageTask.java @@ -55,46 +55,32 @@ public class SecondFloorInStorageTask extends AbstractTask { @Autowired private IBmVehicleInfoService iBmVehicleInfoService; @Autowired - private IMdPbVehicleMaterService vehicleMaterService; - @Autowired - private IStIvtStructivtflowService structivtflowService; + private IStIvtStructivtflowService structIvtFlowService; @Override - //@Transactional public JSONObject createTask(JSONObject from) { SchBaseTask task = new SchBaseTask(); - for (String vehicle_code : from.keySet()) { - String start_point = from.getString(vehicle_code); - if (StringUtils.isEmpty(start_point)) { + for (String vehicleCode : from.keySet()) { + String startPoint = from.getString(vehicleCode); + if (StringUtils.isEmpty(startPoint)) { throw new BadRequestException("申请任务失败:任务起点不能为空!"); } - BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper() - .eq("vehicle_code", vehicle_code)); - if (vehicleInfo == null) { - throw new BadRequestException("申请任务失败:载具" + vehicle_code + "信息不存在"); - } - List item = iMdPbVehicleMaterService.list(new LambdaQueryWrapper().eq(MdPbVehicleMater::getVehicle_code, vehicle_code)); - if (CollectionUtils.isEmpty(item)) { - throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在"); - } - String struct_code = getStructCode(vehicle_code); - 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(","))); - } + task.setVehicle_type(checkVehicleInfo(vehicleCode)); + String endPoint = getEndPoint(vehicleCode); task.setId(IdUtil.getStringId()); task.setSource_form_id(from.getString("id")); + task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间")); 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("CTU任务")); + task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("海康CTU")); task.setCreate_time(DateUtil.now()); task.setCreate_name(SecurityUtils.getCurrentNickName()); task.setTask_type(StatusEnum.IOBILL_TYPE_IN.code("二楼CTU入库")); - task.setVehicle_code(vehicle_code); - task.setPoint_code1(start_point); - task.setPoint_code2(struct_code); + task.setVehicle_code(vehicleCode); + task.setPoint_code1(startPoint); + task.setPoint_code2(endPoint); iSchBaseTaskService.create(task); iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() .set(MdPbVehicleMater::getTask_code, task.getTask_code()) @@ -104,12 +90,35 @@ public class SecondFloorInStorageTask extends AbstractTask { return (JSONObject) JSON.toJSON(task); } - // @Transactional(propagation= Propagation.REQUIRES_NEW) - public String getStructCode(String vehicle_code) { + /** + * 载具信息校验 + */ + protected String checkVehicleInfo(String vehicleCode) { + BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper() + .eq("vehicle_code", vehicleCode)); + if (vehicleInfo == null) { + throw new BadRequestException("申请任务失败:载具" + vehicleCode + "信息不存在"); + } + if (vehicleInfo.getH() == null) { + throw new BadRequestException("申请任务失败:载具" + vehicleCode + "高度等级信息不能为空"); + } + List item = iMdPbVehicleMaterService.list(new LambdaQueryWrapper().eq(MdPbVehicleMater::getVehicle_code, vehicleCode)); + if (CollectionUtils.isEmpty(item)) { + throw new BadRequestException("申请任务失败:载具" + vehicleCode + "载具物料信息信息不存在"); + } + List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicleCode) + .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + if (!CollectionUtils.isEmpty(list)) { + throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); + } + return vehicleInfo.getH().toString(); + } + + public String getEndPoint(String vehicle_code) { QueryWrapper query = new QueryWrapper() .eq("is_used", true) .eq("lock_type", StatusEnum.LOCK.code("无锁")) - .eq("stor_code", "CStockId"); + .eq("stor_code", StatusEnum.STOCK_INFO.code("二楼ctu缓存库")); query.isNull("vehicle_code"); List list = iStIvtStructattrService.list(query); List structList = sameBlockNumRuleHandler.handler(list, null); @@ -138,7 +147,7 @@ public class SecondFloorInStorageTask extends AbstractTask { @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public void finish(JSONObject data) { data.put("status", StatusEnum.FORM_STATUS.code("完成")); this.updateTask(data); @@ -152,7 +161,7 @@ public class SecondFloorInStorageTask extends AbstractTask { .eq("struct_code", schBaseTask.getPoint_code2()); iStIvtStructattrService.update(wrapper); //更新出入库记录 - List vehicleMaterList = vehicleMaterService.list(new QueryWrapper() + List vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper() .eq("vehicle_code", schBaseTask.getVehicle_code()) .eq("is_delete", false)); if (ObjectUtil.isEmpty(vehicleMaterList)) { @@ -177,7 +186,7 @@ public class SecondFloorInStorageTask extends AbstractTask { record.setStor_code(attr.getStor_code()); record.setVehicle_form_data(vehicleMater.getForm_data()); record.setGrowth(true); - structivtflowService.save(record); + structIvtFlowService.save(record); } @Override @@ -186,7 +195,17 @@ public class SecondFloorInStorageTask extends AbstractTask { } @Override + @Transactional(rollbackFor = Exception.class) public void cancel(JSONObject data) { - this.updateTask(data); + try { + SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); + iStIvtStructattrService.update(new LambdaUpdateWrapper() + .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁")) + .set(StIvtStructattr::getVehicle_code, null) + .eq(StIvtStructattr::getStruct_code, schBaseTask.getPoint_code2())); + this.updateTask(data); + } catch (Exception e) { + throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage()); + } } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java new file mode 100644 index 00000000..b346aa06 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java @@ -0,0 +1,247 @@ +package org.nl.wms.dispatch_manage.task.handler.impl; + +import cn.hutool.core.date.DateUtil; +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 com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; +import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; +import org.nl.wms.dispatch_manage.task.handler.AbstractTask; +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.record.service.IStIvtStructivtflowService; +import org.nl.wms.stor_manage.record.service.dao.StIvtStructivtflow; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * @author gbx + * @Date 2025/2/12 13:30 + * 二楼出库任务 + */ +@Service("secondFloorOutStorage") +@Slf4j +public class SecondFloorOutStorageTask extends AbstractTask { + + @Autowired + private IStIvtStructivtflowService structIvtFlowService; + @Autowired + private IStIvtStructattrService iStIvtStructattrService; + @Autowired + private IMdPbVehicleMaterService iMdPbVehicleMaterService; + @Autowired + private ISchBasePointService iSchBasePointService; + @Autowired + private ISchBaseTaskService iSchBaseTaskService; + + @Autowired + private SecondFloorInStorageTask secondFloorInStorageTask; + + @Override + public JSONObject createTask(JSONObject from) { + SchBaseTask task = new SchBaseTask(); + task.setId(IdUtil.getStringId()); + task.setSource_form_id(from.getString("id")); + task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间")); + 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("CTU任务")); + task.setCreate_time(DateUtil.now()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("海康CTU")); + task.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库")); + task.setVehicle_code(from.getString("vehicleCode")); + task.setPoint_code1(from.getString("pointCode1")); + task.setPoint_code2(from.getString("pointCode2")); + task.setPoint_code3(from.getString("pointCode3")); + task.setPoint_code4(from.getString("pointCode4")); + task.setGroup_code(from.getString("groupCode")); + task.setVehicle_type(from.getString("vehicle_type")); + task.setSource_form_id(from.getString("source_form_id")); + iSchBaseTaskService.create(task); + //更新任务号 + iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() + .set(MdPbVehicleMater::getTask_code, task.getTask_code()) + .set(MdPbVehicleMater::getRemark,"该料箱正在出库到站点"+from.getString("pointCode2")+"-"+from.getString("pointCode3")) + .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code()) + .eq(MdPbVehicleMater::getIs_delete, false)); + return (JSONObject) JSON.toJSON(task); + } + + /** + * @param billCode 单据编号 + * @param siteCode 产线站点编号 + * @param pointCode2 CTU站点编号 + * @param vehicleCode 载具编号 + * @param sourceFormId 载具物料ID + * @param inStructCode 货架仓位 + */ + @Transactional(rollbackFor = Exception.class) + public JSONObject handleBills(String billCode, String siteCode, String pointCode2, String vehicleCode, String sourceFormId, String inStructCode) throws BadRequestException { + try { + // 创建任务 + JSONObject taskJsonObject = new JSONObject(); + //校验载具信息 + taskJsonObject.put("vehicle_type", secondFloorInStorageTask.checkVehicleInfo(vehicleCode)); + // 分配料架起点 + List starIvtList = iStIvtStructattrService.getStructFromBillCode(Arrays.asList(billCode.split(",")), vehicleCode); + if (ObjectUtils.isEmpty(starIvtList)) { + log.error("CTU出库任务,该单据载具:{}的物料在CTU库查找不到仓位信息,请检查", vehicleCode); + throw new BadRequestException("CTU出库任务,该单据载具:" + vehicleCode + "的物料在CTU库查找不到仓位信息,请检查"); + } + StructattrVechielDto structattrVechielDto = starIvtList.get(0); + if (StringUtils.isBlank(structattrVechielDto.getStruct_code()) || Objects.equals(structattrVechielDto.getQty(), BigDecimal.ZERO)) { + return null; + } + //载具物料表更新物料状态正在出库 + iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("frozen_qty", structattrVechielDto.getQty()) + .eq("id", structattrVechielDto.getVm_id())); + //出库仓位锁住 + iStIvtStructattrService.update(new UpdateWrapper() + .set("lock_type", StatusEnum.LOCK.code("出库锁")) + .set("update_time", DateUtil.now()) + .set("update_name", SecurityUtils.getCurrentNickName()) + .in("struct_code", structattrVechielDto.getStruct_code())); + //入库仓位锁住 + iStIvtStructattrService.update(new UpdateWrapper() + .set("lock_type", StatusEnum.LOCK.code("入库锁")) + .set("update_time", DateUtil.now()) + .set("update_name", SecurityUtils.getCurrentNickName()) + .eq("struct_code", inStructCode)); + taskJsonObject.put("pointCode1", structattrVechielDto.getStruct_code()); + taskJsonObject.put("pointCode2", pointCode2); + taskJsonObject.put("pointCode3", inStructCode); + taskJsonObject.put("pointCode4", siteCode); + taskJsonObject.put("vehicleCode", vehicleCode); + taskJsonObject.put("source_form_id", sourceFormId); + return this.createTask(taskJsonObject); + } catch (BadRequestException e) { + log.error("CTU出库任务失败,载具号:{}", vehicleCode, e); + throw new BadRequestException(e.getMessage()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void finish(JSONObject data) { + data.put("status", StatusEnum.FORM_STATUS.code("完成")); + this.updateTask(data); + SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); + //更新起点仓位 + String now = DateUtil.now(); + UpdateWrapper wrapper1 = new UpdateWrapper() + .set("update_time", now) + .set("lock_type", StatusEnum.LOCK.code("无锁")) + .set("vehicle_code", null) + .eq("struct_code", schBaseTask.getPoint_code1()); + iStIvtStructattrService.update(wrapper1); + //更新终点仓位 + UpdateWrapper wrapper2 = new UpdateWrapper() + .set("update_time", now) + .set("lock_type", StatusEnum.LOCK.code("无锁")) + .set("vehicle_code", schBaseTask.getVehicle_code()) + .eq("struct_code", schBaseTask.getPoint_code3()); + iStIvtStructattrService.update(wrapper2); + //更新料架仓位 + // UpdateWrapper wrapper2 = new UpdateWrapper() + // .set("update_time", now) + // .set("lock_type", StatusEnum.LOCK.code("无锁")) + // .set("vehicle_code", schBaseTask.getVehicle_code()) + // .eq("struct_code", schBaseTask.getPoint_code3()); + // iStIvtStructattrService.update(wrapper2); + //更新出入库记录 + List vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper() + .eq("vehicle_code", schBaseTask.getVehicle_code()) + .eq("is_delete", false)); + if (ObjectUtil.isEmpty(vehicleMaterList)) { + throw new BadRequestException("任务完成失败,到载具物料信息: " + schBaseTask.getVehicle_code()); + } + //扣库存 + MdPbVehicleMater vehicleMater = vehicleMaterList.get(0); + // iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() + // .set(MdPbVehicleMater::getFrozen_qty, 0) + // .set(MdPbVehicleMater::getIs_delete, true) + // .set(MdPbVehicleMater::getQty, 0) + // .eq(MdPbVehicleMater::getId, vehicleMater.getId())); + StIvtStructattr attr = iStIvtStructattrService.getOne(new QueryWrapper().eq("struct_code", schBaseTask.getPoint_code1()).select("stor_code")); + StIvtStructivtflow record = new StIvtStructivtflow(); + record.setId(IdUtil.getStringId()); + record.setUpdate_time(now); + record.setVehicle_code(schBaseTask.getVehicle_code()); + record.setMaterial_id(vehicleMater.getMaterial_id()); + record.setPcsn(vehicleMater.getPcsn()); + record.setQty(vehicleMater.getQty()); + record.setChange_qty(vehicleMater.getQty()); + record.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库")); + record.setFrozen_qty(vehicleMater.getFrozen_qty()); + record.setSource_form_type(vehicleMater.getSource_form_type()); + record.setSource_form_id(vehicleMater.getSource_form_id()); + record.setUnit_id(vehicleMater.getUnit_id()); + record.setStruct_code(schBaseTask.getPoint_code2()); + record.setStor_code(attr.getStor_code()); + record.setVehicle_form_data(vehicleMater.getForm_data()); + record.setGrowth(true); + structIvtFlowService.save(record); + } + + @Override + public void updateStatus(JSONObject data) { + this.updateTask(data); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancel(JSONObject data) { + try { + SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); + //起点解锁 + iStIvtStructattrService.update(new LambdaUpdateWrapper() + .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁")) + .eq(StIvtStructattr::getStruct_code, schBaseTask.getPoint_code1())); + //终点解锁 + iSchBasePointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")) + .eq(SchBasePoint::getCode, schBaseTask.getPoint_code2())); + //入库仓位解锁 + iStIvtStructattrService.update(new UpdateWrapper() + .set("lock_type", StatusEnum.LOCK.code("无锁")) + .set("vehicle_code", null) + .set("update_time", DateUtil.now()) + .set("update_name", SecurityUtils.getCurrentNickName()) + .eq("struct_code", schBaseTask.getPoint_code3())); + //载具物料解锁 + iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() + .set(MdPbVehicleMater::getFrozen_qty, 0) + .eq(MdPbVehicleMater::getId, schBaseTask.getSource_form_id())); + this.updateTask(data); + } catch (Exception e) { + throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage()); + } + } + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java index ca27c75b..d0ca1d4f 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java @@ -121,7 +121,7 @@ public class ToPickPlatformTask extends AbstractTask { data.put("status", StatusEnum.FORM_STATUS.code("完成")); this.updateTask(data); SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); - iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE); + iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2()); } @Override diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java index 43cda8da..bb33a449 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java @@ -1,5 +1,6 @@ package org.nl.wms.dispatch_manage.task.service; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; @@ -64,7 +65,10 @@ public interface ISchBaseTaskService extends IService { JSONObject errorTask(JSONObject param,String type); - JSONObject getIoSourceFormData(String vehicle_code, String pcsn); - + List getIoSourceFormData(String vehicle_code, String pcsn); + /** + * 获取点位任务数量 + */ + List getTaskList(Set pointCodes1, Set pointCodes2, Set pointCodes3, Set pointCodes4); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/SchBaseTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/SchBaseTask.java index c656b1c1..b7a4da79 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/SchBaseTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/SchBaseTask.java @@ -142,6 +142,10 @@ public class SchBaseTask implements Serializable { /** * 自定义参数 */ - @TableField(exist = false) private String agv_system_type; + + /** + * 载具高度类型 + */ + private String vehicle_type; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java index 01415e46..a0a41656 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java @@ -1,5 +1,6 @@ package org.nl.wms.dispatch_manage.task.service.dao.mapper; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.ibatis.annotations.Select; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -12,6 +13,7 @@ import java.util.List; import java.util.List; import java.util.Map; +import java.util.Set; /** *

@@ -26,5 +28,8 @@ public interface SchBaseTaskMapper extends BaseMapper { List getByVehicle(@Param("vehicles") List vehicles); - JSONObject getIoSourceFormData(@Param("vehicle_code") String vehicle_code, @Param("pcsn") String pcsn); + List getIoSourceFormData(@Param("vehicle_code") String vehicle_code, @Param("pcsn") String pcsn); + + + List getTaskList(Set pointCodes1, Set pointCodes2, Set pointCodes3, Set pointCodes4); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml index b7bf051b..49308df0 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml @@ -41,7 +41,7 @@ ORDER BY t.create_time DESC - SELECT st_ivt_iostorinvdtl.source_form_data FROM @@ -75,4 +75,29 @@ #{vehicle_id} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java index 5386fd62..2c1f3335 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java @@ -120,7 +120,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() - .set(PmFormData::getQty, qty) - .eq(PmFormData::getId, formDataId)); + //查找非二楼任务的未完成的出库单与明细 + if (StringUtils.isBlank(vehicleMaterList.get(0).getPrd_ppbom_no())) { + List formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn()); + if (ObjectUtils.isNotEmpty(formData)) { + Map formDataMap = formData.get(0); + JSONObject formDataId = formDataMap.get("source_form_data"); + String id = formDataId.getString("id"); + String qty = formDataId.getString("qty"); + if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(qty)) { + iPmFormDataService.update(new LambdaUpdateWrapper() + .set(PmFormData::getQty, qty) + .eq(PmFormData::getId, formDataId)); + } } } } @@ -277,7 +280,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl getIoSourceFormData(String vehicle_code, String pcsn) { return this.baseMapper.getIoSourceFormData(vehicle_code, pcsn); } @@ -376,4 +379,13 @@ public class SchBaseTaskServiceImpl extends ServiceImpl getTaskList(Set pointCodes1, Set pointCodes2, Set pointCodes3, Set pointCodes4) { + return baseMapper.getTaskList(pointCodes1, pointCodes2, pointCodes3, pointCodes4); + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java index e2f1bb07..7d000997 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java @@ -8,6 +8,7 @@ import org.nl.common.utils.MapOf; import org.nl.common.utils.RedissonUtils; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; +import org.nl.wms.dispatch_manage.task.handler.impl.SecondFloorOutStorageTask; import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; import org.nl.wms.external_system.acs.service.AcsToWmsService; import org.nl.wms.external_system.dto.InteracteDto; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java index 67b38966..1327f16a 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java @@ -59,8 +59,17 @@ public class WmsToAcsService{ .trace_id(MDC.get("trace_id")) .type(type) .data(arr).build(); - TableDataInfo tableDataInfo = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto)); return tableDataInfo; } + + public TableDataInfo bindPodAndBerth(String podCode,String positionCode,String indBind,String type){ + InteracteDto dto = InteracteDto.builder().service("wmsToAcsService") + .trace_id(MDC.get("trace_id")) + .type(type) + .data(MapOf.of("podCode", podCode, "positionCode", positionCode, "indBind", indBind)) + .build(); + TableDataInfo result = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto)); + return result; + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/CtuProcessHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/CtuProcessHandler.java new file mode 100644 index 00000000..44a07ce1 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/CtuProcessHandler.java @@ -0,0 +1,53 @@ +package org.nl.wms.flow_manage.flow.service.classprocessimpl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.javaparser.utils.Log; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess; +import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; +import org.nl.wms.pm_manage.form_data.service.IPmFormDataService; +import org.nl.wms.pm_manage.form_data.service.dao.PmFormData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/* + * @author ZZQ + * @Date 2024/5/6 14:34 + * 回传服务 + */ +@Service +@Slf4j +public class CtuProcessHandler implements ClassProcess { + + @Autowired + IPmFormDataService iPmFormDataService; + @Autowired + private IMdPbVehicleMaterService iMdPbVehicleMaterService; + + /** + * 回执单回传 + */ + @Override + public JSONObject process(JSONObject from, JSONObject param) { + JSONObject vehicleMater = from.getJSONObject("vehicleMater"); + JSONObject sourceFormData = from.getJSONObject("source_form_data"); + String billCode = sourceFormData.getString("code"); + try { + //更新物料载具信息的出库单据号 + iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("prd_ppbom_no", billCode) + .eq("id", vehicleMater.getString("id"))); + } catch (Exception ex) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PmFormData::getId, sourceFormData.getString("id")); + updateWrapper.set(PmFormData::getRemark, "更新物料载具信息的出库单据号失败,原因为:" + ex.getMessage()); + iPmFormDataService.update(updateWrapper); + Log.error(ex.getMessage()); + } + return from; + } + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java index 099c98a0..7ef13f01 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java @@ -77,10 +77,10 @@ public class StorageChangesProcessHandler implements ClassProcess { String end_struct_code = valueMap.get("end_struct_code"); BigDecimal change_qty = StringUtils.isEmpty(valueMap.get("change_qty"))?null:new BigDecimal(valueMap.get("change_qty")); if (StringUtils.isNotEmpty(start_struct_code)){ - iStIvtStructattrService.changeStruct(start_struct_code,vehicle_code,param.getString("task_type"), change_qty,Boolean.FALSE); + iStIvtStructattrService.changeStruct(start_struct_code,vehicle_code,param.getString("task_type"), change_qty,Boolean.FALSE,null); } if (StringUtils.isNotEmpty(end_struct_code)){ - iStIvtStructattrService.changeStruct(end_struct_code,vehicle_code,param.getString("task_type"), change_qty,change_qty.intValue()<0?Boolean.FALSE:Boolean.TRUE); + iStIvtStructattrService.changeStruct(end_struct_code,vehicle_code,param.getString("task_type"), change_qty,change_qty.intValue()<0?Boolean.FALSE:Boolean.TRUE,null); } } return from; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java index 1b041332..43fdbca5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java @@ -129,6 +129,10 @@ public class MdPbVehicleMater implements Serializable { * 流程实例 */ private String proc_inst_id; + /** + * 用料单号 + */ + private String prd_ppbom_no; /** * 是否需要拣选(针对托盘) */ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java index aa0b47da..22214268 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java @@ -1,18 +1,26 @@ package org.nl.wms.md_manage.vehicleMater.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; +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.md_manage.vehicleMater.service.dao.mapper.MdPbVehicleMaterMapper; import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.BiConsumer; +import java.util.stream.Collectors; /** *

@@ -42,6 +50,9 @@ public class MdPbVehicleMaterServiceImpl extends ServiceImpl getVehicleCode2Id(String material_id,String... vehicle_code) { if (vehicle_code!=null){ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java index 57c0f51e..211ab879 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java @@ -6,7 +6,6 @@ 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 org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; @@ -20,7 +19,6 @@ import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; -import org.nl.wms.pm_manage.form_data.service.IPmFormDataService; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.springframework.beans.factory.annotation.Autowired; @@ -73,7 +71,11 @@ public class IOStorageController { .eq("lock_type", StatusEnum.LOCK.code("无锁")) .eq("vehicle_code", vehicle_code); List list = iStIvtStructattrService.list(query); - if (ObjectUtils.isNotEmpty(list)) { + //todo 二楼出库调通后注释 + long storageCount = list.stream().filter(r -> r.getStor_code().equals(StatusEnum.STOCK_INFO.code("FStockPallet")) || + r.getStor_code().equals(StatusEnum.STOCK_INFO.code("料箱库")) || + r.getStor_code().equals(StatusEnum.STOCK_INFO.code("虚拟库"))).count(); + if (storageCount > 0) { throw new BadRequestException(String.format("出库确认失败:当前载具号在立库的库位中未出库:%s中,请核查库存记录!", list.get(0).getStruct_code())); } }, StatusEnum.STRATEGY_TYPE.code("出库") + vehicle_code, 5); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java index 6ccf71b1..a0981826 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java @@ -3,7 +3,8 @@ package org.nl.wms.pda_manage.iostorage; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; @@ -14,7 +15,6 @@ import org.nl.common.utils.ListOf; import org.nl.common.utils.MapOf; import org.nl.common.utils.RedissonUtils; import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService; -import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc; import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst; import org.nl.wms.pda_manage.iostorage.server.dto.PdaMaterOutMst; import org.nl.wms.pda_manage.iostorage.sevice.PdaIOService; @@ -74,31 +74,57 @@ public class PdaOutController { @Log("查询单据数据") @SaIgnore public ResponseEntity> orderList(FormDataQuery query, PageQuery page) { - page.setPage(page.getPage()-1); - if (page.getSize()>20){ + page.setPage(page.getPage() - 1); + if (page.getSize() > 20) { page.setSize(20); } page.setSort("id,desc"); - query.setStatus(new String[]{StatusEnum.FORM_STATUS.code("生成"),StatusEnum.FORM_STATUS.code("执行中")}); - return new ResponseEntity<>(TableDataInfo.build(iPmFormDataService.queryTree(query,page)), HttpStatus.OK); + query.setStatus(new String[]{StatusEnum.FORM_STATUS.code("生成"), StatusEnum.FORM_STATUS.code("执行中")}); + return new ResponseEntity<>(TableDataInfo.build(iPmFormDataService.queryTree(query, page)), HttpStatus.OK); } + @GetMapping("getCtuOrderList") + @Log("查询二楼生产出库单据") + @SaIgnore + public ResponseEntity> getCtuOrderList(FormDataQuery query, PageQuery page) { + if (query == null || StringUtils.isBlank(query.getBill_code()) || StringUtils.isBlank(query.getSite_code())) { + throw new BadRequestException("查询失败,产线编号或用料单据号有误,请检查!"); + } + page.setPage(1); + page.setSize(100); + page.setPage(page.getPage() - 1); + page.setSort("create_time,desc"); + //query.setStatus(new String[]{StatusEnum.FORM_STATUS.code("生成"),StatusEnum.FORM_STATUS.code("执行中")}); + Page list = iPmFormDataService.queryCtuOrderList(query, page); + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(String.valueOf(cn.hutool.http.HttpStatus.HTTP_OK)); + rspData.setMsg("查询成功"); + rspData.setContent(list.getRecords()); + //给前端作去重 + if (ObjectUtils.isNotEmpty(list.getRecords())) { + rspData.setData(list.getRecords().get(0).getPrd_ppbom_no()); + } + rspData.setTotalElements(list.getTotal()); + return new ResponseEntity<>(rspData, HttpStatus.OK); + } + + @PostMapping("orderConfirm") @Log("查询单据数据") @SaIgnore public ResponseEntity> orderConfirm(@RequestBody JSONObject param) { - if (param==null || StringUtils.isEmpty(param.getString("code"))||StringUtils.isEmpty(param.getString("stor_code"))){ + if (param == null || StringUtils.isEmpty(param.getString("code")) || StringUtils.isEmpty(param.getString("stor_code"))) { throw new BadRequestException("请求参数不能为空"); } - PmFormDataDto pmFormDataDto = iPmFormDataService.queryErpCode(param.getString("code"),param.getString("stor_code")); + PmFormDataDto pmFormDataDto = iPmFormDataService.queryErpCode(param.getString("code"), param.getString("stor_code")); return new ResponseEntity<>(TableDataInfo.build(ListOf.of(pmFormDataDto)), HttpStatus.OK); } /** - * + * 一楼单据出库确认 */ @PostMapping("confirm") - @Log("出库确认") + @Log("一楼单据出库确认") @SaIgnore public ResponseEntity confirm(@RequestBody PdaFormOutMst pdaFormOutMst) { RedissonUtils.lock(() -> { @@ -107,6 +133,38 @@ public class PdaOutController { return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); } + + /** + * 二楼生产出库单据确认 + */ + @PostMapping("ctuOutConfirm") + @Log("二楼生产出库单据确认") + @SaIgnore + public ResponseEntity ctuOutConfirm(@RequestBody PdaFormOutMst pdaFormOutMst) { + RedissonUtils.lock(() -> { + pdaIOService.ctuOutConfirm(pdaFormOutMst); + }, pdaFormOutMst.getBill_code(), null); + return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); + } + + + /** + * 二楼产线站点人工从货架取货确认 + */ + @PostMapping("takeConfirm") + @Log("二楼产线站点人工从货架取货出库确认") + @SaIgnore + public ResponseEntity takeConfirm(@RequestBody JSONObject param) { + if (param == null || StringUtils.isEmpty(param.getString("site_code"))) { + throw new BadRequestException("请求参数不能为空"); + } + RedissonUtils.lock(() -> { + pdaIOService.takeConfirm(param); + }, "takeConfirm", null); + return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); + } + + @PostMapping("materConfirm") @Log("物料出库确认") @SaIgnore diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/server/dto/PdaFormOutMst.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/server/dto/PdaFormOutMst.java index a1076e92..3be784e4 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/server/dto/PdaFormOutMst.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/server/dto/PdaFormOutMst.java @@ -133,12 +133,21 @@ public class PdaFormOutMst implements Serializable { */ private JSONObject form_data; + /** + * 单据编号 + */ + private String bill_code; + + /** + * 产线站点编号 + */ + private String site_code; /** * 关联上级表单id */ private String parent_id; - private Boolean HasChildren=Boolean.FALSE; + private Boolean HasChildren = Boolean.FALSE; private List children; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java index d26c931b..8a30fa23 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java @@ -6,10 +6,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.kingdee.bos.webapi.sdk.K3CloudApi; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.checkerframework.checker.units.qual.A; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.*; @@ -19,8 +22,15 @@ import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; import org.nl.wms.base_manage.material.service.impl.MdMeMaterialbaseServiceImpl; import org.nl.wms.base_manage.measure.service.dao.BmMeasureUnit; import org.nl.wms.base_manage.measure.service.impl.BmMeasureUnitServiceImpl; +import org.nl.wms.base_manage.sect.service.IStIvtSectattrService; +import org.nl.wms.base_manage.sect.service.dao.StIvtSectattr; import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService; import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc; +import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; +import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; +import org.nl.wms.dispatch_manage.task.handler.impl.SecondFloorOutStorageTask; +import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; +import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import org.nl.wms.external_system.erp.dto.ErpQuery; import org.nl.wms.external_system.erp.dto.ErpSec; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; @@ -42,6 +52,7 @@ import org.nl.wms.stor_manage.struct.service.dao.StructAssignQty; import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto; import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping; import org.nl.wms.sync_manage.service.form_mapping.impl.SyncFormMappingServiceImpl; +import org.nl.wms.system_manage.service.quartz.task.ApplyShelfScheduleService; import org.nl.wms.system_manage.service.quartz.task.SyncErpBillsScheduleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -49,15 +60,12 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; -import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service +@Slf4j public class PdaIOService { @Autowired @@ -84,17 +92,26 @@ public class PdaIOService { private StIvtBsrealstorattrServiceImpl stIvtBsrealstorattrServiceImpl; @Autowired private MdMeMaterialbaseServiceImpl mdMeMaterialbaseServiceImpl; - - @Resource + @Autowired private PmFormDataMapper pmFormDataMapper; @Autowired private IPmFormDataService iPmFormDataService; @Autowired private IMdPbVehicleMaterService iMdPbVehicleMaterService; + @Autowired + private ISchBasePointService iSchBasePointService; + @Autowired + private SecondFloorOutStorageTask secondFloorOutStorageTask; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ApplyShelfScheduleService applyShelfScheduleService; + /** * 手持物料出库不回传 + * * @param pdaFormOutMst */ public void PdaMaterOutStorage(PdaMaterOutMst pdaFormOutMst) { @@ -152,8 +169,161 @@ public class PdaIOService { iStIvtIostorinvService.save(mst); this.pdaTaskOpen(mst); } + + /** + * 二楼生产出库单据确认 + */ + public void ctuOutConfirm(PdaFormOutMst pdaFormOutMst) { + String billCode = pdaFormOutMst.getBill_code(); + String siteCode = pdaFormOutMst.getSite_code(); + JSONArray jsonArray = new JSONArray(); + if (StringUtils.isBlank(billCode) || StringUtils.isBlank(siteCode) || ObjectUtils.isEmpty(pdaFormOutMst.getChildren())) { + throw new BadRequestException("出库失败,请求参数不能为空"); + } + // 可以用货架列表 + List endPointList = iSchBasePointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getIs_used, true) + .eq(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")) + .eq(SchBasePoint::getRegion_code, StatusEnum.REGION_INFO.code("二楼CTU货架对接位")) + .isNotNull(SchBasePoint::getVehicle_code)); + if (ObjectUtils.isEmpty(endPointList)) { + log.error("CTU出库任务,该单据{}出库时,地面货架站点暂无可用货架,请检查现场情况", billCode); + throw new BadRequestException("地面货架站点暂无可用货架,请检查现场情况"); + } + for (int i = 0; i < pdaFormOutMst.getChildren().size(); i++) { + try { + // 可以货架的库位 + List stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper() + .eq(StIvtStructattr::getIs_used, true) + .eq(StIvtStructattr::getSect_code, endPointList.get(0).getVehicle_code()) + .eq(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁")) + .eq(StIvtStructattr::getStor_code, StatusEnum.STOCK_INFO.code("二楼货架缓存库")) + .isNull(StIvtStructattr::getVehicle_code) + .orderByAsc(StIvtStructattr::getLayer_num)); + if (ObjectUtils.isEmpty(stIvtStructattrList)) { + log.error("CTU出库任务,该单据{}出库时,地面货架站点货架的货位已放满,请检查现场情况", billCode); + throw new BadRequestException("地面货架站点货架的货位已放满,请检查现场情况"); + } + // CTU分配终点 + List targetPointList = endPointList.stream().filter(r -> r.getVehicle_code().equals(stIvtStructattrList.get(0).getSect_code())).collect(Collectors.toList()); + if (targetPointList.size() > 1) { + log.error("CTU出库任务,该单据{}出库时,地面货架站点货架的货位存在相同货架编号,请检查现场情况", billCode); + throw new BadRequestException("地面货架站点货架的货位存在相同货架编号,请检查现场情况"); + } + if (StringUtils.isBlank(pdaFormOutMst.getChildren().get(i).getVehicle_code())) { + throw new BadRequestException("出库失败,料箱码不能为空"); + } + JSONObject jsonObject = secondFloorOutStorageTask.handleBills(billCode, siteCode, targetPointList.get(0).getCode(), pdaFormOutMst.getChildren().get(i).getVehicle_code(), pdaFormOutMst.getChildren().get(i).getId(), stIvtStructattrList.get(0).getStruct_code()); + jsonArray.add(jsonObject); + } catch (BadRequestException e) { + log.error("单据号:{}的第{}行明细,物料号为:{},出库异常:", billCode, i, pdaFormOutMst.getChildren().get(i).getMaterial_code(), e); + //载具物料表更新物料状态出库异常 + iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() + .set(MdPbVehicleMater::getRemark, "出库异常:" + e.getMessage()) + .eq(MdPbVehicleMater::getId, pdaFormOutMst.getChildren().get(i).getId())); + } + } + if (ObjectUtils.isNotEmpty(jsonArray)) { + //终点锁住 + iSchBasePointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("出库锁")) + .eq(SchBasePoint::getCode, endPointList.get(0).getCode())); + List taskIdList = jsonArray.stream().map(r -> ((JSONObject) r).getString("id")).collect(Collectors.toList()); + //todo 终点货位锁定 + + + //任务分组 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getGroup_code, pdaFormOutMst.getSite_code() + "_" + IdUtil.getStringId() + "_" + jsonArray.size()). + in(SchBaseTask::getId, taskIdList)); + } + } + + + /** + * 二楼产线站点人工从货架取货确认 + */ + @Transactional(rollbackFor = Exception.class) + public void takeConfirm(JSONObject param) { + List pointList = iSchBasePointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getIs_used, true) + .eq(SchBasePoint::getCode, param.getString("site_code"))); + if (ObjectUtils.isEmpty(pointList)) { + throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); + } + if (StringUtils.isNotBlank(pointList.get(0).getVehicle_code())) { + //货架解绑 + // iSchBasePointService.bindOrUnbind(param.getString("site_code"), pointList.get(0).getVehicle_code(), "0"); + List stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper() + .eq(StIvtStructattr::getSect_code, pointList.get(0).getVehicle_code()) + .isNotNull(StIvtStructattr::getVehicle_code)); + List vehicleCodeList = stIvtStructattrList.stream() + .map(StIvtStructattr::getVehicle_code) + .collect(Collectors.toList()); + //清除载具物料组盘信息 + iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("frozen_qty",0) + .set("qty",0) + .set("remark","该料箱的物料已从产线取走") + .in("vehicle_code",vehicleCodeList)); + //清除货架库位 + iStIvtStructattrService.update(new LambdaUpdateWrapper() + .set(StIvtStructattr::getVehicle_code, null) + .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁")) + .set(StIvtStructattr::getUpdate_name, DateUtil.now()) + .set(StIvtStructattr::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(StIvtStructattr::getSect_code, pointList.get(0).getVehicle_code()) + .eq(StIvtStructattr::getStor_code, StatusEnum.STOCK_INFO.code("二楼货架缓存库"))); + //标记为空架 + iSchBasePointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getPoint_type, 0) + .eq(SchBasePoint::getCode, pointList.get(0).getCode())); + //生成补空架任务 + applyShelfScheduleService.taskPublish(param.getString("site_code"), null, pointList.get(0).getVehicle_code(), false); + } + } + + + /** + * 二楼生产出库单据确认 + */ + public void ctuOutConfirm1(PdaFormOutMst pdaFormOutMst) { + // StIvtIostorinv mst = new StIvtIostorinv(); + // { + // mst.setId(IdUtil.getStringId()); + // mst.setCreate_name(SecurityUtils.getCurrentNickName()); + // mst.setCreate_time(DateUtil.now()); + // mst.setCode(CodeUtil.getNewCode("IO_CODE")); + // mst.setStatus(StatusEnum.FORM_STATUS.code("已分配")); + // mst.setProduct_area("A2"); + // mst.setBill_type(StatusEnum.IOBILL_TYPE_OUT.code("生产出库")); + // mst.setIn_storage(false); + // mst.setProduct_area(pdaFormOutMst.getProduct_area()); + // mst.setForm_data(new JSONObject(MapOf.of("shipper", null, "product_area", pdaFormOutMst.getProduct_area()))); + // } + // StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl(); + // { + // ivtDtl.setMaterial_id(vechielDto.getMaterial_id()); + // ivtDtl.setForm_data(new JSONObject()); + // ivtDtl.setQty(structattrVechielDto.getQty()); + // ivtDtl.setPcsn(structattrVechielDto.getPcsn()); + // ivtDtl.setStor_code("HStockId"); + // ivtDtl.setId(IdUtil.getStringId()); + // ivtDtl.setVehicle_code(structattrVechielDto.getVehicle_code()); + // ivtDtl.setVehicle_id(vechielDto.getVm_id()); + // ivtDtl.setInv_id(mst.getId()); + // ivtDtl.setStatus(StatusEnum.FORM_STATUS.code("生成")); + // ivtDtl.setSource_form_data(new JSONObject()); + // } + // iStIvtIostorinvdtlService.save(ivtDtl); + // iStIvtIostorinvService.save(mst); + //this.pdaTaskOpen(mst); + } + + /** * 手持单据出库 + * * @param pdaFormOutMst */ public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/controller/PalletStIvtIostorinvController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/controller/PalletStIvtIostorinvController.java index ff483b4e..6cac7ed5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/controller/PalletStIvtIostorinvController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/controller/PalletStIvtIostorinvController.java @@ -2,24 +2,26 @@ package org.nl.wms.pda_manage.palletio.controller; import cn.dev33.satoken.annotation.SaIgnore; -import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; -import org.nl.common.domain.entity.PageQuery; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; import org.nl.common.utils.MapOf; -import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; +import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; +import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService; import org.nl.wms.pda_manage.palletio.service.dto.LabelValueVo; -import org.nl.wms.stor_manage.io.service.dto.StorInvQuery; -import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService; -import org.nl.wms.stor_manage.io.service.iostor.dao.StIvtIostorinv; -import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @@ -36,16 +38,19 @@ import java.util.Map; @RestController @RequestMapping("api/pdaPalletIostorinv") public class PalletStIvtIostorinvController { - public static Map Pallet_OutPoint = - MapOf.of("一楼右侧靠拣选台","1119" - ,"一楼左侧靠托盘库","1131" - ,"二楼右侧","2115" - ,"二楼左侧靠托盘库","2127","三楼出库点","3110"); + public static Map Pallet_OutPoint = + MapOf.of("一楼右侧靠拣选台", "1119" + , "一楼左侧靠托盘库", "1131" + , "二楼右侧", "2115" + , "二楼左侧靠托盘库", "2127", "三楼出库点", "3110"); @Autowired private PalletIostorinvService palletIostorinvService; + @Autowired + private ISchBasePointService pointService; /** * 手持托盘入库 + * * @param form * @return */ @@ -82,10 +87,37 @@ public class PalletStIvtIostorinvController { List result = new ArrayList<>(); for (String label : Pallet_OutPoint.keySet()) { String value = Pallet_OutPoint.get(label); - result.add(new LabelValueVo(label,value)); + result.add(new LabelValueVo(label, value)); } Thread.sleep(5000); - return new ResponseEntity<>(result,HttpStatus.OK); + return new ResponseEntity<>(result, HttpStatus.OK); + } + + /** + * 二楼站点扫码 + */ + @PostMapping("queryTargetPoint") + @SaIgnore + @Log("二楼站点扫码") + public ResponseEntity queryTargetPoint(@RequestBody JSONObject form) { + if (form == null || StringUtils.isEmpty(form.getString("site_code"))) { + throw new BadRequestException("请求参数不能为空"); + } + List pointList = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getCode, form.getString("site_code")).eq(SchBasePoint::getIs_used, true)); + if (ObjectUtils.isEmpty(pointList)) { + throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); + } + SchBasePoint point = pointList.get(0); + if (!StatusEnum.LOCK.code("无锁").equals(point.getLock_type())) { + throw new BadRequestException("当前站点已绑定货架,请检查或解绑!"); + } + JSONObject result = new JSONObject(); + result.put("code", "200"); + result.put("status", "200"); + result.put("msg", "查询成功!"); + result.put("message", "查询成功!"); + result.put("site_code", point.getCode()); + return new ResponseEntity<>(result, HttpStatus.OK); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/IPmFormDataService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/IPmFormDataService.java index bdfd620e..79a8b80f 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/IPmFormDataService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/IPmFormDataService.java @@ -37,6 +37,8 @@ public interface IPmFormDataService extends IService { Page queryTree(FormDataQuery query, PageQuery page); + Page queryCtuOrderList(FormDataQuery query, PageQuery page); + /** * 查询ERP同步数据及库存 * @param code diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/PmFormDataMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/PmFormDataMapper.java index cea9ae33..11b72200 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/PmFormDataMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/PmFormDataMapper.java @@ -26,6 +26,8 @@ public interface PmFormDataMapper extends BaseMapper { List queryTree(@Param("query")FormDataQuery query); List queryTree2(@Param("query") FormDataQuery query); + List queryCtuOrderList(@Param("query") FormDataQuery query); + List selectChilds(List parents); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/xml/PmFormDataMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/xml/PmFormDataMapper.xml index 4ab77cd2..ab98baa5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/xml/PmFormDataMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/mapper/xml/PmFormDataMapper.xml @@ -176,7 +176,28 @@ #{parent_id} - + - SELECT md_pb_vehicleMater.qty, md_pb_vehicleMater.frozen_qty, md_pb_vehicleMater.material_id, md_pb_vehicleMater.pcsn, md_pb_vehicleMater.id as vm_id, st_ivt_structattr.* + FROM md_pb_vehicleMater + LEFT JOIN st_ivt_structattr ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code + WHERE md_pb_vehicleMater.vehicle_code = #{vehicleCode} + and st_ivt_structattr.stor_code = 'CStockId' + and md_pb_vehicleMater.prd_ppbom_no in + + #{item} + + +