From 87d8abca35fafe42778c05fdd542ddc559ed227e Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Wed, 11 Feb 2026 15:40:25 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=BB=95=E8=BF=87=E5=BC=80?= =?UTF-8?q?=E5=90=88=E7=9B=96=E4=BB=BB=E5=8A=A1=E3=80=81AGV=E6=89=AB?= =?UTF-8?q?=E7=A0=81=E5=A4=B1=E8=B4=A5=E7=9A=84=E6=89=8B=E5=8A=A8=E6=94=BE?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 8 + .../acs/ext/wms/rest/WmsToAcsController.java | 7 + .../acs/ext/wms/service/WmsToAcsService.java | 1 + .../wms/service/impl/WmsToAcsServiceImpl.java | 61 +++++ .../ext_manage/service/WmsToAcsService.java | 2 + .../service/impl/WmsToAcsServiceImpl.java | 6 + .../controller/PdaJBController.java | 6 + .../controller/PdaSchTaskController.java | 6 + .../sch_manage/service/PdaJBService.java | 2 + .../sch_manage/service/PdaSchTaskService.java | 2 + .../service/impl/PdaJBServiceImpl.java | 100 +++++++- .../service/impl/PdaSchTaskServiceImpl.java | 34 +++ .../sch_manage/service/mapper/PdaJBMapper.xml | 1 + .../impl/PdmBdWorkorderServiceImpl.java | 2 + .../nl/wms/sch_manage/enums/StatusEnum.java | 18 +- .../service/util/tasks/jb/JbDownAgvTask.java | 12 +- .../util/tasks/jb/JbDownAgvTwoTask.java | 234 ++++++++++++++++++ .../wms/warehouse_manage/enums/IOSEnum.java | 2 +- .../service/impl/InBillServiceImpl.java | 71 ++++++ .../views/wms/pm_manage/workerorder/index.vue | 36 +-- 20 files changed, 584 insertions(+), 27 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTwoTask.java diff --git a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndcone/AgvNdcOneDeviceDriver.java b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndcone/AgvNdcOneDeviceDriver.java index a99a6f5..441a992 100644 --- a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndcone/AgvNdcOneDeviceDriver.java +++ b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndcone/AgvNdcOneDeviceDriver.java @@ -68,6 +68,10 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic int phase = 0; String error_type = "agv_error_type"; String error_code = "0"; + /** + * 车辆放行标志 + */ + boolean agvReleased = false; /** * x坐标 */ @@ -1325,6 +1329,10 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic log.info(agvaddr + "对应设备号为空!"); return; } + if (agvReleased) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); + agvReleased = false; + } String task_code = inst.getTask_code(); JSONObject jsonObject = new JSONObject(); jsonObject.put("task_code", task_code); diff --git a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index c91a117..511beaa 100644 --- a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -113,5 +113,12 @@ public class WmsToAcsController { return new ResponseEntity<>(wmstoacsService.getTubeMes(whereJson), HttpStatus.OK); } + @PostMapping("/agvReleased") + @Log("下发管芯信息") + @SaIgnore + public ResponseEntity agvReleased(@RequestBody String whereJson) throws Exception { + return new ResponseEntity<>(wmstoacsService.agvReleased(whereJson), HttpStatus.OK); + } + } diff --git a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java index 054aafb..52e932b 100644 --- a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java +++ b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java @@ -111,4 +111,5 @@ public interface WmsToAcsService { Map getTubeMes(String whereJson) throws Exception; + JSONObject agvReleased(String whereJson); } diff --git a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 3759e6c..5c747b3 100644 --- a/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapp import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.domain.Device; +import org.nl.acs.device_driver.agv.ndcone.AgvNdcOneDeviceDriver; import org.nl.acs.device_driver.agv.ndctwo.AgvNdcTwoDeviceDriver; import org.nl.acs.device_driver.conveyor.belt_conveyor.BeltConveyorDeviceDriver; import org.nl.acs.device_driver.conveyor.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; @@ -548,6 +549,66 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { return resultJson; } + @Override + public JSONObject agvReleased(String jsonObject) { + log.info("下发放行AGV信息--------------:输入参数" + jsonObject); + JSONArray datas = JSONArray.parseArray(jsonObject); + JSONObject param = datas.getJSONObject(0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code("ACS接收WMS任务") + .content("ACS接收WMS任务-----输入参数:" + param) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + + String device_code = param.getString("device_code"); + String task_code = param.getString("task_code"); + Instruction inst = instructionService.findByTaskcode(task_code); + JSONArray errArr = new JSONArray(); + if (ObjectUtil.isEmpty(inst)) { + JSONObject jo = new JSONObject(); + jo.put("task_code", task_code); + jo.put("message", "未找到对应任务"); + errArr.add(jo); + } else { + String carNo = inst.getCarno(); + if (ObjectUtil.isEmpty(carNo)) { + JSONObject jo = new JSONObject(); + jo.put("task_code", task_code); + jo.put("message", "未找到任务对应车号"); + errArr.add(jo); + } else { + Device device = deviceAppService.findDeviceByCode(carNo); + AgvNdcOneDeviceDriver agvNdcOneDeviceDriver; + if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { + agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); + if (!agvNdcOneDeviceDriver.isAgvReleased()) { + agvNdcOneDeviceDriver.setAgvReleased(true); + } + } + } + } + + JSONObject resultJson = new JSONObject(); + if (ObjectUtil.isEmpty(errArr)) { + resultJson.put("status", HttpStatus.OK.value()); + resultJson.put("message", "操作成功"); + } else { + resultJson.put("status", HttpStatus.BAD_REQUEST.value()); + resultJson.put("message", "操作失败"); + if (ObjectUtil.isNotEmpty(errArr)) { + resultJson.put("errArr", errArr); + } + } + LuceneLogDto logDto1 = LuceneLogDto.builder() + .device_code("WMS更新任务点位状态") + .content("WMS更新任务点位状态-----返回参数:" + resultJson) + .build(); + logDto1.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto1); + return resultJson; + } + @Override public Map queryDevice(String jsonObject) throws Exception { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/WmsToAcsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/WmsToAcsService.java index e19dbeb..d8deeb0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/WmsToAcsService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/WmsToAcsService.java @@ -31,4 +31,6 @@ public interface WmsToAcsService { * @return */ AcsResponse getPointStatus(JSONArray whereJson); + + AcsResponse agvReleased(JSONArray paramArr); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/WmsToAcsServiceImpl.java index 47b2968..8f0be89 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/WmsToAcsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/WmsToAcsServiceImpl.java @@ -33,4 +33,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { public AcsResponse getPointStatus(JSONArray whereJson) { return AcsUtil.notifyAcs(EXTConstant.QUERY_DEVICE_INFO_API, whereJson); } + + @Override + public AcsResponse agvReleased(JSONArray paramArr) { + String api = "api/wms/agvReleased"; + return AcsUtil.notifyAcs(api, paramArr); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java index 4b6ba4d..97609af 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java @@ -50,6 +50,12 @@ public class PdaJBController { public ResponseEntity downMaterial(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaJBService.downMaterial(whereJson), HttpStatus.OK); } + @PostMapping("/downMaterial2") + @Log("解包下料2-不经过开盒盖") + @SaIgnore + public ResponseEntity downMaterial2(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaJBService.downMaterial2(whereJson), HttpStatus.OK); + } @PostMapping("/checkStruct") @Log("检测站点") @SaIgnore diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaSchTaskController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaSchTaskController.java index f2cf26b..aa7b29d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaSchTaskController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaSchTaskController.java @@ -59,5 +59,11 @@ public class PdaSchTaskController { public ResponseEntity forceConfirm(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaSchTaskService.forceConfirm(whereJson), HttpStatus.OK); } + @PostMapping("/agvReleased") + @Log("放行") + @SaIgnore + public ResponseEntity agvReleased(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaSchTaskService.agvReleased(whereJson), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java index db4b850..acaf7c0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaJBService.java @@ -66,4 +66,6 @@ public interface PdaJBService { PdaResponse vehicleList(JSONObject param); PdaResponse groupAndBind(JSONObject param); + + PdaResponse downMaterial2(JSONObject whereJson); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaSchTaskService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaSchTaskService.java index 909ead4..0878848 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaSchTaskService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/PdaSchTaskService.java @@ -61,4 +61,6 @@ public interface PdaSchTaskService extends IService { * @return PdaResponse */ PdaResponse forceConfirm(JSONObject whereJson); + + PdaResponse agvReleased(JSONObject whereJson); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java index c1ea775..5623bcb 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java @@ -376,7 +376,100 @@ public class PdaJBServiceImpl implements PdaJBService { Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type()); Sectattr sect = sectattrService.findByCode(dict.getPara1()); // 组装插入主表明细表的数据 - Map insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect); + Map insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect, IOSEnum.BILL_TYPE.code("解包入库")); + String invId = inBillService.insertDtl(insertInvObj); + + // 组织数据,调用分配货位 + JSONObject divObj = buildDivStructData(sect, invId); + inBillService.divStruct(divObj); + + // 一键设置,创建任务 + // 组建参数 + Map jsonMst = buildTaskData(pointCode, workorderId, invId); + inBillService.divPoint(jsonMst); + + // 工单完成 + workorder.setWorkorder_status("5"); + workorder.setRealproduceend_date(DateUtil.now()); + workorderService.updateById(workorder); + } else { + throw new BadRequestException("速度太快啦,稍后再试..."); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + return PdaResponse.requestOk(); + } + + @SneakyThrows + @Override + public PdaResponse downMaterial2(JSONObject whereJson) { + // 用任务组的方式下发任务(2条任务) + MDC.put(TagNameEnum.TAG_NAME.getTag(), TagNameEnum.PDA_JB_DOWN_MATERIAL.getTag()); + log.info("解包直接下料,请求参数:{}", whereJson); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + // workorder_id、area、point_code、weight、tp_code、lt_code + String area = whereJson.getString("area"); + // 设备 + String pointCode = whereJson.getString("point_code"); + RLock lock = redissonClient.getLock(pointCode); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + BigDecimal weight = whereJson.getBigDecimal("weight"); + String tpCode = whereJson.getString("tp_code"); + String ltCode = whereJson.getString("lt_code"); + String workorderId = whereJson.getString("workorder_id"); + // todo: 存在任务就不继续 + List list = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, false) + .eq(SchBaseTask::getConfig_code, "JbDownAgvTask") + .and(ll -> ll.like(SchBaseTask::getPoint_code1, pointCode).or() + .like(SchBaseTask::getPoint_code2, pointCode).or() + .like(SchBaseTask::getPoint_code3, pointCode).or() + .like(SchBaseTask::getPoint_code4, pointCode).or())); + if (list.size() > 0) { + throw new BadRequestException(pointCode + " 该点位已存在任务!"); + } + PdmBdWorkorder workorder = workorderService.getById(workorderId); + if (ObjectUtil.isEmpty(workorder)) { + throw new BadRequestException("工单不存在!"); + } + // 物料 + MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id()); + if (ObjectUtil.isEmpty(materialbase)) { + throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!"); + } + JSONObject extData = JSONObject.parseObject(workorder.getExt_data()); + // 0、创建组盘 + GroupPlate groupPlate = new GroupPlate(); + groupPlate.setGroup_id(IdUtil.getStringId()); + groupPlate.setStoragevehicle_code(ltCode); + // 料桶类型根据工单,工单是根据点位 + groupPlate.setStoragevehicle_type(workorder.getVehicle_type()); + groupPlate.setMaterial_id(materialbase.getMaterial_id()); + groupPlate.setQty(weight); + groupPlate.setQty_unit_id("11"); + groupPlate.setQty_unit_name("kg"); + groupPlate.setFrozen_qty(BigDecimal.ZERO); + groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘")); + groupPlate.setCreate_id(currentUserId); + groupPlate.setCreate_name(nickName); + groupPlate.setCreate_time(now); + groupPlate.setPcsn(extData.getString("pcsn")); + groupPlate.setSupp_code(extData.getString("supp_code")); + groupPlate.setSupp_name(extData.getString("supp_name")); + groupplateService.save(groupPlate); + + Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type()); + Sectattr sect = sectattrService.findByCode(dict.getPara1()); + // 组装插入主表明细表的数据 + Map insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect, IOSEnum.BILL_TYPE.code("解包直接入库")); String invId = inBillService.insertDtl(insertInvObj); // 组织数据,调用分配货位 @@ -980,7 +1073,8 @@ public class PdaJBServiceImpl implements PdaJBService { return divObj; } - public static Map buildInsertData(String ltCode, PdmBdWorkorder workorder, MdMeMaterialbase materialbase, GroupPlate groupPlate, Sectattr sect) { + public static Map buildInsertData(String ltCode, PdmBdWorkorder workorder + , MdMeMaterialbase materialbase, GroupPlate groupPlate, Sectattr sect, String billType) { Map insertInvObj = new HashMap(); ArrayList tableData = new ArrayList<>(); HashMap table = new HashMap<>(); @@ -989,7 +1083,7 @@ public class PdaJBServiceImpl implements PdaJBService { insertInvObj.put("bill_status", "10"); insertInvObj.put("total_qty", workorder.getPlan_weight()); insertInvObj.put("detail_count", 1); - insertInvObj.put("bill_type", "0011"); + insertInvObj.put("bill_type", billType); insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd")); insertInvObj.put("tableData", tableData); table.put("group_id", groupPlate.getGroup_id()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java index b863bc8..76f1224 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java @@ -1,7 +1,9 @@ package org.nl.wms.pda_manage.sch_manage.service.impl; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -11,11 +13,13 @@ import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.ext_manage.service.WmsToAcsService; import org.nl.wms.ext_manage.service.util.AcsResponse; import org.nl.wms.pda_manage.sch_manage.service.PdaSchTaskService; import org.nl.wms.pda_manage.util.PdaResponse; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.service.ISchBasePointService; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper; @@ -76,6 +80,10 @@ public class PdaSchTaskServiceImpl extends ServiceImpl