diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/StockManageController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/StockManageController.java new file mode 100644 index 0000000..d1220bd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/StockManageController.java @@ -0,0 +1,86 @@ +package org.nl.wms.basedata_manage.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.RequiredArgsConstructor; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.IStockManageService; +import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/stockManage") +public class StockManageController { + + @Resource + private final IStockManageService stockManageService; + @Resource + private final IStructattrService structattrService; + + @GetMapping + @Log("查询库存管理") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(stockManageService.queryAll(whereJson, page)), HttpStatus.OK); + } + + @PostMapping("/updateLock") + @Log("库存管理修改仓位锁定类型") + public ResponseEntity updateLock(@RequestBody List updateAttrList) { + if (updateAttrList == null || updateAttrList.isEmpty()) { + throw new BadRequestException("请选择需要操作的库存数据"); + } + String targetLockType = updateAttrList.get(0).getString("lock_type"); + Set structCodes = updateAttrList.stream() + .map(row -> row.getString("struct_code")) + .filter(code -> code != null && !code.isEmpty()) + .collect(Collectors.toSet()); + List attrs = structattrService.list(new QueryWrapper().lambda() + .in(Structattr::getStruct_code, structCodes)); + if ("99".equals(targetLockType)) { + List invalidCodes = attrs.stream() + .filter(row -> row.getLock_type() != null && !"0".equals(row.getLock_type())) + .map(Structattr::getStruct_code) + .collect(Collectors.toList()); + if (!invalidCodes.isEmpty()) { + throw new BadRequestException("仓位已锁定,不能重复锁定:" + String.join("、", invalidCodes)); + } + } else if ("0".equals(targetLockType)) { + List invalidCodes = attrs.stream() + .filter(row -> !"99".equals(row.getLock_type())) + .map(Structattr::getStruct_code) + .collect(Collectors.toList()); + if (!invalidCodes.isEmpty()) { + throw new BadRequestException("仅其它锁仓位允许解锁:" + String.join("、", invalidCodes)); + } + } + Map attrMap = attrs.stream().collect(Collectors.toMap(Structattr::getStruct_code, row -> row)); + for (JSONObject row : updateAttrList) { + Structattr attr = attrMap.get(row.getString("struct_code")); + if (attr == null) { + continue; + } + attr.setLock_type(row.getString("lock_type")); + attr.setRemark(row.getString("remark")); + structattrService.updateById(attr); + } + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/StructattrController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/StructattrController.java index c406290..0a5e47f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/StructattrController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/StructattrController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; +import java.util.List; import java.util.Map; /** @@ -73,4 +74,11 @@ public class StructattrController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + @PostMapping("/updateLock") + @Log("修改仓位锁定类型") + public ResponseEntity updateLock(@RequestBody List updateAttrList) { + structattrService.updateLock(updateAttrList); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStockManageService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStockManageService.java new file mode 100644 index 0000000..375e1e6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStockManageService.java @@ -0,0 +1,14 @@ +package org.nl.wms.basedata_manage.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; + +import java.util.Map; + +public interface IStockManageService extends IService { + + IPage queryAll(Map whereJson, PageQuery page); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StockManageMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StockManageMapper.java new file mode 100644 index 0000000..d3e1e72 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StockManageMapper.java @@ -0,0 +1,15 @@ +package org.nl.wms.basedata_manage.service.dao.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; + +import java.util.Map; + +public interface StockManageMapper extends BaseMapper { + + IPage queryAllByPage(Page page, @Param("param") Map whereJson); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StockManageMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StockManageMapper.xml new file mode 100644 index 0000000..c4712a1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StockManageMapper.xml @@ -0,0 +1,74 @@ + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StockManageServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StockManageServiceImpl.java new file mode 100644 index 0000000..993baad --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StockManageServiceImpl.java @@ -0,0 +1,22 @@ +package org.nl.wms.basedata_manage.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.basedata_manage.service.IStockManageService; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; +import org.nl.wms.basedata_manage.service.dao.mapper.StockManageMapper; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class StockManageServiceImpl extends ServiceImpl implements IStockManageService { + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()), whereJson); + } +} 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 index 9100cf8..a02ed6e 100644 --- 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 @@ -1,6 +1,7 @@ package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.diy; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; @@ -11,6 +12,8 @@ import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner; import org.nl.wms.sch_manage.enums.StatusEnum; +import org.nl.wms.system_manage.service.param.ISysParamService; +import org.nl.wms.system_manage.service.param.dao.Param; 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; @@ -34,6 +37,9 @@ public class UnpackingRuleHandler extends Decisioner { private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; @Resource private IOStorInvDisMapper disMapper; + @Resource + private ISysParamService paramService; + @Override public List handler(List list, JSONObject param) { IOStorInvDis dis = disMapper.selectById(param.getString("dis_id")); @@ -73,19 +79,52 @@ public class UnpackingRuleHandler extends Decisioner { } return outPoints; } else { - // 获取仓库中对应托盘类型的可出的空桶点位 - 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("当前出库策略:解包入库,库存分配失败,失败原因:料桶缓存库无空桶!"); + List outPoints; + if (requiresEmptyBucketForUnpacking()) { + // 只有走 JbDownAgvTask 的场景才要求目标仓位已存在同类型空桶。 + 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("当前出库策略:解包入库,库存分配失败,失败原因:料桶缓存库无空桶!"); + } + } else { + // 走其它 AGV 分支时不需要空桶,直接找可用空位即可。 + outPoints = iStructattrService.list(new LambdaQueryWrapper() + .eq(Structattr::getOccupancy_state, 1) + .eq(Structattr::getLock_type, "0") + .eq(Structattr::getSect_code, param.getString("sect_code")) + .eq(Structattr::getStor_id, param.getString("stor_code")) + .isNull(Structattr::getStoragevehicle_code) + .isNull(Structattr::getTask_code)); + if (outPoints.size() == 0) { + throw new BadRequestException("当前出库策略:解包入库,库存分配失败,失败原因:料桶缓存库无空位!"); + } } return outPoints; } } + + private boolean requiresEmptyBucketForUnpacking() { + String openCbj = getBinaryParamStrict("is_open_cbj"); + String openUnsealing = getBinaryParamStrict("is_open_unsealing"); + return "1".equals(openCbj) && "1".equals(openUnsealing); + } + + private String getBinaryParamStrict(String code) { + Param sysParam = paramService.findByCode(code); + if (ObjectUtil.isEmpty(sysParam) || StrUtil.isBlank(sysParam.getValue())) { + throw new BadRequestException("系统参数配置错误"); + } + String value = StrUtil.trim(sysParam.getValue()); + if (!"0".equals(value) && !"1".equals(value)) { + throw new BadRequestException("系统参数配置错误"); + } + return value; + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java index a3e30b7..0327c67 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/service/impl/MesToWmsServiceImpl.java @@ -268,6 +268,10 @@ public class MesToWmsServiceImpl implements MesToWmsService { table.put("material_name", materialbase.getMaterial_name()); table.put("material_spec", materialbase.getMaterial_spec()); String invId = outBillService.insertDtl(insertInvObj); + JSONObject auditParam = new JSONObject(); + auditParam.put("iostorinv_id", invId); + auditParam.put("audit_result", 1); + outBillService.audit(auditParam); // 调用手工分配 JSONObject param = new JSONObject(); JSONObject row = new JSONObject(); @@ -394,6 +398,10 @@ public class MesToWmsServiceImpl implements MesToWmsService { table.put("material_name", materialbase.getMaterial_name()); table.put("material_spec", materialbase.getMaterial_spec()); String invId = outBillService.insertDtl(insertInvObj); + JSONObject auditParam = new JSONObject(); + auditParam.put("iostorinv_id", invId); + auditParam.put("audit_result", 1); + outBillService.audit(auditParam); // 调用手工分配 JSONObject param = new JSONObject(); JSONObject row = new JSONObject(); 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 b7b0a3a..7efba43 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 @@ -230,6 +230,10 @@ public class PdaJBServiceImpl implements PdaJBService { table.put("material_name", materialbase.getMaterial_name()); table.put("material_spec", materialbase.getMaterial_spec()); String invId = outBillService.insertDtl(insertInvObj); + JSONObject auditParam = new JSONObject(); + auditParam.put("iostorinv_id", invId); + auditParam.put("audit_result", 1); + outBillService.audit(auditParam); // 调用手工分配 JSONObject param = new JSONObject(); JSONObject row = new JSONObject(); @@ -446,7 +450,7 @@ public class PdaJBServiceImpl implements PdaJBService { List list = taskService.list(new LambdaQueryWrapper() .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) .eq(SchBaseTask::getIs_delete, false) - .in(SchBaseTask::getConfig_code, Arrays.asList("JbDownAgvTask", "JbDownCloseUnsealingAgvTask", "JbDownManualTask")) + .in(SchBaseTask::getConfig_code, Arrays.asList("JbDownAgvTask", "JbDownCloseUnsealingAgvTask", "JbDownCloseCbjAgvTask", "JbDownManualTask")) .and(ll -> ll.like(SchBaseTask::getPoint_code1, taskPointCode).or() .like(SchBaseTask::getPoint_code2, taskPointCode).or() .like(SchBaseTask::getPoint_code3, taskPointCode).or() diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PdmBdWorkorder.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PdmBdWorkorder.java index f3a6cfb..a1b904d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PdmBdWorkorder.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PdmBdWorkorder.java @@ -91,6 +91,8 @@ public class PdmBdWorkorder implements Serializable { private String ext_data; + private String remark; + private Boolean is_delete; private String create_id; @@ -121,4 +123,7 @@ public class PdmBdWorkorder implements Serializable { @TableField(exist = false) private String material_spec; + + @TableField(exist = false) + private Integer audit_result; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/mapper/xml/PdmBdWorkorderMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/mapper/xml/PdmBdWorkorderMapper.xml index 61e18b4..e4a6d44 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/mapper/xml/PdmBdWorkorderMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/mapper/xml/PdmBdWorkorderMapper.xml @@ -43,6 +43,7 @@ LEFT JOIN md_me_materialbase mm ON mm.material_id = mg.material_id WHERE mg.`status` = '02' AND mg.frozen_qty = 0 AND IFNULL(mg.storagevehicle_code,'') ]]> '' AND IFNULL(ss.struct_code,'') ]]> '' + AND IFNULL(ss.lock_type, '0') = '0' AND 0 = (SELECT COUNT(*) FROM pdm_bd_workorder po WHERE po.raw_material_code = mg.storagevehicle_code AND po.workorder_status ]]> '5') AND ss.stor_id = #{query.stor_id} @@ -67,6 +68,7 @@ LEFT JOIN md_me_materialbase mm ON mm.material_id = mg.material_id WHERE mg.`status` = '02' AND mg.frozen_qty = 0 AND IFNULL(mg.storagevehicle_code,'') ]]> '' AND IFNULL(ss.struct_code,'') ]]> '' + AND IFNULL(ss.lock_type, '0') = '0' AND 0 = (SELECT COUNT(*) FROM pdm_bd_workorder po WHERE po.raw_material_code = mg.storagevehicle_code AND po.workorder_status ]]> '5') AND ss.stor_id = #{query.stor_id} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dto/PdmBdWorkorderDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dto/PdmBdWorkorderDto.java index f06fd27..8f544ac 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dto/PdmBdWorkorderDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dto/PdmBdWorkorderDto.java @@ -144,6 +144,11 @@ public class PdmBdWorkorderDto implements Serializable { */ private String ext_data; + /** + * 备注 + */ + private String remark; + /** * 是否删除 */ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/impl/PdmBdWorkorderServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/impl/PdmBdWorkorderServiceImpl.java index 054a72e..d25311c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/impl/PdmBdWorkorderServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/impl/PdmBdWorkorderServiceImpl.java @@ -3,6 +3,7 @@ package org.nl.wms.pm_manage.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -210,7 +211,17 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) - .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) - .set(Structattr::getStoragevehicle_type, "") .set(Structattr::getTask_code, null) - .set(Structattr::getOccupancy_state, "3") .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))); iSchBasePointService.update(new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) .set(SchBasePoint::getIng_task_code, null) .set(SchBasePoint::getPoint_status, "1") .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getVehicle_qty, 0) .set(SchBasePoint::getIos_id, null)); taskObj.setRemark("已完成"); @@ -146,7 +145,6 @@ public class BackInManualTask extends AbstractTask { public void cancelTask(SchBaseTask taskObj) { iStructattrService.update(new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) - .set(Structattr::getStoragevehicle_type, "") .set(Structattr::getTask_code, null) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java index 9393175..b3381e9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java @@ -169,10 +169,7 @@ public class BackInTask extends AbstractTask { iStructattrService.update( new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) - .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) - .set(Structattr::getStoragevehicle_type, "") .set(Structattr::getTask_code, null) - .set(Structattr::getOccupancy_state, "3") .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) ); // 更新起点 @@ -182,6 +179,8 @@ public class BackInTask extends AbstractTask { .set(SchBasePoint::getIng_task_code, null) .set(SchBasePoint::getPoint_status, "1") .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getVehicle_qty, 0) .set(SchBasePoint::getIos_id, null) ); @@ -206,7 +205,6 @@ public class BackInTask extends AbstractTask { iStructattrService.update( new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) - .set(Structattr::getStoragevehicle_type, "") .set(Structattr::getTask_code, null) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) ); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java index 4cae007..7fa3fbc 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java @@ -8,7 +8,9 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.IdUtil; +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.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; @@ -52,6 +54,9 @@ public class PdaPointTask extends AbstractTask { @Autowired private IStructattrService iStructattrService; + @Autowired + private IMdPbStoragevehicleinfoService storagevehicleinfoService; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -141,11 +146,14 @@ public class PdaPointTask extends AbstractTask { @Transactional public void finishTask(SchBaseTask taskObj) { + MdPbStoragevehicleinfo storagevehicleinfo = storagevehicleinfoService.getByCode(taskObj.getVehicle_code()); // 更新起点 iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getVehicle_qty, 0) .set(SchBasePoint::getIos_id, null) .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")) ); @@ -153,6 +161,9 @@ public class PdaPointTask extends AbstractTask { new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) .set(Structattr::getStoragevehicle_code, null) + .set(Structattr::getStoragevehicle_type, null) + .set(Structattr::getStoragevehicle_qty, 0) + .set(Structattr::getOccupancy_state, 1) .set(Structattr::getTask_code, null) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) ); @@ -161,6 +172,8 @@ public class PdaPointTask extends AbstractTask { new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .set(SchBasePoint::getVehicle_type, ObjectUtil.isNotEmpty(storagevehicleinfo) ? storagevehicleinfo.getStoragevehicle_type() : null) + .set(SchBasePoint::getVehicle_qty, 1) .set(SchBasePoint::getIos_id, null) .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")) ); @@ -168,6 +181,9 @@ public class PdaPointTask extends AbstractTask { new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) + .set(Structattr::getStoragevehicle_type, ObjectUtil.isNotEmpty(storagevehicleinfo) ? storagevehicleinfo.getStoragevehicle_type() : null) + .set(Structattr::getStoragevehicle_qty, 1) + .set(Structattr::getOccupancy_state, 3) .set(Structattr::getTask_code, null) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) ); @@ -183,22 +199,36 @@ public class PdaPointTask extends AbstractTask { iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getVehicle_qty, 0) .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")) ); iStructattrService.update( new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) + .set(Structattr::getStoragevehicle_code, null) + .set(Structattr::getStoragevehicle_type, null) + .set(Structattr::getStoragevehicle_qty, 0) + .set(Structattr::getOccupancy_state, 1) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) ); // 更新终点 iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getVehicle_qty, 0) .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")) ); iStructattrService.update( new UpdateWrapper().lambda() .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) + .set(Structattr::getStoragevehicle_code, null) + .set(Structattr::getStoragevehicle_type, null) + .set(Structattr::getStoragevehicle_qty, 0) + .set(Structattr::getOccupancy_state, 1) .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) ); // 更新任务 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/StOutTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/StOutTask.java index d21e05c..8b374a0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/StOutTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/StOutTask.java @@ -9,7 +9,9 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.IdUtil; import org.nl.wms.basedata_manage.enums.BaseDataEnum; +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.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; @@ -64,6 +66,9 @@ public class StOutTask extends AbstractTask { @Autowired private IMdPbGroupplateService iMdPbGroupplateService; + @Autowired + private IMdPbStoragevehicleinfoService storagevehicleinfoService; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -157,6 +162,7 @@ public class StOutTask extends AbstractTask { @Transactional(rollbackFor = Exception.class) public void finishTask(SchBaseTask taskObj) { + MdPbStoragevehicleinfo storagevehicleinfo = storagevehicleinfoService.getByCode(taskObj.getVehicle_code()); // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); @@ -170,6 +176,8 @@ public class StOutTask extends AbstractTask { .set(SchBasePoint::getIng_task_code, null) .set(SchBasePoint::getPoint_status,"3") .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .set(SchBasePoint::getVehicle_type, ObjectUtil.isNotEmpty(storagevehicleinfo) ? storagevehicleinfo.getStoragevehicle_type() : null) + .set(SchBasePoint::getVehicle_qty, 1) .set(SchBasePoint::getIos_id, null) ); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownCloseCbjAgvTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownCloseCbjAgvTask.java new file mode 100644 index 0000000..0a25f95 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownCloseCbjAgvTask.java @@ -0,0 +1,279 @@ +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.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.sch_manage.enums.TaskFinishedTypeEnum; +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.ISchBaseTaskconfigService; +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.SchBaseTaskconfig; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskUtils; +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.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.service.IMdPbGroupplateService; +import org.nl.wms.warehouse_manage.service.dao.GroupPlate; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 解包下料-屏蔽解包机 AGV 任务 + */ +@Slf4j +@Component("JbDownCloseCbjAgvTask") +public class JbDownCloseCbjAgvTask extends AbstractTask { + @Resource + private ISchBaseTaskService taskService; + @Resource + private IInBillService inBillService; + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + @Resource + private ISchBasePointService pointService; + @Resource + private ISchBaseTaskconfigService taskconfigService; + @Resource + private IStructattrService structattrService; + @Resource + private IOStorInvMapper ioStorInvMapper; + @Resource + private IOStorInvDtlMapper ioStorInvDtlMapper; + @Resource + private IMdPbGroupplateService groupplateService; + + @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.CREATED.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.setVehicle_type(json.getString("vehicle_type")); + 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(batchTask.size() - 1).getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code()); + JSONObject object = JSONObject.parseObject(taskDao.getRequest_param()); + + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_uuid(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setAgv_system_type(normalizeAgvSystemType("2")); + acsTaskDto.setPriority(taskDao.getPriority()); + acsTaskDto.setTask_type(taskconfig.getTask_type()); + acsTaskDto.setTruss_type(object.getString("truss_type")); + acsTaskDto.setInteraction_json(new JSONObject().fluentPut("have_lid", object.getString("have_lid"))); + fillCommonAcsTaskFields(taskDao, acsTaskDto); + acsTaskDto.setVehicle_code2(null); + return acsTaskDto; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + List disList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper() + .eq(IOStorInvDis::getTask_id, taskObj.getTask_id())); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + clearPoint(taskObj.getPoint_code1()); + unlockTargetStruct(taskObj.getPoint_code2()); + 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())); + clearPointTaskCode(taskObj.getPoint_code1()); + clearStructTaskCode(taskObj.getPoint_code2()); + deleteRelatedInBills(disList); + deleteRelatedGroupPlate(taskObj.getGroup_id()); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + clearPoint(taskObj.getPoint_code1()); + occupyStruct(taskObj.getPoint_code2(), taskObj.getVehicle_code(), taskObj.getVehicle_type()); + taskObj.setRemark("任务执行完毕"); + inBillService.taskFinish(taskObj); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + private void clearPoint(String code) { + SchBasePoint point = pointService.getById(code); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("点位不存在:" + code); + } + point.setPoint_status("1"); + point.setVehicle_code(null); + point.setVehicle_type(null); + point.setUpdate_time(DateUtil.now()); + pointService.updateById(point); + } + + private void occupyStruct(String code, String vehicleCode, String vehicleType) { + Structattr struct = structattrService.getByCode(code); + if (ObjectUtil.isEmpty(struct)) { + throw new BadRequestException("仓位不存在:" + code); + } + structattrService.update(new LambdaUpdateWrapper() + .set(Structattr::getStoragevehicle_code, vehicleCode) + .set(Structattr::getStoragevehicle_type, vehicleType) + .set(Structattr::getOccupancy_state, "2") + .eq(Structattr::getStruct_code, code)); + } + + private void clearPointTaskCode(String code) { + if (ObjectUtil.isEmpty(code)) { + return; + } + pointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getIng_task_code, null) + .eq(SchBasePoint::getPoint_code, code)); + } + + private void clearStructTaskCode(String code) { + if (ObjectUtil.isEmpty(code)) { + return; + } + structattrService.update(new LambdaUpdateWrapper() + .set(Structattr::getTask_code, null) + .eq(Structattr::getStruct_code, code)); + } + + private void unlockTargetStruct(String code) { + if (ObjectUtil.isEmpty(code)) { + return; + } + JSONObject unlockMap = new JSONObject(); + unlockMap.put("struct_code", code); + unlockMap.put("inv_id", null); + unlockMap.put("inv_code", null); + unlockMap.put("inv_type", null); + structattrService.updateStatusByCode("2", unlockMap); + } + + private void deleteRelatedInBills(List disList) { + if (ObjectUtil.isEmpty(disList)) { + return; + } + List invIds = new ArrayList<>(); + for (IOStorInvDis dis : disList) { + if (ObjectUtil.isNotEmpty(dis.getIostorinv_id()) && !invIds.contains(dis.getIostorinv_id())) { + invIds.add(dis.getIostorinv_id()); + } + } + for (String invId : invIds) { + ioStorInvDisMapper.delete(new LambdaQueryWrapper() + .eq(IOStorInvDis::getIostorinv_id, invId)); + ioStorInvDtlMapper.delete(new LambdaQueryWrapper() + .eq(IOStorInvDtl::getIostorinv_id, invId)); + ioStorInvMapper.deleteById(invId); + } + } + + private void deleteRelatedGroupPlate(String groupId) { + if (ObjectUtil.isEmpty(groupId)) { + return; + } + groupplateService.remove(new LambdaQueryWrapper() + .eq(GroupPlate::getGroup_id, groupId)); + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @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/zw/SeparateMaterialManualTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/SeparateMaterialManualTask.java index 2c17be2..148ce1a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/SeparateMaterialManualTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/SeparateMaterialManualTask.java @@ -220,6 +220,8 @@ public class SeparateMaterialManualTask extends AbstractTask { //点位1 iStructattrService.update(new LambdaUpdateWrapper() .set(Structattr::getStoragevehicle_code, null) + .set(Structattr::getStoragevehicle_type, null) + .set(Structattr::getStoragevehicle_qty, 0) .set(Structattr::getOccupancy_state, "1") .set(Structattr::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(Structattr::getUpdate_name, SecurityUtils.getCurrentNickName()) @@ -299,7 +301,9 @@ public class SeparateMaterialManualTask extends AbstractTask { // 回滚目标点位,解除进行中任务占用 pointService.update(new LambdaUpdateWrapper() .set(SchBasePoint::getIng_task_code, null) - .set(SchBasePoint::getVehicle_type, "") + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getVehicle_qty, 0) .set(SchBasePoint::getPoint_status, "1") .set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/SeparateMaterialTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/SeparateMaterialTask.java index 23fd7a3..04d60ca 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/SeparateMaterialTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/SeparateMaterialTask.java @@ -233,6 +233,8 @@ public class SeparateMaterialTask extends AbstractTask { //点位1 iStructattrService.update(new LambdaUpdateWrapper() .set(Structattr::getStoragevehicle_code, null) + .set(Structattr::getStoragevehicle_type, null) + .set(Structattr::getStoragevehicle_qty, 0) .set(Structattr::getOccupancy_state, "1") .set(Structattr::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(Structattr::getUpdate_name, SecurityUtils.getCurrentNickName()) @@ -312,7 +314,9 @@ public class SeparateMaterialTask extends AbstractTask { // 回滚目标点位,解除进行中任务占用 pointService.update(new LambdaUpdateWrapper() .set(SchBasePoint::getIng_task_code, null) - .set(SchBasePoint::getVehicle_type, "") + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getVehicle_qty, 0) .set(SchBasePoint::getPoint_status, "1") .set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) 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 aa89ea0..b86a532 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 @@ -41,6 +41,7 @@ import org.nl.wms.sch_manage.service.util.tasks.StInTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackAgvTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackManualTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask; +import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownCloseCbjAgvTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownCloseUnsealingAgvTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownManualTask; import org.nl.wms.system_manage.service.param.ISysParamService; @@ -107,6 +108,8 @@ public class InBillServiceImpl extends ServiceImpl i @Resource private JbDownAgvTask jbDownAgvTask; @Resource + private JbDownCloseCbjAgvTask jbDownCloseCbjAgvTask; + @Resource private JbDownCloseUnsealingAgvTask jbDownCloseUnsealingAgvTask; @Resource private JbBackAgvTask jbBackAgvTask; @@ -764,6 +767,7 @@ public class InBillServiceImpl extends ServiceImpl i public void divPoint(Map whereJson) { ArrayList rows = (ArrayList) whereJson.get("tableMater"); String point_code = (String) whereJson.get("point_code"); + String type = String.valueOf(whereJson.get("type")); HashMap map = rows.get(0); IOStorInv invObj = this.getById(map.get("iostorinv_id")); @@ -804,8 +808,41 @@ public class InBillServiceImpl extends ServiceImpl i || !"2".equals(intoPoint.getPoint_type())) { throw new BadRequestException("请选择超细/中粗吨袋解包区对接位!"); } - if (isOpenUnsealingEnabled()) { - String cfgPointType = "CXDDJBQ".equals(intoPoint.getRegion_code()) ? "1" : "2"; + if ("0".equals(type)) { + throw new BadRequestException("解包入库不支持人工转运类型!"); + } + if (!"1".equals(type)) { + throw new BadRequestException("type参数错误,仅支持0(人工转运)或1(AGV转运)!"); + } + String openCbj = getBinaryParamStrict("is_open_cbj"); + String openUnsealing = getBinaryParamStrict("is_open_unsealing"); + String cfgPointType = "CXDDJBQ".equals(intoPoint.getRegion_code()) ? "1" : "2"; + SchBasePoint cfgjPoint = findCloseCbjPoint(map.get("storagevehicle_code"), intoPoint, cfgPointType); + if ("0".equals(openCbj)) { + prepareBucketForCloseCbjTask(map.get("storagevehicle_code"), inStruct.getStoragevehicle_type(), cfgjPoint); + String taskGroupId = IdUtil.getStringId(); + JSONObject task = new JSONObject(); + task.put("task_type", "JbDownCloseCbjAgvTask"); + task.put("group_id", groupPlate.getGroup_id()); + task.put("workorder_id", whereJson.get("workorder_id")); + task.put("task_group_id", taskGroupId); + task.put("task_group_seq", 1); + task.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + task.put("point_code1", cfgjPoint.getPoint_code()); + task.put("point_code2", structCode); + task.put("point_code3", null); + task.put("point_code4", null); + task.put("truss_type", "3"); + task.put("have_lid", "1"); + task.put("vehicle_type", inStruct.getStoragevehicle_type()); + task.put("seq", 1); + task.put("vehicle_code", map.get("storagevehicle_code")); + task.put("vehicle_code2", null); + List jsonObjects = Arrays.asList(task); + JSONObject requestTaskParam = new JSONObject(); + requestTaskParam.put("tasks", jsonObjects); + task_id = jbDownCloseCbjAgvTask.create(requestTaskParam); + } else if ("1".equals(openCbj) && "1".equals(openUnsealing)) { String parentPointCode = intoPoint.getParent_point_code(); if (ObjectUtil.isEmpty(parentPointCode)) { throw new BadRequestException("解包对接点未配置父类编码!"); @@ -814,12 +851,6 @@ public class InBillServiceImpl extends ServiceImpl i if (ObjectUtil.isEmpty(emptyPoint)) { throw new BadRequestException("找不到可用的空桶缓存位!"); } - // 获取无盖子的对应的点位 - List canUseCFGJs = pointService.getCanUseCFGJs(intoPoint, "1", cfgPointType); - if (canUseCFGJs.size() == 0) { - throw new BadRequestException("找不到可用的拆封盖机"); - } - SchBasePoint cfgjPoint = canUseCFGJs.get(0); // 创建任务1 String taskGroupId = IdUtil.getStringId(); JSONObject task1 = new JSONObject(); @@ -879,7 +910,7 @@ public class InBillServiceImpl extends ServiceImpl i JSONObject requestTaskParam = new JSONObject(); requestTaskParam.put("tasks", jsonObjects); task_id = jbDownAgvTask.create(requestTaskParam); - } else { + } else if ("1".equals(openCbj) && "0".equals(openUnsealing)) { String taskGroupId = IdUtil.getStringId(); JSONObject task = new JSONObject(); task.put("task_type", "JbDownCloseUnsealingAgvTask"); @@ -902,6 +933,8 @@ public class InBillServiceImpl extends ServiceImpl i JSONObject requestTaskParam = new JSONObject(); requestTaskParam.put("tasks", jsonObjects); task_id = jbDownCloseUnsealingAgvTask.create(requestTaskParam); + } else { + throw new BadRequestException("系统参数配置错误"); } } else if (StatusEnum.IOBILL_TYPE_IN.code("解包直接入库").equals(invObj.getBill_type())) { // 创建人工四点任务 @@ -985,8 +1018,8 @@ public class InBillServiceImpl extends ServiceImpl i task.put("task_group_seq", whereJson.get("task_group_seq")); task.put("task_group_id", whereJson.get("task_group_id")); task.put("vehicle_code", materialPoint.getVehicle_code()); - String type = String.valueOf(whereJson.get("type")); - if ("0".equals(type)) { + String backType = String.valueOf(whereJson.get("type")); + if ("0".equals(backType)) { task.put("task_type", "JbBackManualTask"); task_id = jbBackManualTask.create(task); } else { @@ -1122,12 +1155,81 @@ public class InBillServiceImpl extends ServiceImpl i ioStorInvDisMapper.updateById(dis); } - private boolean isOpenUnsealingEnabled() { - Param param = paramService.findByCode("is_open_unsealing"); + private String getBinaryParamStrict(String code) { + Param param = paramService.findByCode(code); if (ObjectUtil.isEmpty(param) || StrUtil.isBlank(param.getValue())) { - return true; + throw new BadRequestException("系统参数配置错误"); } - return "1".equals(StrUtil.trim(param.getValue())); + String value = StrUtil.trim(param.getValue()); + if (!"0".equals(value) && !"1".equals(value)) { + throw new BadRequestException("系统参数配置错误"); + } + return value; + } + + private SchBasePoint findCloseCbjPoint(String bucketCode, SchBasePoint intoPoint, String cfgPointType) { + SchBasePoint currentBucketPoint = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getVehicle_code, bucketCode), false); + if (ObjectUtil.isNotEmpty(currentBucketPoint) + && "DTCFGQ".equals(currentBucketPoint.getRegion_code()) + && cfgPointType.equals(currentBucketPoint.getPoint_type())) { + return currentBucketPoint; + } + List canUseCFGJs = pointService.getCanUseCFGJs(intoPoint, "1", cfgPointType); + if (canUseCFGJs.size() == 0) { + throw new BadRequestException("找不到可用的拆封盖机"); + } + return canUseCFGJs.get(0); + } + + private void prepareBucketForCloseCbjTask(String bucketCode, String vehicleType, SchBasePoint cbjPoint) { + SchBasePoint oldPoint = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getVehicle_code, bucketCode), false); + Structattr oldStruct = iStructattrService.getOne(new LambdaQueryWrapper() + .eq(Structattr::getStoragevehicle_code, bucketCode), false); + + if (ObjectUtil.isNotEmpty(oldPoint) && ObjectUtil.isNotEmpty(oldStruct)) { + throw new BadRequestException("料桶码存在多位置绑定,请先处理异常数据"); + } + if (ObjectUtil.isNotEmpty(oldPoint)) { + if (!cbjPoint.getPoint_code().equals(oldPoint.getPoint_code())) { + clearBucketFromPoint(oldPoint.getPoint_code()); + bindBucketToPoint(cbjPoint.getPoint_code(), bucketCode, vehicleType); + } + return; + } + if (ObjectUtil.isNotEmpty(oldStruct)) { + clearBucketFromStruct(oldStruct.getStruct_code()); + bindBucketToPoint(cbjPoint.getPoint_code(), bucketCode, vehicleType); + return; + } + bindBucketToPoint(cbjPoint.getPoint_code(), bucketCode, vehicleType); + } + + private void clearBucketFromPoint(String pointCode) { + pointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getVehicle_type, null) + .set(SchBasePoint::getPoint_status, "1") + .set(SchBasePoint::getIng_task_code, null) + .eq(SchBasePoint::getPoint_code, pointCode)); + } + + private void clearBucketFromStruct(String structCode) { + iStructattrService.update(new LambdaUpdateWrapper() + .set(Structattr::getStoragevehicle_code, null) + .set(Structattr::getStoragevehicle_type, null) + .set(Structattr::getOccupancy_state, "1") + .set(Structattr::getTask_code, null) + .eq(Structattr::getStruct_code, structCode)); + } + + private void bindBucketToPoint(String pointCode, String bucketCode, String vehicleType) { + pointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getVehicle_code, bucketCode) + .set(SchBasePoint::getVehicle_type, vehicleType) + .set(SchBasePoint::getPoint_status, "3") + .eq(SchBasePoint::getPoint_code, pointCode)); } @Override 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 2ce979c..b335a6d 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 @@ -395,6 +395,14 @@ public class OutBillServiceImpl extends ServiceImpl i String iostorinvId = whereJson.getString("iostorinv_id"); IOStorInv ioStorInv = getOutBillOrThrow(iostorinvId); ensureOutBillStatus(ioStorInv, OUT_BILL_STATUS_CREATED); + Integer auditResult = whereJson.getInteger("audit_result"); + String remark = whereJson.getString("remark"); + if (auditResult == null || (auditResult != 1 && auditResult != 2)) { + throw new BadRequestException("审核结果只能为通过(1)或不通过(2)!"); + } + if (auditResult == 2 && StrUtil.isBlank(remark)) { + throw new BadRequestException("审核不通过时原因不能为空!"); + } String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); @@ -402,10 +410,15 @@ public class OutBillServiceImpl extends ServiceImpl i IOStorInv updateMst = new IOStorInv(); updateMst.setIostorinv_id(iostorinvId); - updateMst.setBill_status(IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED)); + updateMst.setBill_status(auditResult == 1 + ? IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED) + : IOSEnum.BILL_STATUS.code("完成")); updateMst.setAudit_optid(currentUserId); updateMst.setAudit_optname(nickName); updateMst.setAudit_time(now); + if (auditResult == 2) { + updateMst.setRemark(remark); + } updateMst.setUpdate_optid(currentUserId); updateMst.setUpdate_optname(nickName); updateMst.setUpdate_time(now); @@ -413,7 +426,9 @@ public class OutBillServiceImpl extends ServiceImpl i ioStorInvDtlMapper.update(new IOStorInvDtl(), new LambdaUpdateWrapper() - .set(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED)) + .set(IOStorInvDtl::getBill_status, auditResult == 1 + ? IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED) + : IOSEnum.BILL_STATUS.code("完成")) .eq(IOStorInvDtl::getIostorinv_id, iostorinvId) .eq(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_CREATED))); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/impl/StIvtMoveinvServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/impl/StIvtMoveinvServiceImpl.java index aee7662..3b1356f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/impl/StIvtMoveinvServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/impl/StIvtMoveinvServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.warehouse_manage.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -14,8 +15,10 @@ import org.nl.common.utils.CodeUtil; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; +import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; import org.nl.wms.sch_manage.service.ISchBaseTaskService; @@ -79,6 +82,9 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl updateIvtList = new ArrayList<>(); // 查询物料 @@ -263,6 +270,8 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl + + + + + 通过 + 不通过 + + + + + + + + + + + @@ -395,6 +442,12 @@ label="批次号" :min-width="flexWidth('batch_no',crud.data,'批次号')" /> + { + if (this.$refs.auditForm) { + this.$refs.auditForm.clearValidate() + } + }) + }, audit(row) { if (String(row.workorder_status) !== '1') { this.$message.warning('仅工单状态为1时允许审核') return } - this.fullscreenLoading = true - crudPdmBdWorkorder.audit(row).then(res => { - this.crud.notify('审核成功', CRUD.NOTIFICATION_TYPE.SUCCESS) - this.crud.toQuery() - }).catch(() => { - this.fullscreenLoading = false - }).finally(() => { - this.fullscreenLoading = false + this.auditForm = { + ...defaultAuditForm, + workorder_id: row.workorder_id, + remark: row.remark || '' + } + this.auditDialogVisible = true + this.$nextTick(() => { + if (this.$refs.auditForm) { + this.$refs.auditForm.clearValidate() + } + }) + }, + submitAudit() { + this.$refs.auditForm.validate(valid => { + if (!valid) { + return + } + this.fullscreenLoading = true + crudPdmBdWorkorder.audit(this.auditForm).then(res => { + this.crud.notify('审核成功', CRUD.NOTIFICATION_TYPE.SUCCESS) + this.closeAuditDialog() + this.crud.toQuery() + }).catch(() => { + this.fullscreenLoading = false + }).finally(() => { + this.fullscreenLoading = false + }) }) }, // 下发 diff --git a/lms/nladmin-ui/src/views/wms/st/ivt/index.vue b/lms/nladmin-ui/src/views/wms/st/ivt/index.vue new file mode 100644 index 0000000..fa41f1b --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/ivt/index.vue @@ -0,0 +1,258 @@ + + + diff --git a/lms/nladmin-ui/src/views/wms/st/ivt/stockManage.js b/lms/nladmin-ui/src/views/wms/st/ivt/stockManage.js new file mode 100644 index 0000000..297786f --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/ivt/stockManage.js @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +export function updateLock(data) { + return request({ + url: 'api/stockManage/updateLock', + method: 'post', + data + }) +} + +export default { updateLock } diff --git a/lms/nladmin-ui/src/views/wms/st/outbill/index.vue b/lms/nladmin-ui/src/views/wms/st/outbill/index.vue index d495081..62f51b5 100644 --- a/lms/nladmin-ui/src/views/wms/st/outbill/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/outbill/index.vue @@ -155,6 +155,42 @@ 强制确认 + + + + + 通过 + 不通过 + + + + + + + + { + if (this.$refs.auditForm) { + this.$refs.auditForm.clearValidate() + } + }) + }, audit() { - this.loadingAudit = true - checkoutbill.audit({ 'iostorinv_id': this.currentRow.iostorinv_id }).then(() => { - this.querytable() - this.crud.notify('审核成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) - this.loadingAudit = false - }).catch(() => { - this.loadingAudit = false + this.auditForm = { + ...defaultAuditForm, + iostorinv_id: this.currentRow.iostorinv_id, + remark: this.currentRow.remark || '' + } + this.auditDialogVisible = true + this.$nextTick(() => { + if (this.$refs.auditForm) { + this.$refs.auditForm.clearValidate() + } + }) + }, + submitAudit() { + this.$refs.auditForm.validate(valid => { + if (!valid) { + return + } + this.loadingAudit = true + checkoutbill.audit(this.auditForm).then(() => { + this.closeAuditDialog() + this.querytable() + this.crud.notify('审核成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + this.loadingAudit = false + }).catch(() => { + this.loadingAudit = false + }) }) }, confirm() {