diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawInRuleHandle.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawInRuleHandle.java index 1963d2f..7cc2c5d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawInRuleHandle.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/RawInRuleHandle.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 原料出库规则 + * 原料入库规则 * @Author: zhengxuming * @Date: 2025年7月29日14:11:10 */ @@ -34,9 +34,9 @@ public class RawInRuleHandle extends Decisioner { .eq("is_used", true) .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) .eq("sect_code", param.getString("sect_code")) - .isNotNull("storagevehicle_code") + .isNull("storagevehicle_code") .isNull("Task_code") - .eq("occupancy_state",2) + .eq("occupancy_state",1) .orderByAsc("update_time"); List querylList = iStructattrService.list(query); return querylList; 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 68a526b..904a809 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 @@ -144,15 +144,15 @@ public class MesToWmsServiceImpl implements MesToWmsService { public MesResponse callMaterial(MesCallMaterialRequestDto dto) { log.info("MES下发设备叫料信息输入参数:-------------------: {}", dto); + if(dto.getIsManual() != null && dto.getIsManual()){ + dto.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + } + RLock lock = redissonClient.getLock(dto.getTask_code()); boolean tryLock = lock.tryLock(1, TimeUnit.SECONDS); try { if (tryLock) { - if(dto.getIsManual() != null && dto.getIsManual()){ - dto.setTask_code(CodeUtil.getNewCode("TASK_CODE")); - } - String pointCode = dto.getDevice_code(); SchBasePoint outPoint = pointService.getById(pointCode); if (null == outPoint) { @@ -169,6 +169,10 @@ public class MesToWmsServiceImpl implements MesToWmsService { throw new BadRequestException("仓位【" + dto.getStruct_code() + "】不存在!"); } + if(3 != outStructAttr.getOccupancy_state()|| StringUtils.isBlank(outStructAttr.getStoragevehicle_code())){ + throw new BadRequestException("仓位【" + dto.getStruct_code() + "】上没有料,无法叫料!"); + } + List taskList = taskService.list(new QueryWrapper().lambda() .eq(SchBaseTask::getExt_task_code, dto.getTask_code())); @@ -204,7 +208,7 @@ public class MesToWmsServiceImpl implements MesToWmsService { } if(!"1".equals(outPoint.getPoint_status())){ - throw new BadRequestException("设备【" + dto.getStruct_code() + "】有托盘或有料,请执行下空桶上满料!"); + throw new BadRequestException("设备【" + outPoint.getPoint_code() + "】有托盘或有料,请执行下空桶上满料!"); } // 1、创建出库单、明细、分配明细 @@ -278,7 +282,7 @@ public class MesToWmsServiceImpl implements MesToWmsService { } outBillService.allSetPoint(taskParam); return MesResponse.requestOk(); - } else if("2".equals(dto.getTask_type())){ + } else if("2".equals(dto.getTask_type())){ if(StringUtils.isBlank(outPoint.getVehicle_code())){ throw new BadRequestException("设备【" + pointCode + "】不存在料桶,请核对!"); @@ -424,24 +428,29 @@ public class MesToWmsServiceImpl implements MesToWmsService { @SneakyThrows public MesResponse backMaterial(MesBackMaterialRequestDto dto) { log.info("MES下发设备退料信息输入参数:-------------------: {}", dto); + + if (dto.getIsManual() != null && dto.getIsManual()) { + dto.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + dto.setPcsn("退料"); + dto.setQty_unit_name("桶"); + + //退料需要判断 + if("1".equals(dto.getTask_type())){ + if(StringUtils.isEmpty(dto.getMaterial_code())){ + throw new BadRequestException("物料编码不可为空"); + } + if(StringUtils.isEmpty(dto.getQty())){ + throw new BadRequestException("数量不可为空"); + } + } + } + RLock lock = redissonClient.getLock(dto.getTask_code()); boolean tryLock = lock.tryLock(1, TimeUnit.SECONDS); try { if (tryLock) { log.info("MES下发设备退料信息输入参数:--------------------------------------" + MesResponse.requestOk()); - if (dto.getIsManual() != null && dto.getIsManual()) { - dto.setTask_code(CodeUtil.getNewCode("TASK_CODE")); - //如果是手工,则需要判断是否已经组盘 - List groupList = iMdPbGroupplateService.list(new QueryWrapper() - .eq("storagevehicle_code", dto.getVehicle_code()) - .eq("status", IOSEnum.GROUP_PLATE_STATUS.code("组盘"))); - - if (CollectionUtils.isEmpty(groupList)) { - throw new BadRequestException("手工退料需要先组盘,请先组盘"); - } - } - //根据料桶号去载具表匹配料桶类型 MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getByCode(dto.getVehicle_code()); @@ -470,6 +479,9 @@ public class MesToWmsServiceImpl implements MesToWmsService { if("1".equals(dto.getTask_type())){ MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(dto.getMaterial_code(), true); + + //通过托盘号查找组盘信息 + param.put("sect_code",sectattr.getSect_code()); param.put("sect_id",sectattr.getSect_id()); param.put("vehicle_code",dto.getVehicle_code()); 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 de37208..553bd2f 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 @@ -83,6 +83,21 @@ public class PdaIosInController { return new ResponseEntity<>(pdaIosInService.getSect(whereJson), HttpStatus.OK); } + @PostMapping("/getPdaSect") + @Log("PDA获取库区") + public ResponseEntity getPdaSect(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaIosInService.getPdaSect(whereJson), HttpStatus.OK); + } + + + @PostMapping("/getPdaStruct") + @Log("PDA获取库位") + public ResponseEntity getPdaStruct(@RequestBody JSONObject whereJson) { + assertNotBlankJson(whereJson, "请求参数不能为空", "sect_code"); + return new ResponseEntity<>(pdaIosInService.getPdaStruct(whereJson), HttpStatus.OK); + } + + @PostMapping("/getRegion") @Log("获取区域") 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 171539b..f5d34e4 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 @@ -94,6 +94,19 @@ public interface PdaIosInService { */ List getSect(JSONObject whereJson); + /** + * 查询库区 + * + * @return PdaResponse + */ + PdaResponse getPdaSect(JSONObject whereJson); + + /** + * 查询库位 + * + * @return PdaResponse + */ + PdaResponse getPdaStruct(JSONObject whereJson); /** * 查询区域 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 66697ce..4cf5a0b 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 @@ -349,7 +349,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { } @Override - public List getSect(JSONObject whereJson) { + public List getSect(JSONObject whereJson) { PageQuery pageQuery = new PageQuery(); IPage sectList = iSectattrService.queryAll(new HashMap(), pageQuery); List selectList = new ArrayList<>(); @@ -359,6 +359,38 @@ public class PdaIosInServiceImpl implements PdaIosInService { return selectList; } + @Override + public PdaResponse getPdaSect(JSONObject whereJson) { + PageQuery pageQuery = new PageQuery(); + IPage sectList = iSectattrService.queryAll(new HashMap(), pageQuery); + List selectList = new ArrayList<>(); + sectList.getRecords().forEach(r -> + selectList.add(SelectItemVo.builder().text(r.getStor_name() + "-" + r.getSect_name()).value(r.getSect_id()).build()) + ); + return PdaResponse.requestParamOk(selectList); + } + + @Override + public PdaResponse getPdaStruct(JSONObject whereJson) { + List structattrList = iStructattrService.list(new LambdaQueryWrapper() + .eq(Structattr::getOccupancy_state, 3) + .eq(Structattr::getLock_type, "0") + .and(wp -> wp + .eq(Structattr::getSect_id, whereJson.getString("sect_code")) + .or() + .eq(Structattr::getSect_code, whereJson.getString("sect_code")) + ) + .isNotNull(Structattr::getStoragevehicle_code) + .isNull(Structattr::getTask_code)); + + List selectList = new ArrayList<>(); + structattrList.forEach(r -> + selectList.add(SelectItemVo.builder().text(r.getStruct_code() + "-" + r.getStruct_name()).value(r.getStruct_name()).build()) + ); + return PdaResponse.requestParamOk(selectList); + } + + @Override public PdaResponse getRegion(JSONObject whereJson) { PageQuery pageQuery = new PageQuery(); @@ -495,10 +527,8 @@ public class PdaIosInServiceImpl implements PdaIosInService { whereJson.put("config_code", IOSConstant.BACK_IN_TASK); whereJson.put("Priority", TaskEnum.ACS_PRIORITY.code("1")); //入库分配 - //手工的,需要更新组盘表 - if(!whereJson.containsKey("is_manual") || !whereJson.getBoolean("is_manual")){ - groupPlate(whereJson); - } + groupPlate(whereJson); + whereJson.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("余料入库")); whereJson.put("stragegy_type",StatusEnum.IOBILL_TYPE_IN.code("余料入库")); @@ -535,11 +565,18 @@ public class PdaIosInServiceImpl implements PdaIosInService { @Transactional public PdaResponse vehicleInConfirm(JSONObject whereJson) { //空载具入库 - - Sectattr sectattr = sectattrService.findByCode(whereJson.getString("sect_code")); + Sectattr sectattr = sectattrService.findById(whereJson.getString("sect_code")); if(sectattr == null){ throw new BadRequestException("库区" + whereJson.getString("sect_code") +"不存在"); } + + whereJson.put("sect_code", sectattr.getSect_code()); + whereJson.put("sect_id", sectattr.getSect_id()); + + if(sectattr.getSect_name().contains("不合格")){ + throw new BadRequestException("不合格区不允许空载具入库"); + } + whereJson.put("stor_id",sectattr.getStor_id()); //得到当前点位的载具编号 @@ -551,6 +588,24 @@ public class PdaIosInServiceImpl implements PdaIosInService { if(schBasePointList.size()>1){ throw new BadRequestException("存在重复点位,请确认"); } + if(!"2".equals(schBasePointList.get(0).getPoint_status())){ + throw new BadRequestException("点位状态不为空载具,请核对!"); + } + + //判断点位和仓位是否有正在执行的任务 + List schBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) + .and(wp -> wp + .eq(SchBaseTask::getPoint_code1, schBasePointList.get(0).getPoint_code()) + .or() + .eq(SchBaseTask::getPoint_code2, schBasePointList.get(0).getPoint_code()) + ) + .le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode())); + if (CollectionUtils.isNotEmpty(schBaseTaskList)) { + throw new BadRequestException("存在正在执行的点位,请核对!"); + } + + whereJson.put("site_code",schBasePointList.get(0).getPoint_code()); MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code")); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java index 1f18e35..2be0400 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java @@ -27,10 +27,14 @@ import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.decision_manage.service.strategyConfig.enums.StragegyTypeEnum; import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService; import org.nl.wms.pda_manage.util.PdaResponse; +import org.nl.wms.sch_manage.enums.PointStatusEnum; import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.enums.TaskEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask; import org.nl.wms.sch_manage.service.util.tasks.StOutTask; @@ -154,6 +158,9 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { @Autowired private IInBillService iRawAssistIStorService; + @Autowired + private ISchBaseTaskService taskService; + @Override public PdaResponse getDtl(JSONObject whereJson) { @@ -240,6 +247,26 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { @Override @Transactional public PdaResponse vehicleOutConfirm(JSONObject whereJson) { + + //出库点位需要空点位 + List schBasePointList = iSchBasePointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, whereJson.getString("siteCode")) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())); + + if(CollectionUtils.isEmpty(schBasePointList)){ + throw new BadRequestException("点位" + whereJson.getString("siteCode") + "不存在或不是空位"); + } + + //判断点位是否有正在执行的任务 + List list = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, false) + .and(ll -> ll.eq(SchBaseTask::getPoint_code1, whereJson.getString("siteCode")).or() + .eq(SchBaseTask::getPoint_code2, whereJson.getString("siteCode")))); + if (CollectionUtils.isNotEmpty(list)) { + throw new BadRequestException(whereJson.getString("siteCode") + " 该点位已存在任务!"); + } + long qty = 1L; LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //空料箱出库 @@ -262,6 +289,9 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { if (ObjectUtil.isEmpty(sectattr)) { throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!"); } + if(sectattr.getSect_name().contains("不合格")){ + throw new BadRequestException("不合格区不允许空载具入库"); + } BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id()); whereJson.put("stor_code", storeDao.getStor_code()); whereJson.put("sect_code", sectattr.getSect_code()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java index e4b3bb7..28875d6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java @@ -52,8 +52,7 @@ public class SchBasePointController { @PostMapping("/updatePointType") @Log("修改点位类型") public ResponseEntity updatePointType(@Validated @RequestBody SchBasePoint entity) { - schBasePointService.updatePointType(entity); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return new ResponseEntity<>(schBasePointService.updatePointType(entity),HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java index 7c5917d..103d4db 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java @@ -4,6 +4,7 @@ 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.pda_manage.util.PdaResponse; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dto.SchBasePointQuery; @@ -45,7 +46,7 @@ public interface ISchBasePointService extends IService { * * @param entity / */ - void updatePointType(SchBasePoint entity); + PdaResponse updatePointType(SchBasePoint entity); /** * 多选删除 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java index d2bf148..1552b72 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java @@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.wms.pda_manage.util.PdaResponse; import org.nl.wms.sch_manage.enums.PointStatusEnum; import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.service.ISchBasePointService; @@ -142,11 +143,15 @@ public class SchBasePointServiceImpl extends ServiceImpl20 + iMdPbGroupplateService.update(new LambdaUpdateWrapper<>(GroupPlate.class) + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .eq(GroupPlate::getStoragevehicle_code,taskObj.getPoint_code1())); + // 更新任务状态 taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setRemark("已取消"); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleInTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleInTask.java index a3167f2..d189be0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleInTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleInTask.java @@ -3,6 +3,7 @@ package org.nl.wms.sch_manage.service.util.tasks; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; @@ -20,10 +21,14 @@ 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.TaskType; import org.nl.wms.warehouse_manage.enums.IOSEnum; +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; + /** * @Author: gbx * @Description: 空载具入库任务 @@ -51,6 +56,12 @@ public class VehicleInTask extends AbstractTask { @Autowired private IStructattrService iStructattrService; + /** + * 组盘信息表 + */ + @Autowired + private IMdPbGroupplateService iMdPbGroupPlateService; + /** * WMS回传MES */ @@ -162,9 +173,19 @@ public class VehicleInTask extends AbstractTask { new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getIng_task_code,null) .set(SchBasePoint::getIos_id, null) .set(SchBasePoint::getPoint_status,"1") ); + + //更新组盘 + iMdPbGroupPlateService.update( + new GroupPlate(), + new LambdaUpdateWrapper() + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code()) + ); + // 更新任务 taskObj.setRemark("已完成"); taskObj.setTask_status(TaskStatus.FINISHED.getCode()); @@ -194,6 +215,15 @@ public class VehicleInTask extends AbstractTask { taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskService.updateById(taskObj); + //解锁 + //解锁库位 + JSONObject unlock_map = new JSONObject(); + unlock_map.put("struct_code", taskObj.getPoint_code2()); + unlock_map.put("inv_type", null); + unlock_map.put("inv_id", null); + unlock_map.put("inv_code", null); + iStructattrService.updateStatusByCode("2",unlock_map); + //反馈到MES系统 if("自动".equals(taskObj.getCreate_mode())){ JSONObject jsonObject=new JSONObject(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleOutTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleOutTask.java index c5c6d81..83a904a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleOutTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleOutTask.java @@ -3,8 +3,10 @@ package org.nl.wms.sch_manage.service.util.tasks; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.apache.commons.collections4.CollectionUtils; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.IdUtil;; @@ -23,12 +25,16 @@ import org.nl.wms.warehouse_manage.enums.IOSEnum; 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.Collections; +import java.util.Set; +import java.util.stream.Collectors; /** * @Author: gbx @@ -58,6 +64,8 @@ public class VehicleOutTask extends AbstractTask { */ @Autowired private IStructattrService iStructattrService; + @Autowired + private IMdPbGroupplateService iMdPbGroupplateService; @Override public String create(JSONObject json) { @@ -153,23 +161,46 @@ public class VehicleOutTask extends AbstractTask { taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("已完成"); taskService.updateById(taskObj); - outBillService.taskFinish(taskObj); + + // // 更新起点 + // iStructattrService.update( + // new UpdateWrapper().lambda() + // .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) + // + // .set(Structattr::getOccupancy_state, 1) + // ); + // 更新起点 - iStructattrService.update( - new UpdateWrapper().lambda() - .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) - .set(Structattr::getOccupancy_state, 1) - ); + //解锁 + //解锁库位 + JSONObject unlock_map = new JSONObject(); + unlock_map.put("struct_code", taskObj.getPoint_code1()); + unlock_map.put("inv_type", null); + unlock_map.put("inv_id", null); + unlock_map.put("inv_code", null); + unlock_map.put("storagevehicle_code", null); + unlock_map.put("occupancy_state", "1"); + iStructattrService.updateStatusByCode("1",unlock_map); // 更新终点 iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .set(SchBasePoint::getIng_task_code,null) .set(SchBasePoint::getIos_id, null) .set(SchBasePoint::getPoint_status,"2")); + //删除组盘表 + //删除 + Set groupSet = iMdPbGroupplateService.list(new QueryWrapper().lambda() + .in(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code())) + .stream().map(GroupPlate::getStoragevehicle_code).collect(Collectors.toSet()); + if(CollectionUtils.isNotEmpty(groupSet)) { + iMdPbGroupplateService.delete(groupSet); + } + } @Transactional(rollbackFor = Exception.class) @@ -192,6 +223,15 @@ public class VehicleOutTask extends AbstractTask { .eq(IOStorInvDis::getTask_id,taskObj.getTask_id()) ); + //解锁 + //解锁库位 + JSONObject unlock_map = new JSONObject(); + unlock_map.put("struct_code", taskObj.getPoint_code1()); + unlock_map.put("inv_type", null); + unlock_map.put("inv_id", null); + unlock_map.put("inv_code", null); + iStructattrService.updateStatusByCode("2",unlock_map); + // 更新任务状态 taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setRemark("已取消"); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/dto/MesManualBackMaterialRequestDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/dto/MesManualBackMaterialRequestDto.java index 22a0cef..ca49f54 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/dto/MesManualBackMaterialRequestDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/dto/MesManualBackMaterialRequestDto.java @@ -12,21 +12,16 @@ public class MesManualBackMaterialRequestDto { @NotBlank(message = "料桶号不可为空") private String vehicle_code; - private String material_code; - private String pcsn; private String qty_unit_name; - @NotBlank(message = "数量不可为空") private String qty; - private String supp_code; - private String supp_name; private String remark; 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 d749076..15a7c61 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 @@ -1158,6 +1158,7 @@ public class OutBillServiceImpl 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", "1"); iStructattrService.updateStatusByCode("1",finish_map); //库存绑定到出库点。 @@ -1261,6 +1262,7 @@ public class OutBillServiceImpl 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", "1"); iStructattrService.updateStatusByCode("1",finish_map); //库存变动:根据冻结数更新物料库存 StructattrChangeDto changeDto = StructattrChangeDto.builder() diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/util/UpdateIvtUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/util/UpdateIvtUtils.java index 15a7e69..c76d0c0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/util/UpdateIvtUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/service/util/UpdateIvtUtils.java @@ -6,8 +6,10 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.IMdPbStoragevehicleextService; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; @@ -119,27 +121,47 @@ public class UpdateIvtUtils { * @param where 输入参数 */ private void updateAddCanuseInsertIvt(JSONObject where) { - throw new BadRequestException("当前载具已存在库存物料,请检查数据!"); + // throw new BadRequestException("当前载具已存在库存物料,请检查数据!"); // 判断当前载具是否有物料 - // MdPbStoragevehicleext extDao = iMdPbStoragevehicleextService.getOne( - // new QueryWrapper().lambda() - // .eq(MdPbStoragevehicleext::getStoragevehicle_code, where.getString("storagevehicle_code")) - // ); - // if (ObjectUtil.isNotEmpty(extDao)) { - // throw new BadRequestException("当前载具【"+extDao.getStoragevehicle_code()+"】已存在库存物料,请检查数据!"); - // } - // - // // 插入数据 - // MdPbStoragevehicleext extParamDao = JSONObject.parseObject(JSONObject.toJSONString(where), MdPbStoragevehicleext.class); - // extParamDao.setStoragevehicleext_id(IdUtil.getStringId()); - // extParamDao.setCanuse_qty(where.getBigDecimal("change_qty")); - // extParamDao.setFrozen_qty(BigDecimal.valueOf(0)); - // extParamDao.setInsert_time(DateUtil.now()); - // extParamDao.setUpdate_optid(SecurityUtils.getCurrentUserId()); - // extParamDao.setUpdate_optname(SecurityUtils.getCurrentNickName()); - // extParamDao.setUpdate_time(DateUtil.now()); - // extParamDao.setRemark(where.getString("remark")); - // iMdPbStoragevehicleextService.save(extParamDao); + // MdPbStoragevehicleext extDao = iMdPbStoragevehicleextService.getOne( + // new QueryWrapper().lambda() + // .eq(MdPbStoragevehicleext::getStoragevehicle_code, where.getString("storagevehicle_code")) + // ); + // if (ObjectUtil.isNotEmpty(extDao)) { + // throw new BadRequestException("当前载具【"+extDao.getStoragevehicle_code()+"】已存在库存物料,请检查数据!"); + // } +// + // // 插入数据 + // MdPbStoragevehicleext extParamDao = JSONObject.parseObject(JSONObject.toJSONString(where), MdPbStoragevehicleext.class); + // extParamDao.setStoragevehicleext_id(IdUtil.getStringId()); + // extParamDao.setCanuse_qty(where.getBigDecimal("change_qty")); + // extParamDao.setFrozen_qty(BigDecimal.valueOf(0)); + // extParamDao.setInsert_time(DateUtil.now()); + // extParamDao.setUpdate_optid(SecurityUtils.getCurrentUserId()); + // extParamDao.setUpdate_optname(SecurityUtils.getCurrentNickName()); + // extParamDao.setUpdate_time(DateUtil.now()); + // extParamDao.setRemark(where.getString("remark")); + // iMdPbStoragevehicleextService.save(extParamDao); + // 找当前托盘物料库存 + GroupPlate extDao = iMdPbGroupPlateService.getOne( + new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, where.getString("storagevehicle_code")) + ); + if (ObjectUtil.isEmpty(extDao)) { + throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!"); + } + // 加可用数 + double canuse_qty = NumberUtil.add(extDao.getQty(), where.getDoubleValue("change_qty")).doubleValue(); + if (canuse_qty < 0) { + throw new BadRequestException("可用数不能为负数,请检查变动数量!当前可用数为【" + extDao.getQty() + "】当前变动数为【" + where.getDoubleValue("change_qty") + "】"); + } + extDao.setUpdate_id(SecurityUtils.getCurrentUserId()); + extDao.setUpdate_name(SecurityUtils.getCurrentNickName()); + extDao.setUpdate_time(DateUtil.now()); + extDao.setRemark(where.getString("remark")); + iMdPbGroupPlateService.updateById(extDao); + ; + } /**