From e58c2ab58714d22603628ad398b1145de9b6749d Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Thu, 24 Jul 2025 15:56:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=A3=E5=8C=85=E4=B8=8B=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ISectattrService.java | 1 + .../service/dao/Structattr.java | 6 +- .../service/dto/MdPbStoragevehicleextDto.java | 3 +- .../service/dto/StrategyStructParam.java | 4 + .../service/impl/SectattrServiceImpl.java | 8 + .../decisioner/impl/diy/RawOutRuleHandle.java | 23 +++ .../impl/diy/UnpackingRuleHandler.java | 56 ++++++ .../controller/PdaJBController.java | 12 ++ .../sch_manage/service/PdaJBService.java | 4 + .../service/impl/PdaJBServiceImpl.java | 190 ++++++++++++++++-- .../service/mapper/PdaJBMapper.java | 20 +- .../sch_manage/service/mapper/PdaJBMapper.xml | 41 +++- .../service/ISchBasePointService.java | 8 + .../dao/mapper/SchBasePointMapper.java | 2 + .../service/dao/mapper/SchBasePointMapper.xml | 24 +++ .../service/impl/SchBasePointServiceImpl.java | 8 +- .../sch_manage/service/util/AbstractTask.java | 11 + .../service/util/tasks/jb/JbDownAgvTask.java | 87 ++++++++ .../service/util/tasks/jb/JbUpAgvTask.java | 4 +- .../service/dict/ISysDictService.java | 8 + .../service/dict/impl/SysDictServiceImpl.java | 26 ++- .../service/impl/InBillServiceImpl.java | 122 +++++++++-- .../src/views/wms/sch/task/index.vue | 49 ++--- .../src/views/wms/st/inbill/AddDialog.vue | 2 +- .../src/views/wms/st/outbill/StructIvt.vue | 10 +- 25 files changed, 652 insertions(+), 77 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawOutRuleHandle.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java index d2f595e..8be2317 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java @@ -67,4 +67,5 @@ public interface ISectattrService extends IService { */ void changeActive(JSONObject json); + Sectattr findByCode(String code); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java index acd59df..232593c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java @@ -230,9 +230,13 @@ public class Structattr implements Serializable { */ private String remark; + /** + * 放置类型 + */ + private String placement_type; /** * 占用状态:1空位 2空载具 3有料 */ - private Integer placement_type; + private Integer occupancy_state; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/MdPbStoragevehicleextDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/MdPbStoragevehicleextDto.java index ded89d6..0a45b34 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/MdPbStoragevehicleextDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/MdPbStoragevehicleextDto.java @@ -2,13 +2,14 @@ package org.nl.wms.basedata_manage.service.dto; import lombok.Data; import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; +import org.nl.wms.warehouse_manage.service.dao.GroupPlate; /** * @author dsh * 2025/6/5 */ @Data -public class MdPbStoragevehicleextDto extends MdPbStoragevehicleext{ +public class MdPbStoragevehicleextDto extends GroupPlate { /** * 库区标识 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java index e0f4241..35e754a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java @@ -56,4 +56,8 @@ public class StrategyStructParam { * 出入库类型 */ private String ioType; + /** + * 载具类型 + */ + private String dis_id; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java index aafb40e..b4a473a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java @@ -241,4 +241,12 @@ public class SectattrServiceImpl extends ServiceImpl i .eq(Structattr::getSect_id, sect_id) ); } + + @Override + public Sectattr findByCode(String code) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(Sectattr.class) + .eq(Sectattr::getSect_code, code) + .eq(Sectattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")); + return getOne(queryWrapper, false); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawOutRuleHandle.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawOutRuleHandle.java new file mode 100644 index 0000000..205feef --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawOutRuleHandle.java @@ -0,0 +1,23 @@ +package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.diy; + +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 原料出库规则 + * @Author: lyd + * @Date: 2025/7/24 + */ +@Slf4j +@Component("RawOutRuleHandle") +public class RawOutRuleHandle extends Decisioner { + @Override + public List handler(List list, JSONObject param) { + return null; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java new file mode 100644 index 0000000..e1f2138 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/UnpackingRuleHandler.java @@ -0,0 +1,56 @@ +package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.diy; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; +import org.nl.wms.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; +import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; +import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner; +import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 解包入库策略 + * @Author: lyd + * @Date: 2025/7/23 + */ +@Service("unpacking") +@Slf4j +public class UnpackingRuleHandler extends Decisioner { + @Resource + private IStructattrService iStructattrService; + @Resource + private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; + @Resource + private IOStorInvDisMapper disMapper; + @Override + public List handler(List list, JSONObject param) { + IOStorInvDis dis = disMapper.selectById(param.getString("dis_id")); + MdPbStoragevehicleinfo vinfo = iMdPbStoragevehicleinfoService.getByCode(dis.getStoragevehicle_code()); + if (ObjectUtil.isEmpty(vinfo)) { + throw new BadRequestException("载具号【" + dis.getStoragevehicle_code() + "】未维护信息!"); + } + // 获取仓库中对应托盘类型的可出的空桶点位 + List outPoints = iStructattrService.list(new LambdaQueryWrapper() + .eq(Structattr::getOccupancy_state, 2) + .eq(Structattr::getStoragevehicle_type, vinfo.getStoragevehicle_type()) + .eq(Structattr::getLock_type, "0") + .eq(Structattr::getSect_code, param.getString("sect_code")) + .eq(Structattr::getStor_id, param.getString("stor_code")) + .isNotNull(Structattr::getStoragevehicle_code) + .isNull(Structattr::getTask_code)); + if (outPoints.size() == 0) { + throw new BadRequestException("料桶缓存库无空桶!"); + } + return outPoints; + } +} 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 3155adc..aeb14ac 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 @@ -38,4 +38,16 @@ public class PdaJBController { public ResponseEntity callMaterial(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaJBService.callMaterial(whereJson), HttpStatus.OK); } + @PostMapping("/getWeight") + @Log("获取重量") + @SaIgnore + public ResponseEntity getWeight(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaJBService.getWeight(whereJson), HttpStatus.OK); + } + @PostMapping("/downMaterial") + @Log("解包下料") + @SaIgnore + public ResponseEntity downMaterial(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaJBService.downMaterial(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 b390204..2ca9c40 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 @@ -11,4 +11,8 @@ public interface PdaJBService { PdaResponse getOrderList(JSONObject whereJson); PdaResponse callMaterial(JSONObject whereJson); + + PdaResponse getWeight(JSONObject whereJson); + + PdaResponse downMaterial(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 f321687..41a7c28 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 @@ -5,6 +5,7 @@ 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; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; @@ -13,8 +14,10 @@ import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.wms.basedata_manage.enums.BaseDataEnum; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; +import org.nl.wms.basedata_manage.service.ISectattrService; 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.Sectattr; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.pda_manage.sch_manage.service.PdaJBService; import org.nl.wms.pda_manage.sch_manage.service.mapper.PdaJBMapper; @@ -23,15 +26,19 @@ import org.nl.wms.pm_manage.service.IPdmBdWorkorderService; import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder; import org.nl.wms.sch_manage.service.ISchBasePointService; 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.tasks.jb.JbUpAgvTask; +import org.nl.wms.system_manage.service.dict.ISysDictService; +import org.nl.wms.system_manage.service.dict.dao.Dict; import org.nl.wms.warehouse_manage.enums.IOSEnum; +import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService; import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService; import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInv; import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis; import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMapper; -import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvMapper; +import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; import org.nl.wms.warehouse_manage.service.dao.GroupPlate; import org.springframework.beans.factory.annotation.Autowired; @@ -40,9 +47,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; /** * @Author: lyd @@ -75,10 +80,18 @@ public class PdaJBServiceImpl implements PdaJBService { private ISchBasePointService pointService; @Resource private JbUpAgvTask jbUpAgvTask; - + @Resource + private ISysDictService dictService; + @Resource + private ISectattrService sectattrService; + @Resource + private IInBillService inBillService; @Override public PdaResponse getOrderList(JSONObject whereJson) { - List workorders = pdaJBMapper.getUnProductOrderList(whereJson.getString("point_code")); + String flag = whereJson.getString("flag"); + List workorders = pdaJBMapper.getUnProductOrderList( + whereJson.getString("point_code"), + "1".equals(flag) ? "1" : "4"); return PdaResponse.requestParamOk(workorders); } @@ -95,8 +108,8 @@ public class PdaJBServiceImpl implements PdaJBService { if (ObjectUtil.isEmpty(workorder)) { throw new BadRequestException("工单不存在!"); } - if ("3".equals(workorder.getWorkorder_status())) { - throw new BadRequestException("该工单已经执行中,请勿重复开工!"); + if (!"1".equals(workorder.getWorkorder_status())) { + throw new BadRequestException("该工单不是未生产,无法开工!"); } // 出库的仓位 Structattr outStructAttr = structattrService.getByCode(workorder.getStruct_code()); @@ -127,7 +140,7 @@ public class PdaJBServiceImpl implements PdaJBService { ioStorInv.setStor_code(outStructAttr.getStor_code()); ioStorInv.setStor_name(outStructAttr.getStor_name()); ioStorInv.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); - ioStorInv.setBill_type("1009"); + ioStorInv.setBill_type("1010"); ioStorInv.setIs_delete(BaseDataEnum.IS_YES_NOT.code("否")); ioStorInv.setIs_upload(BaseDataEnum.IS_YES_NOT.code("否")); ioStorInv.setInput_optid(currentUserId); @@ -183,7 +196,7 @@ public class PdaJBServiceImpl implements PdaJBService { lock_map.put("inv_code", ioStorInv.getBill_code()); lock_map.put("inv_type", ioStorInv.getBill_type()); lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁")); - iStructattrService.updateStatusByCode("0",lock_map); + iStructattrService.updateStatusByCode("0", lock_map); //更新组盘表冻结数量状态 iMdPbGroupPlateService.update(new LambdaUpdateWrapper() .set(GroupPlate::getFrozen_qty, "1") @@ -192,7 +205,7 @@ public class PdaJBServiceImpl implements PdaJBService { .eq(GroupPlate::getStoragevehicle_code, outStructAttr.getStoragevehicle_code()) .eq(GroupPlate::getPcsn, groupPlate.getPcsn()) .eq(GroupPlate::getMaterial_id, materialbase.getMaterial_id()) - .eq(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("入库"))); + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))); // 2、创建任务、下发 // 获取工单对应的区域的出入点 SchBasePoint inPoint = pointService.getNotTaskByRegionAndType(workorder.getRegion_code(), "3"); @@ -204,7 +217,7 @@ public class PdaJBServiceImpl implements PdaJBService { task_form.put("task_type", "JbUpAgvTask"); task_form.put("group_id", groupPlate.getGroup_id()); task_form.put("order_id", workorder.getWorkorder_id()); - task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE")); + task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); task_form.put("point_code1", outStructAttr.getStruct_code()); task_form.put("point_code2", inPoint.getPoint_code()); task_form.put("vehicle_code", outStructAttr.getStoragevehicle_code()); @@ -232,4 +245,157 @@ public class PdaJBServiceImpl implements PdaJBService { pointService.updateBatchById(Arrays.asList(inPoint, outPoint)); return PdaResponse.requestOk(); } + + @Override + public PdaResponse getWeight(JSONObject whereJson) { + // todo: 调用acs获取 + JSONObject res = new JSONObject(); + res.put("weight", "999.99"); + res.put("flag", "2"); + res.put("message", "重量误差过大,请注意!"); + return PdaResponse.requestParamOk(res); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public PdaResponse downMaterial(JSONObject whereJson) { + // 用任务组的方式下发任务(3条任务) + 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"); + BigDecimal weight = whereJson.getBigDecimal("weight"); + String tpCode = whereJson.getString("tp_code"); + String ltCode = whereJson.getString("lt_code"); + String workorderId = whereJson.getString("workorder_id"); + + 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() + "】不存在!"); + } + // 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.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd")); + 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); + 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); + 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); + return PdaResponse.requestOk(); + } + + private Map buildTaskData(String pointCode, String workorderId, String invId) { + Map jsonMst = new HashMap<>(); + // ru库点 + List rkq = pointService.list(new LambdaUpdateWrapper() + .eq(SchBasePoint::getRegion_code, "RKQ") + .eq(SchBasePoint::getParent_point_code, pointCode) + .isNull(SchBasePoint::getIng_task_code)); + if (rkq.size() == 0) { + throw new BadRequestException("找不到可用的解包区入库点!"); + } + jsonMst.put("point_code", rkq.get(0).getPoint_code()); + // 组织明细数据 + IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( + new QueryWrapper().lambda() + .eq(IOStorInvDtl::getIostorinv_id, invId) + ); + // 查找分配明细 + Map map = new HashMap<>(); + map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id()); + List disDtl = inBillService.getDisDtl(map); + // 类型转换 + ArrayList tableMater = new ArrayList<>(); + disDtl.forEach(item -> { + tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); + }); + jsonMst.put("tableMater", tableMater); + jsonMst.put("workorder_id", workorderId); + return jsonMst; + } + + private JSONObject buildDivStructData(Sectattr sect, String invId) { + JSONObject divObj = new JSONObject(); + divObj.put("sect_code", sect.getSect_code()); + divObj.put("stor_code", sect.getStor_id()); + divObj.put("checked", true); + List ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper() + .eq(IOStorInvDis::getIostorinv_id, invId)); + if (ioStorInvDis.size() == 0) { + throw new BadRequestException("分配明细不存在!"); + } + // 类型转换 + ArrayList tables = new ArrayList<>(); + ioStorInvDis.forEach(item -> { + tables.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); + }); + divObj.put("tableMater", tables); + return divObj; + } + + public static Map buildInsertData(String ltCode, PdmBdWorkorder workorder, MdMeMaterialbase materialbase, GroupPlate groupPlate, Sectattr sect) { + Map insertInvObj = new HashMap(); + ArrayList tableData = new ArrayList<>(); + HashMap table = new HashMap<>(); + tableData.add(table); + insertInvObj.put("stor_id", sect.getStor_id()); + insertInvObj.put("bill_status", "10"); + insertInvObj.put("total_qty", workorder.getPlan_weight()); + insertInvObj.put("detail_count", 1); + insertInvObj.put("bill_type", "0011"); + insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd")); + insertInvObj.put("tableData", tableData); + table.put("group_id", groupPlate.getGroup_id()); + table.put("storagevehicle_code", ltCode); + table.put("storagevehicle_type", workorder.getVehicle_type()); + table.put("material_id", materialbase.getMaterial_id()); + table.put("pcsn", groupPlate.getPcsn()); + table.put("qty", groupPlate.getQty()); + table.put("qty_unit_id", groupPlate.getQty_unit_id()); + table.put("qty_unit_name", groupPlate.getQty_unit_name()); + table.put("fronzen_qty", groupPlate.getFrozen_qty()); + table.put("status", "01"); + table.put("material_code", materialbase.getMaterial_code()); + table.put("material_name", materialbase.getMaterial_name()); + table.put("material_spec", materialbase.getMaterial_spec()); + return insertInvObj; + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.java index c7aec45..4fbe62e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.java @@ -1,6 +1,8 @@ package org.nl.wms.pda_manage.sch_manage.service.mapper; +import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; import java.util.List; @@ -9,5 +11,21 @@ import java.util.List; * @Date: 2025/7/21 */ public interface PdaJBMapper { - List getUnProductOrderList(String pointCode); + List getUnProductOrderList(String pointCode, String workorder_status); + + /** + * 查找没有任务的空桶仓位 + * @param vehicleType + * @param storCode + * @return + */ + List getNoTaskEmptyBarrelStructs(String vehicleType, String storCode); + + /** + * 获取可以用的开该机 + * @param workorder + * @param pointStatus + * @return + */ + List getCanUseCFGJ(PdmBdWorkorder workorder, String pointStatus); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.xml index add7314..837454f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/mapper/PdaJBMapper.xml @@ -2,14 +2,39 @@ + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java index 41c2650..a7db2aa 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java @@ -107,4 +107,12 @@ public interface ISchBasePointService extends IService { pointType, String pointCode, String vehicleIsNull, boolean isFourPoint); SchBasePoint getNotTaskByRegionAndType(String regionCode, String s); + + /** + * 获取可用的没任务的点位 + * @param parentPoint + * @param pointStatus + * @return + */ + List getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java index 69c6d83..fa5c4d6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java @@ -46,4 +46,6 @@ public interface SchBasePointMapper extends BaseMapper { IPage selectPageLeftJoin(IPage pages, SchBasePointQuery whereJson); SchBasePoint getNotTaskByRegionAndType(String regionCode, String type); + + List getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml index e8e5b32..e1f5314 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml @@ -86,4 +86,28 @@ AND t.point_code4 = p.point_code )) + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java index 7bbf441..71ed5f3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java @@ -172,8 +172,7 @@ public class SchBasePointServiceImpl extends ServiceImpl() - .eq(SchBasePoint::getRegion_code, region.getRegion_code()) - .eq(SchBasePoint::getIs_has_workder, true)); + .eq(SchBasePoint::getRegion_code, region.getRegion_code())); } @Override @@ -292,4 +291,9 @@ public class SchBasePointServiceImpl extends ServiceImpl getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus) { + return this.baseMapper.getCanUseCFGJs(parentPoint, pointStatus); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java index 739578c..9ad0afa 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; import org.nl.wms.ext_manage.service.WmsToAcsService; import org.nl.wms.ext_manage.service.util.AcsResponse; import org.nl.wms.sch_manage.enums.TaskStatus; @@ -142,6 +143,16 @@ public abstract class AbstractTask { return resultForAcs; } + /** + * 申请任务 + * + * @param param + * @throws BadRequestException + */ + public void apply(JSONObject param) throws BadRequestException { + + } + /** * 反馈任务状态 * @param taskCode 任务编码 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java new file mode 100644 index 0000000..60b1a7b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java @@ -0,0 +1,87 @@ +package org.nl.wms.sch_manage.service.util.tasks.jb; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +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.ArrayList; +import java.util.List; + +/** + * 解包下料 + * @Author: lyd + * @Date: 2025/7/24 + */ +@Slf4j +@Component("JbDownAgvTask") +public class JbDownAgvTask extends AbstractTask { + @Resource + private ISchBaseTaskService taskService; + @Override + public String create(JSONObject param) { + // 改造:多条任务 + JSONArray tasks = param.getJSONArray("tasks"); + List batchTask = new ArrayList<>(); + for (int i = 0; i < tasks.size(); i++) { + JSONObject json = tasks.getJSONObject(i); + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(json.getString("TaskCode")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(json.getString("task_type")); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setPoint_code3(json.getString("point_code3")); + task.setPoint_code4(json.getString("point_code4")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setVehicle_code2(json.getString("vehicle_code2")); + task.setGroup_id(json.getString("group_id")); + task.setTask_group_id(json.getString("task_group_id")); + task.setTask_group_seq(json.getBigDecimal("task_group_seq")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + batchTask.add(task); + } + + taskService.saveBatch(batchTask); + return batchTask.get(2).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 backMes(String task_code) { + + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java index 7526ee9..cbabfb6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java @@ -35,7 +35,7 @@ import javax.annotation.Resource; */ @Component("JbUpAgvTask") public class JbUpAgvTask extends AbstractTask { - @Autowired + @Resource private ISchBaseTaskService taskService; @Resource private IOStorInvDisMapper ioStorInvDisMapper; @@ -127,7 +127,7 @@ public class JbUpAgvTask extends AbstractTask { JSONObject requestParam = JSONObject.parseObject(taskObj.getRequest_param()); String orderId = requestParam.getString("order_id"); workorderService.update(new LambdaUpdateWrapper() - .set(PdmBdWorkorder::getWorkorder_status, "5") + .set(PdmBdWorkorder::getWorkorder_status, "4") .set(PdmBdWorkorder::getReal_qty, 1) .set(PdmBdWorkorder::getRealproduceend_date, DateUtil.now()) .eq(PdmBdWorkorder::getWorkorder_id, orderId)); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/ISysDictService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/ISysDictService.java index 5f3f324..0dba017 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/ISysDictService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/ISysDictService.java @@ -89,4 +89,12 @@ public interface ISysDictService extends IService { * 动态枚举信息 */ List dynamicTableEnum(String table,String label,String value); + + /** + * 获取key-value的对象 + * @param code + * @param value + * @return + */ + Dict getDictByCodeAndValue(String code, String value); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/impl/SysDictServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/impl/SysDictServiceImpl.java index b2dfe96..b698a78 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/impl/SysDictServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/service/dict/impl/SysDictServiceImpl.java @@ -48,7 +48,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme .like(ObjectUtil.isNotEmpty(blurry), Dict::getCode, blurry) .or(ObjectUtil.isNotEmpty(blurry)) .like(ObjectUtil.isNotEmpty(blurry), Dict::getName, blurry) - .orderBy(true, true, Dict::getCode) + .orderBy(true, true, Dict::getCode) .groupBy(Dict::getCode, Dict::getName)); return pages; } @@ -61,7 +61,8 @@ public class SysDictServiceImpl extends ServiceImpl impleme String date = DateUtil.now(); List oldDict = sysDictMapper.selectList(new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(dict.getCode()), Dict::getCode, dict.getCode())); - if (ObjectUtil.isNotEmpty(oldDict)) throw new BadRequestException(LangProcess.msg("error_ParamExist",dict.getCode())); + if (ObjectUtil.isNotEmpty(oldDict)) + throw new BadRequestException(LangProcess.msg("error_ParamExist", dict.getCode())); dict.setDict_id(IdUtil.getSnowflake(1, 1).nextIdStr()); dict.setCreate_id(currentUserId); dict.setCreate_name(nickName); @@ -81,7 +82,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme } List dictList = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, dto.getCode())); if (ObjectUtil.isNotEmpty(dictList) && !dto.getCode().equals(dict.getCode())) - throw new BadRequestException(LangProcess.msg("error_ParamExist",dto.getCode())); + throw new BadRequestException(LangProcess.msg("error_ParamExist", dto.getCode())); String currentUserId = SecurityUtils.getCurrentUserId(); String currentNickName = SecurityUtils.getCurrentNickName(); // 根据code获取所有字典 @@ -132,7 +133,8 @@ public class SysDictServiceImpl extends ServiceImpl impleme // 校验是否已经有标签 Dict one = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(Dict::getLabel, dict.getLabel()) .eq(Dict::getCode, dict.getCode())); - if (ObjectUtil.isNotEmpty(one)) throw new BadRequestException(LangProcess.msg("error_ParamExist",dict.getCode())); + if (ObjectUtil.isNotEmpty(one)) + throw new BadRequestException(LangProcess.msg("error_ParamExist", dict.getCode())); // 判断是否有空的值 List selectOne = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, dict.getCode())); Dict dic = selectOne.get(0); @@ -173,7 +175,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme List dictList = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getLabel, resources.getLabel()) .eq(Dict::getCode, resources.getCode())); if (ObjectUtil.isNotEmpty(dictList) && !resources.getLabel().equals(dict.getLabel())) { - throw new BadRequestException(LangProcess.msg("error_ParamExist",resources.getLabel())); + throw new BadRequestException(LangProcess.msg("error_ParamExist", resources.getLabel())); } resources.setUpdate_id(SecurityUtils.getCurrentUserId()); resources.setUpdate_name(SecurityUtils.getCurrentNickName()); @@ -197,9 +199,19 @@ public class SysDictServiceImpl extends ServiceImpl impleme @Override public List dynamicTableEnum(String table, String label, String value) { - if (StringUtils.isEmpty(table)||StringUtils.isEmpty(label)||StringUtils.isEmpty(value)){ + if (StringUtils.isEmpty(table) || StringUtils.isEmpty(label) || StringUtils.isEmpty(value)) { throw new BadRequestException("参数不能为空"); } - return this.sysDictMapper.dynamicTableEnum(table,label,value); + return this.sysDictMapper.dynamicTableEnum(table, label, value); + } + + @Override + public Dict getDictByCodeAndValue(String code, String value) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(Dict::getCode, code) + .eq(Dict::getValue, value) + .isNotNull(Dict::getLabel) + .ne(Dict::getLabel, ""); + return getOne(lam, false); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java index a8f638b..908bc1c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -28,8 +29,11 @@ import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleinfoMappe import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto; import org.nl.wms.sch_manage.enums.StatusEnum; +import org.nl.wms.sch_manage.service.ISchBasePointService; +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.tasks.StInTask; +import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask; import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; @@ -84,6 +88,10 @@ public class InBillServiceImpl extends ServiceImpl i @Resource private MdPbGroupplateServiceImpl mdPbGroupplateService; + @Resource + private ISchBasePointService pointService; + @Resource + private JbDownAgvTask jbDownAgvTask; @Override public IPage pageQuery(Map whereJson, PageQuery page) { @@ -358,6 +366,7 @@ public class InBillServiceImpl extends ServiceImpl i .material_code(param.getString("material_code")) .qty(new BigDecimal(param.getString("qty"))) .pcsn(param.getString("pcsn")) + .dis_id(map.get("iostorinvdis_id")) .build()); Structattr struct = structattrs.get(0); sect_id = struct.getSect_id(); @@ -525,21 +534,108 @@ public class InBillServiceImpl extends ServiceImpl i if (ObjectUtil.isEmpty(ioStorInvDis)){ throw new BadRequestException("该明细还没分配货位,请先分配货位"); } + IOStorInv invObj = this.getById(map.get("iostorinv_id")); + String task_id = ""; + if ("0011".equals(invObj.getBill_type())) { + String structCode = map.get("struct_code"); + if (ObjectUtil.isEmpty(structCode)) { + throw new BadRequestException("仓位未分配!"); + } + // 获取组盘信息 + GroupPlate groupPlate = mdPbGroupplateService.getOne(new LambdaQueryWrapper() + .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))); - //创建任务 - JSONObject task_form = new JSONObject(); - task_form.put("task_type", "STInTask"); - task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); - task_form.put("PickingLocation", point_code); - task_form.put("PlacedLocation", ioStorInvDis.getStruct_code()); - task_form.put("vehicle_code", map.get("storagevehicle_code")); - // GroupPlate groupPlate = mdPbGroupplateMapper.selectOne(new LambdaQueryWrapper<>(GroupPlate.class) - // .eq(GroupPlate::getStoragevehicle_code,map.get("storagevehicle_code")) - // ); - // task_form.put("group_id", groupPlate.getGroup_id()); - StInTask stInTask = SpringContextHolder.getBean("STInTask"); + Structattr inStruct = iStructattrService.findByCode(structCode); + // 解包入库 (创建3条任务,并且为一组) + SchBasePoint rkPoint = pointService.getById(point_code); + // 父点位 + SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code()); + // 2、创建任务(4条任务、优先级需要获取所有的任务中的最小值并且-1,默认8) + // 获取工单对应的区域的出入点 + SchBasePoint intoPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "2"); + SchBasePoint emptyPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "5"); + SchBasePoint fullPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "6"); + // 获取有盖子的对应的点位 + List canUseCFGJs = pointService.getCanUseCFGJs(parentPoint, "2"); + if (canUseCFGJs.size() == 0) { + throw new BadRequestException("找不到可用的拆封盖机"); + } + SchBasePoint cfgjPoint = canUseCFGJs.get(0); + // 创建任务1 + String taskGroupId = IdUtil.getStringId(); + JSONObject task1 = new JSONObject(); + task1.put("task_type", "JbDownAgvTask"); + task1.put("group_id", groupPlate.getGroup_id()); + task1.put("workorder_id", whereJson.get("workorder_id")); + task1.put("task_group_id", taskGroupId); + task1.put("task_group_seq", 1); + task1.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + task1.put("point_code1", structCode); + task1.put("point_code2", cfgjPoint.getPoint_code()); + task1.put("point_code3", cfgjPoint.getPoint_code()); + task1.put("point_code4", emptyPoint.getPoint_code()); + task1.put("seq", 1); + // 空托盘 + task1.put("vehicle_code", inStruct.getStoragevehicle_code()); + // 入库的满托盘 + task1.put("vehicle_code2", map.get("storagevehicle_code")); + + // 创建任务2 + JSONObject task2 = new JSONObject(); + task2.put("task_type", "JbDownAgvTask"); + task2.put("group_id", groupPlate.getGroup_id()); + task2.put("task_group_id", taskGroupId); + task2.put("task_group_seq", 2); + task2.put("workorder_id", whereJson.get("workorder_id")); + task2.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + task2.put("point_code1", intoPoint.getPoint_code()); + task2.put("point_code2", fullPoint.getPoint_code()); + task2.put("point_code3", emptyPoint.getPoint_code()); + task2.put("point_code4", intoPoint.getPoint_code()); + task2.put("seq", 2); + // 空托盘 + task2.put("vehicle_code", inStruct.getStoragevehicle_code()); + // 入库的满托盘 + task2.put("vehicle_code2", map.get("storagevehicle_code")); + + // 创建任务3 + JSONObject task3 = new JSONObject(); + task3.put("task_type", "JbDownAgvTask"); + task3.put("group_id", groupPlate.getGroup_id()); + task3.put("task_group_id", taskGroupId); + task3.put("task_group_seq", 3); + task3.put("workorder_id", whereJson.get("workorder_id")); + task3.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + task3.put("point_code1", fullPoint.getPoint_code()); + task3.put("point_code2", cfgjPoint.getPoint_code()); + task3.put("point_code3", cfgjPoint.getPoint_code()); + task3.put("point_code4", structCode); + task3.put("seq", 3); + // 空托盘 + task3.put("vehicle_code", inStruct.getStoragevehicle_code()); + // 入库的满托盘 + task3.put("vehicle_code2", map.get("storagevehicle_code")); + List jsonObjects = Arrays.asList(task1, task2, task3); + JSONObject requestTaskParam = new JSONObject(); + requestTaskParam.put("tasks", jsonObjects); + jbDownAgvTask.create(requestTaskParam); + } else { + //创建任务 + JSONObject task_form = new JSONObject(); + task_form.put("task_type", "STInTask"); + task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + task_form.put("PickingLocation", point_code); + task_form.put("PlacedLocation", ioStorInvDis.getStruct_code()); + task_form.put("vehicle_code", map.get("storagevehicle_code")); + // GroupPlate groupPlate = mdPbGroupplateMapper.selectOne(new LambdaQueryWrapper<>(GroupPlate.class) + // .eq(GroupPlate::getStoragevehicle_code,map.get("storagevehicle_code")) + // ); + // task_form.put("group_id", groupPlate.getGroup_id()); + StInTask stInTask = SpringContextHolder.getBean("STInTask"); + task_id = stInTask.create(task_form); + } - String task_id = stInTask.create(task_form); //分配明细表更新任务相关数据 IOStorInvDis dis = new IOStorInvDis(); diff --git a/lms/nladmin-ui/src/views/wms/sch/task/index.vue b/lms/nladmin-ui/src/views/wms/sch/task/index.vue index c59091d..d803f9b 100644 --- a/lms/nladmin-ui/src/views/wms/sch/task/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/task/index.vue @@ -32,12 +32,13 @@ - + + :value="item.config_code" + > {{ item.config_code }} {{ item.task_name }} @@ -60,8 +61,8 @@ range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" - @change="crud.toQuery"> - + @change="crud.toQuery" + /> - - - + + + @@ -179,12 +180,12 @@ {{ scope.row.vehicle_code ? scope.row.vehicle_code : '-' }} - - + +