From 39bcf7df0093d2ed7b56b9bbbf01a790adabcb0a Mon Sep 17 00:00:00 2001 From: zhengxuming Date: Wed, 30 Jul 2025 11:19:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=8E=9F=E6=96=99=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StructattrController.java | 1 + .../service/impl/StructattrServiceImpl.java | 2 + .../decisioner/impl/diy/RawInRuleHandle.java | 44 ++ .../controller/PdaIosInController.java | 17 +- .../ios_manage/dto/ZwConfirmInDto.java | 10 + .../ios_manage/dto/ZwConfirmInParamDto.java | 9 + .../ios_manage/service/PdaIosInService.java | 15 +- .../service/impl/PdaIosInServiceImpl.java | 485 ++++++++++++------ .../nl/wms/sch_manage/enums/StatusEnum.java | 2 +- .../service/util/tasks/zw/InBillTask.java | 64 ++- .../inAndOut/service/IInBillService.java | 2 +- .../service/impl/InBillServiceImpl.java | 141 +++++ .../views/wms/basedata/structattr/index.vue | 27 +- .../src/views/wms/st/outbill/DivDialog.vue | 2 +- 14 files changed, 639 insertions(+), 182 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawInRuleHandle.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInParamDto.java 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 caa1a04..a2cc1f0 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 @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; 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 2a98aba..b13f76d 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 @@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.IdUtil; @@ -262,6 +263,7 @@ public class StructattrServiceImpl extends ServiceImpl { + + /** + * 出入库明细服务 + */ + @Autowired + private IStructattrService iStructattrService; + + + @Override + public List handler(List list, JSONObject param) { + QueryWrapper query = new QueryWrapper() + .eq("is_used", true) + .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) + .eq("sect_code", param.getString("sect_code")) + .isNotNull("storagevehicle_code") + .isNull("Task_code") + .eq("occupancy_state",2) + .orderByAsc("update_time"); + List querylList = iStructattrService.list(query); + return querylList; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/controller/PdaIosInController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/controller/PdaIosInController.java index 088f0ec..e0c76af 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/controller/PdaIosInController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/controller/PdaIosInController.java @@ -5,9 +5,13 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nl.common.base.TableDataInfo; import org.nl.common.logging.annotation.Log; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; +import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInDto; +import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInParamDto; import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -106,9 +110,16 @@ public class PdaIosInController { @PostMapping("/zwConfirmIn") @Log("中钨组盘入库确认") - public ResponseEntity zwConfirmIn(@RequestBody JSONObject whereJson) { - assertNotBlankJson(whereJson, "请求参数不能为空", "vehicle_code", "site_code"); - return new ResponseEntity<>(pdaIosInService.zwConfirmIn(whereJson), HttpStatus.OK); + public ResponseEntity zwConfirmIn(@RequestBody ZwConfirmInDto dto) { + if(CollectionUtils.isEmpty(dto.getParamList())){ + throw new IllegalArgumentException("请传入参数!"); + } + for(ZwConfirmInParamDto paramDto : dto.getParamList()){ + if(StringUtils.isBlank(paramDto.getVehicle_code())||StringUtils.isBlank(paramDto.getSite_code())) + throw new IllegalArgumentException("载具且卸货区点位不能为空!"); + } + + return new ResponseEntity<>(pdaIosInService.zwConfirmIn(dto), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInDto.java new file mode 100644 index 0000000..924782c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInDto.java @@ -0,0 +1,10 @@ +package org.nl.wms.pda_manage.ios_manage.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class ZwConfirmInDto { + private List paramList; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInParamDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInParamDto.java new file mode 100644 index 0000000..63ffa65 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/dto/ZwConfirmInParamDto.java @@ -0,0 +1,9 @@ +package org.nl.wms.pda_manage.ios_manage.dto; + +import lombok.Data; + +@Data +public class ZwConfirmInParamDto { + private String site_code; + private String vehicle_code; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/PdaIosInService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/PdaIosInService.java index ee79ae0..a441c8f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/PdaIosInService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/PdaIosInService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.vo.SelectItemVo; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; +import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInDto; import org.nl.wms.pda_manage.util.PdaResponse; import java.util.List; @@ -110,13 +111,17 @@ public interface PdaIosInService { * 株洲中钨入库确认 * 步骤1:入库确认 * 步骤2:空托盘出库 - * @param whereJson { - * vehicle_code:载具编码 - * sect_code:库区 - * } + * @param dto [{ + * vehicle_code:载具编码 + * site_code:库区 + * }, + * { + * vehicle_code:载具编码 + * site_code:库区 + * }] * @return PdaResponse */ - PdaResponse zwConfirmIn(JSONObject whereJson); + PdaResponse zwConfirmIn(ZwConfirmInDto dto); /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java index 617381f..e9c2be7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java @@ -27,6 +27,8 @@ import org.nl.wms.basedata_manage.service.dao.mapper.SectattrMapper; import org.nl.wms.basedata_manage.service.dto.MaterialQuery; import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; +import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInDto; +import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInParamDto; import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService; import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService; import org.nl.wms.pda_manage.util.PdaResponse; @@ -445,180 +447,297 @@ public class PdaIosInServiceImpl implements PdaIosInService { @Override @Transactional - public PdaResponse zwConfirmIn(JSONObject whereJson) { + public PdaResponse zwConfirmIn(ZwConfirmInDto dto) { + //查询字典表 + List dictList = sysDictMapper.selectList(new LambdaQueryWrapper() + .eq(Dict::getCode, "MATERIAL_MODEL_SECT")); - //组盘入库 - //根据组盘编号获取物料型号 - whereJson.put("vehicleCode", whereJson.getString("vehicle_code")); - whereJson.put("noEmptyVehicle", "1"); - String material_model = getVehicleMaterial(whereJson).getString("material_model"); - if(StringUtils.isEmpty(material_model)){ - throw new BadRequestException("组盘的物料未配置【物料型号】!"); - } - //根据物料型号匹配字典表获取入库编码 - List dictList = sysDictMapper.selectList(new LambdaQueryWrapper() - .eq(Dict::getCode, "MATERIAL_MODEL_SECT") - .eq(Dict::getPara1, material_model)); - if(CollectionUtils.isEmpty(dictList)){ - throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型与库区的对应关系,请核对!"); + if (CollectionUtils.isEmpty(dictList)) { + throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置,请核对!"); } - String sect_code = dictList.get(0).getValue(); - //根据库区编码获取库区id sect_id - List sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper() - .eq(Sectattr::getSect_code, sect_code)); + //循环判断每个 如果有问题,则抛出异常 + String lastSchBasePoint = null; + Integer priority = 0 ; + List jsonObjectList = new ArrayList<>(); + for (ZwConfirmInParamDto paramDto : dto.getParamList()) { + priority++; + //当前点位 + String schBasePointString = lastSchBasePoint; + JSONObject whereJson = new JSONObject(); + whereJson.put("vehicle_code", paramDto.getVehicle_code()); + whereJson.put("search", paramDto.getVehicle_code()); + + //起点 + whereJson.put("site_code", paramDto.getSite_code()); + whereJson.put("noEmptyVehicle", "1"); + String material_model = getVehicleMaterial(whereJson).getString("material_model"); + if (StringUtils.isEmpty(material_model)) { + throw new BadRequestException("组盘的物料未配置【物料型号】!"); + } + + //判断每个物料是否都已经配置库区 + List dicts = dictList.stream().filter(a -> material_model.equals(a.getPara1())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(dicts)) { + throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型" + material_model + "与库区的对应关系,请核对!"); + } + + String sect_code = dicts.get(0).getValue(); + //根据库区编码获取库区id sect_id + List sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper() + .eq(Sectattr::getSect_code, sect_code)); + + if (CollectionUtils.isEmpty(sectattrList)) { + throw new BadRequestException("库区" + sect_code + "不存在,请核对!"); + } + + whereJson.put("sect_id",sectattrList.get(0).getSect_id()); + + //获取起点 + SchBasePoint schBasePoint = iSchBasePointService + .getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code"))); + if (ObjectUtil.isEmpty(schBasePoint)) { + throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位"); + } + + //如果是第一个,则不知道搬出来的托盘应该放哪里,因此需要计算得出,其他的则是【上一个点位】 + if (StringUtils.isBlank(lastSchBasePoint)) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class) + .select(SchBasePoint::getPoint_code) + .eq(SchBasePoint::getRegion_code, "YLXCQ") + .eq(SchBasePoint::getIs_used, true) + .eq(SchBasePoint::getPoint_status, 1) + .eq(SchBasePoint::getPoint_type, "1") + .orderByDesc(SchBasePoint::getOut_empty_seq); + + List schBasePointList = schBasePointMapper.selectList(queryWrapper); + if (CollectionUtils.isEmpty(schBasePointList)) { + throw new BadRequestException("原料卸车区不存在空的点位"); + } + + schBasePointString = schBasePointList.get(0).getPoint_code(); + } + + //point1为库存空托盘点 + //point2为卸货区空托盘应该放置的点 + //point3为入库起始点位 + + //起始点 对于task point3 + whereJson.put ("point_code", whereJson.getString("site_code")); + + //卸货区空托盘应该放置的点,对应task point2 + whereJson.put("sch_base_point", schBasePointString); + whereJson.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("来料入库")); + + whereJson.put("priority",priority); + + jsonObjectList.add(whereJson); + //下一个的托盘放置点为本次的起点 + lastSchBasePoint = whereJson.getString("site_code"); - if(CollectionUtils.isEmpty(sectattrList)){ - throw new BadRequestException("库区"+sect_code+"不存在,请核对!"); } - //赋值给whereJson - whereJson.put("sect_id",sectattrList.get(0).getSect_id()); + //校验没有问题,则进行入库世纪操作 + for(JSONObject whereJson:jsonObjectList){ + + // 预组织出入库单据实体 + Map jsonMst = organizeInsertData(whereJson); + // 调用服务新增出入库单 + String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst); + // 预组织出入库单据明细的分配数据 + whereJson.put("iostorinv_id", iostorinv_id); + Map jsonDtl = organizeDivData(whereJson); + // 调用分配,默认自动分配库位 + iRawAssistIStorService.zwInDivStruct(new JSONObject(jsonDtl)); + // 下发任务 + sendZwTask(whereJson); + //更新组盘表状态 + mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper() + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))); - //获取起点 - SchBasePoint schBasePoint = iSchBasePointService - .getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code"))); - if (ObjectUtil.isEmpty(schBasePoint)) { - throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位"); } - whereJson.put("point_code",whereJson.getString("site_code")); - // 预组织出入库单据实体 - Map jsonMstO = organizeInsertData(whereJson); - // 调用服务新增出入库单 - String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMstO); - // 预组织出入库单据明细的分配数据 - whereJson.put("iostorinv_id", iostorinv_id); - Map jsonDtl = organizeDivData(whereJson); - // 调用分配,默认自动分配库位 - iRawAssistIStorService.divStruct(new JSONObject(jsonDtl)); - - // 组织主数据 - Map jsonMst = new HashMap<>(); - jsonMst.put("point_code", whereJson.getString("point_code")); - // 组织明细数据 - IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( - new QueryWrapper().lambda() - .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id")) - ); - // 查找分配明细 - Map map = new HashMap<>(); - map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id()); - List disDtl = iRawAssistIStorService.getDisDtl(map); - // 类型转换 - ArrayList tableMater = new ArrayList<>(); - disDtl.forEach(item -> { - tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); - }); - jsonMst.put("tableMater", tableMater); - - String point_code2 = iRawAssistIStorService.divPointNoTask(jsonMst); - - //空托盘出库 - // 需要计算新的siteCode 根据方案 找region_code=YLXCQ 原料卸车区的 - // 已启用的 编号最大的 空的 point_type = 1 点位 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class) - .select(SchBasePoint::getPoint_code) - .eq(SchBasePoint::getRegion_code, "YLXCQ") - .eq(SchBasePoint::getIs_used, true) - .eq(SchBasePoint::getPoint_status, 1) - .eq(SchBasePoint::getPoint_type, "1") - .orderByDesc(SchBasePoint::getOut_empty_seq); - - List schBasePointList = schBasePointMapper.selectList(queryWrapper); - if (CollectionUtils.isEmpty(schBasePointList)) { - throw new BadRequestException("原料卸车区不存在空的点位"); - } - - //从库区拉一个空托盘到这个点位 - whereJson.put("siteCode", schBasePointList.get(0).getPoint_code()); - - LambdaQueryWrapper maQueryWrapper = new LambdaQueryWrapper<>(); - maQueryWrapper.eq(MdMeMaterialbase::getMaterial_code, StatusEnum.VEHICLE_TYPE.code("空托盘")); - - MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne(maQueryWrapper); - if (materDao == null) { - throw new BadRequestException("未找到空载具物料信息!"); - } - whereJson.put("material_id", materDao.getMaterial_id()); - whereJson.put("material_code", materDao.getMaterial_code()); - Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<>(Sectattr.class) - .eq(Sectattr::getSect_id, whereJson.getString("sect_id")) - .eq(Sectattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是")) - ); - if (ObjectUtil.isEmpty(sectattr)) { - throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!"); - } - BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id()); - whereJson.put("stor_code", storeDao.getStor_code()); - whereJson.put("sect_code", sectattr.getSect_code()); - StrategyStructParam strategyStructParam = StrategyStructParam.builder() - .ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库"))) - .sect_code(whereJson.getString("sect_code")) - .stor_code(whereJson.getString("stor_code")) - .material_id(whereJson.getString("material_id")) - .material_code(whereJson.getString("material_code")) - .qty(new BigDecimal(1)) - .stragegyType("1") - .build(); - List structList = iStructattrService.outBoundSectDiv(strategyStructParam); - if (CollectionUtils.isEmpty(structList)) { - throw new BadRequestException("无可用空托盘库存!"); - } - - //创建任务 - JSONObject taskForm = new JSONObject(); - taskForm.put("task_type", IOSConstant.IN_BILL_TASK); - taskForm.put("config_code", IOSConstant.IN_BILL_TASK); - taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); - //空托盘出库库位 - taskForm.put("point_code1", structList.get(0).getStruct_code()); - //拉到卸货区空余的位置 - taskForm.put("point_code2", whereJson.getString("siteCode")); - - taskForm.put("point_code3", whereJson.getString("site_code")); - //计算入库库位 - taskForm.put("point_code4", point_code2); - taskForm.put("vehicle_code", structList.get(0).getStoragevehicle_code()); - InBillTask inBillTask = SpringContextHolder.getBean("InBillTask"); - String task_id = inBillTask.create(taskForm); - - Set vehicleCodeSet = structList.stream() - .map(StrategyStructMaterialVO::getStoragevehicle_code) - .collect(Collectors.toSet()); - mdPbGroupplateMapper.update( - new GroupPlate(), - new LambdaUpdateWrapper() - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) - .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) - .in(GroupPlate::getStoragevehicle_code, vehicleCodeSet) - ); - - //锁定仓位 - Set structCodeSet = structList.stream() - .map(StrategyStructMaterialVO::getStruct_code) - .collect(Collectors.toSet()); - iStructattrService.update( - new LambdaUpdateWrapper() - .set(Structattr::getInv_id, null) - .set(Structattr::getInv_code, null) - .set(Structattr::getInv_type, null) - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁")) - .in(Structattr::getStruct_code, structCodeSet) - ); - - - //分配明细表更新任务相关数据 - IOStorInvDis dis = new IOStorInvDis(); - dis.setIostorinvdis_id(dtlDao.getIostorinvdtl_id()); - dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成")); - dis.setTask_id(task_id); - dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是")); - dis.setPoint_code(whereJson.getString("site_code")); - ioStorInvDisMapper.updateById(dis); - return PdaResponse.requestOk(); + } +// @Override +// @Transactional +// public PdaResponse zwConfirmIn(JSONObject whereJson) { + +// //组盘入库 +// //根据组盘编号获取物料型号 +// whereJson.put("vehicleCode", whereJson.getString("vehicle_code")); +// whereJson.put("noEmptyVehicle", "1"); +// String material_model = getVehicleMaterial(whereJson).getString("material_model"); +// if(StringUtils.isEmpty(material_model)){ +// throw new BadRequestException("组盘的物料未配置【物料型号】!"); +// } +// //根据物料型号匹配字典表获取入库编码 +// List dictList = sysDictMapper.selectList(new LambdaQueryWrapper() +// .eq(Dict::getCode, "MATERIAL_MODEL_SECT") +// .eq(Dict::getPara1, material_model)); +// if(CollectionUtils.isEmpty(dictList)){ +// throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型与库区的对应关系,请核对!"); +// } + +// String sect_code = dictList.get(0).getValue(); +// //根据库区编码获取库区id sect_id +// List sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper() +// .eq(Sectattr::getSect_code, sect_code)); + +// if(CollectionUtils.isEmpty(sectattrList)){ +// throw new BadRequestException("库区"+sect_code+"不存在,请核对!"); +// } + +// //赋值给whereJson +// whereJson.put("sect_id",sectattrList.get(0).getSect_id()); + +// //获取起点 +// SchBasePoint schBasePoint = iSchBasePointService +// .getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code"))); +// if (ObjectUtil.isEmpty(schBasePoint)) { +// throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位"); +// } +// whereJson.put("point_code",whereJson.getString("site_code")); +// // 预组织出入库单据实体 +// Map jsonMstO = organizeInsertData(whereJson); +// // 调用服务新增出入库单 +// String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMstO); +// // 预组织出入库单据明细的分配数据 +// whereJson.put("iostorinv_id", iostorinv_id); +// Map jsonDtl = organizeDivData(whereJson); +// // 调用分配,默认自动分配库位 +// iRawAssistIStorService.divStruct(new JSONObject(jsonDtl)); + +// // 组织主数据 +// Map jsonMst = new HashMap<>(); +// jsonMst.put("point_code", whereJson.getString("point_code")); +// // 组织明细数据 +// IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( +// new QueryWrapper().lambda() +// .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id")) +// ); +// // 查找分配明细 +// Map map = new HashMap<>(); +// map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id()); +// List disDtl = iRawAssistIStorService.getDisDtl(map); +// // 类型转换 +// ArrayList tableMater = new ArrayList<>(); +// disDtl.forEach(item -> { +// tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); +// }); +// jsonMst.put("tableMater", tableMater); + +// String point_code2 = iRawAssistIStorService.divPointNoTask(jsonMst); + +// //空托盘出库 +// // 需要计算新的siteCode 根据方案 找region_code=YLXCQ 原料卸车区的 +// // 已启用的 编号最大的 空的 point_type = 1 点位 +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class) +// .select(SchBasePoint::getPoint_code) +// .eq(SchBasePoint::getRegion_code, "YLXCQ") +// .eq(SchBasePoint::getIs_used, true) +// .eq(SchBasePoint::getPoint_status, 1) +// .eq(SchBasePoint::getPoint_type, "1") +// .orderByDesc(SchBasePoint::getOut_empty_seq); + +// List schBasePointList = schBasePointMapper.selectList(queryWrapper); +// if (CollectionUtils.isEmpty(schBasePointList)) { +// throw new BadRequestException("原料卸车区不存在空的点位"); +// } + +// //从库区拉一个空托盘到这个点位 +// whereJson.put("siteCode", schBasePointList.get(0).getPoint_code()); + +// LambdaQueryWrapper maQueryWrapper = new LambdaQueryWrapper<>(); +// maQueryWrapper.eq(MdMeMaterialbase::getMaterial_code, StatusEnum.VEHICLE_TYPE.code("空托盘")); + +// MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne(maQueryWrapper); +// if (materDao == null) { +// throw new BadRequestException("未找到空载具物料信息!"); +// } +// whereJson.put("material_id", materDao.getMaterial_id()); +// whereJson.put("material_code", materDao.getMaterial_code()); +// Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<>(Sectattr.class) +// .eq(Sectattr::getSect_id, whereJson.getString("sect_id")) +// .eq(Sectattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是")) +// ); +// if (ObjectUtil.isEmpty(sectattr)) { +// throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!"); +// } +// BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id()); +// whereJson.put("stor_code", storeDao.getStor_code()); +// whereJson.put("sect_code", sectattr.getSect_code()); +// StrategyStructParam strategyStructParam = StrategyStructParam.builder() +// .ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库"))) +// .sect_code(whereJson.getString("sect_code")) +// .stor_code(whereJson.getString("stor_code")) +// .material_id(whereJson.getString("material_id")) +// .material_code(whereJson.getString("material_code")) +// .qty(new BigDecimal(1)) +// .stragegyType("1") +// .build(); +// List structList = iStructattrService.outBoundSectDiv(strategyStructParam); +// if (CollectionUtils.isEmpty(structList)) { +// throw new BadRequestException("无可用空托盘库存!"); +// } + +// //创建任务 +// JSONObject taskForm = new JSONObject(); +// taskForm.put("task_type", IOSConstant.IN_BILL_TASK); +// taskForm.put("config_code", IOSConstant.IN_BILL_TASK); +// taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); +// //空托盘出库库位 +// taskForm.put("point_code1", structList.get(0).getStruct_code()); +// //拉到卸货区空余的位置 +// taskForm.put("point_code2", whereJson.getString("siteCode")); + +// taskForm.put("point_code3", whereJson.getString("site_code")); +// //计算入库库位 +// taskForm.put("point_code4", point_code2); +// taskForm.put("vehicle_code", structList.get(0).getStoragevehicle_code()); +// InBillTask inBillTask = SpringContextHolder.getBean("InBillTask"); +// String task_id = inBillTask.create(taskForm); + +// Set vehicleCodeSet = structList.stream() +// .map(StrategyStructMaterialVO::getStoragevehicle_code) +// .collect(Collectors.toSet()); +// mdPbGroupplateMapper.update( +// new GroupPlate(), +// new LambdaUpdateWrapper() +// .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) +// .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) +// .in(GroupPlate::getStoragevehicle_code, vehicleCodeSet) +// ); + +// //锁定仓位 +// Set structCodeSet = structList.stream() +// .map(StrategyStructMaterialVO::getStruct_code) +// .collect(Collectors.toSet()); +// iStructattrService.update( +// new LambdaUpdateWrapper() +// .set(Structattr::getInv_id, null) +// .set(Structattr::getInv_code, null) +// .set(Structattr::getInv_type, null) +// .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁")) +// .in(Structattr::getStruct_code, structCodeSet) +// ); + + +// //分配明细表更新任务相关数据 +// IOStorInvDis dis = new IOStorInvDis(); +// dis.setIostorinvdis_id(dtlDao.getIostorinvdtl_id()); +// dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成")); +// dis.setTask_id(task_id); +// dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是")); +// dis.setPoint_code(whereJson.getString("site_code")); +// ioStorInvDisMapper.updateById(dis); + +// return PdaResponse.requestOk(); +// } + /** * 组织入库插入数据 * @param whereJson { @@ -651,7 +770,9 @@ public class PdaIosInServiceImpl implements PdaIosInService { jsonMst.put("bill_status", IOSEnum.BILL_STATUS.code("生成")); jsonMst.put("total_qty", total_qty); jsonMst.put("detail_count", 1); - jsonMst.put("bill_type", StatusEnum.IOBILL_TYPE_IN.code("生产入库")); + if(!jsonMst.containsKey("bill_type")) { + jsonMst.put("bill_type", StatusEnum.IOBILL_TYPE_IN.code("来料入库")); + } jsonMst.put("biz_date", DateUtil.now()); // 组织明细数据 ArrayList tableData = new ArrayList<>(); @@ -745,6 +866,42 @@ public class PdaIosInServiceImpl implements PdaIosInService { } + /** + * 下发任务-中钨原料入库 + * @param whereJson { + * storagevehicle_code:载具编码 + * point_code:点位编码 + * sect_code:库区 + * iostorinv_id: id + * } + */ + private void sendZwTask(JSONObject whereJson) { + // 组织主数据 + Map jsonMst = new HashMap<>(); + jsonMst.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("来料入库")); + jsonMst.put("point_code2", whereJson.getString("sch_base_point")); + jsonMst.put("point_code3", whereJson.getString("point_code")); + jsonMst.put("priority", whereJson.getString("priority")); + jsonMst.put("vehicle_code", whereJson.getString("vehicle_code")); + // 组织明细数据 + IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( + new QueryWrapper().lambda() + .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id")) + ); + // 查找分配明细 + Map map = new HashMap<>(); + map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id()); + List disDtl = iRawAssistIStorService.getDisDtl(map); + // 类型转换 + ArrayList tableMater = new ArrayList<>(); + disDtl.forEach(item -> { + tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); + }); + jsonMst.put("tableMater", tableMater); + + iRawAssistIStorService.divPoint(jsonMst); + } + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java index 221a6ce..9db35b0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java @@ -28,7 +28,7 @@ public enum StatusEnum { * 出入库单据类型退货出库 */ IOBILL_TYPE_IN(ForkMap.of("生产入库", "10", "inStorageTask", "调拨入库", "11", "inStorageTask", "退货入库", "12", "inStorageTask", "拣选回库", - "13", "inStorageTask", "盘点入库", "14", "inStorageTask", "托盘入库", "30", "inStorageTask", "二楼CTU入库", "80", "inStorageTask")), + "13", "inStorageTask", "盘点入库", "14", "inStorageTask", "托盘入库", "30", "inStorageTask", "二楼CTU入库", "80", "inStorageTask","来料入库", "1013", "inStorageTask")), IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20", "outStorageTask", "生产出库", "21", "outStorageTask", "调拨出库", "22", "outStorageTask", "拣选出库", "23", "conveyorOutStorageTask", "盘点出库", "24", "outStorageTask", "出库拣选", "25", "toPickPlatformTask", "退货出库", "26", "outStorageTask", "托盘出库", "40", "outStorageTask", "二楼CTU出库", "81", "inStorageTask", "二楼出库AGV搬运", diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java index 8ffbc8e..048dfbf 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java @@ -3,6 +3,7 @@ package org.nl.wms.sch_manage.service.util.tasks.zw; 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.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.nl.common.exception.BadRequestException; @@ -25,11 +26,14 @@ 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.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 org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.List; /** * @Author: zhengxuming @@ -55,15 +59,25 @@ public class InBillTask extends AbstractTask { private IOStorInvDisMapper ioStorInvDisMapper; @Resource - private IOutBillService outBillService; + private IMdPbGroupplateService iMdPbGroupplateService; + + @Resource + private ISchBasePointService pointService; + + /** + * 仓位服务 + */ + @Resource + private IStructattrService iStructattrService; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); task.setTask_id(IdUtil.getStringId()); - task.setTask_code(json.getString("TaskCode")); + task.setTask_code(json.getString("task_code")); task.setTask_status(TaskStatus.CREATE.getCode()); - task.setConfig_code(json.getString("task_type")); + task.setConfig_code(json.getString("config_code")); task.setPoint_code1(json.getString("point_code1")); task.setPoint_code2(json.getString("point_code2")); task.setPoint_code3(json.getString("point_code3")); @@ -72,7 +86,7 @@ public class InBillTask extends AbstractTask { task.setVehicle_code2(json.getString("vehicle_code2")); task.setGroup_id(json.getString("group_id")); task.setRequest_param(json.toString()); - task.setPriority(json.getString("Priority")); + task.setPriority(json.getString("priority")); task.setCreate_id(SecurityUtils.getCurrentUserId()); task.setCreate_name(SecurityUtils.getCurrentNickName()); task.setCreate_time(DateUtil.now()); @@ -153,6 +167,25 @@ public class InBillTask extends AbstractTask { taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); taskService.updateById(taskObj); + + //更改点位的托盘信息,空托盘的点位 2为空托盘放置点位 + pointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .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_code2())); + + //更改点位的托盘信息,卸货的点位 3为起始点 + pointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getVehicle_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())); + rawAssistIStorService.taskFinish(taskObj); } @@ -167,6 +200,29 @@ public class InBillTask extends AbstractTask { .eq(SchBaseTask::getTask_id,taskObj.getTask_id()) ); + + List ioStorInvDisList = ioStorInvDisMapper.selectList(new LambdaUpdateWrapper<>(IOStorInvDis.class) + .eq(IOStorInvDis::getTask_id, taskObj.getTask_id())); + + for(IOStorInvDis ioStorInvDis:ioStorInvDisList){ + //库存表解锁 lock_type inv_type inv_id inv_code + //解锁库位 + JSONObject finish_map = new JSONObject(); + finish_map.put("struct_code", ioStorInvDis.getStruct_code()); + finish_map.put("inv_type", null); + finish_map.put("inv_id", null); + finish_map.put("inv_code", null); + + //解绑库位 + iStructattrService.updateStatusByCode("2", finish_map); + + + //更新组盘表 status 20->10 + iMdPbGroupplateService.update(new LambdaUpdateWrapper<>(GroupPlate.class) + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) + .eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code())); + } + //分配表清除任务 ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class) .set(IOStorInvDis::getTask_id,null) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IInBillService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IInBillService.java index bcbce41..1a07a75 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IInBillService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IInBillService.java @@ -40,7 +40,7 @@ public interface IInBillService extends IService { void divStruct(JSONObject whereJson); - + void zwInDivStruct(JSONObject whereJson); void unDivStruct(Map whereJson); 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 433fe26..2c28b43 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 @@ -35,6 +35,7 @@ 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.JbBackAgvTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask; +import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask; import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; @@ -95,6 +96,8 @@ public class InBillServiceImpl extends ServiceImpl i private JbDownAgvTask jbDownAgvTask; @Resource private JbBackAgvTask jbBackAgvTask; + @Resource + private InBillTask inBillTask; @Override public IPage pageQuery(Map whereJson, PageQuery page) { @@ -442,6 +445,123 @@ public class InBillServiceImpl extends ServiceImpl i ioStorInvMapper.updateById(ios); } + @Override + @Transactional(rollbackFor = Exception.class) + public void zwInDivStruct(JSONObject param) { + Assert.noNullElements(new Object[]{param.getString("stor_code"),param.getString("sect_code")},"参数异常"); + ArrayList rows = (ArrayList) param.get("tableMater"); + JSONObject mst = JSONObject.parseObject(JSON.toJSONString(param)); + HashMap map = rows.get(0); + //判断该分配明细是否已经分配货位 + IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class) + .eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id")) + .isNull(IOStorInvDis::getStruct_code)); + if (ioStorInvDis ==null){ + throw new BadRequestException("当前明细已经分配过库位"); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String sect_id = ""; + String sect_code = ""; + String sect_name = ""; + String struct_id = ""; + String struct_code = ""; + String struct_name = ""; + String storagevehicle_code = ""; + //是否自动分配仓位 + Boolean checked = mst.getBoolean("checked"); + if (ObjectUtil.isNotEmpty(checked) && checked) { + param.put("qty", map.get("plan_qty")); + param.put("material_code", map.get("material_code")); + param.put("pcsn", map.get("pcsn")); + param.put("ioType", StatusEnum.STRATEGY_TYPE.code("入库")); + List structattrs = iStructattrService.inBoundSectDiv( + StrategyStructParam.builder() + .ioType(param.getString("ioType")) + .sect_code(param.getString("sect_code")) + .stor_code(param.getString("stor_code")) + .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(); + sect_code = struct.getSect_code(); + sect_name = struct.getSect_name(); + struct_id = struct.getStruct_id(); + struct_code = struct.getStruct_code(); + struct_name = struct.getStruct_name(); + storagevehicle_code = struct.getStoragevehicle_code(); + } else { + Structattr structattr = iStructattrService.findById(map.get("struct_id")); + MdPbStoragevehicleinfo mdPbStoragevehicleinfo = mdPbStoragevehicleinfoMapper.selectOne(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class) + .eq(MdPbStoragevehicleinfo::getStoragevehicle_code, map.get("storagevehicle_code")) + ); + sect_id = map.get("sect_id"); + sect_code = map.get("sect_code"); + sect_name = map.get("sect_name"); + struct_id = map.get("struct_id"); + struct_code = map.get("struct_code"); + struct_name = map.get("struct_name"); + storagevehicle_code = map.get("storagevehicle_code"); + } + JSONObject dis_map = new JSONObject(); + dis_map.put("sect_id", sect_id); + dis_map.put("sect_code", sect_code); + dis_map.put("sect_name", sect_name); + dis_map.put("struct_id", struct_id); + dis_map.put("struct_code", struct_code); + dis_map.put("struct_name", struct_name); + dis_map.put("storagevehicle_code", storagevehicle_code); + //锁定货位 + IOStorInv ioStorInv = ioStorInvMapper.selectById(map.get("iostorinv_id")); + JSONObject lock_map = new JSONObject(); + lock_map.put("struct_code", struct_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); + //更新组盘表状态 + mdPbGroupplateService.update(new LambdaUpdateWrapper() + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .eq(GroupPlate::getStoragevehicle_code, map.get("storagevehicle_code")) + .eq(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("组盘"))); + // 更新分配明细表 + ioStorInvDisMapper.update(dis_map.toJavaObject(IOStorInvDis.class),new LambdaUpdateWrapper<>(IOStorInvDis.class) + .set(IOStorInvDis::getSect_id,dis_map.getString("sect_id")) + .set(IOStorInvDis::getSect_code,dis_map.getString("sect_code")) + .set(IOStorInvDis::getSect_name,dis_map.getString("sect_name")) + .set(IOStorInvDis::getStruct_id,dis_map.getString("struct_id")) + .set(IOStorInvDis::getStoragevehicle_code,dis_map.getString("storagevehicle_code")) + .set(IOStorInvDis::getStruct_code,dis_map.getString("struct_code")) + .set(IOStorInvDis::getStruct_name,dis_map.getString("struct_name")) + .eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id")) + ); + //维护单据明细表里 分配数量 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("iostorinvdtl_id",map.get("iostorinvdtl_id")); + jsonObject.put("bill_status",IOSEnum.BILL_STATUS.code("分配完")); + jsonObject.put("assign_qty",map.get("plan_qty")); + jsonObject.put("unassign_qty","0"); + ioStorInvDtlMapper.updateById(jsonObject.toJavaObject(IOStorInvDtl.class)); + //根据单据标识判断分配明细是否都已经分配完成 + int disCount = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) + .eq(IOStorInvDis::getIostorinv_id, map.get("iostorinv_id")) + .and(wrapper -> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code, ""))); + // 根据分配货位情况 更新主表单据状态 + IOStorInv ios = new IOStorInv(); + ios.setIostorinv_id(map.get("iostorinv_id")); + ios.setUpdate_optid(currentUserId); + ios.setUpdate_optname(nickName); + ios.setUpdate_time(now); + ios.setBill_status(disCount > 0 ? IOSEnum.BILL_STATUS.code("分配中") : IOSEnum.BILL_STATUS.code("分配完")); + ioStorInvMapper.updateById(ios); + } + + /** * 根据库区策略获取仓位 @@ -649,6 +769,26 @@ public class InBillServiceImpl extends ServiceImpl i task.put("point_code3", fullPoint.getPoint_code()); task.put("point_code4", structCode); jbBackAgvTask.create(task); + } else if (StatusEnum.IOBILL_TYPE_IN.code("来料入库").equals(invObj.getBill_type())) { + // 获取组盘信息 + GroupPlate groupPlate = mdPbGroupplateService.getOne(new LambdaQueryWrapper() + .eq(GroupPlate::getStoragevehicle_code, whereJson.get("vehicle_code")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))); + + JSONObject task = new JSONObject(); + task.put("config_code", IOSConstant.IN_BILL_TASK); + task.put("group_id", groupPlate.getGroup_id()); + task.put("priority",whereJson.get("priority")); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("point_code1",ioStorInvDis.getStruct_code()); + task.put("point_code2", whereJson.get("point_code2")); + task.put("point_code3", whereJson.get("point_code3")); + task.put("point_code4", ioStorInvDis.getStruct_code()); + + //第一个载具为计算得到的,第二个载具为起始点载具 + task.put("vehicle_code", ioStorInvDis.getStoragevehicle_code()); + task.put("vehicle_code2", whereJson.get("vehicle_code")); + task_id = inBillTask.create(task); } else { //创建任务 JSONObject task_form = new JSONObject(); @@ -809,6 +949,7 @@ public class InBillServiceImpl extends ServiceImpl i finish_map.put("inv_type", null); finish_map.put("inv_id", null); finish_map.put("inv_code", null); + finish_map.put("occupancy_state","3"); iStructattrService.updateStatusByCode("1",finish_map); //库存变动 StructattrChangeDto changeDto = StructattrChangeDto.builder() 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 87a4d1f..664a05d 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue @@ -144,7 +144,7 @@ - + @@ -222,12 +222,28 @@ - + + + + + + + + @@ -287,6 +303,11 @@ + + +