From 72ad55b1c9bc0d066d87b4eb39f02d204c68ffce Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Thu, 8 Jan 2026 20:00:35 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E5=8E=8B=E7=89=87=E5=89=8D=E6=AE=B5?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IMdMeMaterialbaseService.java | 1 + .../service/PdaBuildParamService.java | 7 +- .../impl/DefaultPdaBuildParamService.java | 55 ++--- .../impl/PdaProductionServiceImpl.java | 114 ++++++++++- .../service/util/tasks/PalletOutTask.java | 11 +- .../util/tasks/PreProcessingInTask.java | 3 +- .../service/util/tasks/ProduceInTask.java | 189 ++++++++++++++++++ .../service/util/tasks/RawInTask.java | 5 +- .../warehouse_management/enums/IOSEnum.java | 11 +- .../service/IMdPbGroupplateService.java | 3 + .../dao/mapper/MdPbGroupplateMapper.java | 3 + .../dao/mapper/MdPbGroupplateMapper.xml | 14 +- .../impl/MdPbGroupplateServiceImpl.java | 6 + 13 files changed, 375 insertions(+), 47 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ProduceInTask.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java index 00bd787..e30262f 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java @@ -1,5 +1,6 @@ package org.nl.wms.basedata_manage.service; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java index 4ccca18..96810f9 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import org.nl.wms.basedata_manage.service.dao.Sectattr; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto; import java.util.Map; @@ -49,12 +50,12 @@ public interface PdaBuildParamService { /** * 构建出库单参数 * @param param - * @param sectattr + * @param storId * @return */ - JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr); + JSONObject doBuildOutInvObj(JSONObject param, String storId); - JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId); + JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto); JSONObject buildOutAllSetData(SchBasePoint endPoint, String invId); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java index f5b367e..2d26f4e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java @@ -33,6 +33,7 @@ import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto; +import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -163,26 +164,25 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { } @Override - public JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr) { + public JSONObject doBuildOutInvObj(JSONObject param, String storId) { JSONObject insertInvObj = new JSONObject(); JSONArray rows = param.getJSONArray("rows"); - JSONObject row = rows.getJSONObject(0); List result = filterAndSumByMaterialIdAndPcsn(rows); List rowList = new ArrayList<>(); for (JSONObject rowObj : result) { - List temps = outBillService.getCanuseSpecifiedIvt(MapOf.of("stor_id", row.getString("stor_id") - , "sect_id", row.getString("sect_id") - , "struct_code", row.getString("struct_code") - , "material_code", row.getString("material_code") + List temps = outBillService.getCanuseSpecifiedIvt(MapOf.of("stor_id", rowObj.getString("stor_id") + , "sect_id", rowObj.getString("sect_id") + , "struct_code", rowObj.getString("struct_code") + , "material_code", rowObj.getString("material_code") , "pcsn", rowObj.getString("pcsn") - , "vehicle_code", row.getString("vehicle_code"))); + , "vehicle_code", rowObj.getString("vehicle_code"))); if (temps.size() > 0) { JSONObject temp = temps.get(0); temp.put("plan_qty", rowObj.getString("qty")); rowList.add(temp); } } - insertInvObj.put("stor_id", sectattr.getStor_id()); + insertInvObj.put("stor_id", storId); insertInvObj.put("bill_status", "10"); insertInvObj.put("bill_type", param.getString("bill_type")); insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd")); @@ -224,27 +224,28 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { } @Override - public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId) { + public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto) { JSONObject outDivObj = new JSONObject(); - JSONObject row = param.getJSONArray("rows").getJSONObject(0); - List dtoList = outBillService.queryAvailableSpecifiedInv(MapOf.of("stor_id", outStructAttr.getStor_id() - , "material_code", row.getString("material_code") - , "sect_id", outStructAttr.getSect_id() - , "struct_code", row.getString("struct_code") - , "pcsn", row.getString("pcsn") - , "vehicle_code", row.getString("vehicle_code"))); - if (dtoList.size() == 0) { - throw new BadRequestException("未找到库存信息!"); + // 对应的明细id和主表id + JSONObject row = new JSONObject(); + outDivObj.put("row", row); + row.put("iostorinv_id", ioStorInvDtlDto.getIostorinv_id()); + row.put("iostorinvdtl_id", ioStorInvDtlDto.getIostorinvdtl_id()); + // 托盘中的某个明细 + JSONObject pRow = param.getJSONObject("row"); + String vehicleCode = pRow.getString("vehicle_code"); + JSONArray dtLMaterialInfo = groupplateService.getDtLMaterialInfo(vehicleCode, ioStorInvDtlDto.getMaterial_id(), ioStorInvDtlDto.getPcsn()); + outDivObj.put("rows", dtLMaterialInfo); + for (int i = 0; i < dtLMaterialInfo.size(); i++) { + JSONObject rowsJSONObject = dtLMaterialInfo.getJSONObject(i); + rowsJSONObject.put("sect_id", pRow.getString("sect_id")); + rowsJSONObject.put("sect_name", pRow.getString("sect_name")); + rowsJSONObject.put("sect_code", pRow.getString("sect_code")); + rowsJSONObject.put("struct_id", pRow.getString("struct_id")); + rowsJSONObject.put("struct_code", pRow.getString("struct_code")); + rowsJSONObject.put("struct_name", pRow.getString("struct_name")); } - JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(dtoList.get(0))); - List> invDtls = ioStorInvDtlMapper.selectMaps(new LambdaQueryWrapper() - .eq(IOStorInvDtl::getIostorinv_id, invId)); - for (Map invDtl : invDtls) { - invDtl.put("storagevehicle_code", row.getString("vehicle_code")); - } - jsonObject.put("iostorinv_id", invId); - outDivObj.put("row", jsonObject); - outDivObj.put("rows", invDtls); + return outDivObj; } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java index e6a3ecc..27f2927 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.pda.general_management.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; @@ -41,6 +42,7 @@ import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; +import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; @@ -111,22 +113,21 @@ public class PdaProductionServiceImpl implements PdaProductionService { if (ObjectUtil.isEmpty(search)) { throw new BadRequestException("载具不存在!"); } - List res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1")); + List res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1", "2")); return PdaResponse.requestParamOk(res); } @Override public PdaResponse getStockGroupInfo(JSONObject param) { - // sect_code, material_id, pcsn - if (ObjectUtil.isEmpty(param.get("sect_code"))) { - throw new BadRequestException("请选择库区!"); - } + // material_id, pcsn List res = groupplateService.getStockGroupInfo(param); return PdaResponse.requestParamOk(res); } @Override + @Transactional(rollbackFor = Exception.class) public PdaResponse confirmCallMaterial(JSONObject param) { + // hint: 没有创建出库单 // point_code, row,sect_code log.info("手持托盘叫料:{}", param); if (ObjectUtil.isEmpty(param.get("point_code"))) { @@ -140,12 +141,47 @@ public class PdaProductionServiceImpl implements PdaProductionService { if (ObjectUtil.isEmpty(endPoint)) { throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!"); } + if (!"1".equals(endPoint.getPoint_status())) { + throw new BadRequestException("该点位不是空位,请检查后呼叫!"); + } + // 判断任务是否创建 + List tasks = taskService.getTaskByQuery(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code1, pointCode)); + if (tasks.size() > 0) { + throw new BadRequestException("该点位已创建过任务!"); + } + JSONObject row = param.getJSONObject("row"); + // 如果是制粒,需要走正规出入库流程 + if ("ZLQ".equals(endPoint.getRegion_code())) { + Structattr structattr = structattrService.getByCode(row.getString("struct_code")); + param.put("bill_type", IOSEnum.OUT_BILL_TYPE.code("批料出库")); + // 1 创建出库单、明细、分配明细 + List res = groupplateService.getPalletViewByVehicleCode(row.getString("vehicle_code"), Arrays.asList("1", "2")); + param.put("rows", res); + JSONObject invObj = defaultPdaBuildParam.doBuildOutInvObj(param, structattr.getStor_id()); + String invId = outBillService.insertDtl(invObj); + Sectattr sectattr = sectattrService.findByCode(structattr.getSect_code(), false); + // 2 循环,根据插入的dtl 去寻找袋的组盘信息调用手动分配 + List billDtl = outBillService.getOutBillDtl(MapUtil.of("iostorinv_id", invId)); + for (IOStorInvDtlDto ioStorInvDtlDto : billDtl) { + JSONObject divObj = defaultPdaBuildParam.buildManuaOutDivData(param, sectattr, ioStorInvDtlDto); + outBillService.manualDiv(divObj); + } + // 3 创建任务 + JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(endPoint, invId); + outBillService.allSetPoint(jsonMst); + + return PdaResponse.requestOk("呼叫成功!"); + } + // 创建任务 JSONObject taskParam = new JSONObject(); taskParam.put("point_code1", row.getString("struct_code")); taskParam.put("point_code2", param.getString("point_code")); taskParam.put("vehicle_code", row.getString("vehicle_code")); + // 代表任务完成的时候不需要调用库存完成 + taskParam.put("flag", "1"); palletOutTask.create(taskParam); return PdaResponse.requestOk("呼叫成功!"); } @@ -405,7 +441,15 @@ public class PdaProductionServiceImpl implements PdaProductionService { if (res.size() == 0) { throw new BadRequestException("当前托盘号不存在物料信息,请检查!"); } - preProcessingInTask.create(param); + // 如果是仓位就需要走原辅料入库 + Sectattr sectCode = sectattrService.findByCode(param.getString("sect_code"), false); + if (ObjectUtil.isNotEmpty(sectCode)) { + // 辅料入库 + param.put("rows", res); + receivedIn(param); + } else { + preProcessingInTask.create(param); + } return PdaResponse.requestOk(); } @@ -424,6 +468,16 @@ public class PdaProductionServiceImpl implements PdaProductionService { param.getString("vehicle_code"))); } + /** + * 各工序作业完成,组盘后下料入库或缓存: + * 1、称量、粉碎下料组盘后,扫点位/载具点确认,系统分配物料存放室或批料室空货位入库; + * 2、压片下料组盘后,扫点位、载具点确认,系统分配中间站空货位入库; + * 3、包衣下料组盘后,扫点位点呼叫AGV,系统呼叫AGV来取货;扫点位、载具点确认,系统分配中间站空货位入库; + * 4、码垛完成后,扫点位、载具点确认,系统分配缓存点位搬运暂存; + * 5、缠膜完成后,扫点位、载具点确认,系统分配缓存点位搬运暂存; + * @param param + * @return + */ @Override public PdaResponse productionLine(JSONObject param) { // point_code, vehicle_code @@ -435,11 +489,55 @@ public class PdaProductionServiceImpl implements PdaProductionService { if (ObjectUtil.isEmpty(point)) { throw new BadRequestException("点位[" + pointCode +"]不存在!"); } + if (point.getRegion_code().startsWith("FSSQ")) { + // 粉碎室入库逻辑 + productionInStorage(param, point); + return PdaResponse.requestOk(); + } + AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code())); task.create(param); return PdaResponse.requestOk(); } + /** + * 入库 + * @param param + */ + @Transactional(rollbackFor = Exception.class) + public void productionInStorage(JSONObject param, SchBasePoint point) { + // 入库库区 + String inSect = point.getIn_sect(); + if (ObjectUtil.isEmpty(inSect)) { + throw new BadRequestException("点位【" + point.getPoint_code() + "】未配置入库库区!"); + } + Sectattr sectattr = sectattrService.findByCode(inSect, false); + if (ObjectUtil.isEmpty(sectattr)) { + throw new BadRequestException("库区不存在,请确保库区存在!"); + } + + // 入库三件套 + param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("粉碎入库")); + // 设置rows(需要根据物料和批次区分) + List res = groupplateService.getPalletViewByVehicleCode(param.getString("vehicle_code") + , Arrays.asList("1")); + // 需要过滤出物料id+批次并汇总qty + JSONArray jsonArray = new JSONArray(); + jsonArray.addAll(res); + List jsonObjects = DefaultPdaBuildParamService.filterAndSumByMaterialIdAndPcsn(jsonArray); + param.put("rows", jsonObjects); + // 1 创建入库单、明细、分配明细 + Map invObj = defaultPdaBuildParam.doBuildInvObj(param, point, sectattr); + String invId = rawAssistIStorService.insertDtl(invObj); + // 2 调用分配 + Map divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, true); + rawAssistIStorService.divStruct(divObj); + // 3 创建任务 + Map jsonMst = defaultPdaBuildParam.buildTaskData(point, invId); + rawAssistIStorService.divPoint(jsonMst); + + } + @SneakyThrows @Override public PdaResponse receivedIn(JSONObject param) { @@ -459,6 +557,9 @@ public class PdaProductionServiceImpl implements PdaProductionService { if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) { throw new BadRequestException("点位载具号为空!"); } + if (!ObjectUtil.equals(startPoint.getVehicle_code(), param.getString("vehicle_code"))) { + throw new BadRequestException("点位载具号不一致!!!"); + } Sectattr sectattr = sectattrService.findByCode(sect_code, true); if (ObjectUtil.isEmpty(sectattr)) { throw new BadRequestException("库区不存在或者被禁用!"); @@ -469,6 +570,7 @@ public class PdaProductionServiceImpl implements PdaProductionService { if (tasks.size() > 0) { throw new BadRequestException("该点位已创建过任务!"); } + storagevehicleinfoService.getByCode(param.getString("vehicle_code")); param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("原辅料入库")); // 1 创建入库单、明细、分配明细 Map invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletOutTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletOutTask.java index dc3443c..fb326f5 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletOutTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletOutTask.java @@ -100,7 +100,9 @@ public class PalletOutTask extends AbstractTask { // 点位上锁 structattrService.update(new LambdaUpdateWrapper() - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁")) + .set(Structattr::getLock_type, ObjectUtil.isNotEmpty(json.get("flag")) + ? IOSEnum.LOCK_TYPE.code("其他锁") + : IOSEnum.LOCK_TYPE.code("出库锁")) .eq(Structattr::getStruct_code, task.getPoint_code1())); // 下发任务 @@ -123,7 +125,7 @@ public class PalletOutTask extends AbstractTask { acsTaskDto.setVehicle_type(IOSConstant.ONE); acsTaskDto.setIs_wait(taskDao.getIs_wait()); - acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode()); + acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); acsTaskDto.setPriority(IOSConstant.ONE); acsTaskDto.setAgv_system_type(IOSConstant.THREE); @@ -192,6 +194,11 @@ public class PalletOutTask extends AbstractTask { .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) ); + JSONObject jsonObject = JSONObject.parseObject(taskObj.getRequest_param()); + if (ObjectUtil.isEmpty(jsonObject.get("flag"))) { + // 解锁、库存清空 + outBillService.taskFinish(taskObj); + } // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java index cdb57fe..4c41146 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PreProcessingInTask.java @@ -46,6 +46,7 @@ public class PreProcessingInTask extends AbstractTask { @Override public String create(JSONObject json) { // 获取终点 + // 考虑提供的室区域还是库区 List points = pointService.getCanUsePointByRegion(json.getString("sect_code")); if (ObjectUtil.isEmpty(points)) { throw new BadRequestException("暂无可用点位!"); @@ -88,7 +89,7 @@ public class PreProcessingInTask extends AbstractTask { acsTaskDto.setVehicle_type(IOSConstant.ONE); acsTaskDto.setIs_wait(IOSConstant.ZERO); - acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode()); + acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); acsTaskDto.setPriority(IOSConstant.ONE); acsTaskDto.setAgv_system_type(IOSConstant.THREE); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ProduceInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ProduceInTask.java new file mode 100644 index 0000000..c8d9651 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ProduceInTask.java @@ -0,0 +1,189 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.sch_manage.enums.TaskEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; +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.util.ACSTaskTypeEnum; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IRawAssistIStorService; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + * 生产入库:粉碎入库 + * @author: lyd + * @date: 2026/1/8 + */ +@Component("ProduceInTask") +public class ProduceInTask extends AbstractTask { + @Resource + private ISchBaseTaskService taskService; + @Resource + private IRawAssistIStorService rawAssistIStorService; + + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + @Resource + private ISchBasePointService pointService; + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setConfig_code(ProduceInTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setMaterial_id(json.getString("material_id")); + task.setMaterial_qty(json.getBigDecimal("material_qty")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + task.setTask_type(TaskEnum.TASK_TYPE.code("料箱")); + task.setPriority(json.getString("Priority")); + task.setIs_wait(json.getString("is_wait")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 +// this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + + acsTaskDto.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(IOSConstant.ZERO); + acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.THREE); + acsTaskDto.setIs_get_pause(IOSConstant.ZERO); + acsTaskDto.setIs_put_pause(IOSConstant.ZERO); + + return acsTaskDto; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj) { + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) + .set(SchBaseTask::getRemark, "已取消") + .eq(SchBaseTask::getTask_id, taskObj.getTask_id()) + ); + //分配表清除任务 + ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class) + .set(IOStorInvDis::getTask_id, null) + .set(IOStorInvDis::getPoint_code, null) + .set(IOStorInvDis::getIs_issued, 0) + .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成")) + .eq(IOStorInvDis::getTask_id, taskObj.getTask_id()) + ); + + // 更新任务状态 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + taskService.updateById(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj) { + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + rawAssistIStorService.taskFinish(taskObj); + // 更新起点 + pointService.update( + new UpdateWrapper().lambda() + .set(SchBasePoint::getVehicle_code, "") + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getIng_task_code, "") + ); + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java index d0b9bc4..7140dc0 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java @@ -26,6 +26,7 @@ import org.nl.wms.warehouse_management.service.IRawAssistIStorService; import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -87,7 +88,7 @@ public class RawInTask extends AbstractTask { acsTaskDto.setVehicle_type(IOSConstant.ONE); acsTaskDto.setIs_wait(IOSConstant.ZERO); - acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode()); + acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); acsTaskDto.setPriority(IOSConstant.ONE); acsTaskDto.setAgv_system_type(IOSConstant.THREE); @@ -121,6 +122,7 @@ public class RawInTask extends AbstractTask { } } + @Transactional(rollbackFor = Exception.class) public void cancelTask(SchBaseTask taskObj) { // 取消任务 taskService.update(new LambdaUpdateWrapper() @@ -144,6 +146,7 @@ public class RawInTask extends AbstractTask { taskService.updateById(taskObj); } + @Transactional(rollbackFor = Exception.class) public void finishTask(SchBaseTask taskObj) { // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java index 02b76b2..7142cca 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java @@ -35,12 +35,14 @@ public enum IOSEnum { "原辅料入库", "0001", "剩料回库", "0002", "中间站入库", "0003", - "直接入库", "0004" + "直接入库", "0004", + "粉碎入库", "0005" )), // 出库业务类型 OUT_BILL_TYPE(MapOf.of("手工出库", "1009", "原辅料出库", "1001", + "批料出库", "1002", "直接出库", "1099" )), @@ -52,12 +54,15 @@ public enum IOSEnum { // 入库任务配置类编码 IN_CONFIG_CODE(MapOf.of("0009", "HandInTask", - "0001", "RawInTask", "0002", "RawInTask", "0003", "CenterInTask" + "0001", "RawInTask", + "0002", "RawInTask", + "0003", "CenterInTask", + "0005", "ProduceInTask" )), // 出库任务配置类编码 OUT_CONFIG_CODE(MapOf.of( "1009", "HandOutTask", - "1001", "CallMaterialTask" + "1001", "CallMaterialTask", "1002", "PalletOutTask" )), // 下料任务配置编码 DOWN_CONFIG_CODE(MapOf.of("YPQ", "TabletingInTask" diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java index 70e0165..9c543c4 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java @@ -1,5 +1,6 @@ package org.nl.wms.warehouse_management.service; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -113,4 +114,6 @@ public interface IMdPbGroupplateService extends IService { * @return List */ List queryMaterList(); + + JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.java index 790da2e..8202ca7 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.java @@ -1,5 +1,6 @@ package org.nl.wms.warehouse_management.service.dao.mapper; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -69,4 +70,6 @@ public interface MdPbGroupplateMapper extends BaseMapper { List getPalletViewByVehicleCode(String search, List status); List getStockGroupInfo(JSONObject param); + + JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml index ee0df56..b100b52 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml @@ -207,9 +207,15 @@ AND mg.pcsn = #{pcsn} - - AND - ss.sect_code = #{sect_code} - + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java index c6b248c..d7ec860 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java @@ -2,6 +2,7 @@ package org.nl.wms.warehouse_management.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +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; @@ -212,4 +213,9 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl