diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java index dd393b8..fcfebbf 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java @@ -376,7 +376,7 @@ public class StructattrServiceImpl extends ServiceImpl decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); QueryWrapper query = new QueryWrapper() .eq("is_used", true) - .eq("lock_type", StatusEnum.LOCK.code("无锁")) + .eq("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")) .eq("stor_code", param.getStor_code()) .eq("sect_code", param.getSect_code()) .isNull("storagevehicle_code"); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/DepthPriorityHandler.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/DepthPriorityHandler.java index 46825a2..38973e3 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/DepthPriorityHandler.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/diy/DepthPriorityHandler.java @@ -10,6 +10,7 @@ import org.nl.wms.basedata_manage.service.IStructattrService; 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.warehouse_management.enums.IOSEnum; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; @@ -85,7 +86,7 @@ public class DepthPriorityHandler extends Decisioner { .in(Structattr::getRow_num, Arrays.asList(1, 4)) .eq(Structattr::getStor_code, StatusEnum.STOCK_INFO.code("料箱库")) .eq(Structattr::getIs_used, 1) - .eq(Structattr::getLock_type, StatusEnum.LOCK.code("无锁"))); + .eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))); //先找2排的再找3排的 if (!list1.isEmpty()) { List combinedResult = new ArrayList<>(); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java index 40d8e98..1d5ebe0 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java @@ -63,15 +63,15 @@ public class PdaIosInController { @PostMapping("/getSect") @Log("获取库区") - public ResponseEntity getSect() { - return new ResponseEntity<>(pdaIosInService.getSect(), HttpStatus.OK); + public ResponseEntity getSect(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaIosInService.getSect(whereJson), HttpStatus.OK); } @PostMapping("/getRegion") @Log("获取区域") - public ResponseEntity getRegion() { - return new ResponseEntity<>(pdaIosInService.getRegion(), HttpStatus.OK); + public ResponseEntity getRegion(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaIosInService.getRegion(whereJson), HttpStatus.OK); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java index c3ec007..38debff 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java @@ -79,7 +79,7 @@ public interface PdaIosInService { * * @return PdaResponse */ - PdaResponse getSect(); + PdaResponse getSect(JSONObject whereJson); /** @@ -87,7 +87,7 @@ public interface PdaIosInService { * * @return PdaResponse */ - PdaResponse getRegion(); + PdaResponse getRegion(JSONObject whereJson); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java index 7039317..9c91e0f 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java @@ -5,6 +5,7 @@ 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; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -26,6 +27,7 @@ import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseRegionService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBaseRegion; +import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.tasks.BackInTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; @@ -57,6 +59,8 @@ import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS; @Service public class PdaIosInServiceImpl implements PdaIosInService { + @Autowired + private Map applyTaskMap; /** * 组盘记录mapper */ @@ -132,7 +136,6 @@ public class PdaIosInServiceImpl implements PdaIosInService { @Override - @Transactional public PdaResponse groupPlate(JSONObject whereJson) { // 物料编码 String materialId = whereJson.getString("material_id"); @@ -144,7 +147,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(materialId); MdPbMeasureunit unitDao = iMdPbMeasureunitService.getById(materDao.getBase_unit_id()); // 校验 - if (ObjectUtil.isEmpty(vehicleDao) || ObjectUtil.isEmpty(materDao)) { + if (ObjectUtil.isEmpty(vehicleDao) || ObjectUtil.isEmpty(materDao) || ObjectUtil.isEmpty(materDao)) { throw new BadRequestException("载具,物料或单位信息有误!"); } //判断该载具是否存在组盘信息 @@ -169,8 +172,8 @@ public class PdaIosInServiceImpl implements PdaIosInService { .material_id(materDao.getMaterial_code()) .storagevehicle_code(vehicleDao.getStoragevehicle_code()) .pcsn(pcsn) - .qty_unit_id(unitDao != null ? unitDao.getMeasure_unit_id() : null) - .qty_unit_name(unitDao != null ? unitDao.getUnit_name() : null) + .qty_unit_id(unitDao.getMeasure_unit_id()) + .qty_unit_name(unitDao.getUnit_name()) .qty(new BigDecimal(qty)) .status(GROUP_PLATE_STATUS.code("组盘")) .ext_code(whereJson.getString("ext_code")) @@ -210,7 +213,6 @@ public class PdaIosInServiceImpl implements PdaIosInService { PageQuery pageQuery = new PageQuery(); pageQuery.setPage(whereJson.getInteger("page") - 1); pageQuery.setSize(whereJson.getInteger("size")); - String search = whereJson.getString("search"); MaterialQuery materialQuery = new MaterialQuery(); if (StringUtils.isNotBlank(whereJson.getString("search"))) { materialQuery.setSearch(whereJson.getString("search").trim().toUpperCase()); @@ -219,6 +221,25 @@ public class PdaIosInServiceImpl implements PdaIosInService { return PdaResponse.build(mapPage); } + @Override + public PdaResponse getSect(JSONObject whereJson) { + PageQuery pageQuery = new PageQuery(); + pageQuery.setPage(whereJson.getInteger("page") - 1); + pageQuery.setSize(whereJson.getInteger("size")); + IPage sectList = iSectattrService.queryAll(new HashMap(), pageQuery); + sectList.getRecords().forEach(r -> r.setSect_name(r.getStor_name() + "-" + r.getSect_name())); + return PdaResponse.requestParamOk(sectList); + } + + @Override + public PdaResponse getRegion(JSONObject whereJson) { + PageQuery pageQuery = new PageQuery(); + pageQuery.setPage(whereJson.getInteger("page") - 1); + pageQuery.setSize(whereJson.getInteger("size")); + IPage regionList = iSchBaseRegionService.queryAll(new HashMap(), pageQuery); + return PdaResponse.requestParamOk(regionList.getRecords()); + } + @Override public PdaResponse getVehicleMaterial(JSONObject whereJson) { whereJson.put("status", GROUP_PLATE_STATUS.code("组盘")); @@ -246,26 +267,6 @@ public class PdaIosInServiceImpl implements PdaIosInService { return PdaResponse.requestParamOk(list); } - @Override - public PdaResponse getSect() { - PageQuery page = new PageQuery(); - page.setSize(100); - page.setPage(0); - IPage sectList = iSectattrService.queryAll(new HashMap(), page); - List result = sectList.getRecords(); - result.forEach(r -> r.setSect_name(r.getStor_name() + "-" + r.getSect_name())); - result.sort(Comparator.comparing(SectattrDto::getSect_name)); - return PdaResponse.requestParamOk(result); - } - - @Override - public PdaResponse getRegion() { - PageQuery page = new PageQuery(); - page.setSize(100); - page.setPage(0); - IPage regionList = iSchBaseRegionService.queryAll(new HashMap(), page); - return PdaResponse.requestParamOk(regionList.getRecords()); - } /** @@ -280,70 +281,110 @@ public class PdaIosInServiceImpl implements PdaIosInService { @Override @Transactional public PdaResponse confirmReturnMaterial(JSONObject whereJson) { + // 生成回库任务 + whereJson.put("config_code", IOSConstant.BACK_IN_TASK); + whereJson.put("vehicle_code", whereJson.getString("vehicle_code")); + whereJson.put("Priority", TaskEnum.ACS_PRIORITY.code("1")); + //入库分配 + divStructNoBills(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("出库"))); + return PdaResponse.requestOk(); + } + + + /** + * 不含单据入库业务 + */ + private void divStructNoBills(JSONObject whereJson) { + //校验载具 MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code")); if (ObjectUtil.isEmpty(vehicleDao)) { throw new BadRequestException("不存在该载具号信息,请检查"); } - // 查询仓库 + //校验仓库 BsrealStorattr storeDao = iSrealStorattrService.getById(whereJson.getString("stor_id")); if (ObjectUtil.isEmpty(storeDao)) { throw new BadRequestException("该库区未找到对应仓库信息,请检查"); } //分配仓位 JSONObject params = new JSONObject(); - params.put("storagevehicle_code", vehicleDao.getStoragevehicle_code()); params.put("ioType", StatusEnum.STRATEGY_TYPE.code("入库")); - params.put("sect_code", whereJson.getString("sect_code")); + params.put("storagevehicle_code", vehicleDao.getStoragevehicle_code()); params.put("stor_code", storeDao.getStor_code()); + params.put("sect_code", whereJson.getString("sect_code")); params.put("material_code", whereJson.getString("material_code")); params.put("qty", whereJson.getString("qty")); params.put("pcsn", whereJson.getString("pcsn")); - Structattr attrDao = iRawAssistIStorService.divBackStruct(params); + Structattr attrDao = iRawAssistIStorService.getStructattr(whereJson); //确定起点 SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code"))); if (ObjectUtil.isEmpty(schBasePoint)) { throw new BadRequestException("未找到载具所在的点位信息,请检查"); } - // 生成回库任务 - JSONObject task = new JSONObject(); - task.put("config_code", IOSConstant.BACK_IN_TASK); - task.put("point_code1", schBasePoint.getPoint_code()); - task.put("point_code2", attrDao.getStruct_code()); - task.put("vehicle_code", whereJson.getString("vehicle_code")); - task.put("Priority", TaskEnum.ACS_PRIORITY.code("1")); - String task_id = backInTask.create(task); - // 更新终点锁定状态 - attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("入库锁")); - attrDao.setTaskdtl_id(task_id); - iStructattrService.updateById(attrDao); + whereJson.put("point_code1", schBasePoint.getPoint_code()); + //确定终点 + whereJson.put("point_code2", attrDao.getStruct_code()); + //创建任务 + String taskId = applyTaskMap.get(whereJson.getString("config_code")).create(whereJson); // 更新起点绑定id iSchBasePointService.update( new UpdateWrapper().lambda() .set(SchBasePoint::getIos_id, null) .eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code()) ); - return PdaResponse.requestOk(); + // 更新终点锁定状态 + JSONObject lock_map = new JSONObject(); + lock_map.put("struct_code", attrDao.getStruct_code()); + lock_map.put("inv_id", null); + lock_map.put("inv_code", null); + lock_map.put("inv_type", null); + lock_map.put("taskdtl_id", taskId); + lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁")); + iStructattrService.updateStatusByCode("0", lock_map); } @Override @Transactional public PdaResponse confirmIn(JSONObject whereJson) { - //获取起点 - SchBasePoint schBasePoint = iSchBasePointService - .getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code"))); - whereJson.put("point_code", schBasePoint.getPoint_code()); - // 预组织出入库单据实体 - Map jsonMst = organizeInsertData(whereJson); - // 调用服务新增出入库单 - String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst); - // 预组织出入库单据明细的分配数据 - whereJson.put("iostorinv_id", iostorinv_id); - Map jsonDtl = organizeDivData(whereJson); - // 调用分配,默认自动分配库位 - iRawAssistIStorService.divStruct(new JSONObject(jsonDtl)); - // 下发任务 - sendTask(whereJson); + //物料组盘入库 + if (StringUtils.isBlank(whereJson.getString("is_empty_vehicle"))) { + //获取起点 + SchBasePoint schBasePoint = iSchBasePointService + .getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code"))); + whereJson.put("point_code", schBasePoint.getPoint_code()); + // 预组织出入库单据实体 + Map jsonMst = organizeInsertData(whereJson); + // 调用服务新增出入库单 + String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst); + // 预组织出入库单据明细的分配数据 + whereJson.put("iostorinv_id", iostorinv_id); + Map jsonDtl = organizeDivData(whereJson); + // 调用分配,默认自动分配库位 + iRawAssistIStorService.divStruct(new JSONObject(jsonDtl)); + // 下发任务 + sendTask(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("出库"))); + } else { + //空载具入库 + whereJson.put("qty", 1); + //组盘 + groupPlate(whereJson); + // 生成空载具入库任务 + whereJson.put("config_code", IOSConstant.VEHICLE_IN_TASK); + whereJson.put("vehicle_code", whereJson.getString("vehicle_code")); + whereJson.put("Priority", TaskEnum.ACS_PRIORITY.code("1")); + //入库分配 + divStructNoBills(whereJson); + } return PdaResponse.requestOk(); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java index 0613c69..872d29d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java @@ -16,20 +16,24 @@ import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.config.SpringContextHolder; import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.basedata_manage.service.IBsrealStorattrService; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; +import org.nl.wms.basedata_manage.service.ISectattrService; import org.nl.wms.basedata_manage.service.IStructattrService; -import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; -import org.nl.wms.basedata_manage.service.dao.Structattr; -import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto; +import org.nl.wms.basedata_manage.service.dao.*; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; +import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; +import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; +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; +import org.nl.wms.sch_manage.service.util.tasks.VehicleOutTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IRawAssistIStorService; @@ -49,6 +53,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS; @@ -62,17 +69,29 @@ import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS; */ @Service public class PdaIosOutServiceImpl implements PdaIosOutService { + @Autowired + private Map applyTaskMap; /** * 组盘记录mapper */ @Autowired private MdPbGroupplateMapper mdPbGroupplateMapper; + /** + * 库区服务 + */ + @Autowired + private ISectattrService iSectattrService; /** * 出入库单主表 */ @Resource private IOStorInvMapper ioStorInvMapper; + /** + * 仓库服务 + */ + @Autowired + private IBsrealStorattrService iSrealStorattrService; /** * 基础物料服务 @@ -212,28 +231,85 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { } + /** + * 空载具出库 + * 1:托盘2料箱 + */ + @Override @Transactional public PdaResponse vehicleOutConfirm(JSONObject whereJson) { - //锁定货位 - JSONObject lock_map = new JSONObject(); - lock_map.put("struct_code", whereJson.getString("struct_code")); - lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁")); - iStructattrService.updateStatusByCode("0", lock_map); - //创建任务 - JSONObject taskForm = new JSONObject(); - taskForm.put("task_type", "STOutTask"); - taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); - taskForm.put("PickingLocation", whereJson.getString("struct_code")); - taskForm.put("PlacedLocation", whereJson.getString("siteCode")); - taskForm.put("vehicle_code", whereJson.getString("storagevehicle_code")); - StOutTask stOutTask = SpringContextHolder.getBean("STOutTask"); - stOutTask.create(taskForm); - iStructattrService.updateStatusByCode("0", lock_map); + long qty = 1L; + //空料箱出库 + if (StringUtils.isNotBlank(whereJson.getString("qty"))) { + qty = whereJson.getLongValue("qty"); + if (qty > 6) { + throw new BadRequestException("请输入小于7以内的载具数量"); + } + whereJson.put("material_id", "2"); + whereJson.put("material_code", "2"); + } else { + //空托盘出库 + whereJson.put("material_id", "1"); + whereJson.put("material_code", "1"); + } + Sectattr sectattr = iSectattrService.getById(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_code(whereJson.getString("material_id")) + .material_code(whereJson.getString("material_code")) + .qty(BigDecimal.valueOf(qty)) + .build(); + List structList = iStructattrService.outBoundSectDiv(strategyStructParam); + if (CollectionUtils.isEmpty(structList)) { + throw new BadRequestException("无可用库存!"); + } + structList.forEach(r -> { + //创建任务 + JSONObject taskForm = new JSONObject(); + taskForm.put("task_type", IOSConstant.VEHICLE_OUT_TASK); + taskForm.put("config_code", IOSConstant.VEHICLE_IN_TASK); + taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); + taskForm.put("PickingLocation", r.getStruct_code()); + taskForm.put("PlacedLocation", whereJson.getString("siteCode")); + taskForm.put("vehicle_code", r.getStoragevehicle_code()); + VehicleOutTask VehicleOutTask = SpringContextHolder.getBean("VehicleOutTask"); + applyTaskMap.get(IOSConstant.VEHICLE_IN_TASK).create(whereJson); + VehicleOutTask.create(taskForm); + }); //更新组盘记录表 - mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<>(GroupPlate.class) - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) - .eq(GroupPlate::getGroup_id, whereJson.getString("group_id")) + 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) ); return PdaResponse.requestOk(); } @@ -392,7 +468,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { if (ObjectUtil.isEmpty(schBasePoint)) { throw new BadRequestException("未找到载具所在的点位信息,请检查"); } - // 生成回库任务 + // 生成转运任务 JSONObject task = new JSONObject(); task.put("config_code", IOSConstant.PDA_POINT_TASK); task.put("point_code1", schBasePoint.getPoint_code()); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java index 2a08bf8..2fde70a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java @@ -71,7 +71,8 @@ public enum StatusEnum { /** * 点位锁类型 */ - LOCK(ForkMap.of("无锁", "00", null, "入库锁", "10", null, "入库盘点锁", "16", null, "出库锁", "20", null, "盘点出库锁", "26", null, "移库锁", "50", null, "异常锁定", "60", null, "空出锁", "70", null)), + //LOCK(ForkMap.of("无锁", "00", null, "入库锁", "10", null, "入库盘点锁", "16", null, "出库锁", "20", null, "盘点出库锁", "26", null, "移库锁", "50", null, "异常锁定", "60", null, "空出锁", "70", null)), + STRATEGY_TYPE(ForkMap.of("入库", "1", null, "出库", "2", null, "出入库", "3", null)), diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleInTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleInTask.java new file mode 100644 index 0000000..3d464c9 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleInTask.java @@ -0,0 +1,174 @@ +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.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.basedata_manage.service.IStructattrService; +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; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Author: gbx + * @Description: 空载具入库任务 + * @Date: 2025/7/3 + */ +@Component(value = "VehicleInTask") +@TaskType("VehicleInTask") +public class VehicleInTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 点位服务 + */ + @Autowired + private ISchBasePointService iSchBasePointService; + + /** + * 仓位服务 + */ + @Autowired + private IStructattrService iStructattrService; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(json.getString("config_code")); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setVehicle_code(json.getString("vehicle_code")); + 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()); + taskService.save(task); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + 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.setPriority(taskDao.getPriority()); + acsTaskDto.setTask_type("1"); + 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("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { + throw new BadRequestException("只能取消生成中的任务!"); + } + this.cancelTask(taskObj); + } + + @Override + public void backMes(String task_code) { + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 更新终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) + .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) + .set(Structattr::getTaskdtl_id, null) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + ); + // 更新起点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getIos_id, null) + ); + // 更新任务 + taskObj.setRemark("已完成"); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 更新终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) + .set(Structattr::getTaskdtl_id, null) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + ); + // 更新任务 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleOutTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleOutTask.java new file mode 100644 index 0000000..3be294f --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/VehicleOutTask.java @@ -0,0 +1,166 @@ +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 org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IOutBillService; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +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: 空载具出库任务 + * @Date: 2025/7/3 + */ +@Component(value = "VehicleOutTask") +@TaskType("VehicleOutTask") +public class VehicleOutTask extends AbstractTask { + @Autowired + private ISchBaseTaskService taskService; + + @Resource + private IOutBillService outBillService; + + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(json.getString("TaskCode")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(json.getString("task_type")); + task.setPoint_code1(json.getString("PickingLocation")); + task.setPoint_code2(json.getString("PlacedLocation")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setGroup_id(json.getString("group_id")); + 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()); + taskService.save(task); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + 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()); + if (taskDao.getPoint_code2().contains("-")) { + acsTaskDto.setNext_device_code(taskDao.getPoint_code2().replace('-', '_')); + } + acsTaskDto.setPriority(taskDao.getPriority()); + acsTaskDto.setTask_type("1"); + + 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("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + } + + @Override + public void backMes(String task_code) { + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj) { + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + outBillService.taskFinish(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj) { + + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) + .set(SchBaseTask::getRemark,"已取消") + .eq(SchBaseTask::getTask_id,taskObj.getTask_id()) + ); + + //分配表清除任务 + ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class) + .set(IOStorInvDis::getTask_id,null) + .set(IOStorInvDis::getPoint_code,null) + .set(IOStorInvDis::getIs_issued,0) + .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成")) + .eq(IOStorInvDis::getTask_id,taskObj.getTask_id()) + ); + + // 更新任务状态 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + taskService.updateById(taskObj); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java index ac0ff53..2cddd91 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java @@ -66,4 +66,16 @@ public class IOSConstant { * 手持定点任务 */ public final static String PDA_POINT_TASK = "PdaPointTask"; + + /** + * 空载具入库任务 + */ + public final static String VEHICLE_IN_TASK = "VehicleInTask"; + + + /** + * 空载具出库任务 + */ + public final static String VEHICLE_OUT_TASK = "VehicleOutTask"; + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IRawAssistIStorService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IRawAssistIStorService.java index e9e745e..183f509 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IRawAssistIStorService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IRawAssistIStorService.java @@ -40,17 +40,7 @@ public interface IRawAssistIStorService extends IService { void divStruct(JSONObject whereJson); - /** - * 根据库区策略获取仓位 - * storagevehicle_code 载具号 - * ioType 出入库类型 - * sect_code 库区编码 - * stor_code 仓库编码 - * material_code 物料编码 - * qty 计划数量 - * pcsn 批次号 - */ - Structattr divBackStruct(JSONObject whereJson); + void unDivStruct(Map whereJson); @@ -65,4 +55,6 @@ public interface IRawAssistIStorService extends IService { Structattr autoDis(JSONObject whereJson); List getInBillTaskDtl(Map whereJson); + + Structattr getStructattr(JSONObject param); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java index a7a48e7..3e8a0d8 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java @@ -428,7 +428,6 @@ public class RawAssistIStorServiceImpl extends ServiceImpl() - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) - .eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) - .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))); - return structattr; - } - - - /** - * 根据库区策略获取仓位 - * ioType 出入库类型 - * sect_code 库区编码 - * stor_code 仓库编码 - * material_code 物料编码 - * qty 计划数量 - * pcsn 批次号 - */ public Structattr getStructattr(JSONObject param) { List structattrs = iStructattrService.inBoundSectDiv( StrategyStructParam.builder() @@ -475,12 +446,10 @@ public class RawAssistIStorServiceImpl extends ServiceImpl