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 671a2de..1a11767 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 @@ -57,8 +57,15 @@ public class StrategyStructParam { */ private String ioType; + /** * 出入库类型 */ private String stragegyType; + + /** + * 载具类型 + */ + 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/basedata_manage/service/impl/StructattrServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java index 4231f6c..71fb41d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java @@ -196,7 +196,7 @@ public class StructattrServiceImpl extends ServiceImpl { + @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..f87ef34 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); } @@ -86,17 +99,15 @@ public class PdaJBServiceImpl implements PdaJBService { @Transactional(rollbackFor = Exception.class) public PdaResponse callMaterial(JSONObject whereJson) { log.info("解包叫料,请求参数:{}", whereJson); - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); // workorder_id、area、point_code + String pointCode = whereJson.getString("point_code"); String workorderId = whereJson.getString("workorder_id"); PdmBdWorkorder workorder = workorderService.getById(workorderId); 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()); @@ -114,122 +125,229 @@ public class PdaJBServiceImpl implements PdaJBService { throw new BadRequestException("托盘[" + outStructAttr.getStoragevehicle_code() + "]组盘信息不存在!"); } // 1、创建出库单、明细、分配明细 - // 1.1 单据表 - String invId = IdUtil.getStringId(); - IOStorInv ioStorInv = new IOStorInv(); - ioStorInv.setIostorinv_id(invId); - ioStorInv.setBill_code(CodeUtil.getNewCode("OUT_STORE_CODE")); - ioStorInv.setBiz_date(DateUtil.format(new Date(), "yyyy-MM-dd")); - ioStorInv.setIo_type(IOSEnum.IO_TYPE.code("出库")); - ioStorInv.setDetail_count(1); - ioStorInv.setCreate_mode(IOSEnum.CREATE_MODE.code("终端产生")); - ioStorInv.setStor_id(outStructAttr.getStor_id()); - ioStorInv.setStor_code(outStructAttr.getStor_code()); - ioStorInv.setStor_name(outStructAttr.getStor_name()); - ioStorInv.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); - ioStorInv.setBill_type("1009"); - ioStorInv.setIs_delete(BaseDataEnum.IS_YES_NOT.code("否")); - ioStorInv.setIs_upload(BaseDataEnum.IS_YES_NOT.code("否")); - ioStorInv.setInput_optid(currentUserId); - ioStorInv.setInput_optname(nickName); - ioStorInv.setInput_time(now); - ioStorInv.setUpdate_optid(currentUserId); - ioStorInv.setUpdate_optname(nickName); - ioStorInv.setUpdate_time(now); - ioStorInv.setTotal_qty(BigDecimal.valueOf(1)); - ioStorInv.setDetail_count(1); - outBillService.save(ioStorInv); - // 1.2 单据明细 - IOStorInvDtl dtl = new IOStorInvDtl(); - dtl.setIostorinvdtl_id(IdUtil.getStringId()); - dtl.setIostorinv_id(invId); - dtl.setSeq_no("1"); - dtl.setMaterial_id(materialbase.getMaterial_id()); - dtl.setMaterial_code(materialbase.getMaterial_code()); - dtl.setPcsn(groupPlate.getPcsn()); - dtl.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); - dtl.setQty_unit_id(groupPlate.getQty_unit_id()); - dtl.setQty_unit_name(groupPlate.getQty_unit_name()); - dtl.setPlan_qty(BigDecimal.ONE); - dtl.setAssign_qty(BigDecimal.ONE); - dtl.setUnassign_qty(BigDecimal.ZERO); - ioStorInvDtlMapper.insert(dtl); - // 1.3 分配明细 - IOStorInvDis ioStorInvDis = new IOStorInvDis(); - ioStorInvDis.setIostorinvdis_id(IdUtil.getStringId()); - ioStorInvDis.setIostorinv_id(dtl.getIostorinv_id()); - ioStorInvDis.setIostorinvdtl_id(dtl.getIostorinvdtl_id()); - ioStorInvDis.setSeq_no("1"); - ioStorInvDis.setSect_id(outStructAttr.getSect_id()); - ioStorInvDis.setPcsn(groupPlate.getPcsn()); - ioStorInvDis.setMaterial_id(materialbase.getMaterial_id()); - ioStorInvDis.setMaterial_code(materialbase.getMaterial_code()); - ioStorInvDis.setSect_name(outStructAttr.getSect_name()); - ioStorInvDis.setSect_code(outStructAttr.getSect_code()); - ioStorInvDis.setStruct_id(outStructAttr.getStruct_id()); - ioStorInvDis.setStruct_name(outStructAttr.getStruct_name()); - ioStorInvDis.setStruct_code(outStructAttr.getStruct_code()); - ioStorInvDis.setStoragevehicle_code(outStructAttr.getStoragevehicle_code()); - ioStorInvDis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("否")); - ioStorInvDis.setQty_unit_id(groupPlate.getQty_unit_id()); - ioStorInvDis.setQty_unit_name(groupPlate.getQty_unit_name()); - ioStorInvDis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成")); - ioStorInvDis.setPlan_qty(groupPlate.getFrozen_qty()); + JSONObject insertInvObj = new JSONObject(); + JSONArray tableData = new JSONArray(); + JSONObject table = new JSONObject(); + tableData.add(table); + insertInvObj.put("stor_id", outStructAttr.getStor_id()); + insertInvObj.put("stor_code", outStructAttr.getStor_code()); + insertInvObj.put("bill_status", "10"); + insertInvObj.put("total_qty", workorder.getPlan_weight()); + insertInvObj.put("detail_count", 1); + insertInvObj.put("bill_type", "1012"); + insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd")); + insertInvObj.put("tableData", tableData); + table.put("turnout_struct_code", outStructAttr.getStruct_code()); + table.put("turnout_sect_code", outStructAttr.getSect_code()); + table.put("turnout_sect_name", outStructAttr.getSect_name()); + table.put("sect_id", outStructAttr.getSect_id()); + table.put("struct_id", outStructAttr.getStruct_id()); + table.put("group_id", groupPlate.getGroup_id()); + table.put("storagevehicle_code", outStructAttr.getStoragevehicle_code()); + 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", 0); + 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()); + String invId = outBillService.insertDtl(insertInvObj); + // 调用手工分配 + JSONObject param = new JSONObject(); + JSONObject row = new JSONObject(); + JSONArray rows = new JSONArray(); + rows.add(row); + param.put("rows", rows); + IOStorInvDtl dtl = ioStorInvDtlMapper.selectOne(new LambdaQueryWrapper() + .eq(IOStorInvDtl::getIostorinv_id, invId)); + param.put("row", dtl); + row.put("storagevehicle_code", outStructAttr.getStoragevehicle_code()); + row.put("pcsn", groupPlate.getPcsn()); + row.put("qty", groupPlate.getQty()); + row.put("qty_unit_name", groupPlate.getQty_unit_name()); + row.put("frozen_qty", groupPlate.getFrozen_qty()); + row.put("struct_id", outStructAttr.getStruct_id()); + row.put("struct_code", outStructAttr.getStruct_code()); + row.put("struct_name", outStructAttr.getStruct_name()); + row.put("sect_id", outStructAttr.getSect_id()); + row.put("sect_code", outStructAttr.getSect_code()); + row.put("sect_name", outStructAttr.getSect_name()); + row.put("material_code", groupPlate.getMaterial_code()); + row.put("material_name", groupPlate.getMaterial_name()); + row.put("edit", true); + outBillService.manualDiv(param); - // 1.3 仓位锁住 - JSONObject lock_map = new JSONObject(); - lock_map.put("struct_code", outStructAttr.getStruct_code()); - lock_map.put("inv_id", ioStorInv.getIostorinv_id()); - 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); - //更新组盘表冻结数量状态 - iMdPbGroupPlateService.update(new LambdaUpdateWrapper() - .set(GroupPlate::getFrozen_qty, "1") - .set(GroupPlate::getUpdate_time, now) - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) - .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("入库"))); - // 2、创建任务、下发 - // 获取工单对应的区域的出入点 - SchBasePoint inPoint = pointService.getNotTaskByRegionAndType(workorder.getRegion_code(), "3"); - SchBasePoint outPoint = pointService.getNotTaskByRegionAndType(workorder.getRegion_code(), "4"); - if (ObjectUtil.isEmpty(inPoint) || ObjectUtil.isEmpty(outPoint)) { - throw new BadRequestException("解包机输送线点位不存在或者存在任务!"); - } - JSONObject task_form = new JSONObject(); - 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("point_code1", outStructAttr.getStruct_code()); - task_form.put("point_code2", inPoint.getPoint_code()); - task_form.put("vehicle_code", outStructAttr.getStoragevehicle_code()); - if ("2".equals(outPoint.getPoint_status())) { - // 四点任务 - task_form.put("point_code3", outPoint.getPoint_code()); - task_form.put("point_code4", outStructAttr.getStruct_code()); - task_form.put("vehicle_code2", outPoint.getVehicle_code()); - } - String task_id = jbUpAgvTask.create(task_form); - ioStorInvDis.setTask_id(task_id); - ioStorInvDis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是")); - ioStorInvDis.setPoint_code(outStructAttr.getStruct_code()); - ioStorInvDisMapper.insert(ioStorInvDis); + // 创建任务 + SchBasePoint outPoint = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getParent_point_code, pointCode) + .eq(SchBasePoint::getRegion_code, "CKQ")); + JSONObject taskParam = new JSONObject(); + taskParam.put("order_id", workorderId); + taskParam.put("iostorinv_id", invId); + taskParam.put("point_code", outPoint.getPoint_code()); + outBillService.allSetPoint(taskParam); // 3、工单状态修改,设置实际开始时间 workorder.setWorkorder_status("3"); workorder.setRealproducestart_date(DateUtil.now()); workorderService.updateById(workorder); - - inPoint.setIng_task_code(task_id); - if ("2".equals(outPoint.getPoint_status())) { - outPoint.setIng_task_code(task_id); - } - 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/controller/SchBasePointController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java index e78c935..6bc3bd1 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java @@ -76,6 +76,11 @@ public class SchBasePointController { public ResponseEntity getPointList(@RequestBody(required = false) SchBasePoint region) { return new ResponseEntity<>(schBasePointService.getPointList(region), HttpStatus.OK); } + @PostMapping("/getPointList2") + @Log("获取区域下拉框") + public ResponseEntity getPointList2(@RequestBody(required = false) SchBasePoint region) { + return new ResponseEntity<>(schBasePointService.getPointList2(region), HttpStatus.OK); + } @Log("锁定与解锁") @PostMapping("/changeLock") 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 9755f04..76f4bd6 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 @@ -114,4 +114,14 @@ 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); + + List getPointList2(SchBasePoint region); } 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 99e52b4..12e3f76 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 @@ -189,7 +189,6 @@ public class SchBasePointServiceImpl extends ServiceImpl() .eq(SchBasePoint::getRegion_code, region.getRegion_code()) - //点位类型,根据传入的值是否为空增加判断 .eq(StringUtils.isNotBlank(region.getPoint_type()), SchBasePoint::getPoint_type, region.getPoint_type()) .eq(SchBasePoint::getIs_has_workder, true)); @@ -311,4 +310,19 @@ public class SchBasePointServiceImpl extends ServiceImpl getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus) { + return this.baseMapper.getCanUseCFGJs(parentPoint, pointStatus); + } + + @Override + public List getPointList2(SchBasePoint region) { + if (ObjectUtil.isEmpty(region)) { + return this.list(); + } + return pointMapper.selectList(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, region.getRegion_code()) + .eq(SchBasePoint::getIs_has_workder, true)); + } + } 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..03a3a59 --- /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,186 @@ +package org.nl.wms.sch_manage.service.util.tasks.jb; + +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.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder; +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.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +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.dao.IOStorInvDis; +import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; +import org.nl.wms.warehouse_manage.service.dao.GroupPlate; +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; + @Resource + private IInBillService inBillService; + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + @Resource + private ISchBasePointService pointService; + @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) { + // 校验任务 + 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); + } + } + + private void cancelTask(SchBaseTask taskObj) { + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .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()) + ); + } + + private void finishTask(SchBaseTask taskObj) { + // 任务完成 + taskObj.setRemark("等待最后一条任务完成"); + if ("1".equals(taskObj.getTask_group_seq().toString())) { + // 开盖设置成有盖 + SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2()); + khgPoint.setPoint_status("2"); + khgPoint.setUpdate_time(DateUtil.now()); + pointService.updateById(khgPoint); + } + if ("2".equals(taskObj.getTask_group_seq().toString())) { + SchBasePoint jbjPoint = pointService.getById(taskObj.getPoint_code1()); + jbjPoint.setPoint_status("2"); + jbjPoint.setVehicle_code(taskObj.getVehicle_code()); + jbjPoint.setUpdate_time(DateUtil.now()); + pointService.updateById(jbjPoint); + } + if ("3".equals(taskObj.getTask_group_seq().toString())) { + // 开盖设置成有盖 + SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2()); + khgPoint.setPoint_status("2"); + khgPoint.setUpdate_time(DateUtil.now()); + pointService.updateById(khgPoint); + SchBaseTask task = new SchBaseTask(); + task.setTask_status(TaskStatus.FINISHED.getCode()); + task.setRemark("任务执行完毕"); + taskService.update(task, new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_group_id, taskObj.getTask_group_id())); + inBillService.taskFinish(taskObj); + return; + } + taskService.updateById(taskObj); + } + + @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 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..195f8ef 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 @@ -7,7 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.nl.common.exception.BadRequestException; 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.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.pm_manage.service.IPdmBdWorkorderService; import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder; import org.nl.wms.sch_manage.enums.TaskStatus; @@ -23,19 +24,19 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; import org.nl.wms.warehouse_manage.service.dao.GroupPlate; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * 解包上料AGV任务 + * * @Author: lyd * @Date: 2025/7/22 */ @Component("JbUpAgvTask") public class JbUpAgvTask extends AbstractTask { - @Autowired + @Resource private ISchBaseTaskService taskService; @Resource private IOStorInvDisMapper ioStorInvDisMapper; @@ -47,6 +48,9 @@ public class JbUpAgvTask extends AbstractTask { private ISchBasePointService pointService; @Resource private IMdPbGroupplateService groupplateService; + @Resource + private IStructattrService structattrService; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -103,17 +107,17 @@ public class JbUpAgvTask extends AbstractTask { // 取消任务 taskService.update(new LambdaUpdateWrapper() .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) - .set(SchBaseTask::getRemark,"已取消") - .eq(SchBaseTask::getTask_id,taskObj.getTask_id()) + .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) + 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()) + .eq(IOStorInvDis::getTask_id, taskObj.getTask_id()) ); } @@ -126,16 +130,18 @@ 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::getReal_qty, 1) - .set(PdmBdWorkorder::getRealproduceend_date, DateUtil.now()) - .eq(PdmBdWorkorder::getWorkorder_id, orderId)); + if (ObjectUtil.isNotEmpty(orderId)) { + workorderService.update(new LambdaUpdateWrapper() + .set(PdmBdWorkorder::getWorkorder_status, "4") + .set(PdmBdWorkorder::getReal_qty, 1) + .set(PdmBdWorkorder::getRealproduceend_date, DateUtil.now()) + .eq(PdmBdWorkorder::getWorkorder_id, orderId)); + } // 点位设置值 pointService.update(new LambdaUpdateWrapper() .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) .set(SchBasePoint::getPoint_status, "3") - .set(SchBasePoint::getIng_task_code, "") + .set(SchBasePoint::getIng_task_code, null) .set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) .set(SchBasePoint::getUpdate_time, DateUtil.now()) @@ -143,22 +149,18 @@ public class JbUpAgvTask extends AbstractTask { if (ObjectUtil.isNotEmpty(taskObj.getPoint_code3())) { pointService.update(new LambdaUpdateWrapper() .set(SchBasePoint::getVehicle_code, "") - .set(SchBasePoint::getIng_task_code, "") + .set(SchBasePoint::getIng_task_code, null) .set(SchBasePoint::getPoint_status, "1") .set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) .set(SchBasePoint::getUpdate_time, DateUtil.now()) .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code3())); + // 仓位设置空托盘 + structattrService.update(new LambdaUpdateWrapper() + .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code2()) + .set(Structattr::getOccupancy_state, 2) + .eq(Structattr::getStruct_code, taskObj.getPoint_code4())); } - - groupplateService.update(new LambdaUpdateWrapper() - .set(GroupPlate::getFrozen_qty, "1") - .set(GroupPlate::getUpdate_time, DateUtil.now()) - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) - .eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code()) -// .eq(GroupPlate::getPcsn, w.getPcsn()) -// .eq(GroupPlate::getMaterial_id, materialbase.getMaterial_id()) - .eq(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("入库"))); } @Override 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 9dc1e7d..545cfea 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, "1"); + 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); + task_id = 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-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java index a4fecd5..8c41756 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java @@ -28,11 +28,13 @@ import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; 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.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.dao.mapper.SchBasePointMapper; import org.nl.wms.sch_manage.service.util.tasks.StOutTask; +import org.nl.wms.sch_manage.service.util.tasks.jb.JbUpAgvTask; import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; @@ -46,6 +48,7 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMappe 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.inAndOut.service.dto.IOStorInvDtlDto; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -69,6 +72,8 @@ public class OutBillServiceImpl extends ServiceImpl i @Resource private IStructattrService iStructattrService; + @Resource + private ISchBasePointService pointService; /** * 载具扩展属性mapper @@ -94,6 +99,8 @@ public class OutBillServiceImpl extends ServiceImpl i @Resource private IMdPbGroupplateService iMdPbGroupPlateService; + @Autowired + private JbUpAgvTask jbUpAgvTask; @Override @@ -575,7 +582,7 @@ public class OutBillServiceImpl extends ServiceImpl i ioStorInvDis.setSect_id(outAllocation.getSect_id()); ioStorInvDis.setPcsn(outAllocation.getPcsn()); ioStorInvDis.setMaterial_id(outAllocation.getMaterial_id()); - ioStorInvDis.setMaterial_code(outAllocation.getMaterial_code()); +// ioStorInvDis.setMaterial_code(outAllocation.getMaterial_code()); ioStorInvDis.setSect_name(outAllocation.getSect_name()); ioStorInvDis.setSect_code(outAllocation.getSect_code()); ioStorInvDis.setStruct_id(outAllocation.getStruct_id()); @@ -753,7 +760,7 @@ public class OutBillServiceImpl extends ServiceImpl i double allocation_canuse_qty = 0; for (int i = 0; i < rows.size(); i++){ JSONObject ivt = rows.getJSONObject(i); - double canuse_qty = ivt.getDoubleValue("canuse_qty"); + double canuse_qty = ivt.getDoubleValue("qty"); //分配明细 IOStorInvDis ioStorInvDis = new IOStorInvDis(); ioStorInvDis.setIostorinvdis_id(IdUtil.getStringId()); @@ -763,6 +770,7 @@ public class OutBillServiceImpl extends ServiceImpl i ioStorInvDis.setSect_id(ivt.getString("sect_id")); ioStorInvDis.setPcsn(ivt.getString("pcsn")); ioStorInvDis.setMaterial_id(dtl.getMaterial_id()); + ioStorInvDis.setMaterial_code(dtl.getMaterial_code()); ioStorInvDis.setSect_name(ivt.getString("sect_name")); ioStorInvDis.setSect_code(ivt.getString("sect_code")); ioStorInvDis.setStruct_id(ivt.getString("struct_id")); @@ -952,19 +960,49 @@ public class OutBillServiceImpl extends ServiceImpl i if (ObjectUtil.isEmpty(ioStorInvDisList)){ throw new BadRequestException("当前没有可设置的分配明细"); } - + String task_id = ""; for (IOStorInvDis ioStorInvDis:ioStorInvDisList){ - //创建任务 - JSONObject task_form = new JSONObject(); - task_form.put("task_type", "STOutTask"); - task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE")); - task_form.put("PickingLocation", ioStorInvDis.getStruct_code()); - task_form.put("PlacedLocation", point_code); - task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code()); + if ("1012".equals(ioStorInv.getBill_type())) { + // 解包需要单独操作 + SchBasePoint ckPoint = pointService.getById(point_code); + SchBasePoint outPointP = pointService.getById(ckPoint.getParent_point_code()); + SchBasePoint inPoint = pointService.getNotTaskByRegionAndType(outPointP.getRegion_code(), "3"); + SchBasePoint outPoint = pointService.getNotTaskByRegionAndType(outPointP.getRegion_code(), "4"); + if (ObjectUtil.isEmpty(inPoint) || ObjectUtil.isEmpty(outPoint)) { + throw new BadRequestException("解包机输送线点位不存在或者存在任务!"); + } + JSONObject task_form = new JSONObject(); + task_form.put("task_type", "JbUpAgvTask"); + task_form.put("order_id", whereJson.getString("order_id")); + task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + task_form.put("point_code1", ioStorInvDis.getStruct_code()); + task_form.put("point_code2", inPoint.getPoint_code()); + task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code()); + if ("2".equals(outPoint.getPoint_status())) { + // 四点任务 + task_form.put("point_code3", outPoint.getPoint_code()); + task_form.put("point_code4", ioStorInvDis.getStruct_code()); + task_form.put("vehicle_code2", outPoint.getVehicle_code()); + } + task_id = jbUpAgvTask.create(task_form); + inPoint.setIng_task_code(task_id); + if ("2".equals(outPoint.getPoint_status())) { + outPoint.setIng_task_code(task_id); + } + pointService.updateBatchById(Arrays.asList(inPoint, outPoint)); + } else { + //创建任务 + JSONObject task_form = new JSONObject(); + task_form.put("task_type", "STOutTask"); + task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE")); + task_form.put("PickingLocation", ioStorInvDis.getStruct_code()); + task_form.put("PlacedLocation", point_code); + task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code()); - StOutTask stOutTask = SpringContextHolder.getBean("STOutTask"); + StOutTask stOutTask = SpringContextHolder.getBean("STOutTask"); - String task_id = stOutTask.create(task_form); + task_id = stOutTask.create(task_form); + } //分配明细表更新任务相关数据 IOStorInvDis dis = new IOStorInvDis(); diff --git a/lms/nladmin-ui/src/views/wms/basedata/group/index.vue b/lms/nladmin-ui/src/views/wms/basedata/group/index.vue index a16cda9..96b2b91 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/group/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/group/index.vue @@ -2,62 +2,62 @@
- - - 物料查询: - + + 物料查询: + + + + 批次查询: + + + + 载具编码: + + + + 组盘状态: + + - - - 批次查询: - - - - 载具编码: - - - - 组盘状态: - - - - - - - - + + + + + + @@ -71,19 +71,19 @@ - - + + - - + + - + - + @@ -154,7 +154,13 @@ - + + + + + diff --git a/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue b/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue index 8bb4f7d..87a4d1f 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue @@ -93,16 +93,16 @@
- - - - - - - - - - + + + + + + + + + + @@ -272,16 +272,16 @@ {{ dict.label.placement_type[scope.row.placement_type] }} - - - + + + + + + + + + + @@ -305,7 +305,7 @@
- + diff --git a/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue b/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue index 0349c07..914e35a 100644 --- a/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue +++ b/lms/nladmin-ui/src/views/wms/pm_manage/workerorder/index.vue @@ -61,27 +61,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + @@ -600,7 +601,7 @@ export default { const param = { region_code: this.regionCodeParam } - crudSchBasePoint.getPointList(param).then(res => { + crudSchBasePoint.getPointList2(param).then(res => { this.pointList = res this.regionCodeParam = null }) diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue index 631988a..faf46f3 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -37,12 +37,12 @@ - + - + @@ -241,8 +241,8 @@ v-for="item in dict.storagevehicle_type" :key="item.value" :label="item.label" - :value="item.value"> - + :value="item.value" + /> @@ -251,12 +251,12 @@ v-for="item in dict.storagevehicle_type" :key="item.value" :label="item.label" - :value="item.value"> - + :value="item.value" + /> - + {{ item.label }} @@ -281,25 +281,25 @@ - - - - + + + + - - - + + + @@ -307,22 +307,22 @@ - + @@ -351,8 +351,8 @@ - - + + @@ -468,6 +468,12 @@ export default { this.getPointStatusAndTypeList(this.form.region_code, 2) } }, + getVehicleTypeLabel(value) { + if (!value) return '' + const types = value.toString().split(',').map(item => item.trim()) + const labels = types.map(type => this.dict.label.storagevehicle_type[type] || '未知') + return labels.join(', ') + }, hand(value) { this.crud.toQuery() }, diff --git a/lms/nladmin-ui/src/views/wms/sch/point/schBasePoint.js b/lms/nladmin-ui/src/views/wms/sch/point/schBasePoint.js index aecdb0f..45be7b8 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/schBasePoint.js +++ b/lms/nladmin-ui/src/views/wms/sch/point/schBasePoint.js @@ -39,6 +39,13 @@ export function getPointList(data) { data }) } +export function getPointList2(data) { + return request({ + url: 'api/schBasePoint/getPointList2', + method: 'post', + data + }) +} export function changeLock(data) { return request({ @@ -48,4 +55,4 @@ export function changeLock(data) { }) } -export default { add, edit, del, changeUsed, getPointList, changeLock } +export default { add, edit, del, changeUsed, getPointList, getPointList2, changeLock } 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 : '-' }} - - + +