From 28b464598172e3a32dfc34f31516e5f1073cb2c6 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Fri, 9 Jan 2026 16:42:16 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E5=8C=85=E8=A1=A3=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/IMdPdGroupbucketService.java | 7 + .../dao/mapper/MdPdGroupbucketMapper.java | 2 + .../dao/mapper/MdPdGroupbucketMapper.xml | 27 ++ .../impl/MdPdGroupbucketServiceImpl.java | 6 + .../controller/PdaProductionController.java | 12 + .../service/PdaBuildParamService.java | 11 +- .../service/PdaProductionService.java | 14 + .../impl/DefaultPdaBuildParamService.java | 39 ++- .../service/impl/PdaCommonServiceImpl.java | 4 + .../impl/PdaProductionServiceImpl.java | 80 +++++- .../service/util/tasks/CoatingUpTask.java | 83 ++++++ .../util/tasks/IntermediateOutTask.java | 239 ++++++++++++++++++ .../service/util/tasks/PalletOutTask.java | 3 +- .../service/util/tasks/TabletingInTask.java | 15 +- .../warehouse_management/enums/IOSEnum.java | 5 +- .../service/IOutBillService.java | 2 +- .../dao/mapper/MdPbGroupplateMapper.xml | 3 +- .../service/impl/OutBillServiceImpl.java | 5 +- 18 files changed, 526 insertions(+), 31 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CoatingUpTask.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/IntermediateOutTask.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java index 8c7e9de..7056480 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java @@ -24,4 +24,11 @@ public interface IMdPdGroupbucketService extends IService { List getBucketInfoByBucket(String vehicleCode); void upDateWeight(String weight, String vehicleCode); + + /** + * 获取料桶信息 + * @param param:material_id, pcsn + * @return + */ + List getBucketGroupInfo(JSONObject param); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java index 70d0fa1..cabc4f6 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java @@ -19,4 +19,6 @@ public interface MdPdGroupbucketMapper extends BaseMapper { List getBucketInfoByBucket(String vehicleCode); void upDateWeight(String weight, String vehicleCode); + + List getBucketGroupInfo(JSONObject param); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml index 3ba1d9e..4f3b8ef 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml @@ -22,4 +22,31 @@ WHERE g.bucket_code = #{vehicleCode} + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java index 621292f..87b474c 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java @@ -7,6 +7,7 @@ import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket; import org.nl.wms.basedata_manage.service.dao.mapper.MdPdGroupbucketMapper; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; /** @@ -29,4 +30,9 @@ public class MdPdGroupbucketServiceImpl extends ServiceImpl getBucketGroupInfo(JSONObject param) { + return this.baseMapper.getBucketGroupInfo(param); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java index 8741376..657d38d 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java @@ -111,4 +111,16 @@ public class PdaProductionController { public ResponseEntity getVehicleInfo(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaProductionService.getVehicleInfo(whereJson), HttpStatus.OK); } + @PostMapping("/getBucketGroupInfo") + @Log("料桶叫料-获取物料库存信息") + @SaIgnore + public ResponseEntity getBucketGroupInfo(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaProductionService.getBucketGroupInfo(whereJson), HttpStatus.OK); + } + @PostMapping("/confirmCallBucketMaterial") + @Log("料桶叫料-确认叫料") + @SaIgnore + public ResponseEntity confirmCallBucketMaterial(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaProductionService.confirmCallBucketMaterial(whereJson), HttpStatus.OK); + } } 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 6597520..5b54b79 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 @@ -49,13 +49,14 @@ public interface PdaBuildParamService { /** * 构建出库单参数 - * @param param - * @param storId + * @param param 参数 + * @param storId 仓库id + * @param flag 是否过滤物料 * @return */ - JSONObject doBuildOutInvObj(JSONObject param, String storId); + JSONObject doBuildOutInvObj(JSONObject param, String storId, Boolean flag); - JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto); + JSONObject buildManuaOutDivData(JSONObject param, IOStorInvDtlDto ioStorInvDtlDto); JSONObject buildOutAllSetData(SchBasePoint endPoint, String invId); @@ -79,4 +80,6 @@ public interface PdaBuildParamService { * @param bill_type 单据类型 */ void createMove(JSONObject param, String bill_type); + + JSONObject buildManuaOutBuckDivData(JSONObject param, IOStorInvDtlDto ioStorInvDtlDto); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java index 4891cf5..923f5d7 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java @@ -78,4 +78,18 @@ public interface PdaProductionService { PdaResponse receivedIn(JSONObject param); PdaResponse getVehicleInfo(JSONObject param); + + /** + * 获取料桶的数据 + * @param param + * @return + */ + PdaResponse getBucketGroupInfo(JSONObject param); + + /** + * 料桶-确认叫料 + * @param param + * @return + */ + PdaResponse confirmCallBucketMaterial(JSONObject param); } 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 a8d39ef..5b2065f 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 @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; @@ -181,10 +182,10 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { } @Override - public JSONObject doBuildOutInvObj(JSONObject param, String storId) { + public JSONObject doBuildOutInvObj(JSONObject param, String storId, Boolean flag) { JSONObject insertInvObj = new JSONObject(); JSONArray rows = param.getJSONArray("rows"); - List result = filterAndSumByMaterialIdAndPcsn(rows); + List result = flag ? filterAndSumByMaterialIdAndPcsn(rows) : rows.toJavaObject(new TypeReference>() {}); List rowList = new ArrayList<>(); for (JSONObject rowObj : result) { List temps = outBillService.getCanuseSpecifiedIvt(MapOf.of("stor_id", rowObj.getString("stor_id") @@ -224,10 +225,10 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { // 取第一个对象作为基础(保留除了qty外的其他信息) JSONObject baseObj = new JSONObject(group.get(0)); - // 计算该分组中所有对象的qty总和 - int totalQty = group.stream() - .mapToInt(obj -> obj.getInteger("qty")) - .sum(); + // 计算该分组中所有对象的qty总和(使用BigDecimal) + BigDecimal totalQty = group.stream() + .map(obj -> obj.getBigDecimal("qty")) + .reduce(BigDecimal.ZERO, BigDecimal::add); // 更新qty为总和 baseObj.put("qty", totalQty); @@ -241,7 +242,7 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { } @Override - public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto) { + public JSONObject buildManuaOutDivData(JSONObject param, IOStorInvDtlDto ioStorInvDtlDto) { JSONObject outDivObj = new JSONObject(); // 对应的明细id和主表id JSONObject row = new JSONObject(); @@ -399,4 +400,28 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { } iStIvtMoveinvdtlService.saveBatch(moveDtlList); } + + @Override + public JSONObject buildManuaOutBuckDivData(JSONObject param, IOStorInvDtlDto ioStorInvDtlDto) { + JSONObject outDivObj = new JSONObject(); + // 对应的明细id和主表id + JSONObject row = new JSONObject(); + outDivObj.put("row", row); + row.put("iostorinv_id", ioStorInvDtlDto.getIostorinv_id()); + row.put("iostorinvdtl_id", ioStorInvDtlDto.getIostorinvdtl_id()); + // 每个料桶可能是物料批次一样,但是托盘不一样 + JSONArray pRows = param.getJSONArray("rows"); + List dtLMaterialInfo = pRows.stream() + .map(obj -> (JSONObject) obj) + .filter(obj -> ioStorInvDtlDto.getMaterial_id().equals(obj.getString("material_id")) + && ioStorInvDtlDto.getPcsn().equals(obj.getString("pcsn"))) + .collect(Collectors.toList()); + outDivObj.put("rows", dtLMaterialInfo); + for (int i = 0; i < dtLMaterialInfo.size(); i++) { + JSONObject rowsJSONObject = dtLMaterialInfo.get(i); + rowsJSONObject.put("canuse_qty", rowsJSONObject.getString("qty")); + rowsJSONObject.put("storagevehicle_code", rowsJSONObject.getString("bucket_code")); + } + return outDivObj; + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java index 88fe14b..eeb9114 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaCommonServiceImpl.java @@ -210,6 +210,10 @@ public class PdaCommonServiceImpl implements PdaCommonService { @Override public PdaResponse confirmBucketAssembly(AssemblyBucketParam param) { + List infoByBucket = groupbucketService.getBucketInfoByBucket(param.getBucket_code()); + if (infoByBucket.size() > 0) { + throw new BadRequestException("该桶已绑定过!"); + } MdPdGroupbucket groupbucket = new MdPdGroupbucket(); BeanUtil.copyProperties(param, groupbucket); groupbucket.setId(IdUtil.getStringId()); 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 27f2927..5e28b0f 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 @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -128,7 +129,7 @@ public class PdaProductionServiceImpl implements PdaProductionService { @Transactional(rollbackFor = Exception.class) public PdaResponse confirmCallMaterial(JSONObject param) { // hint: 没有创建出库单 - // point_code, row,sect_code + // point_code, row log.info("手持托盘叫料:{}", param); if (ObjectUtil.isEmpty(param.get("point_code"))) { throw new BadRequestException("请输入要料点!"); @@ -146,7 +147,7 @@ public class PdaProductionServiceImpl implements PdaProductionService { } // 判断任务是否创建 List tasks = taskService.getTaskByQuery(new LambdaQueryWrapper() - .eq(SchBaseTask::getPoint_code1, pointCode)); + .eq(SchBaseTask::getPoint_code2, pointCode)); if (tasks.size() > 0) { throw new BadRequestException("该点位已创建过任务!"); } @@ -159,13 +160,12 @@ public class PdaProductionServiceImpl implements PdaProductionService { // 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()); + JSONObject invObj = defaultPdaBuildParam.doBuildOutInvObj(param, structattr.getStor_id(), true); 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); + JSONObject divObj = defaultPdaBuildParam.buildManuaOutDivData(param, ioStorInvDtlDto); outBillService.manualDiv(divObj); } // 3 创建任务 @@ -489,12 +489,12 @@ public class PdaProductionServiceImpl implements PdaProductionService { if (ObjectUtil.isEmpty(point)) { throw new BadRequestException("点位[" + pointCode +"]不存在!"); } - if (point.getRegion_code().startsWith("FSSQ")) { - // 粉碎室入库逻辑 + if (point.getRegion_code().startsWith("FSSQ") || point.getRegion_code().startsWith("CLS")) { + // 粉碎室/称量室入库逻辑 productionInStorage(param, point); return PdaResponse.requestOk(); } - + // 压片下料 AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code())); task.create(param); return PdaResponse.requestOk(); @@ -602,4 +602,68 @@ public class PdaProductionServiceImpl implements PdaProductionService { List res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1")); return PdaResponse.requestParamOk(res); } + + @Override + public PdaResponse getBucketGroupInfo(JSONObject param) { + // material_id, pcsn + List res = groupbucketService.getBucketGroupInfo(param); + return PdaResponse.requestParamOk(res); + } + + @SneakyThrows + @Override + @Transactional(rollbackFor = Exception.class) + public PdaResponse confirmCallBucketMaterial(JSONObject param) { + // param: point_code, rows + log.info("料桶叫料:{}", param); + assertNotBlankJson(param, "参数不能为空!", "point_code", "rows"); + RLock lock = redissonClient.getLock("lock:confirmCallBucketMaterial"); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + // param:point_code(点位),rows + String point_code = param.getString("point_code"); + SchBasePoint endPoint = pointService.getByPointCode(point_code, true); + if (ObjectUtil.isEmpty(endPoint)) { + throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!"); + } + // 判断任务是否创建 + List tasks = taskService.getTaskByQuery(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code2, point_code)); + if (tasks.size() > 0) { + throw new BadRequestException("该点位已创建过任务!"); + } + List rows = param.getJSONArray("rows").toJavaObject(new TypeReference>() {});; + param.put("bill_type", IOSEnum.OUT_BILL_TYPE.code("料桶出库")); + param.put("rows", rows); + // 1 创建出库单、明细、分配明细 + // todo: 认为明细都是一个库区的(不同库区需要不同出库单?) + Structattr structattr = structattrService.getByCode(rows.get(0).getString("struct_code")); + JSONObject invObj = defaultPdaBuildParam.doBuildOutInvObj(param, structattr.getStor_id(), true); + String invId = outBillService.insertDtl(invObj); + // 2 根据插入的dtl 去寻找袋的组盘信息调用手动分配 + List billDtl = outBillService.getOutBillDtl(MapUtil.of("iostorinv_id", invId)); + for (IOStorInvDtlDto ioStorInvDtlDto : billDtl) { + JSONObject divObj = defaultPdaBuildParam.buildManuaOutBuckDivData(param, ioStorInvDtlDto); + outBillService.manualDiv(divObj); + } + // 找一个没任务的称重位 + List czws = pointService.getCanUsePointByRegion("ZJZ01"); + if (czws.isEmpty()) { + throw new BadRequestException("找不到中间站的称重位!"); + } + // 3 创建任务 + JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(czws.get(0), invId); + jsonMst.put("target", endPoint.getPoint_code()); + outBillService.allSetPoint(jsonMst); + } else { + throw new BadRequestException("速度太快啦,稍后再试..."); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + return null; + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CoatingUpTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CoatingUpTask.java new file mode 100644 index 0000000..112b716 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CoatingUpTask.java @@ -0,0 +1,83 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +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.sch_manage.enums.TaskEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; +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.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 包衣上料任务 + * @author: lyd + * @date: 2026/1/9 + */ +@Component("CoatingUpTask") +public class CoatingUpTask extends AbstractTask { + + @Resource + private ISchBaseTaskService taskService; + + @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(CoatingUpTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code")); + task.setPoint_code2(json.getString("target")); + 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("1"); + task.setIs_wait("0"); + 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) { + return null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + + } + + @Override + public void forceFinish(String task_code) { + + } + + @Override + public void cancel(String task_code) { + + } + + @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/IntermediateOutTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/IntermediateOutTask.java new file mode 100644 index 0000000..6e3d1a6 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/IntermediateOutTask.java @@ -0,0 +1,239 @@ +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.query.QueryWrapper; +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.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.sch_manage.service.util.TaskFactory; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IOutBillService; +import org.nl.wms.warehouse_management.service.dao.GroupPlate; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_management.service.dao.mapper.GroupPlateMapper; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + * 中间出库 + * @author: lyd + * @date: 2026/1/9 + */ +@Component("IntermediateOutTask") +public class IntermediateOutTask extends AbstractTask { + @Resource + private TaskFactory taskFactory; + /** + * 任务服务 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 出库服务 + */ + @Resource + private IOutBillService outBillService; + + /** + * 分配明细mapper + */ + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + + /** + * 点位服务 + */ + @Resource + private ISchBasePointService iSchBasePointService; + + /* + * 组盘记录服务 + */ + @Resource + private GroupPlateMapper groupPlateMapper; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(json.getString("TaskCode")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(IntermediateOutTask.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.setPriority(json.getString("Priority")); + task.setTask_type(TaskEnum.TASK_TYPE.code("料箱")); + 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.setPriority(taskDao.getPriority()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + + acsTaskDto.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(taskDao.getIs_wait()); + acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_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 + @Transactional + 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)) { + this.executingTask(taskObj); + 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); + } + } + + @Override + @Transactional + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + @Transactional + 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); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj) { + // todo: 获取重量判断与记录的重量是否一样(判断上下幅度阈值,超过则不继续) + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + outBillService.taskFinish(taskObj); + // 创建上料任务 + JSONObject request = JSONObject.parseObject(taskObj.getRequest_param()); + // "ext":{"iostorinv_id":"2009532623130595328","point_code":"ZJZCZ01","target":"YPDJW01"} + JSONObject ext = request.getJSONObject("ext"); + // todo: 先固定包衣,后续改 + ext.put("config_code", "CoatingUpTask"); + ext.put("vehicle_code", taskObj.getVehicle_code()); + ext.put("material_qty", taskObj.getMaterial_qty()); + ext.put("material_name", taskObj.getMaterial_name()); + ext.put("material_id", taskObj.getMaterial_id()); + ext.put("pre_task_id", taskObj.getTask_id()); + ext.put("group_id", taskObj.getGroup_id()); + AbstractTask coatingUpTask = taskFactory.getTask("CoatingUpTask"); + coatingUpTask.create(ext); + this.taskConfirm(taskObj.getTask_code()); + } + + @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); + } + + @Override + public void taskConfirm(String task_code) { + // AGV任务做完才能删除 +// SchBaseTask taskObj = taskService.getByCode(task_code); +// +// // 删除组盘信息 +// groupPlateMapper.delete( +// new QueryWrapper().lambda() +// .eq(GroupPlate::getVehicle_code, taskObj.getVehicle_code()) +// .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) +// ); + } +} 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 fb326f5..e3883dd 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 @@ -198,12 +198,12 @@ public class PalletOutTask extends AbstractTask { if (ObjectUtil.isEmpty(jsonObject.get("flag"))) { // 解锁、库存清空 outBillService.taskFinish(taskObj); + this.taskConfirm(taskObj.getTask_code()); } // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); taskService.updateById(taskObj); - this.taskConfirm(taskObj.getTask_code()); } @Transactional(rollbackFor = Exception.class) @@ -236,7 +236,6 @@ public class PalletOutTask extends AbstractTask { groupPlateMapper.delete( new QueryWrapper().lambda() .eq(GroupPlate::getVehicle_code, taskObj.getVehicle_code()) - .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) ); } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java index f1bbfc4..c863c85 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java @@ -29,6 +29,7 @@ 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.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; @@ -66,9 +67,9 @@ public class TabletingInTask extends AbstractTask { throw new BadRequestException("该载具未存在组桶信息,请先组桶!"); } // 找一个没任务的称重位 - List czws = pointService.getCanUsePointByRegion("ZZC01"); + List czws = pointService.getCanUsePointByRegion("ZJZ01"); if (czws.size() == 0) { - throw new BadRequestException("找不到中转区的称重位!"); + throw new BadRequestException("找不到中间站的称重位!"); } JSONObject jsonObject = bucket.get(0); SchBasePoint point = czws.get(0); @@ -110,7 +111,7 @@ public class TabletingInTask 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); @@ -144,7 +145,7 @@ public class TabletingInTask extends AbstractTask { } } - private void cancelTask(SchBaseTask taskObj) { + public void cancelTask(SchBaseTask taskObj) { // 取消任务 taskService.update(new LambdaUpdateWrapper() .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) @@ -159,7 +160,8 @@ public class TabletingInTask extends AbstractTask { taskService.updateById(taskObj); } - private void finishTask(SchBaseTask taskObj) { + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj) { // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); @@ -173,6 +175,9 @@ public class TabletingInTask extends AbstractTask { .set(SchBasePoint::getIng_task_code, "") ); SchBasePoint startPoint = pointService.getByPointCode(taskObj.getPoint_code2(), false); + if (ObjectUtil.isEmpty(startPoint.getIn_sect())) { + throw new BadRequestException("入库库区设置不能为空!"); + } // todo: 获取重量 groupbucketService.upDateWeight("26.8", taskObj.getVehicle_code()); JSONObject param = new JSONObject(); 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 42d0560..93c5eb9 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 @@ -43,6 +43,7 @@ public enum IOSEnum { OUT_BILL_TYPE(MapOf.of("手工出库", "1009", "原辅料出库", "1001", "批料出库", "1002", + "料桶出库", "1003", "直接出库", "1099" )), @@ -62,7 +63,9 @@ public enum IOSEnum { // 出库任务配置类编码 OUT_CONFIG_CODE(MapOf.of( "1009", "HandOutTask", - "1001", "CallMaterialTask", "1002", "PalletOutTask" + "1001", "CallMaterialTask", + "1002", "PalletOutTask", + "1003", "IntermediateOutTask" )), // 下料任务配置编码 DOWN_CONFIG_CODE(MapOf.of("YPQ", "TabletingInTask" diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IOutBillService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IOutBillService.java index fcac11a..3649d41 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IOutBillService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IOutBillService.java @@ -180,7 +180,7 @@ public interface IOutBillService extends IService { * @param point_code 出库点位 * @param ioStorInv 主表实体类 */ - void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv); + void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv, JSONObject ext); List getCanuseSpecifiedIvt(Map param); 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 10c2936..bfef775 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 @@ -199,7 +199,8 @@ LEFT JOIN md_pb_storagevehicleext e ON ss.storagevehicle_code = e.storagevehicle_code WHERE IFNULL(ss.storagevehicle_code,'') ]]> '' - + AND IFNULL( mg.group_id, '' ) ]]> '' + AND mg.material_id = #{material_id} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java index 89967e3..a0c338b 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java @@ -1088,13 +1088,13 @@ public class OutBillServiceImpl extends ServiceImpl for (IOStorInvDis ioStorInvDis : ioStorInvDisList) { // 创建任务 - iOutBillService.createTask(ioStorInvDis, point_code, ioStorInv); + iOutBillService.createTask(ioStorInvDis, point_code, ioStorInv, whereJson); } } @Override @Transactional - public void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv) { + public void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv, JSONObject ext) { IOStorInvDis newDis = ioStorInvDisMapper.selectById(ioStorInvDis.getIostorinvdis_id()); if (newDis.getWork_status().equals(IOSEnum.INBILL_DIS_STATUS.code("生成"))) { return; @@ -1107,6 +1107,7 @@ public class OutBillServiceImpl extends ServiceImpl task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code()); task_form.put("material_id", ioStorInvDis.getMaterial_id()); task_form.put("material_qty", ioStorInvDis.getPlan_qty()); + task_form.put("ext", ext); if (ioStorInvDis.getIs_check().equals(IOSConstant.ONE)) { task_form.put("is_wait", IOSConstant.ONE); } else {