diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java index 9ff211c..192cfa6 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java @@ -10,7 +10,7 @@ import com.alibaba.fastjson.JSONObject; * https://blog.csdn.net/moneyshi/article/details/82978073 */ public enum RequestMethodEnum { - apply_mjxl(1, "apply_mjxl", "涂板线满架下料","1"), + apply_mjxl(1, "MJXLTask", "涂板线满架下料","1"), feedback_task_status(2, "feedback_task_status", "反馈任务状态","1"); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_autodoor/StandardAutodoorDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_autodoor/StandardAutodoorDeviceDriver.java index f5de8fc..f0cf696 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_autodoor/StandardAutodoorDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_autodoor/StandardAutodoorDeviceDriver.java @@ -5,6 +5,8 @@ import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.domain.Device; +import org.nl.acs.device_driver.RequestMethodEnum; +import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.utils.ReadUtil; import org.nl.acs.device.service.DeviceService; @@ -113,7 +115,11 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem } if (state != last_state) { //固化室状态变更后通知lms更新固化室状态 - acsToWmsService.feedbackDeviceStatus(this.devicecode,String.valueOf(state)); + FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); + request.setState(String.valueOf(state)); + request.setDevice_code(this.devicecode); + request.setType("1"); + acsToWmsService.notify(request); } last_action = action; last_mode = mode; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java index 08276fc..1aca9c4 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java @@ -443,9 +443,10 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); request.setDevice_code(devicecode); request.setVehicle_code(String.valueOf(barcode)); - request.setTask_type(String.valueOf(type)); - request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName()); + if (devicecode.startsWith("TBX")) { + request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); + } String resp = acsToWmsService.applyTask(request); JSONObject res_jo = JSONObject.parseObject(resp); if (StrUtil.equals(res_jo.getString("status"), "200")) { diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java index eb270f2..a35e7dc 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java @@ -53,5 +53,16 @@ public class BaseRequest { private Map parameters = new HashMap(); + /** + * 任务类型 + */ + private String type; + + /** + * 设备状态 + */ + private String state; + + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index 2a3549f..9bcf796 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -3,6 +3,7 @@ package org.nl.acs.ext.wms.rest; import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -97,4 +98,12 @@ public class WmsToAcsController { return new ResponseEntity<>(wmstoacsService.putPlusPullAction(whereJson), HttpStatus.OK); } + @PostMapping("/notify") + @Log("wms下发任务动作") + @ApiOperation("wms下发任务动作") + @SaIgnore + public ResponseEntity notify(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.notifyAcs(param), HttpStatus.OK); + } + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index 55cff79..4b00ea8 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -114,7 +114,17 @@ public interface AcsToWmsService { HttpResponse feedAgvTaskStatus(JSONArray from); /** - * ACS向WMS申请晟华任务 + * ACS向WMS申请任务 + */ + String applyTask(BaseRequest request); + + /** + * ACS向WMS反馈任务状态 + */ + String feedTaskStatus(BaseRequest request); + + /** + * ACS向WMS反馈任务状态 */ - public String applyTask(BaseRequest request); + String notify(BaseRequest request); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java index e86d747..869a8b3 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java @@ -2,6 +2,7 @@ package org.nl.acs.ext.wms.service; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.acs.ext.wms.data.*; @@ -83,4 +84,13 @@ public interface WmsToAcsService { Map putPlusPullAction(String whereJson); + /** + * 下发wms任务动作 + * + * @param param 条件 + * @return Map + */ + JSONObject notifyAcs(JSONObject param); + + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index e87306b..d18663b 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -563,6 +563,33 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } finally { MDC.remove(log_file_type); } + } + @Override + public String feedTaskStatus(BaseRequest requestParam) { + try { + MDC.put(log_file_type, log_type); + String api = addressService.findByCode("feedTaskStatus").getMethods_url(); + log.info("feedTaskStatus-----输入参数{}", JSON.toJSONString(requestParam, SerializerFeature.DisableCircularReferenceDetect)); + String result = LmsUtil.notifyAcs(api, requestParam); + log.info("feedTaskStatus-----输出参数{}", result); + return result; + } finally { + MDC.remove(log_file_type); + } + } + + @Override + public String notify(BaseRequest requestParam) { + try { + MDC.put(log_file_type, log_type); + String api = addressService.findByCode("notify").getMethods_url(); + log.info("notify-----输入参数{}", JSON.toJSONString(requestParam, SerializerFeature.DisableCircularReferenceDetect)); + String result = LmsUtil.notifyAcs(api, requestParam); + log.info("notify-----输出参数{}", result); + return result; + } finally { + MDC.remove(log_file_type); + } } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index ce5e302..b59ab8e 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -16,6 +16,7 @@ import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.basedriver.hongxiang_conveyor.HongXiangStationDeviceDriver; import org.nl.acs.device_driver.basedriver.hongxiang_device.HongXiangConveyorDeviceDriver; import org.nl.acs.device_driver.basedriver.plug_pull_device_site.PlugPullDeviceSiteDeviceDriver; +import org.nl.acs.device_driver.basedriver.standard_autodoor.StandardAutodoorDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_conveyor_control_with_scanner.StandardCoveyorControlWithScannerDeviceDriver; import org.nl.acs.ext.wms.data.*; import org.nl.acs.ext.wms.service.AcsToLiKuService; @@ -624,5 +625,38 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } + @Override + public JSONObject notifyAcs(JSONObject param) { + log.info("notifyAcs - 请求参数 {}", param); + JSONObject result = new JSONObject(); + Integer type=param.getInteger("type"); + String device_code=param.getString("device_code"); + Device device; + switch(type){ + case 1: + //wms通知固化室满料,开始固化 + device = deviceAppService.findDeviceByCode(device_code); + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + StandardAutodoorDeviceDriver standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.writing("to_state",1); + } + break; + case 2: + //wms通知固化室取料完毕,重新开放可使用 + device = deviceAppService.findDeviceByCode(device_code); + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + StandardAutodoorDeviceDriver standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.writing("to_state",2); + } + break; + default: + break; + } + + result.put("status", HttpStatus.OK.value()); + result.put("message", "通知成功!"); + log.info("notifyAcs - 返回参数 {}", result); + return result; + } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index e08d3b4..3536731 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -875,7 +875,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme boolean flag = false; String resp = null; try { - resp = acstowmsService.applyTask(request); + resp = acstowmsService.feedTaskStatus(request); log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); } catch (Exception e) { log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); @@ -924,7 +924,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme boolean flag = false; String resp = null; try { - resp = acstowmsService.applyTask(request); + resp = acstowmsService.feedTaskStatus(request); log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); } catch (Exception e) { log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); @@ -991,7 +991,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme boolean flag = false; String resp = null; try { - resp = acstowmsService.applyTask(request); + resp = acstowmsService.feedTaskStatus(request); log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); } catch (Exception e) { log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); diff --git a/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index b380561..dfb2c9c 100644 --- a/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -71,22 +71,10 @@ spring: baseline-on-migrate: true redis: #数据库索引 + database: ${REDIS_DB:2} host: ${REDIS_HOST:127.0.0.1} port: ${REDIS_PORT:6379} # password: ${REDIS_PWD:} - #连接超时时间 - timeout: 5000 - redisson: - config: | - threads: 4 - nettyThreads: 4 - singleServerConfig: - database: 3 - connectionMinimumIdleSize: 8 - connectionPoolSize: 8 - address: redis://127.0.0.1:6379 - idleConnectionTimeout: 10000 - timeout: 3000 # 登录相关配置 login: 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 4dd423b..d23863c 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 @@ -52,8 +52,16 @@ public class AcsToWmsController { @ApiOperation("设备状态同步") //@SaCheckPermission("@el.check('schBaseTask:add')") @SaIgnore - public ResponseEntity status(@RequestBody Map param) { - schBasePointService.updateStatus(JSONObject.parseObject(JSON.toJSONString(param))); - return new ResponseEntity<>(HttpStatus.CREATED); + public ResponseEntity status(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.status(param), HttpStatus.OK); + } + + @PostMapping("/notify") + @Log("acs通知wms") + @ApiOperation("acs通知wms") + //@SaCheckPermission("@el.check('schBaseTask:add')") + @SaIgnore + public ResponseEntity notify(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.notify(param), HttpStatus.OK); } } 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 674f9e8..6b49d06 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 @@ -13,6 +13,9 @@ public interface AcsToWmsService { BaseResponse acsApply(JSONObject param); /** 任务反馈 */ - BaseResponse feedbackTaskStatus(JSONObject param); + BaseResponse status(JSONObject param); + + /** 任务反馈 */ + BaseResponse notify(JSONObject param); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java new file mode 100644 index 0000000..73d3c8d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java @@ -0,0 +1,26 @@ +package org.nl.wms.ext.service; + +import com.alibaba.fastjson.JSONObject; +import org.apache.poi.ss.formula.functions.T; +import org.nl.wms.ext.service.dto.ResultForAcs; +import org.nl.wms.ext.service.dto.to.wms.AcsResponse; +import org.nl.wms.sch.task_manage.AcsTaskDto; + +import java.util.List; + +/** + * @Author: lyd + * @Description: Wms请求Acs,统一管理与ACS对接的接口 + * @Date: 2023/6/30 + */ +public interface WmsToAcsService { + + /** + * 下发指令通知 + * 统一在这里维护 + * @param map: 任务链表 + * @return + */ + AcsResponse notifyAcs(JSONObject map); + +} 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 bf3614d..e909a03 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 @@ -29,6 +29,7 @@ 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; @@ -38,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -64,6 +66,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private TaskFactory taskFactory; @Autowired private ISysNoticeService noticeService; + @Autowired + private PointMapper pointMapper; // 初始化反射方法 @PostConstruct @@ -78,15 +82,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override public BaseResponse acsApply(JSONObject param) { String requestNo = param.getString("requestNo"); + String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名 String requestMethodName = param.getString("request_medthod_name"); BaseResponse result = BaseResponse.build(requestNo); + String device_code = param.getString("device_code"); + param.put("config_code",requestMethodCode); try { - String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名 - Method method = methodCache.get(StrUtil.toCamelCase(requestMethodCode)); - if (method == null) { - throw new BadRequestException("请求方法不存在"); + if(ObjectUtil.isEmpty(requestMethodCode)){ + throw new BadRequestException("任务类型不正确!requestMethodCode:"+requestMethodName+",device_code:"+device_code); } - result = (BaseResponse) method.invoke(this, param); + AbstractTask task = taskFactory.getTask(requestMethodCode); + // 执行创建任务 + task.apply(param); } catch (Exception e) { String message = ObjectUtil.isEmpty(e.getMessage()) ? ((InvocationTargetException) e).getTargetException().getMessage() @@ -106,7 +113,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * 任务反馈 */ @Override - public BaseResponse feedbackTaskStatus(JSONObject param) { + public BaseResponse status(JSONObject param) { String requestNo = param.getString("requestNo"); FeedBackTaskStatusRequest taskStatusRequest = param.toJavaObject(FeedBackTaskStatusRequest.class); String taskId = taskStatusRequest.getTask_id(); @@ -148,4 +155,28 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return BaseResponse.responseOk(requestNo, "任务状态反馈成功!"); } + /** + * acs反馈wms单独场景 + */ + @Override + public BaseResponse notify(JSONObject param) { + String requestNo = param.getString("requestNo"); + log.info("notifyAcs - 请求参数 {}", param); + Integer type=param.getInteger("type"); + switch(type) { + case 1: + //自动门反馈设备状态,将对应十个固化室工位的状态修改为传入状态 + String device_code = param.getString("device_code"); + String ghs_device_code="GHS"+device_code.substring(device_code.length()-2); + String state = param.getString("state"); + pointMapper.updatePointStatus(ghs_device_code,state); + break; + case 2: + break; + default: + break; + } + return BaseResponse.responseOk(requestNo, "反馈成功!"); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java new file mode 100644 index 0000000..4eb2436 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java @@ -0,0 +1,36 @@ +package org.nl.wms.ext.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.wms.AcsResponse; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.task.AcsUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Author: lyd + * @Description: WMS请求ACS - 业务开发 + * @Date: 2023/6/30 + */ +@Slf4j +@Service +public class WmsToAcsServiceImpl implements WmsToAcsService { + + + @Override + public AcsResponse notifyAcs(JSONObject map) { + String api = "api/wms/notify"; + AcsResponse resultForAcs = AcsUtil.notifyAcs2(api, map); + // 记录日志 +// interactRecordService.saveRecord("下发任务", list, resultForAcs, GeneralDefinition.LMS_ACS); + return resultForAcs; + } + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java index 9e7d1cb..a55b662 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java @@ -137,6 +137,9 @@ public class SchBaseVehiclematerialgroup implements Serializable { @ApiModelProperty(value = "修改时间") private String update_time; + @ApiModelProperty(value = "移动途径") + private String move_way; + @TableField(exist = false) private String material_name; 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 aca252c..6e665a2 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 @@ -5,6 +5,8 @@ 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.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -39,6 +41,8 @@ public abstract class AbstractTask { private ISchBasePointService pointService; @Autowired private IPdmBdWorkorderService workorderService; + @Autowired + private IMdBaseMaterialService materialService; /** * 任务创建 @@ -189,6 +193,9 @@ 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("material_type",mdBaseMaterial.getMaterial_code()); param.put("workorder_code", workorder.getWorkorder_code()); // 静置时间 // 设置任务数据 task.setVehicle_type(workorder.getVehicle_type()); 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 new file mode 100644 index 0000000..5c72138 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java @@ -0,0 +1,81 @@ +package org.nl.wms.sch.task_manage; + +/** + * @Author: lyd + * @Description: 通用定义类型数据 + * @Date: 2023/7/13 + */ +public class GeneralDefinition { + /** 未知 */ + public static final String UNKNOWN = "-"; + // 统一编码定义 + /** 窑自动任务开启 */ + public static final String AUTO_KILN_CALL = "auto_kiln_call"; + // 是否 + /**是/正确/可用... */ + public static final String YES = "1"; + /** 否/错误/不可用... */ + public static final String NO = "0"; + // 载具类型 + /** 料盅 */ + public static final String MATERIAL_CUP = "LZ"; + /** 钢托盘 */ + public static final String STEEL_TRAY = "GTP"; + // 账号定义 + /** acs系统 */ + public static final String ACS_ID = "2"; + /** acs系统 */ + public static final String ACS_NAME = "ACS系统"; + /** mes系统 */ + 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"; + /**ACS创建**/ + public static final String ACS_CREATION = "2"; + // 请求方向 + /**ACS->LMS**/ + public static final String ACS_LMS = "1"; + /**LMS->ACS**/ + public static final String LMS_ACS = "2"; + /**MES->LMS**/ + 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"; + /** 下输送线 */ + public static final String LOWER_CONVEYOR_LINE = "4"; + // 参数名称 + /** 是否连接 */ + public static final String IS_CONNECT_ACS = "is_connect_acs"; + /** ACS路径 */ + public static final String ACS_URL = "acs_url"; + /** 是否连接 */ + public static final String IS_CONNECT_MES = "is_connect_mes"; + /** MES路径 */ + public static final String MES_URL = "mes_url"; + // 完成/取消 + /** 任务完成 */ + public static final String TASK_FINISH = "任务完成"; + /** 任务取消 */ + public static final String TASK_CANCEL = "任务取消"; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java index 6471236..3e5ead6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task_manage.task; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSON; @@ -8,8 +9,11 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.config.SpringContextHolder; +import org.nl.system.service.param.dao.Param; import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.service.dto.to.wms.AcsResponse; import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.springframework.http.HttpStatus; import java.util.List; @@ -55,4 +59,47 @@ public class AcsUtil { throw new BadRequestException(result.getString("message"));*/ return result; } + + /** + * 新的请求方式:对象中包含数组 + * @param api + * @param object + * @return + * @param + */ + public static AcsResponse notifyAcs2(String api, T object) { + SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class); + //判断是否连接ACS系统 + Param isConnectAcs = sysParamService.findByCode(GeneralDefinition.IS_CONNECT_ACS); + if (ObjectUtil.isEmpty(isConnectAcs)) { + return AcsResponse.requestRefuse("参数表中:" + GeneralDefinition.IS_CONNECT_ACS + "不存在"); + } + String isConnect = isConnectAcs.getValue(); + //ACS地址:127.0.0.1:8010 + Param acsUrlObj = sysParamService.findByCode(GeneralDefinition.ACS_URL); + if (ObjectUtil.isEmpty(acsUrlObj)) { + return AcsResponse.requestRefuse("参数表中:" + GeneralDefinition.ACS_URL + "不存在"); + } + String acsUrl = acsUrlObj.getValue(); + JSONObject result; + if (StrUtil.equals(GeneralDefinition.NO, isConnect)) { + return AcsResponse.requestRefuse("未连接ACS!"); + } + String url = acsUrl + api; + log.info("下发acs任务的参数为:{}", object.toString()); + AcsResponse resultForAcs; + try { + String resultMsg = HttpRequest.post(url) + .body(JSON.toJSONString(object)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + resultForAcs = JSONObject.toJavaObject(result, AcsResponse.class); + } catch (Exception e) { + String msg = e.getMessage(); + //网络不通 + log.error("连接失败:{}", msg); + return AcsResponse.requestRefuse("网络不通,操作失败!"); + } + return resultForAcs; + } } 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 index c077e3a..c1190a8 100644 --- 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 @@ -20,6 +20,7 @@ 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; @@ -67,16 +68,17 @@ public class MJXLTask extends AbstractTask { .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { // 找终点 - SchBasePoint startPoint= pointService.getOne(new LambdaQueryWrapper() + 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"); + 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; } // 设置终点并修改创建成功状态 @@ -86,7 +88,8 @@ public class MJXLTask extends AbstractTask { taskService.update(task); //发起任务时先把点位占用,防止发起重复任务 - point.setVehicle_qty(point.getVehicle_qty()+1); + point.setIng_task_code(task.getTask_code()); + point.setVehicle_qty(point.getVehicle_qty() + 1); point.setVehicle_type(materialType); pointService.update(point); @@ -107,29 +110,31 @@ public class MJXLTask extends AbstractTask { * @return */ private SchBasePoint findNextPoint(SchBasePoint startPoint, JSONObject extGroupData) { - String regionCode=null; - String materialType=extGroupData.getString("material_type"); - if("TBX1".equals(startPoint.getRegion_code())){ + String regionCode = null; + String materialType = extGroupData.getString("material_type"); + if ("TBX1".equals(startPoint.getRegion_code())) { //TBX1找A区 - regionCode="GHS1"; + regionCode = "GHS1"; - }else if ("TBX2".equals(startPoint.getRegion_code())){ + } else if ("TBX2".equals(startPoint.getRegion_code())) { //TBX2找B区 - regionCode="GHS2"; + regionCode = "GHS2"; } - List schBasePointList=pointMapper.findPointByRegion(regionCode); - for (SchBasePoint schBasePoint:schBasePointList){ - if(!schBasePoint.getPoint_code().endsWith("01")&& - !schBasePoint.getPoint_code().endsWith("06")){ + List schBasePointList = pointMapper.findPointByRegion(regionCode,"2"); + for (SchBasePoint schBasePoint : schBasePointList) { + if (!schBasePoint.getPoint_code().endsWith("01") && + !schBasePoint.getPoint_code().endsWith("06")) { continue; } - if((schBasePoint.getVehicle_type()==null|| + if ((ObjectUtil.isEmpty(schBasePoint.getVehicle_type())|| materialType.equals(schBasePoint.getVehicle_type())) - &&schBasePoint.getVehicle_qty()<3){ + && "2".equals(schBasePoint.getPoint_status()) + && schBasePoint.getVehicle_qty() < 3) { + log.info("找到当前符合条件的点位{}",schBasePoint.getPoint_code()); return schBasePoint; } } - return new SchBasePoint(); + return null; } @Override @@ -152,9 +157,9 @@ public class MJXLTask extends AbstractTask { ? 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; + ? 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); @@ -171,11 +176,11 @@ public class MJXLTask extends AbstractTask { } // 终点解锁 endPointObj.setIng_task_code(""); - endPointObj.setVehicle_code(endPointObj.getVehicle_code()==null?"":endPointObj.getVehicle_code()+vehicle_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.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); groupEntity.setCreate_id("2"); groupEntity.setCreate_name("ACS"); groupEntity.setCreate_time(DateUtil.now()); @@ -195,7 +200,7 @@ public class MJXLTask extends AbstractTask { groupEntity.setVehicle_type(taskObj.getVehicle_type()); groupEntity.setPoint_code(startPoint); groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); + 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()); // 绑定 @@ -213,6 +218,11 @@ public class MJXLTask extends AbstractTask { // 终点解锁 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("任务取消"); 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 index e21d411..c2d526a 100644 --- 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 @@ -1,6 +1,7 @@ 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; @@ -8,6 +9,8 @@ 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.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -19,12 +22,16 @@ 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; @@ -58,83 +65,141 @@ public class GHSFMTask extends AbstractTask { @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired - private PointMapper yzMapper; + 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 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) { - List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - // 找终点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 + List schBasePointList = pointMapper.findPointByRegion("GHS","2"); + for (SchBasePoint schBasePoint : schBasePointList) { + if (!schBasePoint.getPoint_code().endsWith("01") && + !schBasePoint.getPoint_code().endsWith("06")) { 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); + 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; + } + } + } - //下发 -// this.renotifyAcs(task); + } + 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 nextRegionStr - * @param extGroupData + * @param schBasePoint + * @param endPoint * @return */ - private SchBasePoint findNextPoint(List nextRegionStr, JSONObject extGroupData) { - // 需要获取nextRegionStr - if (nextRegionStr.size() < 2) { - throw new BadRequestException("压制送料任务的配置文件有错!"); - } - String regionCode = nextRegionStr.get(0); - // 当前设备的工单 - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - if (one == null) { - throw new BadRequestException("压制机的工单不能为空!"); - } - // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 - if (one.getIs_urgent()) { - regionCode = nextRegionStr.get(1); // 去窑区 + 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; } - List pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( - MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); - return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; - // ?? -// LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); -// lam.eq(SchBasePoint::getRegion_code, regionCode) -// .eq(SchBasePoint::getPoint_type, ENTRANCE) -// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 -// .or() -// .eq(SchBasePoint::getIng_task_code, "")) -// .eq(SchBasePoint::getIs_used, true); -// List schBasePoints = pointService.list(lam); -// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + // 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) { @@ -146,18 +211,6 @@ public class GHSFMTask extends AbstractTask { 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); @@ -168,46 +221,41 @@ public class GHSFMTask extends AbstractTask { 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() + " -> " + 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); } - // 终点解锁 - endPointObj.setIng_task_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); - vehiclematerialgroupService.save(groupEntity); - // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); + taskObj.setGroup_id(group_id.toString()); taskObj.setRemark("任务完成"); } if (status.equals(TaskStatus.CANCELED)) { // 取消 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java index 56efa0c..5322087 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java @@ -11,6 +11,9 @@ import java.util.List; * @Date: 2023/10/9 */ public interface PointMapper { - List findPointByRegion(String regionCode); + List findPointByRegion(String regionCode,String point_state); + List findPointByPoint(String pointCode); + + void updatePointStatus(String device_code,String state); List findPointForYZSL(JSONObject param); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml index 8d525fc..56f464d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml @@ -6,7 +6,22 @@ p.* FROM `sch_base_point` p - WHERE p.region_code = #{regionCode} + WHERE p.region_code like CONCAT('%', #{regionCode}, '%') + and p.point_state = #{point_state} ORDER BY region_code + + + + + update sch_base_point set point_status = #{state} + where point_code like CONCAT('%', #{device_code}, '%') + 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 ae2aedf..4e51460 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 @@ -37,11 +37,12 @@ public class PointUtils { */ public static void clearPoint(SchBasePoint point) { 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(""); point.setVehicle_qty(0); + point.setVehicle_type(""); point.setUpdate_time(DateUtil.now()); pointService.updateById(point); }