diff --git a/lms/nladmin-system/doc/wms.xls b/lms/nladmin-system/doc/wms.xls index 5d71304..ca4e764 100644 Binary files a/lms/nladmin-system/doc/wms.xls and b/lms/nladmin-system/doc/wms.xls differ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java index 51ba327..ca71f7f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java @@ -61,7 +61,8 @@ public class SysCodeRuleServiceImpl extends ServiceImpl().eq(SysCodeRule::getCode, code)).getId(); // 如果flag = 1就执行更新数据库的操作 String flag = (String) form.get("flag"); - List ruleDetails = codeRuleDetailMapper.selectList(new LambdaQueryWrapper().eq(SysCodeRuleDetail::getCode_rule_id, id)); + List ruleDetails = codeRuleDetailMapper.selectList(new LambdaQueryWrapper() + .eq(SysCodeRuleDetail::getCode_rule_id, id).orderByAsc(SysCodeRuleDetail::getSort_num)); String demo = ""; boolean isSame = true; for(SysCodeRuleDetail detail : ruleDetails) { @@ -91,7 +92,7 @@ public class SysCodeRuleServiceImpl extends ServiceImpl maxValue) { + if (!isSame || (Long.valueOf(detail.getCurrent_value()) + step) > maxValue) { numValue = detail.getInit_value(); } else { numValue = Integer.parseInt(detail.getCurrent_value()) + step + ""; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java index 234c641..e47816a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java @@ -12,6 +12,7 @@ import org.nl.system.service.quartz.dao.SysQuartzJob; import org.nl.system.service.quartz.dao.SysQuartzLog; import org.nl.system.service.quartz.dao.mapper.SysQuartzLogMapper; import org.nl.system.service.quartz.impl.SysQuartzJobServiceImpl; +import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.annotation.Async; @@ -28,6 +29,7 @@ import java.util.concurrent.ThreadPoolExecutor; @Async @SuppressWarnings({"unchecked", "all"}) @Slf4j +@DisallowConcurrentExecution public class ExecutionJob extends QuartzJobBean { /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockpitController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockpitController.java new file mode 100644 index 0000000..aa32794 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockpitController.java @@ -0,0 +1,45 @@ +package org.nl.wms.cockpit.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.cockpit.service.CockpitService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Author: lyd + * @Description: 天能数字孪生接口 + * @Date: 2023/11/22 + */ +@RestController +@Api(tags = "数字孪生") +@RequestMapping("/api/Tianneng") +@Slf4j +@SaIgnore +public class CockpitController { + + @Autowired + private CockpitService cockpitService; + + @PostMapping("/getDeviceInfo") + @Log("设备ui") + @ApiOperation("设备ui") + public ResponseEntity equipmentInfo(@RequestParam String deviceCode){ + return new ResponseEntity<>(cockpitService.equipmentInfo(deviceCode), HttpStatus.OK); + } + + @PostMapping("/allDeviceStatus") + @Log("设备ui") + @ApiOperation("设备ui") + public ResponseEntity allDeviceStatus(){ + return new ResponseEntity<>(cockpitService.allDeviceStatus(), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java new file mode 100644 index 0000000..3d5e24d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java @@ -0,0 +1,15 @@ +package org.nl.wms.cockpit.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/22 + */ +public interface CockpitService { + JSONObject equipmentInfo(String deviceCode); + + JSONArray allDeviceStatus(); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java new file mode 100644 index 0000000..7cf01fd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java @@ -0,0 +1,30 @@ +package org.nl.wms.cockpit.service.dao.mapper; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.ibatis.annotations.Param; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/22 + */ +public interface CockpitMapper { + /** + * 获取最近n条工单数据 + * @param deviceCode + * @param number + * @return + */ + JSONArray getDeviceLimitOrders(@Param("deviceCode") String deviceCode, @Param("number") int number); + + JSONObject getVehicleGroupInfo(String vehicleCode, String vehicleType); + + JSONArray getGHSInteriorList(); + + JSONArray getSSXInteriorList(); + + JSONArray getZCList(); + + JSONArray getKJList(); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml new file mode 100644 index 0000000..b8550a6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml @@ -0,0 +1,73 @@ + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java new file mode 100644 index 0000000..678b686 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java @@ -0,0 +1,302 @@ +package org.nl.wms.cockpit.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.wms.cockpit.service.CockpitService; +import org.nl.wms.cockpit.service.dao.mapper.CockpitMapper; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task_manage.enums.RegionCodeConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/22 + */ +@Service +public class CockpitServiceImpl implements CockpitService { + + @Autowired + private ISchBasePointService pointService; + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private CockpitMapper cockpitMapper; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + + @Override + public JSONObject equipmentInfo(String deviceCode) { + JSONObject res = new JSONObject(); + + SchBasePoint point = pointService.getById(deviceCode); + List points; + switch (point.getRegion_code()) { + case RegionCodeConstant.COATED_PLATE_LINE_AREA: + // hint: 涂板线是作为一整台设备显示。point:设备点 + points = pointService.getSubSites(deviceCode); + res.put("device_code", deviceCode); + res.put("device_name", point.getPoint_name()); + res.put("mode", "2"); + res.put("status", "1"); + res.put("error", "0"); + res.put("open_time", DateUtil.now()); + res.put("standby_time", 20); + res.put("production_time", 20); + res.put("error_time", 0); + res.put("material", "01200000"); + JSONArray array = new JSONArray(); + for (int i = 0; i < points.size(); i++) { + SchBasePoint pointObj = points.get(i); + JSONObject one = new JSONObject(); + one.put("device_code", pointObj.getPoint_code()); + one.put("device_name", pointObj.getPoint_name()); + one.put("mode", "2"); + one.put("move", "0"); + one.put("material_type", pointObj.getCan_vehicle_type()); + one.put("error", "0"); + array.add(one); + } + res.put("details", array); + // 获取最近3条工单数据 + JSONArray productionTask = cockpitMapper.getDeviceLimitOrders(deviceCode, 3); + res.put("production_tasks", productionTask); + break; + case RegionCodeConstant.CURING_ZONE: + // hint: 固化室,需要显示整个设备+内部位置明细 + points = pointService.getSubSites(deviceCode); // 小固化位置以及进出口(入口是不管的) + res.put("device_code", deviceCode); + res.put("device_name", point.getPoint_name()); + res.put("temperature_setting", 50); + res.put("temperature", 20); + res.put("humidity_setting", 20); + res.put("humidity", 10); + res.put("total_running_time", 8); + res.put("current_stage", 0); + res.put("executing_stage_num", 1); + res.put("device_statue", 1); + JSONArray ghsArray = new JSONArray(); + for (int i = 0; i < points.size(); i++) { + SchBasePoint pointObj = points.get(i); + if (pointObj.getPoint_type().equals("4")) break; + JSONObject one = new JSONObject(); + one.put("device_code", pointObj.getPoint_code()); + one.put("device_name", pointObj.getPoint_name()); + one.put("move", (Integer.parseInt(pointObj.getPoint_status()) - 1)); + one.put("material_type", ObjectUtil.isNotEmpty(pointObj.getVehicle_type()) + ? pointObj.getVehicle_type() : "-"); + ghsArray.add(one); + } + res.put("details", ghsArray); + break; + case RegionCodeConstant.EMPTY_TEMPORARY_STORAGE_AREA: + // 空暂存区 + points = pointService.getSubSites(deviceCode); + res.put("device_code", deviceCode); + res.put("device_name", point.getPoint_name()); + res.put("mode", 0); + res.put("open_time", DateUtil.now()); + res.put("standby_time", 20); + res.put("production_time", 10); + res.put("error_time", 8); + res.put("material_type", ObjectUtil.isNotEmpty(point.getVehicle_type()) + ? point.getVehicle_type() : "-"); + res.put("end_time", "-"); + JSONArray ssxArray = new JSONArray(); + for (int i = 0; i < points.size(); i++) { + SchBasePoint pointObj = points.get(i); + JSONObject one = new JSONObject(); + one.put("device_code", pointObj.getPoint_code()); + one.put("device_name", pointObj.getPoint_name()); + one.put("move", "0"); + ssxArray.add(one); + } + res.put("details", ssxArray); + break; + case RegionCodeConstant.EMPTY_POSITION_AREA: + // 空架位直接显示 + res.put("device_code", deviceCode); + res.put("device_name", point.getPoint_name()); + res.put("move", (Integer.parseInt(point.getPoint_status()) - 1)); + res.put("vehicle_type", ObjectUtil.isNotEmpty(point.getVehicle_type()) + ? point.getVehicle_type() : "-"); + break; + case RegionCodeConstant.STAGING_AREA: + // 货位直接显示,获取组盘信息,组装数据反馈 + res.put("device_code", deviceCode); + res.put("device_name", point.getPoint_name()); + res.put("vehicle_code", ObjectUtil.isNotEmpty(point.getVehicle_code())?point.getPoint_code():"-"); + res.put("vehicle_type", ObjectUtil.isNotEmpty(point.getVehicle_type())?point.getVehicle_type():"-"); + if (ObjectUtil.isNotEmpty(point.getVehicle_type()) && ObjectUtil.isNotEmpty(point.getVehicle_code())) { + JSONObject groupInfo = cockpitMapper.getVehicleGroupInfo(point.getVehicle_code(), + point.getVehicle_type()); + if (ObjectUtil.isNotEmpty(groupInfo)) { + res.put("storage_info", groupInfo); + } + } + break; + } + return res; + } + + @Override + public JSONArray allDeviceStatus() { + JSONArray array = new JSONArray(); + Random random = new Random(); + int lowerBound = 10000; + int upperBound = 18000; + for (int i = 1; i <= 4; i++) { + JSONObject agv = new JSONObject(); + agv.put("device_name", "AGV" + i); + agv.put("device_code", i); + agv.put("device_status", "IDLE"); + agv.put("energyLevel", 80); + agv.put("transportOrder", null); + agv.put("positionX", random.nextInt(upperBound - lowerBound + 1) + lowerBound); + agv.put("positionY", random.nextInt(upperBound - lowerBound + 1) + lowerBound); + agv.put("positionAngle", 90); + array.add(agv); + } + for (int i = 1; i <= 7; i++) { + JSONObject rgv_z = new JSONObject(); + rgv_z.put("vehicle", "RGV-Z-" + i); + rgv_z.put("energyLevel", 80); + rgv_z.put("status", "IDLE"); + rgv_z.put("task_code", null); + rgv_z.put("angle", 90); + rgv_z.put("rfid", "1-" + i + "-2"); + rgv_z.put("Relation_vehicle", null); + rgv_z.put("end_time", null); + rgv_z.put("open_time", DateUtil.now()); + rgv_z.put("standby_time", 0); + rgv_z.put("production_time", 0); + rgv_z.put("error_time", 0); + array.add(rgv_z); + } + for (int i = 1; i <= 13; i++) { + JSONObject rgv_m = new JSONObject(); + rgv_m.put("vehicle", "RGV-M-" + i); + rgv_m.put("energyLevel", 80); + rgv_m.put("status", "IDLE"); + rgv_m.put("angle", 90); + rgv_m.put("rfid", "2-" + i + "-2"); + rgv_m.put("Relation_vehicle", null); + rgv_m.put("end_time", null); + rgv_m.put("open_time", DateUtil.now()); + rgv_m.put("standby_time", 0); + rgv_m.put("production_time", 0); + rgv_m.put("error_time", 0); + array.add(rgv_m); + } + List tbx = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getRegion_code, "TBX")); + List tbxList = tbx.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); + tbxList.forEach(s -> { + JSONObject object = new JSONObject(); + object.put("device_code", s); + object.put("device_name", s); + object.put("mode", "2"); + object.put("status", "1"); + object.put("error", "0"); + object.put("open_time", DateUtil.now()); + object.put("standby_time", 20); + object.put("production_time", 20); + object.put("error_time", 0); + object.put("material", "01200000"); + array.add(object); + }); + List tbxDjw = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "2") + .eq(SchBasePoint::getRegion_code, "TBX")); + List tbxDjwList = tbxDjw.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); + tbxDjwList.forEach(s -> { + JSONObject object = new JSONObject(); + object.put("device_code", s); + object.put("device_name", s); + object.put("mode", "2"); + object.put("move", "0"); + object.put("error", 0); + array.add(object); + }); + // 缓存位 + List hcx = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "3") + .eq(SchBasePoint::getRegion_code, "TBX")); + List hcxList = hcx.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); + hcxList.forEach(s -> { + JSONObject object = new JSONObject(); + object.put("device_code", s); + object.put("device_name", s); + object.put("move", "0"); + array.add(object); + }); + List gh = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getRegion_code, "GH")); + List ghList = gh.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); + ghList.forEach(s -> { + JSONObject object = new JSONObject(); + object.put("device_code", s); + object.put("device_name", s); + object.put("temperature_setting", 50); + object.put("temperature", 20); + object.put("humidity_setting", 20); + object.put("humidity", 10); + object.put("total_running_time", 8); + object.put("current_stage", 0); + object.put("executing_stage_num", 1); + object.put("device_statue", 1); + object.put("front_door", 1); + object.put("back_door", 0); + array.add(object); + }); + // 整体 + List kjzc = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "5") + .eq(SchBasePoint::getRegion_code, "KJZC")); + List kjzcList = kjzc.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); + kjzcList.forEach(s -> { + JSONObject object = new JSONObject(); + object.put("device_code", s); + object.put("device_name", s); + object.put("mode", 0); + object.put("open_time", DateUtil.now()); + object.put("standby_time", 20); + object.put("production_time", 10); + object.put("error_time", 8); + object.put("material_type", "1"); + array.add(object); + }); + // 固化室详情 + JSONArray ghsInteriorList = cockpitMapper.getGHSInteriorList(); + JSONObject ghsDetail = new JSONObject(); + ghsDetail.put("ghs_detail", ghsInteriorList); + array.add(ghsDetail); + // 输送线详情 + JSONArray ssxInteriorList = cockpitMapper.getSSXInteriorList(); + JSONObject ssxDetail = new JSONObject(); + ssxDetail.put("ssx_detail", ssxInteriorList); + array.add(ssxDetail); + // 库位 + JSONArray zcList = cockpitMapper.getZCList(); + JSONObject storage = new JSONObject(); + storage.put("storage", zcList); + array.add(storage); + // 空架缓存位 + JSONArray kjList = cockpitMapper.getKJList(); + JSONObject emptyCacheBit = new JSONObject(); + emptyCacheBit.put("empty_cache", kjList); + array.add(emptyCacheBit); + return array; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java index 7ec52ab..ad5c250 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java @@ -73,5 +73,9 @@ public class MdBaseMaterial implements Serializable { @ApiModelProperty(value = "外部标识") private String ext_id; + @ApiModelProperty(value = "标准数量") + private String standard_qty; + @ApiModelProperty(value = "工艺号") + private String technique_num; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.java index 56354af..b39701b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.java @@ -1,5 +1,6 @@ package org.nl.wms.database.material.service.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; @@ -62,4 +63,8 @@ public class MdBaseMaterialDto implements Serializable { /** 外部标识 */ private String ext_id; + /** 标准数量 */ + private String standard_qty; + /** 工艺号 */ + private String technique_num; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java index 3e04561..accd3c2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java @@ -65,6 +65,14 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.feedbackState(param), HttpStatus.OK); } + @PostMapping("/againApply") + @Log("二次申请任务") + @ApiOperation("二次申请任务") + @SaIgnore + public ResponseEntity againApply(@RequestBody JSONObject task) { + return new ResponseEntity<>(acsToWmsService.againApply(task), HttpStatus.OK); + } + @PostMapping("/notify") @Log("acs通知wms") @ApiOperation("acs通知wms") diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java index cc74c00..3764ea1 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java @@ -21,4 +21,10 @@ public interface AcsToWmsService { /** acs通知wms */ BaseResponse notify(JSONObject param); + /** + * 二次请求 + * @param task + * @return + */ + String againApply(JSONObject task); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java index 26ae64b..a7b6465 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java @@ -1,50 +1,32 @@ package org.nl.wms.ext.service.impl; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; -import org.nl.system.service.param.ISysParamService; -import org.nl.wms.database.material.service.IMdBaseMaterialService; -import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.ext.service.AcsToWmsService; import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.ext.service.dto.to.wms.FeedBackTaskStatusRequest; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; -import org.nl.wms.sch.task_manage.enums.PointStatusEnum; -import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; import org.nl.wms.sch.task_manage.task.TaskFactory; import org.nl.wms.sch.task_manage.task.core.TaskStatus; import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; /** * @Author: lyd @@ -181,6 +163,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return BaseResponse.responseOk(requestNo, "反馈成功!"); } + // todo: ??? + @Override + public String againApply(JSONObject task) { + String configCode = task.getString("config_code"); + AbstractTask task1 = taskFactory.getTask(configCode); + return task1.againApply(task.getString("task_id")); + } + /** * 任务阶段反馈最新点位 * todo diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java index f926f55..ac8237d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java @@ -40,4 +40,32 @@ public interface IPdmBdWorkorderService extends IService { * @param ids / */ void deleteAll(Set ids); + + /** + * 悲观锁查找工单数据 + * @param id + * @return + */ + PdmBdWorkorder selectByIdLock(String id); + + /** + * 根据编码获取 + * @param orderCode + * @return + */ + PdmBdWorkorder getByCode(String orderCode); + + /** + * 获取设备生产中的工单 + * @param deviceCode + * @return + */ + PdmBdWorkorder getDeviceProductionTask(String deviceCode); + + /** + * 根据对接位获取工单 + * @param deviceCode + * @return + */ + PdmBdWorkorder getDeviceDockingProductionTask(String deviceCode); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java index 10fd966..9c0c40b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java @@ -12,4 +12,6 @@ import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; public interface PdmBdWorkorderMapper extends BaseMapper { IPage selectPageLeftJoin(IPage pages, PdmBdWorkorderQuery query); + + PdmBdWorkorder selectByIdLock(String id); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml index bc0fe33..6987882 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml @@ -29,4 +29,12 @@ + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java index 4ad5956..699b9ab 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java @@ -3,6 +3,8 @@ package org.nl.wms.pdm.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -15,6 +17,9 @@ import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.pdm.service.dao.mapper.PdmBdWorkorderMapper; import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -32,6 +37,8 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl queryAll(PdmBdWorkorderQuery query, PageQuery page){ @@ -80,4 +87,45 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl lam = new QueryWrapper().lambda(); + lam.eq(PdmBdWorkorder::getWorkorder_code, orderCode); + return pdmBdWorkorderMapper.selectOne(lam); + } + + @Override + public PdmBdWorkorder getDeviceProductionTask(String deviceCode) { + if (ObjectUtil.isEmpty(deviceCode)) { + throw new BadRequestException("根据设备查询工单,设备编码不能为空"); + } + // 只能有一个生产中 + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(PdmBdWorkorder::getPoint_code, deviceCode) + .eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode()); + return pdmBdWorkorderMapper.selectOne(lam); + } + + @Override + public PdmBdWorkorder getDeviceDockingProductionTask(String deviceCode) { + if (ObjectUtil.isEmpty(deviceCode)) { + throw new BadRequestException("根据设备查询工单,设备编码不能为空"); + } + // 查找父类设备 + SchBasePoint basePoint = pointService.getById(deviceCode); + // 只能有一个生产中 + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(PdmBdWorkorder::getPoint_code, basePoint.getParent_point_code()) + .eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode()); + return pdmBdWorkorderMapper.selectOne(lam); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java index f4c154d..c2e0538 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java @@ -49,4 +49,12 @@ public interface ISchBaseVehiclematerialgroupService extends IService selectPageLeftJoin(IPage pages, SchBaseVehiclematerialgroupQuery query); SchBaseVehiclematerialgroup getGroup(JSONObject entity); + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java index 3a97dec..ab13929 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; 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.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -19,6 +20,7 @@ import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Map; import java.util.Set; @@ -79,4 +81,15 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl lambda = new QueryWrapper().lambda(); + lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) + .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType) + .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, status) + .eq(SchBaseVehiclematerialgroup::getIs_delete, false); + List selectOne = vehiclematerialgroupMapper.selectList(lambda); + return selectOne.size() > 0 ? selectOne.get(0) : null; + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java index 4e9ad65..40cd21a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java @@ -62,4 +62,15 @@ public interface ISchBasePointService extends IService { */ void updateStatus(JSONObject jsonObject); + /** + * 获取子点位 + * @param deviceCode + * @return + */ + List getSubSites(String deviceCode); + /** + * 行锁获取对应点位 + * @return + */ + SchBasePoint selectByIdLock(String id); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java index 2e0fe47..fae52a4 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java @@ -17,4 +17,6 @@ public interface SchBasePointMapper extends BaseMapper { * @param used */ void batchChangeUsed(List pointCodes, Boolean used); + + SchBasePoint selectByIdLock(String id); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml index 66342b0..b839445 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml @@ -12,4 +12,12 @@ + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 431cbd1..2204423 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -200,4 +201,17 @@ public class SchBasePointServiceImpl extends ServiceImpl getSubSites(String deviceCode) { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(SchBasePoint::getParent_point_code, deviceCode) + .ne(SchBasePoint::getPoint_code, deviceCode); + return pointMapper.selectList(lam); + } + + @Override + public SchBasePoint selectByIdLock(String id) { + return pointMapper.selectByIdLock(id); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java index d8cb4e6..ddbea58 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java @@ -89,7 +89,8 @@ public class SchBaseRegionServiceImpl extends ServiceImpl getRegionList(SchBaseRegion region) { return schBaseRegionMapper.selectList(new LambdaQueryWrapper() - .eq(ObjectUtil.isNotEmpty(region), SchBaseRegion::getIs_has_workder, true)); + .eq(ObjectUtil.isNotEmpty(region), SchBaseRegion::getIs_has_workder, true) + .orderByAsc(SchBaseRegion::getOrder_seq)); } @Override diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java index b04e381..331278c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java @@ -99,4 +99,6 @@ public interface ISchBaseTaskService extends IService { * @param param */ void operation(Map param); + + SchBaseTask getByCode(String taskCode); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java index 3b33d43..9ded2bd 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.service.dao; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; @@ -125,5 +126,9 @@ public class SchBaseTask implements Serializable { @ApiModelProperty(value = "点位2高度") private String point_code2_height="0"; + @ApiModelProperty(value = "取货等待点") + private String start_wait_point; + @ApiModelProperty(value = "放货等待点") + private String next_wait_point; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java index 149a02f..18e8adc 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -218,14 +219,14 @@ public class SchBaseTaskServiceImpl extends ServiceImpl param) { - String task_id = ObjectUtil.isNotEmpty(param.get("task_id")) ? param.get("task_id").toString() : null; + String task_code = ObjectUtil.isNotEmpty(param.get("task_code")) ? param.get("task_code").toString() : null; String method_name = ObjectUtil.isNotEmpty(param.get("method_name")) ? param.get("method_name").toString() : null; String config_code = ObjectUtil.isNotEmpty(param.get("config_code")) ? param.get("config_code").toString() : null; - if (ObjectUtil.isEmpty(task_id) || ObjectUtil.isEmpty(method_name) || ObjectUtil.isEmpty(config_code)) { + if (ObjectUtil.isEmpty(task_code) || ObjectUtil.isEmpty(method_name) || ObjectUtil.isEmpty(config_code)) { throw new BadRequestException("操作失败"); } // 根据标识找到任务 - SchBaseTask taskOne = schBaseTaskMapper.selectById(task_id); + SchBaseTask taskOne = this.getByCode(task_code); if (Integer.parseInt(taskOne.getTask_status()) >= Integer.parseInt(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("任务已完成或已取消!"); } @@ -241,14 +242,21 @@ public class SchBaseTaskServiceImpl extends ServiceImpl lam = new QueryWrapper().lambda(); + lam.eq(SchBaseTask::getTask_code, taskCode); + return this.getOne(lam); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index 2bebcc8..aa80c17 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -1,10 +1,12 @@ package org.nl.wms.sch.task_manage; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; +import org.nl.config.SpringContextHolder; import org.nl.wms.database.material.service.IMdBaseMaterialService; import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.ext.service.dto.to.BaseResponse; @@ -20,8 +22,10 @@ import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum; import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; import org.nl.wms.sch.task_manage.task.AcsUtil; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; @@ -53,6 +57,15 @@ public abstract class AbstractTask { */ protected abstract void create() throws BadRequestException; + /** + * 任务创建 + * 只会创建完整的任务,创建失败则抛出异常 + * + * @param task + */ + protected void createCompletion(SchBaseTask task) { + } + /** * @return WCS的任务集合 @@ -123,6 +136,15 @@ public abstract class AbstractTask { protected abstract void updateStatus(String task_code, TaskStatus status); + /** + * 首先组盘在下发任务 + * + * @param param 具体参数 + */ + public String setGroupPlate(JSONObject param) { + return ""; + } + /** * 设置起点或者终点 @@ -163,11 +185,13 @@ public abstract class AbstractTask { * @param param * @throws BadRequestException */ + @Transactional(rollbackFor = Exception.class) public void apply(JSONObject param) throws BadRequestException { // 申请任务 SchBaseTask task = new SchBaseTask(); // 任务实体 String apply_point_code = param.getString("device_code"); // 请求点 String config_code = param.getString("config_code"); + String requestNo = param.getString("requestNo"); // 1、校验数据 SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, config_code)); @@ -196,8 +220,6 @@ public abstract class AbstractTask { if (ObjectUtil.isEmpty(workorder)) { throw new BadRequestException("设备" + one.getPoint_code() + "工单未生产!"); } - MdBaseMaterial mdBaseMaterial=materialService.getOne(new LambdaQueryWrapper() - .eq(MdBaseMaterial::getMaterial_id,workorder.getMaterial_id())); param.put("workorder_code", workorder.getWorkorder_code()); // 静置时间 // 设置任务数据 task.setVehicle_type(workorder.getVehicle_type()); @@ -208,21 +230,29 @@ public abstract class AbstractTask { return; } // 2、创建申请任务 - task.setAcs_trace_id(param.getString("acs_trace_id")); + task.setAcs_trace_id(requestNo); + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setConfig_code(config_code); - task.setCreate_mode(param.getString("create_mode")); + task.setCreate_mode(ObjectUtil.isNotEmpty(param.getString("create_mode")) + ? param.getString("create_mode") : GeneralDefinition.ACS_CREATION); task.setVehicle_code(param.getString("vehicle_code")); task.setVehicle_qty(param.getInteger("vehicle_qty")); task.setTask_status(TaskStatus.APPLY.getCode()); task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 // 设置起/终点 this.setTaskPoint(taskConfig, task, apply_point_code); - task.setExt_group_data(JSONObject.toJSONString(param)); - taskService.create(task); - + task.setRequest_param(JSONObject.toJSONString(param)); + TaskUtils.setCreateByAcsOrPda(task, param); // 设置创建人信息 + AbstractTask bean = SpringContextHolder.getBean(this.getClass()); // 3、判断是否直接找点下发 - if (taskConfig.getIs_immediate_create()) { - this.create(); + if (taskConfig.getIs_immediate_create()) { // 立即创建吧组盘放到具体位置,免得重复创建 + bean.createCompletion(task); + } else { // 不需要立即创建,需要立马组盘 + // 设置组盘 - 需要的话由子类自行实现 + task.setGroup_id(bean.setGroupPlate(param)); + taskService.save(task); // 创建一条单点任务。 + bean.create(); } } @@ -230,16 +260,24 @@ public abstract class AbstractTask { this.updateStatus(task_code, status); } + /** + * @param task_id: 任务标识 + * @return 二次申请的点位 + */ + public String againApply(String task_id) { + return ""; + } + /** * 任务阶段反馈最新点位 * * @param param * @throws BadRequestException */ - public void feedbackState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) throws BadRequestException { - this.feedbackTaskState(param,schBaseTask,result); + public void feedbackState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) throws BadRequestException { + this.feedbackTaskState(param, schBaseTask, result); } - protected abstract void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask,BaseResponse result); + protected abstract void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoCreateTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoCreateTask.java index fa9e62b..42e5c63 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoCreateTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AutoCreateTask.java @@ -39,10 +39,6 @@ public class AutoCreateTask { // 调用AbstractAcsTask类的每个子类的schedule()方法 try { Object obj = SpringContextHolder.getBean(clz); -// if (ObjectUtil.isEmpty(obj)) { // 如果spring中获取不到,就用newInstance创建 -// obj = clz.newInstance(); -// } - //Method m = obj.getClass().getDeclaredMethod("schedule"); Method m = obj.getClass().getMethod("schedule"); m.invoke(obj); } catch (InvocationTargetException e) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java index 5c72138..6ae6803 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java @@ -21,6 +21,10 @@ public class GeneralDefinition { public static final String MATERIAL_CUP = "LZ"; /** 钢托盘 */ public static final String STEEL_TRAY = "GTP"; + /** 连涂 */ + public static final String CONTINUOUS_COATING = "2"; + /** 普涂 */ + public static final String COMMON_COATING = "1"; // 账号定义 /** acs系统 */ public static final String ACS_ID = "2"; @@ -30,16 +34,6 @@ public class GeneralDefinition { public static final String MES_ID = "3"; /** mes系统 */ public static final String MES_NAME = "MES系统"; - // 点位类型 - /** 设备位 */ - public static final String DEVICE_POINT = "1"; - /** 对接位 */ - public static final String DOCKING_POINT = "2"; - // 出入口 - /**入口**/ - public static final String ENTRANCE = "1"; - /**出口**/ - public static final String EXIT = "2"; // 任务生产方式 /**自动创建**/ public static final String AUTO_CREATION = "1"; @@ -54,11 +48,6 @@ public class GeneralDefinition { public static final String MES_LMS = "3"; /**LMS->MES**/ public static final String LMS_MES = "4"; - // 区域定义 - /** 料盅睏料线区域 */ - public static final String LZKLX = "LZKLX"; - /** 干燥窑区域 */ - public static final String GZY = "GZY"; // 特殊: 1-缓存输送线入口,2-缓存输送线出口,3-上输送线,4-下输送线 /** 上输送线 */ public static final String UPPER_CONVEYOR_LINE = "3"; @@ -78,4 +67,16 @@ public class GeneralDefinition { public static final String TASK_FINISH = "任务完成"; /** 任务取消 */ public static final String TASK_CANCEL = "任务取消"; + // 固化方案 + /** 不混料 */ + public static final String NOT_MIXING = "1"; + /** 可混料 */ + public static final String CAN_MIXING = "2"; + /** 自定义混料 */ + public static final String CUSTOM_MIXING = "3"; + // 出入口 + /**入口**/ + public static final String ENTRANCE = "4"; + /**出口**/ + public static final String EXIT = "3"; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointTypeConstant.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointTypeConstant.java new file mode 100644 index 0000000..b18c436 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointTypeConstant.java @@ -0,0 +1,21 @@ +package org.nl.wms.sch.task_manage.enums; + +/** + * @Author: lyd + * @Description: 点位类型产量 + * @Date: 2023/11/22 + */ +public class PointTypeConstant { + // 点位类型 + /** 设备位/展示位 */ + public static final String DEVICE_POINT = "1"; + /** 对接位/固化位/暂存位 */ + public static final String DOCKING_POINT = "2"; + /** 缓存位 */ + public static final String CACHE_POINT = "3"; + // 出入口 + /**入口**/ + public static final String ENTRANCE = "4"; + /**出口**/ + public static final String EXIT = "3"; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/RegionCodeConstant.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/RegionCodeConstant.java new file mode 100644 index 0000000..f6aa8af --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/RegionCodeConstant.java @@ -0,0 +1,19 @@ +package org.nl.wms.sch.task_manage.enums; + +/** + * @Author: lyd + * @Description: 区域编码常量 + * @Date: 2023/11/22 + */ +public class RegionCodeConstant { + /** 固化区域 */ + public final static String CURING_ZONE = "GH"; + /** 空架暂存区域 */ + public final static String EMPTY_TEMPORARY_STORAGE_AREA = "KJZC"; + /** 空架位区域 */ + public final static String EMPTY_POSITION_AREA = "KJW"; + /** 涂板线区域 */ + public final static String COATED_PLATE_LINE_AREA = "TBX"; + /** 暂存区域 */ + public final static String STAGING_AREA = "ZC"; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java index f1c6384..4007844 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java @@ -1,7 +1,9 @@ package org.nl.wms.sch.task_manage.task; import org.nl.wms.sch.task_manage.AbstractTask; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @@ -10,33 +12,32 @@ import java.util.Map; /** * @author ldjun - * @version 2.0 + * @version 3.0 * @date 2023年05月16日 16:42 - * @desc 采用获取注解来标识任务类型,并通过扫描和反射的方式来获取任务实例 + * @desc 2.0 采用获取注解来标识任务类型,并通过扫描和反射的方式来获取任务实例 + * 3.0 采用获取所有bean对象判断是否为AbstractTask */ @Component -public class TaskFactory { +public class TaskFactory implements BeanPostProcessor { private final Map taskMap; @Autowired - public TaskFactory(ApplicationContext applicationContext) { + public TaskFactory() { taskMap = new HashMap<>(); - initializeTasks(applicationContext); } - private void initializeTasks(ApplicationContext applicationContext) { - Map taskBeans = applicationContext.getBeansWithAnnotation(TaskType.class); - for (Object taskBean : taskBeans.values()) { - TaskType taskTypeAnnotation = taskBean.getClass().getAnnotation(TaskType.class); - String taskType = taskTypeAnnotation.value(); - taskMap.put(taskType.toUpperCase(), (AbstractTask) taskBean); + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof AbstractTask) { + taskMap.put(beanName, (AbstractTask) bean); } + return bean; } public AbstractTask getTask(String taskType) { if (taskType == null) { return null; } - return taskMap.get(taskType.toUpperCase()); + return taskMap.get(taskType); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java deleted file mode 100644 index 27a20db..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java +++ /dev/null @@ -1,228 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.config.MapOf; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.GeneralDefinition; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: psh - * @Description: 包片上料 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("BPSLTask") -public class BPSLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "BPSLTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - @Autowired - private WmsToAcsService wmsToAcsService; - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - // 获取任务 - List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - String materialType = jsonObject.getString("material_type"); - SchBasePoint point = findNextPoint(jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - log.info("包片上料未找到当前符合条件的点位materialType:{},",materialType); - continue; - } - // 设置起点并修改创建成功状态 - // 取料先去等待点 - task.setPoint_code1(point.getStart_wait_point()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - //发起任务时先把点位占用,防止发起重复任务 - point.setIng_task_code(task.getTask_code()); - point.setVehicle_qty(point.getVehicle_qty() - 1); - point.setVehicle_type(materialType); - pointService.update(point); - - //下发 - this.renotifyAcs(task); - } - } - - /** - * 判断目标点位 - * 从10-1查找可以物料一致且有货的点位 - * - * @param extGroupData - * @return - */ - private SchBasePoint findNextPoint(JSONObject extGroupData) { - String regionCode = "HCQ1"; - String materialType = extGroupData.getString("material_type"); - List schBasePointList = pointMapper.findPointByRegion(regionCode,"2"); - for(int i=schBasePointList.size()-1;i>=0;i--){ - SchBasePoint schBasePoint=schBasePointList.get(i); - if (!"2".equals(schBasePoint.getPoint_type())&&schBasePoint.getVehicle_qty()!=0 - &&ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) - &&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){ - log.info("包片上料任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code()); - return schBasePoint; - } - } - return null; - } - - /** - * 1.取货完毕后起点减少最后一份组盘,并且该组盘视为已结束 - * 2.包片机LMS不记录点位信息,由人工对组盘进行操作 - */ - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - List vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); - String vehicleCode=vehicleCodeList.get(vehicleCodeList.size()-1); - SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, - GroupBindMaterialStatusEnum.BOUND.getValue())); - if (ObjectUtil.isEmpty(one)) { - throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到"); - } - one.setTask_code(taskObj.getTask_code()); - one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 - one.setPoint_name(endPointObj.getPoint_name()); - one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code()); - one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); - one.setUpdate_id(GeneralDefinition.ACS_ID); - one.setUpdate_name(GeneralDefinition.ACS_NAME); - one.setUpdate_time(DateUtil.now()); - vehiclematerialgroupService.updateById(one); - // 起点清空 - if (vehicleCodeList.size()==1) { - startPointObj.setVehicle_code(""); - }else{ - StringBuilder vehicle_code=new StringBuilder(); - for(int i=0;i<=vehicleCodeList.size()-2;i++){ - vehicle_code.append(vehicleCodeList.get(i)).append(','); - } - startPointObj.setVehicle_code(vehicle_code.toString()); - } - startPointObj.setIng_task_code(""); - startPointObj.setUpdate_time(DateUtil.now()); - pointService.updateById(startPointObj); - //包片上料完毕后,整排打上记号只允许包片上料 - pointMapper.updatePointType(endPointObj.getPoint_code().substring(0,endPointObj.getPoint_code().length()-2),"1"); - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(one.getGroup_id()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - // 起点解锁 - if (ObjectUtil.isNotEmpty(startPointObj)) { - startPointObj.setIng_task_code(""); - startPointObj.setVehicle_qty(startPointObj.getVehicle_qty()+1); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 - JSONObject jsonObject = JSONObject.parseObject(schBaseTask.getExt_group_data()); - SchBasePoint point = this.findNextPoint(jsonObject); - // 设置起点并修改创建成功状态 - schBaseTask.setPoint_code1(point.getPoint_code()); - } -} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java deleted file mode 100644 index 9b24457..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java +++ /dev/null @@ -1,184 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.config.MapOf; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: psh - * @Description: 空固化架入库 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("KGHJRKTask") -public class KGHJRKTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "KGHJRKTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - @Autowired - private WmsToAcsService wmsToAcsService; - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - // 获取任务 - List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - - for (SchBaseTask task : tasks) { - // 找终点 - SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, task.getPoint_code1())); - SchBasePoint point = findNextPoint(startPoint); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - log.info("空固化架入库未找到当前符合条件的点位"); - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - //发起任务时先把点位占用,防止发起重复任务 - point.setIng_task_code(task.getTask_code()); - pointService.update(point); - - //下发 - this.renotifyAcs(task); - } - } - - /** - * 判断目标点位 - * 1.A区的去A区缓存点,B区的去B区 - * 2.倒叙查找,找到满足当前位置数量不足3的即可 - */ - private SchBasePoint findNextPoint(SchBasePoint startPoint) { - String regionCode = null; - if (startPoint.getRegion_code().endsWith("1")) { - //1找A区 - regionCode = "KGHJ1"; - - } else if (startPoint.getRegion_code().endsWith("2")) { - //2找B区 - regionCode = "KGHJ2"; - } - List schBasePointList = pointMapper.findPointByRegion(regionCode,null); - for(int i=schBasePointList.size()-1;i>=0;i--) { - SchBasePoint schBasePoint = schBasePointList.get(i); - if(schBasePoint.getVehicle_qty()<3&& - ObjectUtil.isEmpty(schBasePoint.getIng_task_code())){ - log.info("空固化架放货找到当前符合条件的点位{}",schBasePoint.getPoint_code()); - return schBasePoint; - } - } - return null; - } - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 终点解锁,库存增加 - startPointObj.setIng_task_code(""); - startPointObj.setVehicle_qty(startPointObj.getVehicle_qty()+1); - pointService.update(endPointObj); - - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 - } -} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java deleted file mode 100644 index e34a3f2..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java +++ /dev/null @@ -1,251 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.enums.PointStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.List; -import java.util.Map; - -/** - * @Author: psh - * @Description: 满架下料 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("MJXLTask") -public class MJXLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "MJXLTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - // 获取任务 - List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - // 找终点 - SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, task.getPoint_code1())); - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - String materialType = jsonObject.getString("material_type"); - SchBasePoint point = findNextPoint(startPoint, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - log.info("满架下料未找到当前符合条件的点位materialType:{},",materialType); - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - //发起任务时先把点位占用,防止发起重复任务 - point.setIng_task_code(task.getTask_code()); - point.setVehicle_qty(point.getVehicle_qty() + 1); - point.setVehicle_type(materialType); - pointService.update(point); - - //下发 - this.renotifyAcs(task); - } - } - - /** - * 判断目标点位 - * 1.A区的去A区缓存点,B区的去B区 - * 2.优先找未放满的固化室的起始位置01和06,且物料必须一致 - * 4.固化室不满足条件时按顺序取下一个固化室 - * 5.都不满足则抛出异常暂时等待 - * - * @param startPoint - * @param extGroupData - * @return - */ - private SchBasePoint findNextPoint(SchBasePoint startPoint, JSONObject extGroupData) { - String regionCode = null; - String materialType = extGroupData.getString("material_type"); - if ("TBX1".equals(startPoint.getRegion_code())) { - //TBX1找A区 - regionCode = "GHS1"; - - } else if ("TBX2".equals(startPoint.getRegion_code())) { - //TBX2找B区 - regionCode = "GHS2"; - } - List schBasePointList = pointMapper.findPointByRegion(regionCode,"2"); - for (SchBasePoint schBasePoint : schBasePointList) { - if (!schBasePoint.getPoint_code().endsWith("01") && - !schBasePoint.getPoint_code().endsWith("06")) { - continue; - } - if ((ObjectUtil.isEmpty(schBasePoint.getVehicle_type())|| - materialType.equals(schBasePoint.getVehicle_type())) - && "2".equals(schBasePoint.getPoint_status()) - && schBasePoint.getVehicle_qty() < 3) { - log.info("满架下料找到当前符合条件的点位{}",schBasePoint.getPoint_code()); - return schBasePoint; - } - } - return null; - } - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - // 获取参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 终点解锁 - endPointObj.setIng_task_code(""); - endPointObj.setVehicle_code(ObjectUtil.isEmpty(endPointObj.getVehicle_code()) ? vehicle_code + "," : endPointObj.getVehicle_code() + vehicle_code + ","); - pointService.update(endPointObj); - // 要把数据存到组盘表 -> 改造公共方法,返回id - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); - groupEntity.setCreate_id("2"); - groupEntity.setCreate_name("ACS"); - groupEntity.setCreate_time(DateUtil.now()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_qty") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(startPoint); - groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - groupEntity.setMove_way(startPoint); - vehiclematerialgroupService.save(groupEntity); - - - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - //任务取消把原先占用的位置释放 - endPointObj.setVehicle_qty(endPointObj.getVehicle_qty()-1); - if(endPointObj.getVehicle_qty()<=0){ - endPointObj.setVehicle_type(null); - } - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //无需重算,返回当前点位即可 - } -} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java deleted file mode 100644 index 0e4b895..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java +++ /dev/null @@ -1,190 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.config.MapOf; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: psh - * @Description: 涂板线补空架 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("TBXBKJTask") -public class TBXBKJTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "TBXBKJTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - @Autowired - private WmsToAcsService wmsToAcsService; - - /** - * 涂版线工位发起叫料请求 - * 从对应AB区的空固化架缓存位生成搬运任务 - * 不记录组盘,不考虑点位状态 - */ - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - // 获取任务 - List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - // 找起点 - SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, task.getPoint_code1())); - SchBasePoint point = findNextPoint(startPoint); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - log.info("涂板线补空架未找到空架缓存点存在空架!"); - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - //发起任务时先把点位占用,防止发起重复任务 - point.setIng_task_code(task.getTask_code()); - //空固化架区别于组盘,任务完成后再扣除库存 -// point.setVehicle_qty(point.getVehicle_qty() - 1); - pointService.update(point); - - //下发 - this.renotifyAcs(task); - } - } - - - /** - * 从01到10顺序判断最先有货的工位 - */ - private SchBasePoint findNextPoint(SchBasePoint startPoint) { - String regionCode = null; - if ("TBX1".equals(startPoint.getRegion_code())) { - //KGHJ1找A区 - regionCode = "KGHJ1"; - - } else if ("TBX2".equals(startPoint.getRegion_code())) { - //KGHJ2找B区 - regionCode = "KGHJ2"; - } - List schBasePointList = pointMapper.findPointByRegion(regionCode,null); - for (SchBasePoint schBasePoint : schBasePointList) { - if (schBasePoint.getVehicle_qty() > 0) { - log.info("涂板线补空架找到当前符合条件的点位{}",schBasePoint.getPoint_code()); - return schBasePoint; - } - } - return null; - } - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 起点解锁,库存减少 - startPointObj.setIng_task_code(""); - startPointObj.setVehicle_qty(startPointObj.getVehicle_qty()-1); - pointService.update(endPointObj); - - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 - } -} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java deleted file mode 100644 index d92d171..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java +++ /dev/null @@ -1,241 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.config.MapOf; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.GeneralDefinition; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: psh - * @Description: 销售出库 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("XSCKTask") -public class XSCKTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "XSCKTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - @Autowired - private WmsToAcsService wmsToAcsService; - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - // 获取任务 - List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - // 找起点 - SchBasePoint nextPoint = pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, task.getPoint_code2())); - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - String materialType = jsonObject.getString("material_type"); - SchBasePoint point = findNextPoint(nextPoint,jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - log.info("销售出库未找到当前符合条件的点位materialType:{},", materialType); - continue; - } - // 设置起点并修改创建成功状态 - // 取料先去等待点 - task.setPoint_code1(point.getStart_wait_point()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - //发起任务时先把点位占用,防止发起重复任务 - point.setIng_task_code(task.getTask_code()); - point.setVehicle_qty(point.getVehicle_qty() - 1); - point.setVehicle_type(materialType); - pointService.update(point); - - //下发 - this.renotifyAcs(task); - } - } - - - /** - * 判断目标点位 - * 从10-1查找可以物料一致且有货的点位 - * - * @param extGroupData - * @return - */ - private SchBasePoint findNextPoint(SchBasePoint nextPoint,JSONObject extGroupData) { - String regionCode = null; - String materialType = extGroupData.getString("material_type"); - if ("XSQ1".equals(nextPoint.getRegion_code())) { - //XSQ1找A区 - regionCode = "HCQ1"; - - } else if ("XSQ2".equals(nextPoint.getRegion_code())) { - //XSQ2找B区 - regionCode = "HCQ2"; - } - List schBasePointList = pointMapper.findPointByRegion(regionCode,"2"); - for(int i=schBasePointList.size()-1;i>=0;i--){ - SchBasePoint schBasePoint=schBasePointList.get(i); - if (!"1".equals(schBasePoint.getPoint_type())&&schBasePoint.getVehicle_qty()!=0 - &&ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) - &&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){ - log.info("销售出库任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code()); - return schBasePoint; - } - } - return null; - } - - /** - * 1.取货完毕后起点减少最后一份组盘,并且该组盘视为已结束 - * 2.销售出库LMS不记录点位信息,由人工对组盘进行操作 - */ - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - List vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); - String vehicleCode=vehicleCodeList.get(vehicleCodeList.size()-1); - SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, - GroupBindMaterialStatusEnum.BOUND.getValue())); - if (ObjectUtil.isEmpty(one)) { - throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到"); - } - one.setTask_code(taskObj.getTask_code()); - one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 - one.setPoint_name(endPointObj.getPoint_name()); - one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code()); - one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); - one.setUpdate_id(GeneralDefinition.ACS_ID); - one.setUpdate_name(GeneralDefinition.ACS_NAME); - one.setUpdate_time(DateUtil.now()); - vehiclematerialgroupService.updateById(one); - // 起点清空 - if (vehicleCodeList.size()==1) { - startPointObj.setVehicle_code(""); - }else{ - StringBuilder vehicle_code=new StringBuilder(); - for(int i=0;i<=vehicleCodeList.size()-2;i++){ - vehicle_code.append(vehicleCodeList.get(i)).append(','); - } - startPointObj.setVehicle_code(vehicle_code.toString()); - } - startPointObj.setIng_task_code(""); - startPointObj.setUpdate_time(DateUtil.now()); - pointService.updateById(startPointObj); - //销售出库完毕后,整排打上记号只允许销售出库 - pointMapper.updatePointType(endPointObj.getPoint_code().substring(0,endPointObj.getPoint_code().length()-2),"2"); - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(one.getGroup_id()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - // 起点解锁 - if (ObjectUtil.isNotEmpty(startPointObj)) { - startPointObj.setIng_task_code(""); - startPointObj.setVehicle_qty(startPointObj.getVehicle_qty()+1); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - // 重算最优点 - SchBasePoint nextPoint=pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code2())); - SchBasePoint point = this.findNextPoint(nextPoint,JSONObject.parseObject(schBaseTask.getExt_group_data())); - // 设置起点并修改创建成功状态 - schBaseTask.setPoint_code1(point.getPoint_code()); - } -} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java deleted file mode 100644 index c1306b5..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.config.MapOf; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: psh - * @Description: 正极板转库堆叠 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("ZJBZKDDTask") -public class ZJBZKDDTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "ZJBZKDDTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - @Autowired - private WmsToAcsService wmsToAcsService; - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - - } - - - private SchBasePoint findNextPoint(SchBasePoint startPoint) { - return null; - } - - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 - } -} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCMLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCMLTask.java new file mode 100644 index 0000000..cfdb773 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCMLTask.java @@ -0,0 +1,326 @@ +package org.nl.wms.sch.task_manage.task.tasks.auto; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.system.service.param.ISysParamService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskFactory; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.auto.mapper.AutoMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 固化室出口出库任务 + * @Date: 2023/11/30 + */ +@Slf4j +@Component("GHCMLTask") +public class GHCMLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "GHCMLTask"; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISysParamService paramService; + @Autowired + private AutoMapper autoMapper; + @Autowired + private TaskFactory taskFactory; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + + @Override + protected void create() throws BadRequestException { + + } + + @Override + protected void autoCreate() { + // 自动创建任务 + // 寻找固化室满足出库的位置:有货 + List ghsExitList = autoMapper.getGHSExitMaterialList(); + AbstractTask task = taskFactory.getTask(TASK_CONFIG_CODE); + ghsExitList.forEach(point -> { + JSONObject param = new JSONObject(); + param.put("config_code", TASK_CONFIG_CODE); + param.put("requestNo", "LMS" + IdUtil.simpleUUID()); + param.put("device_code", point.getPoint_code()); + param.put("vehicle_code", point.getVehicle_code()); + param.put("vehicle_type", point.getVehicle_type()); + param.put("create_mode", GeneralDefinition.AUTO_CREATION); + task.apply(param); + }); + } + + @Override + protected void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); + SchBasePoint startPoint = pointService.getById(task.getPoint_code1()); + SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getVehicleGroupInfo( + startPoint.getVehicle_code(), + startPoint.getVehicle_type(), + GroupBindMaterialStatusEnum.BOUND.getValue()); + // 找终点 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + jsonObject.put("material_id", groupInfo.getMaterial_id()); + SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("涂板线[" + task.getPoint_code1() + "]未找到所需点位!"); + } + // 设置组盘 - 需要的话由子类自行实现 + task.setGroup_id(setGroupPlate(jsonObject)); + // 设置等待点并修改创建成功状态 + task.setNext_wait_point(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + TaskUtils.setUpdateByAcs(task); // 修改修改者 + taskService.save(task); + + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + + } + + /** + * 寻找终点等待点 + * @param nextRegionStr: 只有一个区域 + * @param jsonObject + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject jsonObject) { + // 查找是否有相同物料的货位: + // 最小排最小列,且列大于1(即不是等待位置,1不写死:使用子查询,寻找当排最小列序号的值) + // 多个数据选择一个:Limit 1, 还需要考虑任务数,尽量一排排满 + SchBasePoint sameMaterialPoints = autoMapper.getZCSameMaterialPoint(nextRegionStr.get(0), jsonObject.getString("material_id")); + if (ObjectUtil.isNotEmpty(sameMaterialPoints)) { + // 找到相同物料。分配等待点。 + List points = pointService.list(new LambdaQueryWrapper() + .in(SchBasePoint::getRegion_code, nextRegionStr) + .eq(SchBasePoint::getRow_num, sameMaterialPoints.getRow_num()) + .eq(SchBasePoint::getIs_used, true) + .orderByAsc(SchBasePoint::getCol_num)); + if (points.size() > 0) { + return points.get(0); + } + } + // 如果没有找到。或者分配等待点失败,就选择一个空列存放 + return autoMapper.getZCEmptyMaterialPoint(nextRegionStr.get(0)); + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { +// 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + String startPoint = taskObj.getPoint_code1(); // 获取终点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + if (ObjectUtil.isNotEmpty(endPointObj)) { + SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); + TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); + vehiclematerialgroup.setTask_code(taskObj.getTask_code()); // 当前任务 + vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); // 设置链路id,使用任务编码 + vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name()); + vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code()); + vehiclematerialgroupService.updateById(vehiclematerialgroup); + // 终点解锁 + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + // 赋值 + endPointObj.setVehicle_code(vehiclematerialgroup.getVehicle_code()); + endPointObj.setVehicle_type(vehiclematerialgroup.getVehicle_type()); + endPointObj.setVehicle_qty(1); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + pointService.updateById(endPointObj); + // 插入生产过程跟踪表 +// PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); +// processTracking.setBuss_move_id(vehiclematerialgroup.getBuss_move_id()); +// processTracking.setProcess_action("压制送料入双层缓存线"); +// processTracking.setProcess_location(endPoint); +// processTracking.setRecord_time(DateUtil.now()); +// processTrackingService.create(processTracking); + } + // 起点清空 + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint endPointObj = pointService.getById(endPoint); + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } + + @Override + public String setGroupPlate(JSONObject param) { + // 组盘 + String vehicleCode = param.getString("vehicle_code"); + String vehicleType = param.getString("vehicle_type"); + SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getVehicleGroupInfo(vehicleCode, + vehicleType, GroupBindMaterialStatusEnum.BOUND.getValue()); + return ObjectUtil.isNotEmpty(vehicleType) ? groupInfo.getGroup_id() : null; + } + + /** + * 二次申请 + * @param task_id: 任务标识 + * @return + */ + @Override + public String againApply(String task_id) { + SchBaseTask task = taskService.getById(task_id); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("任务:[" + task_id + "]不存在!"); + } + String waitPoint = task.getNext_wait_point(); + if (ObjectUtil.isEmpty(waitPoint)) { + throw new BadRequestException("找不到任务:[" + task_id + "]等待点!"); + } + SchBasePoint waitPointObj = pointService.getById(waitPoint); + SchBasePoint result; + // 找到这排对应的准确货位, + // hint: 需要考虑前后空,中间有货的情况,有货之后的即使是空也不能放。 + // 寻找有货的数据 + List points = pointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, waitPointObj.getRegion_code()) + .eq(SchBasePoint::getRow_num, waitPointObj.getRow_num()) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) + .eq(SchBasePoint::getIs_used, true) + .orderByDesc(SchBasePoint::getIn_order_seq)); + if (points.size() > 0) { + SchBasePoint basePoint = points.get(0); + // 找到物料位置的下一个位置 + result = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, waitPointObj.getRegion_code()) + .eq(SchBasePoint::getRow_num, waitPointObj.getRow_num()) + .eq(SchBasePoint::getCol_num, basePoint.getCol_num() - 1) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true)); + if (ObjectUtil.isEmpty(result)) { + throw new BadRequestException("点位错误"); + } + } else { + // 空的话代表这排是新的一排,找个位置就行 + points = pointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, waitPointObj.getRegion_code()) + .eq(SchBasePoint::getRow_num, waitPointObj.getRow_num()) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true) + .orderByAsc(SchBasePoint::getIn_order_seq)); + result = points.get(0); // 获取第一条 + } + // 锁住货位点 + PointUtils.setUpdateByAcs(result); + result.setIng_task_code(task.getTask_code()); + pointService.updateById(result); + // 任务修改点位 + task.setPoint_code2(result.getPoint_code()); + TaskUtils.setUpdateByAcs(task); + taskService.updateById(task); + return result.getPoint_code(); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCQLTask.java new file mode 100644 index 0000000..2bcbd5f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCQLTask.java @@ -0,0 +1,240 @@ +package org.nl.wms.sch.task_manage.task.tasks.auto; + +import cn.hutool.core.util.IdUtil; +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 lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.system.service.param.ISysParamService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.*; +import org.nl.wms.sch.task_manage.task.TaskFactory; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.auto.mapper.AutoMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 固化室出口叫料 + * @Date: 2023/11/30 + */ +@Slf4j +@Component("GHCQLTask") +public class GHCQLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "GHCQLTask"; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISysParamService paramService; + @Autowired + private AutoMapper autoMapper; + @Autowired + private TaskFactory taskFactory; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + + @Override + protected void create() throws BadRequestException { + + } + + @Override + protected void autoCreate() { + // 自动创建任务 + // 寻找出料中,并且出口没有锁住的点位 + List ghsExitList = autoMapper.getGHSExitAvailableList(); + AbstractTask task = taskFactory.getTask(TASK_CONFIG_CODE); + ghsExitList.forEach(point -> { + JSONObject param = new JSONObject(); + param.put("config_code", TASK_CONFIG_CODE); + param.put("requestNo", "LMS" + IdUtil.simpleUUID()); + param.put("device_code", point.getPoint_code()); + param.put("create_mode", GeneralDefinition.AUTO_CREATION); + task.apply(param); + }); + } + + @Override + protected void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + String requestParam = task.getRequest_param(); + JSONObject extGroupData = JSONObject.parseObject(requestParam); + SchBasePoint point = findStartPoint(startRegionStr, extGroupData); + if (ObjectUtil.isEmpty(point)) { + // 消息通知 + noticeService.createNotice("固化室没有所需物料!", TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + throw new BadRequestException("固化室没有所需物料!"); + } + // 设置起点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setVehicle_code(point.getVehicle_code()); + task.setVehicle_type(point.getVehicle_type()); + task.setGroup_id(point.getGroup_id()); + task.setRemark(""); + taskService.save(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + /** + * 寻找起点 + * @param startRegionStr + * @return + */ + private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { + SchBasePoint device = pointService.getById(extGroupData.getString("device_code")); + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.in(SchBasePoint::getRegion_code, startRegionStr) + .eq(SchBasePoint::getParent_point_code, device.getParent_point_code()) + .eq(SchBasePoint::getPoint_type, PointTypeConstant.DOCKING_POINT) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .orderByAsc(SchBasePoint::getIn_order_seq); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + String requestParam = taskObj.getRequest_param(); + JSONObject extGroupData = JSONObject.parseObject(requestParam); + // 除了解锁需要将组盘表中的物料绑定载具设置为已解绑 + // 起点设置空位 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + SchBaseVehiclematerialgroup vehicleMaterialGroupObj = vehiclematerialgroupService.getVehicleGroupInfo( + taskObj.getVehicle_code(), taskObj.getVehicle_type(), + GroupBindMaterialStatusEnum.BOUND.getValue()); + // 等到变成空盘才能解除 + vehicleMaterialGroupObj.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehicleMaterialGroupObj.setPoint_name(endPointObj.getPoint_name()); + vehicleMaterialGroupObj.setTask_code(taskObj.getTask_code()); + vehicleMaterialGroupObj.setMove_way(vehicleMaterialGroupObj.getMove_way() + " -> " + endPointObj.getPoint_code()); + TaskUtils.setGroupUpdateByType(vehicleMaterialGroupObj, taskFinishedType); + vehiclematerialgroupService.updateById(vehicleMaterialGroupObj); + // 插入生产过程跟踪表 +// PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); +// processTracking.setBuss_move_id(vehicleMaterialGroupObj.getBuss_move_id()); +// processTracking.setProcess_action("钢托盘缓存位到分拣"); +// processTracking.setProcess_location(endPoint); +// processTracking.setRecord_time(DateUtil.now()); +// processTrackingService.create(processTracking); + // 终点设置对应的参数 + endPointObj.setVehicle_code(taskObj.getVehicle_code()); + endPointObj.setVehicle_type(taskObj.getVehicle_type()); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + String startPoint = taskObj.getPoint_code1(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 终点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.java new file mode 100644 index 0000000..2b4b3af --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.java @@ -0,0 +1,22 @@ +package org.nl.wms.sch.task_manage.task.tasks.auto.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/30 + */ +public interface AutoMapper { + + List getGHSExitAvailableList(); + + List getGHSExitMaterialList(); + + SchBasePoint getZCSameMaterialPoint(String regionCode, String materialId); + + SchBasePoint getZCEmptyMaterialPoint(String regionCode); + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.xml new file mode 100644 index 0000000..10a31f9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java deleted file mode 100644 index a4b0663..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java +++ /dev/null @@ -1,289 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks.ghs; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.config.MapOf; -import org.nl.wms.database.material.service.dao.MdBaseMaterial; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.GeneralDefinition; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.enums.PointStatusEnum; -import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.nl.wms.util.TaskUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: psh - * @Description: 固化室起始站点放满后自动生成搬运到内部的任务,优先级为8 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("GHSFMTask") -public class GHSFMTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "GHSFMTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - @Autowired - private WmsToAcsService wmsToAcsService; - - /** - * 1.扫描每个允许放货的固化室01和06位置是否满足三列均已放满,开始下一层判断 - * 2.如果当列1-5或6-10总15个位置已经放满,则进行下一层判断 - * 3.如果该固化室30个位置全部放满,则通知acs告知固化室开始固化 - * 4.如果内部2-5或7-10仍有空列,则生成1-(2-5),6-(7-10)的任务,优先级为8最高 - */ - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - List schBasePointList = pointMapper.findPointByRegion("GHS","2"); - for (SchBasePoint schBasePoint : schBasePointList) { - if (!schBasePoint.getPoint_code().endsWith("01") && - !schBasePoint.getPoint_code().endsWith("06")) { - continue; - } - if (schBasePoint.getVehicle_qty()==3&&ObjectUtil.isEmpty(schBasePoint.getIng_task_code())) { - log.info("固化室对接位{}已经放满,开始进行后续判断",schBasePoint.getPoint_code()); - String first=schBasePoint.getPoint_code().substring(0,schBasePoint.getPoint_code().length()-2); - String last=schBasePoint.getPoint_code().substring(schBasePoint.getPoint_code().length()-1); - String middle=schBasePoint.getPoint_code().substring(schBasePoint.getPoint_code().length()-4,schBasePoint.getPoint_code().length()-2); - boolean flag=false; - String pointCode=null; - //倒叙检查是否有符合要求的终点 - for(int i=4;i>0;i--){ - pointCode=first+ String.format("%02d",Integer.valueOf(last)+i); - for(SchBasePoint schBasePoint1 : schBasePointList){ - if (schBasePoint1.getPoint_code().equals(pointCode) - &&schBasePoint1.getVehicle_qty()==0&&ObjectUtil.isEmpty(schBasePoint1.getIng_task_code())){ - log.info("找到当前列内部存在空位{}",pointCode); - flag=true; - break; - } - } - if(flag){ - break; - } - } - if (flag){ - //生成任务并下发 - this.createTask(schBasePoint,pointCode); - }else{ - //如果当列均已放满,检查隔壁列是否已全部放满 - if("1".equals(last)){ - last="6"; - } - for(int i=0;i<=4;i++){ - pointCode=first+ String.format("%02d",Integer.valueOf(last)+i); - for(SchBasePoint schBasePoint1 : schBasePointList){ - if (schBasePoint1.getPoint_code().equals(pointCode) - &&(schBasePoint1.getVehicle_qty()!=3||ObjectUtil.isNotEmpty(schBasePoint1.getIng_task_code()))){ - log.info("检查当前固化室{}隔壁列,找到当前列内部存在空位{},不发送固化请求",schBasePoint.getPoint_code(),pointCode); - flag=true; - break; - } - } - } - - } - if(!flag){ - //通知acs已经放满,固化室可以进行固化 - String device_code="ZDM"+middle; - log.info("当前固化室已经全部放满,通知固化室的自动门{}开始固化",device_code); - JSONObject map = new JSONObject(); - map.put("device_code",device_code); - map.put("type","1"); - wmsToAcsService.notifyAcs(map); - } - } - } - } - - /** - * 创建任务并下发 - * - * @param schBasePoint - * @param endPoint - * @return - */ - private void createTask(SchBasePoint schBasePoint,String endPoint) { - // 申请任务 - SchBaseTask task = new SchBaseTask(); // 任务实体 - String apply_point_code =schBasePoint.getPoint_code(); // 请求点 - String config_code = "GHSFMTask"; - // 1、校验数据 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTaskconfig::getConfig_code, config_code)); - Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!"); - // 最大任务数 - Integer tcmn = taskConfig.getTask_create_max_num(); - // 获取执行中的任务 - List unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( - taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction()); - - Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, - "该点位申请的任务未完成数已超过上限,无法申请任务"); - // 获取对接位点位对象 - SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, apply_point_code)); - // 校验是否需要自动agv - if (!pointObj.getIs_auto()) { - // 如果不需要自动,则不创建任务 - return; - } - // 2、创建申请任务 - task.setConfig_code(config_code); - task.setCreate_mode(GeneralDefinition.ACS_CREATION); - task.setVehicle_code(schBasePoint.getVehicle_code()); - task.setVehicle_qty(schBasePoint.getVehicle_qty()); - task.setTask_status(TaskStatus.APPLY.getCode()); - task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 - task.setPoint_code2(endPoint); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - // 设置起/终点 - this.setTaskPoint(taskConfig, task, apply_point_code); - taskService.create(task); - - //下发 - this.renotifyAcs(task); - } - - /** - * 修改任务状态 - * 1.任务完成时,无需再次组盘,将点位表起点货位三个组盘信息移动到终点 - * 2.组盘表中三个点位增加移动动作,并且修改当前点位到目标地点 - * 3. - * - * @param task_code - * @param status - * @return - */ - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - StringBuilder group_id= new StringBuilder(); - // 终点解锁 - endPointObj.setIng_task_code(""); - endPointObj.setVehicle_code(startPointObj.getVehicle_code()); - endPointObj.setVehicle_type(startPointObj.getVehicle_type()); - endPointObj.setVehicle_code(startPointObj.getVehicle_code()); - endPointObj.setVehicle_qty(startPointObj.getVehicle_qty()); - endPointObj.setUpdate_time(DateUtil.now()); - pointService.update(endPointObj); - List vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); - for(String vehicleCode:vehicleCodeList) { - SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, - GroupBindMaterialStatusEnum.BOUND.getValue())); - if (ObjectUtil.isEmpty(one)) { - throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到"); - } - one.setTask_code(taskObj.getTask_code()); - one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 - one.setPoint_name(endPointObj.getPoint_name()); - one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code()); - one.setUpdate_id(GeneralDefinition.ACS_ID); - one.setUpdate_name(GeneralDefinition.ACS_NAME); - one.setUpdate_time(DateUtil.now()); - vehiclematerialgroupService.updateById(one); - group_id.append(one.getGroup_id()).append(','); - } - // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(group_id.toString()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 - } -} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java deleted file mode 100644 index 2a549eb..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java +++ /dev/null @@ -1,311 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks.ghs; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.config.MapOf; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.GeneralDefinition; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: psh - * @Description: 固化室通知取货后将十个点位增加到取货队列,固化室发起自动取货任务,当前固化室十个点位取货完毕后通知固化室取货完毕 - * @Date: 2023/9/28 - */ -@Slf4j -@Component -@TaskType("GHSQHTask") -public class GHSQHTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "GHSQHTask"; - /** - * 入口 - */ - private static String ENTRANCE = "1"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private IPdmBdWorkorderService workorderService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private PointMapper pointMapper; - @Autowired - private WmsToAcsService wmsToAcsService; - - /** - * 1.扫描每个允许取货的固化室从1-10的顺序开始进行取货 - */ - @Override -// @Transactional(rollbackFor = Exception.class) - protected void create() throws BadRequestException { - - List schBasePointList = pointMapper.findPointByRegion("GHS","3"); - if (schBasePointList.size()==0) { - // 消息通知 - log.info("未找到当前符合允许取货的固化室点位,暂不生成任务"); - return; - } - SchBasePoint schBasePoint=null; - //按顺序查找第一个符合条件的固化室位置,发起任务 - for(SchBasePoint schBasePoint1:schBasePointList){ - if (schBasePoint1.getVehicle_qty()==3&&ObjectUtil.isEmpty(schBasePoint1.getIng_task_code())) { - schBasePoint=schBasePoint1; - break; - } - } - if (ObjectUtil.isEmpty(schBasePoint)) { - // 消息通知 - log.info("未找到当前符合允许取货的固化室点位,暂不生成任务"); - return; - } - SchBasePoint nextPoint=this.findNextPoint(schBasePoint); - if (ObjectUtil.isEmpty(nextPoint)) { - // 消息通知 - log.info("未找到当前符合允许放货的缓存点,暂不生成任务Vehicle_type:{}",schBasePoint.getVehicle_type()); - return; - } - // 放料先去等待点 - this.createTask(schBasePoint,nextPoint.getNext_wait_point()); - - } - - /** - * 创建任务并下发 - * - * @param schBasePoint - * @param endPoint - * @return - */ - private void createTask(SchBasePoint schBasePoint,String endPoint) { - // 申请任务 - SchBaseTask task = new SchBaseTask(); // 任务实体 - String apply_point_code =schBasePoint.getPoint_code(); // 请求点 - String config_code = "GHSQHTask"; - // 1、校验数据 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTaskconfig::getConfig_code, config_code)); - Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!"); - // 最大任务数 - Integer tcmn = taskConfig.getTask_create_max_num(); - // 获取执行中的任务 - List unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( - taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction()); - - Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, - "该点位申请的任务未完成数已超过上限,无法申请任务"); - // 获取对接位点位对象 - SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, apply_point_code)); - // 校验是否需要自动agv - if (!pointObj.getIs_auto()) { - // 如果不需要自动,则不创建任务 - return; - } - // 2、创建申请任务 - task.setConfig_code(config_code); - task.setCreate_mode(GeneralDefinition.ACS_CREATION); - task.setVehicle_code(schBasePoint.getVehicle_code()); - task.setVehicle_qty(schBasePoint.getVehicle_qty()); - task.setTask_status(TaskStatus.APPLY.getCode()); - task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 - task.setPoint_code2(endPoint); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - // 设置起/终点 - this.setTaskPoint(taskConfig, task, apply_point_code); - taskService.create(task); - - //下发 - this.renotifyAcs(task); - } - - /** - * 1.根据当前固化室所处区域,判断到哪个区的缓存位 - * 2.从1010列到0101列倒叙判断当前列物料类型是否与起点一致且存在空位 - * 3.将当前点位设置为目标点 - * 4.如果没有符合条件的点位,跳过执行暂时等待 - */ - private SchBasePoint findNextPoint(SchBasePoint startPoint) { - String regionCode = null; - String materialType = startPoint.getVehicle_type(); - if ("GHS1".equals(startPoint.getRegion_code())) { - //HCQ1找A区 - regionCode = "HCQ1"; - - } else if ("GHS2".equals(startPoint.getRegion_code())) { - //GHS2找B区 - regionCode = "HCQ2"; - } - List schBasePointList = pointMapper.findPointByRegion(regionCode,"2"); - for(int i=schBasePointList.size()-1;i>=0;i--){ - SchBasePoint schBasePoint=schBasePointList.get(i); - SchBasePoint temp=null; - if (schBasePoint.getVehicle_qty()==0 - &&ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) - &&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){ - //发现有空位时暂存当前位置,检查当前列前面是否存在已放货位置,找最前面无货的位置 - //如果当列其他位置均已放满,则继续找下一列 - List tempList = pointMapper.findPointByParentPoint(schBasePoint.getParent_point_code()); - for(SchBasePoint tempPoint:tempList){ - if(tempPoint.getVehicle_qty()!=0||ObjectUtil.isNotEmpty(schBasePoint.getIng_task_code())){ - if(temp!=null){ - return temp; - } - temp=tempPoint; - } - } - if(temp==null){ - continue; - } - log.info("固化室取货任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code()); - return temp; - } - } - return null; - } - - /** - * 1.如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕 - */ - @Override -// @Transactional(rollbackFor = Exception.class) - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - StringBuilder group_id= new StringBuilder(); - // 终点解锁 - endPointObj.setIng_task_code(""); - endPointObj.setVehicle_code(startPointObj.getVehicle_code()); - endPointObj.setVehicle_type(startPointObj.getVehicle_type()); - endPointObj.setVehicle_code(startPointObj.getVehicle_code()); - endPointObj.setVehicle_qty(startPointObj.getVehicle_qty()); - endPointObj.setUpdate_time(DateUtil.now()); - pointService.update(endPointObj); - //固化室放料完毕后,将当前一整排都标记上物料信息,防止出现混放情况 - pointMapper.updateVehicleType(endPointObj.getPoint_code().substring(0,endPointObj.getPoint_code().length()-2),endPointObj.getVehicle_type()); - List vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); - for(String vehicleCode:vehicleCodeList) { - SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, - GroupBindMaterialStatusEnum.BOUND.getValue())); - if (ObjectUtil.isEmpty(one)) { - throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到"); - } - one.setTask_code(taskObj.getTask_code()); - one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 - one.setPoint_name(endPointObj.getPoint_name()); - one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code()); - one.setUpdate_id(GeneralDefinition.ACS_ID); - one.setUpdate_name(GeneralDefinition.ACS_NAME); - one.setUpdate_time(DateUtil.now()); - vehiclematerialgroupService.updateById(one); - group_id.append(one.getGroup_id()).append(','); - } - // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(group_id.toString()); - taskObj.setRemark("任务完成"); - - //如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕 - if(taskObj.getPoint_code1().endsWith("10")) { - String middle = taskObj.getPoint_code1().substring(taskObj.getPoint_code1().length() - 4, taskObj.getPoint_code1().length() - 2); - //通知acs已经放满,固化室可以进行固化 - String device_code = "ZDM" + middle; - log.info("当前固化室已经全部取完,通知固化室的自动门{}取货完毕", device_code); - JSONObject map = new JSONObject(); - map.put("device_code", device_code); - map.put("type", "2"); - wmsToAcsService.notifyAcs(map); - } - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } - - @SneakyThrows - @Override - protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { - //todo 重算最优点 - SchBasePoint startPoint=pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code1())); - SchBasePoint nextPoint=this.findNextPoint(startPoint); - if(ObjectUtil.isEmpty(nextPoint)){ - throw new Exception("当前起点"+schBaseTask.getPoint_code1()+"未找到合适的放货点位"); - } - schBaseTask.setPoint_code2(nextPoint.getPoint_code()); - } -} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJQKTask.java new file mode 100644 index 0000000..39f34b3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJQKTask.java @@ -0,0 +1,187 @@ +package org.nl.wms.sch.task_manage.task.tasks.kj; + +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 lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 空架缺空移架 - 转存 + * @Date: 2023/12/1 + */ +@Slf4j +@Component("KJQKTask") +public class KJQKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "KJQKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Override + protected void create() throws BadRequestException { + + } + + @Override + protected void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + String requestParam = task.getRequest_param(); + JSONObject extGroupData = JSONObject.parseObject(requestParam); + // 根据对接位查找对应的载具类型 + SchBasePoint endPoint = pointService.getById(task.getPoint_code2()); + extGroupData.put("vehicle_type", endPoint.getCan_vehicle_type()); + SchBasePoint point = findStartPoint(startRegionStr, extGroupData); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("未找到所需点位!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setVehicle_type(endPoint.getCan_vehicle_type()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + /** + * 从空架暂存位获取 + * @param startRegionStr + * @param extGroupData + * @return + */ + private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { + // todo:不考虑等待点 + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.in(SchBasePoint::getRegion_code, startRegionStr) + .eq(SchBasePoint::getVehicle_type, extGroupData.getString("vehicle_type")) + .eq(SchBasePoint::getIs_used, true) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) + .orderByAsc(SchBasePoint::getCol_num) + .orderByAsc(SchBasePoint::getRow_num); + List list = pointService.list(lam); + return list.size() > 0 ? list.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + SchBasePoint startPointObj = pointService.selectByIdLock(startPoint); + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + startPointObj.setIng_task_code(""); + pointService.updateById(startPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJSKTask.java new file mode 100644 index 0000000..87359cb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJSKTask.java @@ -0,0 +1,237 @@ +package org.nl.wms.sch.task_manage.task.tasks.kj; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.system.service.param.ISysParamService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.PointTypeConstant; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskFactory; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.kj.dto.KJWStatisticsDto; +import org.nl.wms.sch.task_manage.task.tasks.kj.mapper.KJSKMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 空架回收(送空)任务 空架输送线 -> 暂存输送线、暂存区域 + * @Date: 2023/11/30 + */ +@Slf4j +@Component("KJSKTask") +public class KJSKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "KJSKTask"; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISysParamService paramService; + @Autowired + private TaskFactory taskFactory; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private KJSKMapper kjskMapper; + + @Override + protected void create() throws BadRequestException { + + } + + @Override + protected void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + // 消息通知 + noticeService.createNotice("暂无所需点位存放空架!", TASK_CONFIG_CODE + task.getPoint_code2(), + NoticeTypeEnum.WARN.getCode()); + throw new BadRequestException("暂无所需点位存放空架!"); + } + SchBasePoint startPoint = pointService.getById(task.getPoint_code1()); + // 设置起点并修改创建成功状态 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setVehicle_type(startPoint.getCan_vehicle_type()); + task.setRemark(""); + taskService.save(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + /** + * todo: 待优化:如果第二排运行中,就不知道第二排是什么类型 + * 找终点 + * @param nextRegionStr + * @param jsonObject + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject jsonObject) { + SchBasePoint device = pointService.getById(jsonObject.getString("device_code")); + // 先找暂存输送线有没有空位 + List zcssxList = pointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, nextRegionStr.get(0)) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getCan_vehicle_type, device.getVehicle_type()) + .eq(SchBasePoint::getIs_used, true) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .eq(SchBasePoint::getPoint_type, PointTypeConstant.ENTRANCE)); + if (zcssxList.size() == 0) { + // 如果暂存输送线找不到,就去暂存位存放。 + // 1、先获取相同类型且不是最开始的位置(最外面1,最里面2) + List tempList = kjskMapper.getSameTypePoint(nextRegionStr.get(1)); + if (ObjectUtil.isNotEmpty(tempList)) { + SchBasePoint tempPoint = tempList.get(0); + // 找到就获取下一个位置 + List resultPointList = pointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, nextRegionStr.get(1)) + .eq(SchBasePoint::getRow_num, tempPoint.getRow_num() - 1) + .eq(SchBasePoint::getCol_num, tempPoint.getCol_num()) + .eq(SchBasePoint::getIs_used, true)); + if (resultPointList.size() > 0) { + return resultPointList.get(0); + } + } + // 如果是没有找到相同位置的,或者是相同位置的下一个位置是不能用的,就得从新找一个全新的位置 + List kjwStatisticsDtos = kjskMapper.getKJWStatistics(nextRegionStr.get(1)); + // 如果还没找到,那就是没有位置 + if (kjwStatisticsDtos.size() == 0) { + return null; + } + zcssxList = pointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, nextRegionStr.get(1)) + .eq(SchBasePoint::getCol_num, kjwStatisticsDtos.get(0).getCol_num()) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true) + .orderByAsc(SchBasePoint::getIn_empty_seq)); + } + return zcssxList.size() > 0 ? zcssxList.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) ? taskObj.getVehicle_type() : ""; + SchBasePoint endPointObj = pointService.getById(endPoint); + // 设置载具类型、点位状态、释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + if (endPointObj.getRegion_code().equals("KJW")) { + endPointObj.setVehicle_type(vehicleType); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + } + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint endPointObj = pointService.getById(endPoint); + // 释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.update(endPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/dto/KJWStatisticsDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/dto/KJWStatisticsDto.java new file mode 100644 index 0000000..f37e1ee --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/dto/KJWStatisticsDto.java @@ -0,0 +1,14 @@ +package org.nl.wms.sch.task_manage.task.tasks.kj.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 空架位统计的Dto + * @Date: 2023/11/30 + */ +@Data +public class KJWStatisticsDto { + private Integer col_num; + private Integer sum; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/mapper/KJSKMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/mapper/KJSKMapper.java new file mode 100644 index 0000000..8eadbd0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/mapper/KJSKMapper.java @@ -0,0 +1,17 @@ +package org.nl.wms.sch.task_manage.task.tasks.kj.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task_manage.task.tasks.kj.dto.KJWStatisticsDto; + +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/30 + */ +public interface KJSKMapper { + List getSameTypePoint(String region); + + List getKJWStatistics(String region); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/mapper/KJSKMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/mapper/KJSKMapper.xml new file mode 100644 index 0000000..ce9cea6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/mapper/KJSKMapper.xml @@ -0,0 +1,50 @@ + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXMLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXMLTask.java new file mode 100644 index 0000000..72dbd36 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXMLTask.java @@ -0,0 +1,389 @@ +package org.nl.wms.sch.task_manage.task.tasks.tbx; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.*; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.tbx.mapper.TBXMapper; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 涂板线满料请求 + * @Date: 2023/11/17 + */ +@Slf4j +@Component("TBXMLTask") +public class TBXMLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "TBXMLTask"; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISysParamService paramService; + @Autowired + private TBXMapper tbxMapper; + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + + /** + * hint: 涂板线任务先发到等待点,接着二次请求获取真正的点位。 + * + * @throws BadRequestException + */ + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); // 修改修改者 + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("涂板线[" + task.getPoint_code1() + "]未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + } + + /** + * 不创建半条任务,直接创建完整任务 + * @param task + */ + @Override + protected void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("涂板线[" + task.getPoint_code1() + "]未找到所需点位!"); + } + // 生成载具编码 + String vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE"); + jsonObject.put("vehicle_code", vehicleCode); + // 设置组盘 - 需要的话由子类自行实现 + task.setGroup_id(setGroupPlate(jsonObject)); + // 设置等待点并修改创建成功状态 + task.setNext_wait_point(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + task.setVehicle_code(vehicleCode); + TaskUtils.setUpdateByAcs(task); // 修改修改者 + taskService.save(task); + +// point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + /** + * 在固化室找一个等待点 + * hint: 需要校验存放类型 + * todo: 目前不考虑固化方案 + * + * @param nextRegionStr + * @param jsonObject + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject jsonObject) { + // 获取工单 + String workorderCode = jsonObject.getString("workorder_code"); + if (ObjectUtil.isEmpty(workorderCode)) { + throw new BadRequestException("当前设备暂无工单"); + } + PdmBdWorkorder workorder = workorderService.getByCode(workorderCode); + // todo: 获取载具类型 + String vehicle_type = workorder.getVehicle_type(); + Param curingPlan = paramService.findByCode("CuringPlan");// 获取固化方案 + List points = new ArrayList<>(); + if (curingPlan.getValue().equals(GeneralDefinition.NOT_MIXING)) { + // 不可混料-需要根据工单上物料的信息 + // 1 获取含有该物料并且没满的固化室。 + points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id()); + if (points.size() == 0) { + // 2 没有对应的固化室,就找新的固化室 + points = tbxMapper.getEmptyPoint(nextRegionStr, vehicle_type); + } + } else if (curingPlan.getValue().equals(GeneralDefinition.CAN_MIXING)) { + // 可混料 + points = tbxMapper.getCanMiningPoint(nextRegionStr, vehicle_type); + } else { + // todo:自定义混料 + } + return points.size() > 0 ? points.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { +// 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } + + @Override + public String setGroupPlate(JSONObject param) { + // 获取工单 + PdmBdWorkorder orderObject = workorderService.getDeviceDockingProductionTask(param.getString("device_code")); + if (ObjectUtil.isEmpty(orderObject)) { + throw new BadRequestException("设备:[" + param.getString("device_code") + "]工单不存在!"); + } + String vehicleCode = param.getString("vehicle_code"); + if (ObjectUtil.isEmpty(vehicleCode)) { // 如果不是立即创建,就需要再此生成 + vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE"); + } + SchBaseVehiclematerialgroup vehicleGroupInfo = vehiclematerialgroupService.getVehicleGroupInfo(vehicleCode, + orderObject.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue()); + if (ObjectUtil.isNotEmpty(vehicleGroupInfo)) { + throw new BadRequestException("载具号:" + vehicleCode + "-载具类型:" + orderObject.getVehicle_type() + "组盘信息已存在"); + } + // 获取当前位置 + SchBasePoint basePoint = pointService.getById(param.getString("device_code")); + SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); + groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + // 解绑同载具的信息 +// vehiclematerialgroupService.unBindingSameVehicleMaterial(vehicleCode, vehicleType); + // 要把数据存到组盘表 + groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(orderObject) + ? orderObject.getMaterial_id() + : ""); + groupEntity.setStanding_time(ObjectUtil.isNotEmpty(orderObject) + ? orderObject.getStanding_time() + : 0); + groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(orderObject) + ? orderObject.getWorkorder_code() + : ""); + groupEntity.setCreate_id(GeneralDefinition.ACS_ID); + groupEntity.setCreate_name(GeneralDefinition.ACS_NAME); + groupEntity.setCreate_time(DateUtil.now()); + groupEntity.setVehicle_code(vehicleCode); + groupEntity.setVehicle_type(orderObject.getVehicle_type()); + groupEntity.setPoint_code(basePoint.getPoint_code()); // 对接位 + groupEntity.setPoint_name(basePoint.getPoint_name()); + groupEntity.setSource_vehicle_code(basePoint.getPoint_code()); + groupEntity.setMove_way(basePoint.getPoint_code()); + groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); // 批次号使用自己定义的 + groupEntity.setInstorage_time(DateUtil.now()); + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 + groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 + groupEntity.setIs_delete(false); + groupEntity.setIs_full(true); + vehiclematerialgroupService.saveOrUpdate(groupEntity); + // 返回组盘id记录任务中 + return groupEntity.getGroup_id(); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint endPointObj = pointService.getById(endPoint); + if (ObjectUtil.isNotEmpty(endPointObj)) { + SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); + TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); + vehiclematerialgroup.setTask_code(taskObj.getTask_code()); // 当前任务 + vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); // 设置链路id,使用任务编码 + vehiclematerialgroup.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name()); + vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code()); + vehiclematerialgroupService.updateById(vehiclematerialgroup); + // 终点解锁 + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + // 赋值 + endPointObj.setVehicle_code(vehiclematerialgroup.getVehicle_code()); + endPointObj.setVehicle_type(vehiclematerialgroup.getVehicle_type()); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + pointService.updateById(endPointObj); + // 插入生产过程跟踪表 +// PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); +// processTracking.setBuss_move_id(vehiclematerialgroup.getBuss_move_id()); +// processTracking.setProcess_action("压制送料入双层缓存线"); +// processTracking.setProcess_location(endPoint); +// processTracking.setRecord_time(DateUtil.now()); +// processTrackingService.create(processTracking); + // 工单统计实际数量 +// Integer materialQty = vehiclematerialgroup.getMaterial_qty(); +// PdmBdWorkorder bdWorkorder = workorderService.getByCode(vehiclematerialgroup.getWorkorder_code()); +// BigDecimal realQty = bdWorkorder.getReal_qty(); +// bdWorkorder.setReal_qty(NumberUtil.add(realQty, materialQty)); +// TaskUtils.setWorkOrderUpdateByType(bdWorkorder, taskFinishedType); +// workorderService.updateById(bdWorkorder); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 +// String waitPoint = taskObj.getNext_wait_point(); // 获取等待点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 +// SchBasePoint waitPointObj = pointService.getById(waitPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 等待点解锁 不锁 +// if (ObjectUtil.isNotEmpty(waitPointObj)) { +// waitPointObj.setIng_task_code(""); +// PointUtils.setUpdateByType(waitPointObj, taskFinishedType); +// pointService.updateById(waitPointObj); +// } + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + /** + * 再次请求 + * @param task_id: 任务标识 + * @return + */ + @Override + public String againApply(String task_id) { + SchBaseTask task = taskService.getById(task_id); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("任务:[" + task_id + "]不存在!"); + } + String waitPoint = task.getNext_wait_point(); + if (ObjectUtil.isEmpty(waitPoint)) { + throw new BadRequestException("找不到任务:[" + task_id + "]等待点!"); + } + // 根据任务上等待点的位置获取准确的固化室位置。 + // mark: 不考虑前空中间有货后空的问题 + SchBasePoint ghsInPoint = pointService.getById(waitPoint); + List pointList = pointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getParent_point_code, ghsInPoint.getParent_point_code()) + .eq(SchBasePoint::getPoint_type, PointTypeConstant.DOCKING_POINT) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true) + .orderByAsc(SchBasePoint::getIn_order_seq)); + if (pointList.size() == 0) { // hint: 如果满了,是否可以考虑转到其他固化室等待点 + throw new BadRequestException("找不到对应的固化室"); + } + SchBasePoint point = pointList.get(0); // 获取第一条 + // 锁住货位点 + PointUtils.setUpdateByAcs(point); + point.setIng_task_code(task.getTask_code()); + pointService.updateById(point); + // 任务修改点位 + task.setPoint_code2(point.getPoint_code()); + TaskUtils.setUpdateByAcs(task); + taskService.updateById(task); + return point.getPoint_code(); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXQKTask.java new file mode 100644 index 0000000..667760c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXQKTask.java @@ -0,0 +1,230 @@ +package org.nl.wms.sch.task_manage.task.tasks.tbx; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/29 + */ +@Slf4j +@Component(value = "TBXQKTask") +public class TBXQKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "TBXQKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); // 修改修改者 + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + // 根据对接位查找对应的载具类型 + SchBasePoint startPoint = pointService.getById(task.getPoint_code2()); + jsonObject.put("vehicle_type", startPoint.getCan_vehicle_type()); + SchBasePoint point = findStartPoint(startRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setVehicle_type(startPoint.getCan_vehicle_type()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + + //下发 + //this.renotifyAcs(task); + } + } + + @Override + protected void createCompletion(SchBaseTask task) { + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + String requestParam = task.getRequest_param(); + JSONObject extGroupData = JSONObject.parseObject(requestParam); + // 根据对接位查找对应的载具类型 + SchBasePoint startPoint = pointService.getById(task.getPoint_code2()); + extGroupData.put("vehicle_type", startPoint.getCan_vehicle_type()); + SchBasePoint point = findStartPoint(startRegionStr, extGroupData); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("未找到所需点位!"); + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setVehicle_type(startPoint.getCan_vehicle_type()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.save(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + } + + /** + * 业务过程:到指定的区域获取空架 + * @param startRegionStr + * @param requestParam + * @return + */ + private SchBasePoint findStartPoint(List startRegionStr, JSONObject requestParam) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(SchBasePoint::getRegion_code, startRegionStr) // hint: 默认一直都有载具 + .eq(SchBasePoint::getPoint_type, GeneralDefinition.EXIT) // 点位类型是拆盘机出口 + .eq(SchBasePoint::getCan_vehicle_type, requestParam.getString("vehicle_type")) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getBlock_num, "1") + .eq(SchBasePoint::getIs_used, true); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取起点 + SchBasePoint startPointObj = pointService.selectByIdLock(startPoint); + SchBasePoint endPointObj = pointService.selectByIdLock(endPoint); + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + startPointObj.setIng_task_code(""); + pointService.updateById(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + endPointObj.setVehicle_type(taskObj.getVehicle_type()); + endPointObj.setVehicle_qty(1); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.java new file mode 100644 index 0000000..4eb575f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.java @@ -0,0 +1,36 @@ +package org.nl.wms.sch.task_manage.task.tasks.tbx.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/17 + */ +public interface TBXMapper { + /** + * 随机找可用的固化室 + * @param regionCode + * @param vehicleType + * @return + */ + List getCanMiningPoint(List regionCode, String vehicleType); + + /** + * 获取固化中没满可用的固化室 + * @param nextRegionStr + * @param materialId + * @return + */ + List getNotFullByMaterial(List nextRegionStr, String vehicleType, String materialId); + + /** + * 获取空的固化室 + * @param nextRegionStr + * @param vehicleType + * @return + */ + List getEmptyPoint(List nextRegionStr, String vehicleType); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.xml new file mode 100644 index 0000000..3045206 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java index 279b027..0cba520 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java @@ -1,11 +1,15 @@ package org.nl.wms.util; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import org.nl.common.utils.SecurityUtils; import org.nl.config.SpringContextHolder; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.point.service.impl.SchBasePointServiceImpl; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; /** * @Author: lyd @@ -16,14 +20,15 @@ public class PointUtils { /** * 获取状态名或者类型名 + * * @param explain * @param label * @return */ public static String getStatusOrTypeName(String explain, String label) { JSONObject statusArr = new JSONObject(); - String[] split = explain.split(","); - for ( int j = 0; j < split.length; j++) { + String[] split = explain.split(","); + for (int j = 0; j < split.length; j++) { String[] status = split[j].split("-"); statusArr.put(status[0], status[1]); } @@ -33,11 +38,15 @@ public class PointUtils { /** * 清空点位 + * * @param point */ public static void clearPoint(SchBasePoint point) { + if (ObjectUtil.isEmpty(point)) { + return; // 空直接退出 + } SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class); -// point.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode()); + point.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode()); point.setVehicle_type(""); point.setVehicle_code(""); point.setIng_task_code(""); @@ -45,4 +54,57 @@ public class PointUtils { point.setUpdate_time(DateUtil.now()); pointService.updateById(point); } + + /** + * 清空点位 + * 双层输送线特殊功能:上五下五 + * + * @param point + */ + public static void clearPointAndRetainNum(SchBasePoint point) { + if (ObjectUtil.isEmpty(point)) { + return; // 空直接退出 + } + SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class); + // 获取父点位 + String parentPointCode = point.getParent_point_code(); + SchBasePoint basePoint = pointService.getById(parentPointCode); + point.setVehicle_type(""); + point.setVehicle_code(""); + point.setIng_task_code(""); + point.setVehicle_qty(point.getVehicle_qty() == 5 ? point.getVehicle_qty() : point.getVehicle_qty() + 1); + if (basePoint.getVehicle_qty() == 5) { // 等到新的点执行第一托的时候,才判断另一个点满足5个托盘的时候就清空 + basePoint.setVehicle_qty(0); + basePoint.setUpdate_time(DateUtil.now()); + pointService.updateById(basePoint); + } + point.setUpdate_time(DateUtil.now()); + pointService.updateById(point); + } + + /** + * 点位修改更新信息 + **/ + public static void setUpdateByAcs(SchBasePoint pointObj) { + pointObj.setUpdate_id(GeneralDefinition.ACS_ID); + pointObj.setUpdate_name(GeneralDefinition.ACS_NAME); + pointObj.setUpdate_time(DateUtil.now()); + } + + /** + * 点位修改更新信息 + **/ + public static void setUpdateByPC(SchBasePoint pointObj) { + pointObj.setUpdate_id(SecurityUtils.getCurrentUserId()); + pointObj.setUpdate_name(SecurityUtils.getCurrentNickName()); + pointObj.setUpdate_time(DateUtil.now()); + } + + public static void setUpdateByType(SchBasePoint pointObj, TaskFinishedTypeEnum taskFinishedType) { + if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { + setUpdateByAcs(pointObj); + } else { + setUpdateByPC(pointObj); + } + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java index 2fd4b78..f451f70 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java @@ -1,43 +1,119 @@ package org.nl.wms.util; 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 lombok.extern.slf4j.Slf4j; import org.nl.common.utils.SecurityUtils; import org.nl.config.SpringContextHolder; +import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.impl.SchBaseTaskServiceImpl; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.List; -import java.util.function.Consumer; /** * @Author: lyd * @Description: 任务修改抽取的公用方法 * @Date: 2023/6/13 */ -@Component +@Slf4j public class TaskUtils { - @Autowired - private ISchBaseTaskService taskService; - public void setUpdateByAcs(SchBaseTask taskObj) { - taskObj.setUpdate_id("2"); - taskObj.setUpdate_name("ACS系统"); + public static void setCreateByAcs(SchBaseTask taskObj) { + taskObj.setCreate_id(GeneralDefinition.ACS_ID); + taskObj.setCreate_name(GeneralDefinition.ACS_NAME); + taskObj.setCreate_time(DateUtil.now()); + } + public static void setCreateByPda(SchBaseTask taskObj) { + taskObj.setCreate_id(SecurityUtils.getCurrentUserId()); + taskObj.setCreate_name(SecurityUtils.getCurrentNickName()); + taskObj.setCreate_time(DateUtil.now()); + } + public static void setCreateByAcsOrPda(SchBaseTask taskObj, JSONObject param) { + // 如果是人工创建,会带个用户过来 + if (ObjectUtil.isNotEmpty(param.getString("user_id"))) { + setCreateByPda(taskObj); + } else { + setCreateByAcs(taskObj); + } + } + + public static void setUpdateByAcs(SchBaseTask taskObj) { + taskObj.setUpdate_id(GeneralDefinition.ACS_ID); + taskObj.setUpdate_name(GeneralDefinition.ACS_NAME); taskObj.setUpdate_time(DateUtil.now()); } - public void setUpdateByPC(SchBaseTask taskObj) { + + public static void setUpdateByPC(SchBaseTask taskObj) { taskObj.setUpdate_id(SecurityUtils.getCurrentUserId()); taskObj.setUpdate_name(SecurityUtils.getCurrentNickName()); taskObj.setUpdate_time(DateUtil.now()); } + public static void setGroupUpdateByAcs(SchBaseVehiclematerialgroup groupEntity) { + groupEntity.setUpdate_id(GeneralDefinition.ACS_ID); + groupEntity.setUpdate_name(GeneralDefinition.ACS_NAME); + groupEntity.setUpdate_time(DateUtil.now()); + } + + public static void setGroupUpdateByPC(SchBaseVehiclematerialgroup groupEntity) { + groupEntity.setUpdate_id(SecurityUtils.getCurrentUserId()); + groupEntity.setUpdate_name(SecurityUtils.getCurrentNickName()); + groupEntity.setUpdate_time(DateUtil.now()); + } + // 根据类型去判断谁修改的 - public void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + public static void setGroupUpdateByType(SchBaseVehiclematerialgroup groupEntity, TaskFinishedTypeEnum taskFinishedType) { + if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { + setGroupUpdateByAcs(groupEntity); + } else { + setGroupUpdateByPC(groupEntity); + } + } + public static void setWorkOrderUpdateByAcs(PdmBdWorkorder pdmBdWorkorder) { + pdmBdWorkorder.setUpdate_id(GeneralDefinition.ACS_ID); + pdmBdWorkorder.setUpdate_name(GeneralDefinition.ACS_NAME); + pdmBdWorkorder.setUpdate_time(DateUtil.now()); + } + + public static void setWorkOrderUpdateByPC(PdmBdWorkorder pdmBdWorkorder) { + pdmBdWorkorder.setUpdate_id(ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUserId()) + ? SecurityUtils.getCurrentUserId() : ""); + pdmBdWorkorder.setUpdate_name(ObjectUtil.isNotEmpty(SecurityUtils.getCurrentNickName()) + ? SecurityUtils.getCurrentNickName() : ""); + pdmBdWorkorder.setUpdate_time(DateUtil.now()); + } + + // 根据类型去判断谁修改的 + public static void setWorkOrderUpdateByType(PdmBdWorkorder groupEntity, TaskFinishedTypeEnum taskFinishedType) { + if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { + setWorkOrderUpdateByAcs(groupEntity); + } else { + setWorkOrderUpdateByPC(groupEntity); + } + } + + + public static void setUpdateAuto(SchBaseTask taskObj) { + String currentUserId = ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUserId()) + ? SecurityUtils.getCurrentUserId() + : "2"; + String nickName = ObjectUtil.isNotEmpty(SecurityUtils.getCurrentNickName()) + ? SecurityUtils.getCurrentNickName() + : "ACS系统"; + taskObj.setUpdate_id(currentUserId); + taskObj.setUpdate_name(nickName); + taskObj.setUpdate_time(DateUtil.now()); + } + + // 根据类型去判断谁修改的 + public static void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { setUpdateByAcs(taskObj); } else { @@ -45,8 +121,11 @@ public class TaskUtils { } } - /** 校验是否有起点终点的任务 */ - public Boolean hasTaskAll(String pointCode) { + /** + * 校验是否有起点终点的任务 + */ + public static Boolean hasTaskAll(String pointCode) { + ISchBaseTaskService taskService = SpringContextHolder.getBean(ISchBaseTaskService.class); final String code = pointCode; List list = taskService.list(new LambdaQueryWrapper() .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) @@ -60,4 +139,73 @@ public class TaskUtils { .eq(SchBaseTask::getPoint_code4, code))); return list.size() > 0; } + + /**不需要转换 + * 转成ACS需要的载具类型 + * ACS载具类型:1 2 3 ... + * LMS载具类型:3 4 5 ... + * @param acsVehicleType + * @return + */ + public static String toAcsVehicleTypeShift(String acsVehicleType) { + if (ObjectUtil.isEmpty(acsVehicleType)) { + return null; + } + String lmsVehicleType = null; + try { + lmsVehicleType = Integer.parseInt(acsVehicleType) - 2 + ""; + } catch (Exception e) { + log.error("acs载具转换异常: {}", e.getMessage()); + } + return lmsVehicleType; + } + + /**不需要转换 + * 转成LMS需要的载具类型 + * ACS载具类型:1 2 3 ... + * LMS载具类型:3 4 5 ... + * @param lmsVehicleType + * @return + */ + public static String toLmsVehicleTypeShift(String lmsVehicleType) { + if (ObjectUtil.isEmpty(lmsVehicleType)) { + return null; + } + String acsVehicleType = null; + try { + acsVehicleType = Integer.parseInt(lmsVehicleType) + 2 + ""; + } catch (Exception e) { + log.error("acs载具转换异常: {}", e.getMessage()); + } + return acsVehicleType; + } + + /** + * 如果传来的载具编码是0,就返回null, 否则替换成四位数,用零补齐 + * @param acsVehicleCode + * @return + */ + public static String defaultVehicleCode(String acsVehicleCode) { + if (ObjectUtil.isEmpty(acsVehicleCode) || acsVehicleCode.equals(GeneralDefinition.NO)) { + return null; + } + return String.format("%04d", Integer.parseInt(acsVehicleCode)); + } + + /** + * 将输入的字符串相乘得出值 + * eg: 2*7*6 + * return: 84 + * @param needFullNumberStr + * @return + */ + public static int convertMultiply(String needFullNumberStr) { + String[] parts = needFullNumberStr.split("\\*"); // 使用 "*" 来分割字符串 + int result = 1; // 初始化结果为1 + for (String part : parts) { + int number = Integer.parseInt(part); // 将字符串部分解析为整数 + result *= number; // 将解析的整数与结果相乘 + } + return result; + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 0ef6ed3..75d08d6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -6,10 +6,10 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:cw_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:xftn_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true # url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:123456} + password: ${DB_PWD:12356} # password: ${DB_PWD:P@ssw0rd} # 初始连接数 initial-size: 5 diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml index f0fc978..3bf0425 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml @@ -1,14 +1,14 @@ server: - port: 8010 + port: 8011 #配置数据源 spring: datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.4.121}:${DB_PORT:3306}/${DB_NAME:yy_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:101.37.151.193}:${DB_PORT:53306}/${DB_NAME:xftn_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:123456} + password: ${DB_PWD:P@ssW0rd123} # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java index 02e4210..f6bdd01 100644 --- a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java +++ b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java @@ -1,6 +1,8 @@ package org.nl.point; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import org.junit.jupiter.api.Test; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; @@ -25,64 +27,119 @@ public class PointCreate { @Autowired private ISchBaseRegionService regionService; @Test - void test01() { - // 创建YJ01-08 + void testTBX() { + // 创建涂板线 List pointList = new ArrayList<>(); - for (int i = 3; i <= 8; i++) { - String pointName = "压机0"; - String pointCode = "YJ0"; + // 普 + for (int i = 1; i <= 4; i++) { + String pointName = "普涂线0"; + String pointCode = "PTX0"; pointName = pointName + i; pointCode = pointCode + i; SchBasePoint point = new SchBasePoint(); point.setPoint_code(pointCode); point.setPoint_name(pointName); - point.setRegion_code("YZ"); - point.setRegion_name("压制区域"); + point.setRegion_code("TBX"); + point.setRegion_name("涂板线区域"); point.setPoint_type("1"); point.setParent_point_code(pointCode); point.setIs_has_workder(true); point.setIs_auto(true); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); + pointList.add(point); + } + // 普对接 + for (int i = 1; i <= 4; i++) { + String pointName = "普涂线0" + i + "对接位0"; + String pointCode = "PTX0" + i + "DJW0"; + pointName = pointName + i; + pointCode = pointCode + i; + SchBasePoint point = new SchBasePoint(); + point.setPoint_code(pointCode); + point.setPoint_name(pointName); + point.setRegion_code("TBX"); + point.setRegion_name("涂板线区域"); + point.setPoint_type("2"); + point.setParent_point_code("PTX0" + i); + point.setIs_has_workder(false); + point.setIs_auto(true); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); + pointList.add(point); + } + // 连 + for (int i = 1; i <= 6; i++) { + String pointName = "连涂线0"; + String pointCode = "LTX0"; + pointName = pointName + i; + pointCode = pointCode + i; + SchBasePoint point = new SchBasePoint(); + point.setPoint_code(pointCode); + point.setPoint_name(pointName); + point.setRegion_code("TBX"); + point.setRegion_name("涂板线区域"); + point.setPoint_type("1"); + point.setParent_point_code(pointCode); + point.setIs_has_workder(true); + point.setIs_auto(true); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); + pointList.add(point); + // 连对 + for (int j = 1; j <= 2; j++) { + String pointName2 = "连涂线0" + i + "对接位0"; + String pointCode2 = "LTX0" + i + "DJW0"; + pointName2 = pointName2 + j; + pointCode2 = pointCode2 + j; + SchBasePoint point2 = new SchBasePoint(); + point2.setPoint_code(pointCode2); + point2.setPoint_name(pointName2); + point2.setRegion_code("TBX"); + point2.setRegion_name("涂板线区域"); + point2.setPoint_type("2"); + point2.setParent_point_code("LTX0" + i); + point2.setIs_has_workder(false); + point2.setIs_auto(true); + point2.setCreate_id("1"); + point2.setCreate_name("管理员"); + point2.setCreate_time(DateUtil.now()); + pointList.add(point2); + } + } + // 缓存位普涂缓存位01-07 + for (int i = 1; i <= 7; i++) { + String pointName = "普涂线缓存位0"; + String pointCode = "PTXHCW0"; + pointName = pointName + i; + pointCode = pointCode + i; + SchBasePoint point = new SchBasePoint(); + point.setPoint_code(pointCode); + point.setPoint_name(pointName); + point.setRegion_code("TBX"); + point.setRegion_name("涂板线区域"); + point.setPoint_type("3"); + point.setParent_point_code(pointCode); + point.setIs_has_workder(false); + point.setIs_auto(true); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); pointList.add(point); } pointService.saveBatch(pointList); } + // 新增固化区域 @Test - void test02() { // 压机接料位 - // 创建YJ01JLW01 + void testGH() { List pointList = new ArrayList<>(); - for (int i = 3; i <= 8; i++) { - String pointName = "压机0"; - String pointCode = "YJ0"; - pointName = pointName + i; - pointCode = pointCode + i; - for (int j = 1; j <= 2; j++) { - String jlw = "JLW0"; - String jlw2 = "接料位0"; - jlw = jlw + j; - jlw2 = jlw2 + j; - SchBasePoint point = new SchBasePoint(); - point.setPoint_code(pointCode + jlw); - point.setPoint_name(pointName + jlw2); - point.setRegion_code("YZ"); - point.setRegion_name("压制区域"); - point.setPoint_type("2"); - point.setParent_point_code(pointCode); - point.setIs_has_workder(false); - point.setIs_auto(true); - pointList.add(point); - } - } - pointService.saveBatch(pointList); - } - - @Test - void test03() { // 料盅睏料线区域 - // 创建LZKL01 - 32 - List pointList = new ArrayList<>(); - for (int i = 1; i <= 12; i++) {// 3台 - String pointName = "睏料位"; - String pointCode = "KLW"; + for (int i = 1; i <= 84; i++) { + String pointName = "固化室"; + String pointCode = "GHS"; if (i < 10) { pointName = pointName + "0" + i; pointCode = pointCode + "0" + i; @@ -93,64 +150,214 @@ public class PointCreate { SchBasePoint point = new SchBasePoint(); point.setPoint_code(pointCode); point.setPoint_name(pointName); - point.setRegion_code("LZKLX"); - point.setRegion_name("料盅睏料线区域"); + point.setRegion_code("GH"); + point.setRegion_name("固化区域"); + point.setPoint_type("1"); point.setParent_point_code(pointCode); point.setIs_has_workder(false); point.setIs_auto(true); + point.setWorkshop_code("A1"); + point.setIn_order_seq(i); + point.setOut_order_seq(i); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); pointList.add(point); + for (int j = 1; j <= 7; j++) { + String pointName2 = pointName + "0" + j; + String pointCode2 = pointCode + "0" + j; + SchBasePoint point2 = new SchBasePoint(); + point2.setPoint_code(pointCode2); + point2.setPoint_name(pointName2); + point2.setRegion_code("GH"); + point2.setRegion_name("固化区域"); + point2.setPoint_type("2"); + point2.setParent_point_code(pointCode); + point2.setIs_has_workder(false); + point2.setIs_auto(true); + point2.setIn_order_seq(j); + point2.setOut_order_seq(j); + point2.setWorkshop_code("A1"); + point2.setCreate_id("1"); + point2.setCreate_name("管理员"); + point2.setCreate_time(DateUtil.now()); + pointList.add(point2); + } + String pointName2 = pointName + "出口"; + String pointCode2 = pointCode + "C"; + SchBasePoint point2 = new SchBasePoint(); + point2.setPoint_code(pointCode2); + point2.setPoint_name(pointName2); + point2.setRegion_code("GH"); + point2.setRegion_name("固化区域"); + point2.setPoint_type("3"); + point2.setParent_point_code(pointCode); + point2.setIs_has_workder(false); + point2.setIs_auto(true); + point2.setIn_order_seq(i); + point2.setOut_order_seq(i); + point2.setWorkshop_code("A1"); + point2.setCreate_id("1"); + point2.setCreate_name("管理员"); + point2.setCreate_time(DateUtil.now()); + pointList.add(point2); + String pointName3 = pointName + "入口"; + String pointCode3 = pointCode + "R"; + SchBasePoint point3 = new SchBasePoint(); + point3.setPoint_code(pointCode3); + point3.setPoint_name(pointName3); + point3.setRegion_code("GH"); + point3.setRegion_name("固化区域"); + point3.setPoint_type("4"); + point3.setParent_point_code(pointCode); + point3.setIs_has_workder(false); + point3.setIs_auto(true); + point3.setIn_order_seq(i); + point3.setOut_order_seq(i); + point3.setWorkshop_code("A1"); + point3.setCreate_id("1"); + point3.setCreate_name("管理员"); + point3.setCreate_time(DateUtil.now()); + pointList.add(point3); } - pointService.saveBatch(pointList); + pointService.saveOrUpdateBatch(pointList); } - - + // 暂存输送线 @Test - void test04() { // 缓存库位区域 + void testZCSSX() { List pointList = new ArrayList<>(); - int count = 1; - for (int i = 1; i <= 2; i++) { - for (int j = 1; j <= 29; j++) { - for (int k = 1; k <= 3; k++) { - String code = "HCHJ"; - String name = "缓存货架"; - if (count < 10) { - code = code + "00" + count; - name = name + "00" + count; - } else if (count >= 10 && count < 100) { - code = code + "0" + count; - name = name + "0" + count; - } else { - code = code + count; - name = name + count; - } - SchBasePoint point = new SchBasePoint(); - point.setPoint_code(code); - point.setPoint_name(name); - point.setRegion_code("GTPHC"); - point.setRegion_name("钢托盘缓存区域"); - point.setPoint_status("1"); - point.setCan_vehicle_type("2"); - point.setVehicle_max_qty(1); - point.setBlock_num(1); - point.setRow_num(i); - point.setCol_num(j); - point.setLayer_num(k); - point.setIn_order_seq(count); - point.setOut_order_seq(count); - point.setIn_empty_seq(count); - point.setOut_empty_seq(count); - point.setParent_point_code(code); - point.setCreate_id("1"); - point.setCreate_name("管理员"); - point.setCreate_time(DateUtil.now()); - point.setIs_has_workder(false); - point.setIs_auto(true); - point.setIs_used(true); - pointList.add(point); - count++; - } + for (int i = 1; i <= 6; i++) { + String pointName = "暂存输送线0"; + String pointCode = "ZCSSX0"; + pointName = pointName + i; + pointCode = pointCode + i; + for (int j = 1; j <= 7; j++) { + SchBasePoint point = new SchBasePoint(); + point.setPoint_code(pointCode + "0" + j); + point.setPoint_name(pointName + "0" + j); + point.setRegion_code("KJZC"); + point.setRegion_name("空架暂存区域"); + point.setPoint_type("3"); + point.setParent_point_code(pointCode); + point.setIs_has_workder(false); + point.setIs_auto(true); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); + pointList.add(point); } } pointService.saveBatch(pointList); } + @Test + void testZCSSX2() { + List pointList = new ArrayList<>(); + for (int i = 1; i <= 6; i++) { + String pointName = "暂存输送线0"; + String pointCode = "ZCSSX0"; + pointName = pointName + i; + pointCode = pointCode + i; + SchBasePoint point = new SchBasePoint(); + point.setPoint_code(pointCode); + point.setPoint_name(pointName); + point.setRegion_code("KJZC"); + point.setRegion_name("空架暂存区域"); + point.setPoint_type("5"); + point.setParent_point_code(pointCode); + point.setIs_has_workder(false); + point.setIs_auto(true); + point.setWorkshop_code("A1"); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); + pointList.add(point); + } + pointService.saveOrUpdateBatch(pointList); + } + + @Test + void testKJZC() { + int number = 1; + List pointList = new ArrayList<>(); + for (int i = 1; i <= 2; i++) { // 排 + for (int j = 1; j <= 21; j++) { // 列 + SchBasePoint point = new SchBasePoint(); + String pointName = "空架暂存位"; + String pointCode = "KJZCW"; + if (number < 10) { + pointName = pointName + "0" + number; + pointCode = pointCode + "0" + number; + } else { + pointName = pointName + number; + pointCode = pointCode + number; + } + point.setPoint_code(pointCode); + point.setPoint_name(pointName); + point.setRegion_code("KJZC"); + point.setRegion_name("空架暂存区域"); + point.setRow_num(i); + point.setCol_num(j); + point.setOut_empty_seq(i); + point.setIn_empty_seq(2 - i + 1); + point.setPoint_type("2"); + point.setParent_point_code(pointCode); + point.setIs_has_workder(false); + point.setIs_auto(true); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); + pointList.add(point); + number++; + } + } + pointService.saveBatch(pointList); + } + // 暂存区 9*18 + @Test + void testZCQLeft() { + List pointList = new ArrayList<>(); + for (int i = 1; i <= 18; i++) { + for (int j = 1; j <= 9; j++) { + SchBasePoint point = new SchBasePoint(); + if (i < 10) { + point.setPoint_code("0" + i + "-0" + j + "-01"); + point.setPoint_name("0" + i + "排0" + j + "列01层"); + } else { + point.setPoint_code(i + "-0" + j + "-01"); + point.setPoint_name(i + "排0" + j + "列01层"); + } + point.setRegion_code("ZC"); + point.setRegion_name("暂存区域"); + point.setRow_num(i); + point.setCol_num(j); + point.setOut_order_seq(j); + point.setIn_order_seq(9 - j + 1); + point.setPoint_status("1"); + point.setParent_point_code(point.getPoint_code()); + point.setIs_has_workder(false); + point.setIs_auto(true); + point.setCreate_id("1"); + point.setCreate_name("管理员"); + point.setCreate_time(DateUtil.now()); + pointList.add(point); + } + } + pointService.saveOrUpdateBatch(pointList); + } + + @Test + void testData() { + JSONObject res = new JSONObject(); + JSONArray array = new JSONArray(); + for (int i = 0; i < 7; i++) { + JSONObject object = new JSONObject(); + object.put("name", "XC-" + i); + object.put("order_num", 1655); + object.put("guada_num", 1200); + object.put("residue_num", 1655 - 1200); + array.add(object); + } + res.put("MonthlyWorkOrder", array); + System.out.println(res); + } } diff --git a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue index 0f93777..d25f401 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue @@ -40,28 +40,41 @@ - - + + - + - + - + - - + + - - + + - - + + - +