Browse Source

1.ACS与LMS公共交互接口调整

2.满架下料实现及自测
3.固化室放满通知自动门
4.自动门反馈更改点位状态
psh
psh 2 years ago
parent
commit
4feb72cbb6
  1. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java
  2. 8
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_autodoor/StandardAutodoorDeviceDriver.java
  3. 7
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java
  4. 11
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/BaseRequest.java
  5. 9
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java
  6. 14
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java
  7. 10
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java
  8. 27
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java
  9. 34
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java
  10. 6
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
  11. 14
      acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
  12. 14
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java
  13. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java
  14. 26
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java
  15. 43
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java
  16. 36
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java
  17. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java
  18. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java
  19. 81
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java
  20. 47
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java
  21. 54
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java
  22. 260
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java
  23. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java
  24. 17
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml
  25. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java

2
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 * https://blog.csdn.net/moneyshi/article/details/82978073
*/ */
public enum RequestMethodEnum { public enum RequestMethodEnum {
apply_mjxl(1, "apply_mjxl", "涂板线满架下料","1"), apply_mjxl(1, "MJXLTask", "涂板线满架下料","1"),
feedback_task_status(2, "feedback_task_status", "反馈任务状态","1"); feedback_task_status(2, "feedback_task_status", "反馈任务状态","1");

8
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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.device.domain.Device; 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.ext.wms.service.AcsToWmsService;
import org.nl.acs.utils.ReadUtil; import org.nl.acs.utils.ReadUtil;
import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.DeviceService;
@ -113,7 +115,11 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem
} }
if (state != last_state) { if (state != last_state) {
//固化室状态变更后通知lms更新固化室状态 //固化室状态变更后通知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_action = action;
last_mode = mode; last_mode = mode;

7
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(); FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest();
request.setDevice_code(devicecode); request.setDevice_code(devicecode);
request.setVehicle_code(String.valueOf(barcode)); request.setVehicle_code(String.valueOf(barcode));
request.setTask_type(String.valueOf(type)); if (devicecode.startsWith("TBX")) {
request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode()); request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode());
request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName()); request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName());
}
String resp = acsToWmsService.applyTask(request); String resp = acsToWmsService.applyTask(request);
JSONObject res_jo = JSONObject.parseObject(resp); JSONObject res_jo = JSONObject.parseObject(resp);
if (StrUtil.equals(res_jo.getString("status"), "200")) { if (StrUtil.equals(res_jo.getString("status"), "200")) {

11
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<String, String> parameters = new HashMap(); private Map<String, String> parameters = new HashMap();
/**
* 任务类型
*/
private String type;
/**
* 设备状态
*/
private String state;
} }

9
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 cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -97,4 +98,12 @@ public class WmsToAcsController {
return new ResponseEntity<>(wmstoacsService.putPlusPullAction(whereJson), HttpStatus.OK); return new ResponseEntity<>(wmstoacsService.putPlusPullAction(whereJson), HttpStatus.OK);
} }
@PostMapping("/notify")
@Log("wms下发任务动作")
@ApiOperation("wms下发任务动作")
@SaIgnore
public ResponseEntity<Object> notify(@RequestBody JSONObject param) {
return new ResponseEntity<>(wmstoacsService.notifyAcs(param), HttpStatus.OK);
}
} }

14
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); 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);
} }

10
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 com.alibaba.fastjson.JSONObject;
import org.nl.acs.ext.wms.data.*; import org.nl.acs.ext.wms.data.*;
@ -83,4 +84,13 @@ public interface WmsToAcsService {
Map<String, Object> putPlusPullAction(String whereJson); Map<String, Object> putPlusPullAction(String whereJson);
/**
* 下发wms任务动作
*
* @param param 条件
* @return Map<String, Object>
*/
JSONObject notifyAcs(JSONObject param);
} }

27
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 { } finally {
MDC.remove(log_file_type); 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);
}
} }
} }

34
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_conveyor.HongXiangStationDeviceDriver;
import org.nl.acs.device_driver.basedriver.hongxiang_device.HongXiangConveyorDeviceDriver; 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.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.device_driver.basedriver.standard_conveyor_control_with_scanner.StandardCoveyorControlWithScannerDeviceDriver;
import org.nl.acs.ext.wms.data.*; import org.nl.acs.ext.wms.data.*;
import org.nl.acs.ext.wms.service.AcsToLiKuService; 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;
}
} }

6
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<TaskMapper, Task> impleme
boolean flag = false; boolean flag = false;
String resp = null; String resp = null;
try { try {
resp = acstowmsService.applyTask(request); resp = acstowmsService.feedTaskStatus(request);
log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp);
} catch (Exception e) { } catch (Exception e) {
log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage());
@ -924,7 +924,7 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
boolean flag = false; boolean flag = false;
String resp = null; String resp = null;
try { try {
resp = acstowmsService.applyTask(request); resp = acstowmsService.feedTaskStatus(request);
log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp);
} catch (Exception e) { } catch (Exception e) {
log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage());
@ -991,7 +991,7 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
boolean flag = false; boolean flag = false;
String resp = null; String resp = null;
try { try {
resp = acstowmsService.applyTask(request); resp = acstowmsService.feedTaskStatus(request);
log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp);
} catch (Exception e) { } catch (Exception e) {
log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage());

14
acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml

@ -71,22 +71,10 @@ spring:
baseline-on-migrate: true baseline-on-migrate: true
redis: redis:
#数据库索引 #数据库索引
database: ${REDIS_DB:2}
host: ${REDIS_HOST:127.0.0.1} host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379} port: ${REDIS_PORT:6379}
# password: ${REDIS_PWD:} # 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: login:

14
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java

@ -52,8 +52,16 @@ public class AcsToWmsController {
@ApiOperation("设备状态同步") @ApiOperation("设备状态同步")
//@SaCheckPermission("@el.check('schBaseTask:add')") //@SaCheckPermission("@el.check('schBaseTask:add')")
@SaIgnore @SaIgnore
public ResponseEntity<Object> status(@RequestBody Map param) { public ResponseEntity<Object> status(@RequestBody JSONObject param) {
schBasePointService.updateStatus(JSONObject.parseObject(JSON.toJSONString(param))); return new ResponseEntity<>(acsToWmsService.status(param), HttpStatus.OK);
return new ResponseEntity<>(HttpStatus.CREATED); }
@PostMapping("/notify")
@Log("acs通知wms")
@ApiOperation("acs通知wms")
//@SaCheckPermission("@el.check('schBaseTask:add')")
@SaIgnore
public ResponseEntity<Object> notify(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.notify(param), HttpStatus.OK);
} }
} }

5
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 acsApply(JSONObject param);
/** 任务反馈 */ /** 任务反馈 */
BaseResponse feedbackTaskStatus(JSONObject param); BaseResponse status(JSONObject param);
/** 任务反馈 */
BaseResponse notify(JSONObject param);
} }

26
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);
}

43
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.enums.WorkOrderStatusEnum;
import org.nl.wms.sch.task_manage.task.TaskFactory; 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.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper;
import org.nl.wms.util.PointUtils; import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils; import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -38,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -64,6 +66,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private TaskFactory taskFactory; private TaskFactory taskFactory;
@Autowired @Autowired
private ISysNoticeService noticeService; private ISysNoticeService noticeService;
@Autowired
private PointMapper pointMapper;
// 初始化反射方法 // 初始化反射方法
@PostConstruct @PostConstruct
@ -78,15 +82,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override @Override
public BaseResponse acsApply(JSONObject param) { public BaseResponse acsApply(JSONObject param) {
String requestNo = param.getString("requestNo"); String requestNo = param.getString("requestNo");
String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名
String requestMethodName = param.getString("request_medthod_name"); String requestMethodName = param.getString("request_medthod_name");
BaseResponse result = BaseResponse.build(requestNo); BaseResponse result = BaseResponse.build(requestNo);
String device_code = param.getString("device_code");
param.put("config_code",requestMethodCode);
try { try {
String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名 if(ObjectUtil.isEmpty(requestMethodCode)){
Method method = methodCache.get(StrUtil.toCamelCase(requestMethodCode)); throw new BadRequestException("任务类型不正确!requestMethodCode:"+requestMethodName+",device_code:"+device_code);
if (method == null) {
throw new BadRequestException("请求方法不存在");
} }
result = (BaseResponse) method.invoke(this, param); AbstractTask task = taskFactory.getTask(requestMethodCode);
// 执行创建任务
task.apply(param);
} catch (Exception e) { } catch (Exception e) {
String message = ObjectUtil.isEmpty(e.getMessage()) String message = ObjectUtil.isEmpty(e.getMessage())
? ((InvocationTargetException) e).getTargetException().getMessage() ? ((InvocationTargetException) e).getTargetException().getMessage()
@ -106,7 +113,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
* 任务反馈 * 任务反馈
*/ */
@Override @Override
public BaseResponse feedbackTaskStatus(JSONObject param) { public BaseResponse status(JSONObject param) {
String requestNo = param.getString("requestNo"); String requestNo = param.getString("requestNo");
FeedBackTaskStatusRequest taskStatusRequest = param.toJavaObject(FeedBackTaskStatusRequest.class); FeedBackTaskStatusRequest taskStatusRequest = param.toJavaObject(FeedBackTaskStatusRequest.class);
String taskId = taskStatusRequest.getTask_id(); String taskId = taskStatusRequest.getTask_id();
@ -148,4 +155,28 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return BaseResponse.responseOk(requestNo, "任务状态反馈成功!"); 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, "反馈成功!");
}
} }

36
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;
}
}

3
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 = "修改时间") @ApiModelProperty(value = "修改时间")
private String update_time; private String update_time;
@ApiModelProperty(value = "移动途径")
private String move_way;
@TableField(exist = false) @TableField(exist = false)
private String material_name; private String material_name;

7
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.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException; 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.IPdmBdWorkorderService;
import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.ISchBasePointService;
@ -39,6 +41,8 @@ public abstract class AbstractTask {
private ISchBasePointService pointService; private ISchBasePointService pointService;
@Autowired @Autowired
private IPdmBdWorkorderService workorderService; private IPdmBdWorkorderService workorderService;
@Autowired
private IMdBaseMaterialService materialService;
/** /**
* 任务创建 * 任务创建
@ -189,6 +193,9 @@ public abstract class AbstractTask {
if (ObjectUtil.isEmpty(workorder)) { if (ObjectUtil.isEmpty(workorder)) {
throw new BadRequestException("设备" + one.getPoint_code() + "工单未生产!"); throw new BadRequestException("设备" + one.getPoint_code() + "工单未生产!");
} }
MdBaseMaterial mdBaseMaterial=materialService.getOne(new LambdaQueryWrapper<MdBaseMaterial>()
.eq(MdBaseMaterial::getMaterial_id,workorder.getMaterial_id()));
param.put("material_type",mdBaseMaterial.getMaterial_code());
param.put("workorder_code", workorder.getWorkorder_code()); // 静置时间 param.put("workorder_code", workorder.getWorkorder_code()); // 静置时间
// 设置任务数据 // 设置任务数据
task.setVehicle_type(workorder.getVehicle_type()); task.setVehicle_type(workorder.getVehicle_type());

81
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 = "任务取消";
}

47
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; package org.nl.wms.sch.task_manage.task;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
@ -8,8 +9,11 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder; import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl; 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.AcsTaskDto;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import java.util.List; import java.util.List;
@ -55,4 +59,47 @@ public class AcsUtil {
throw new BadRequestException(result.getString("message"));*/ throw new BadRequestException(result.getString("message"));*/
return result; return result;
} }
/**
* 新的请求方式对象中包含数组
* @param api
* @param object
* @return
* @param <T>
*/
public static <T> 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;
}
} }

54
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.AbstractTask;
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; 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.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.TaskType;
import org.nl.wms.sch.task_manage.task.core.TaskStatus; 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.sch.task_manage.task.tasks.mapper.PointMapper;
@ -67,16 +68,17 @@ public class MJXLTask extends AbstractTask {
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) { for (SchBaseTask task : tasks) {
// 找终点 // 找终点
SchBasePoint startPoint= pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, task.getPoint_code1())); .eq(SchBasePoint::getPoint_code, task.getPoint_code1()));
String extGroupData = task.getExt_group_data(); String extGroupData = task.getExt_group_data();
JSONObject jsonObject = JSONObject.parseObject(extGroupData); JSONObject jsonObject = JSONObject.parseObject(extGroupData);
String materialType=jsonObject.getString("material_type"); String materialType = jsonObject.getString("material_type");
SchBasePoint point = findNextPoint(startPoint, jsonObject); SchBasePoint point = findNextPoint(startPoint, jsonObject);
if (ObjectUtil.isEmpty(point)) { if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!"); task.setRemark("未找到所需点位!");
taskService.update(task); taskService.update(task);
// 消息通知 // 消息通知
log.info("未找到当前符合条件的点位materialType:{},",materialType);
continue; continue;
} }
// 设置终点并修改创建成功状态 // 设置终点并修改创建成功状态
@ -86,7 +88,8 @@ public class MJXLTask extends AbstractTask {
taskService.update(task); 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); point.setVehicle_type(materialType);
pointService.update(point); pointService.update(point);
@ -107,29 +110,31 @@ public class MJXLTask extends AbstractTask {
* @return * @return
*/ */
private SchBasePoint findNextPoint(SchBasePoint startPoint, JSONObject extGroupData) { private SchBasePoint findNextPoint(SchBasePoint startPoint, JSONObject extGroupData) {
String regionCode=null; String regionCode = null;
String materialType=extGroupData.getString("material_type"); String materialType = extGroupData.getString("material_type");
if("TBX1".equals(startPoint.getRegion_code())){ if ("TBX1".equals(startPoint.getRegion_code())) {
//TBX1找A区 //TBX1找A区
regionCode="GHS1"; regionCode = "GHS1";
}else if ("TBX2".equals(startPoint.getRegion_code())){ } else if ("TBX2".equals(startPoint.getRegion_code())) {
//TBX2找B区 //TBX2找B区
regionCode="GHS2"; regionCode = "GHS2";
} }
List<SchBasePoint> schBasePointList=pointMapper.findPointByRegion(regionCode); List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode,"2");
for (SchBasePoint schBasePoint:schBasePointList){ for (SchBasePoint schBasePoint : schBasePointList) {
if(!schBasePoint.getPoint_code().endsWith("01")&& if (!schBasePoint.getPoint_code().endsWith("01") &&
!schBasePoint.getPoint_code().endsWith("06")){ !schBasePoint.getPoint_code().endsWith("06")) {
continue; continue;
} }
if((schBasePoint.getVehicle_type()==null|| if ((ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||
materialType.equals(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 schBasePoint;
} }
} }
return new SchBasePoint(); return null;
} }
@Override @Override
@ -152,9 +157,9 @@ public class MJXLTask extends AbstractTask {
? taskObj.getVehicle_code() ? taskObj.getVehicle_code()
: IdUtil.getSnowflake(1, 1).nextIdStr(); : IdUtil.getSnowflake(1, 1).nextIdStr();
PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
: null; : null;
String startPoint = taskObj.getPoint_code1(); // 获取起点 String startPoint = taskObj.getPoint_code1(); // 获取起点
String endPoint = taskObj.getPoint_code2(); // 获取终点 String endPoint = taskObj.getPoint_code2(); // 获取终点
SchBasePoint startPointObj = pointService.getById(startPoint); SchBasePoint startPointObj = pointService.getById(startPoint);
@ -171,11 +176,11 @@ public class MJXLTask extends AbstractTask {
} }
// 终点解锁 // 终点解锁
endPointObj.setIng_task_code(""); 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); pointService.update(endPointObj);
// 要把数据存到组盘表 -> 改造公共方法,返回id // 要把数据存到组盘表 -> 改造公共方法,返回id
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); 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_id("2");
groupEntity.setCreate_name("ACS"); groupEntity.setCreate_name("ACS");
groupEntity.setCreate_time(DateUtil.now()); groupEntity.setCreate_time(DateUtil.now());
@ -195,7 +200,7 @@ public class MJXLTask extends AbstractTask {
groupEntity.setVehicle_type(taskObj.getVehicle_type()); groupEntity.setVehicle_type(taskObj.getVehicle_type());
groupEntity.setPoint_code(startPoint); groupEntity.setPoint_code(startPoint);
groupEntity.setPoint_name(startPointObj.getPoint_name()); 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.setInstorage_time(DateUtil.now());
groupEntity.setTask_code(taskObj.getTask_code()); groupEntity.setTask_code(taskObj.getTask_code());
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
@ -213,6 +218,11 @@ public class MJXLTask extends AbstractTask {
// 终点解锁 // 终点解锁
if (ObjectUtil.isNotEmpty(endPointObj)) { if (ObjectUtil.isNotEmpty(endPointObj)) {
endPointObj.setIng_task_code(""); endPointObj.setIng_task_code("");
//任务取消把原先占用的位置释放
endPointObj.setVehicle_qty(endPointObj.getVehicle_qty()-1);
if(endPointObj.getVehicle_qty()<=0){
endPointObj.setVehicle_type(null);
}
pointService.update(endPointObj); pointService.update(endPointObj);
} }
taskObj.setRemark("任务取消"); taskObj.setRemark("任务取消");

260
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; package org.nl.wms.sch.task_manage.task.tasks.ghs;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -8,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.config.MapOf; 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.IPdmBdWorkorderService;
import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; 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.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask; 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.GroupBindMaterialStatusEnum;
import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; 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.TaskType;
import org.nl.wms.sch.task_manage.task.core.TaskStatus; 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.sch.task_manage.task.tasks.mapper.PointMapper;
import org.nl.wms.util.PointUtils; import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -58,83 +65,141 @@ public class GHSFMTask extends AbstractTask {
@Autowired @Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@Autowired @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-56-7-10的任务优先级为8最高
*/
@Override @Override
// @Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
protected void create() throws BadRequestException { protected void create() throws BadRequestException {
// 获取任务 List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion("GHS","2");
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); for (SchBasePoint schBasePoint : schBasePointList) {
// 配置信息 if (!schBasePoint.getPoint_code().endsWith("01") &&
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() !schBasePoint.getPoint_code().endsWith("06")) {
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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);
// 消息通知
continue; continue;
} }
// 设置终点并修改创建成功状态 if (schBasePoint.getVehicle_qty()==3&&ObjectUtil.isEmpty(schBasePoint.getIng_task_code())) {
task.setPoint_code2(point.getPoint_code()); log.info("固化室对接位{}已经放满,开始进行后续判断",schBasePoint.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode()); String first=schBasePoint.getPoint_code().substring(0,schBasePoint.getPoint_code().length()-2);
task.setRemark(""); String last=schBasePoint.getPoint_code().substring(schBasePoint.getPoint_code().length()-1);
taskService.update(task); String middle=schBasePoint.getPoint_code().substring(schBasePoint.getPoint_code().length()-4,schBasePoint.getPoint_code().length()-2);
boolean flag=false;
point.setIng_task_code(task.getTask_code()); String pointCode=null;
pointService.update(point); //倒叙检查是否有符合要求的终点
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 schBasePoint
* @param extGroupData * @param endPoint
* @return * @return
*/ */
private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) { private void createTask(SchBasePoint schBasePoint,String endPoint) {
// 需要获取nextRegionStr // 申请任务
if (nextRegionStr.size() < 2) { SchBaseTask task = new SchBaseTask(); // 任务实体
throw new BadRequestException("压制送料任务的配置文件有错!"); String apply_point_code =schBasePoint.getPoint_code(); // 请求点
} String config_code = "GHSFMTask";
String regionCode = nextRegionStr.get(0); // 1、校验数据
// 当前设备的工单 SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
String workorderCode = extGroupData.getString("workorder_code"); .eq(SchBaseTaskconfig::getConfig_code, config_code));
PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!");
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() // 最大任务数
.eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) Integer tcmn = taskConfig.getTask_create_max_num();
: null; // 获取执行中的任务
if (one == null) { List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(
throw new BadRequestException("压制机的工单不能为空!"); taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction());
}
// 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn,
if (one.getIs_urgent()) { "该点位申请的任务未完成数已超过上限,无法申请任务");
regionCode = nextRegionStr.get(1); // 去窑区 // 获取对接位点位对象
SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, apply_point_code));
// 校验是否需要自动agv
if (!pointObj.getIs_auto()) {
// 如果不需要自动,则不创建任务
return;
} }
List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( // 2、创建申请任务
MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); task.setConfig_code(config_code);
return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; task.setCreate_mode(GeneralDefinition.ACS_CREATION);
// ?? task.setVehicle_code(schBasePoint.getVehicle_code());
// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); task.setVehicle_qty(schBasePoint.getVehicle_qty());
// lam.eq(SchBasePoint::getRegion_code, regionCode) task.setTask_status(TaskStatus.APPLY.getCode());
// .eq(SchBasePoint::getPoint_type, ENTRANCE) task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码
// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 task.setPoint_code2(endPoint);
// .or() task.setTask_status(TaskStatus.CREATED.getCode());
// .eq(SchBasePoint::getIng_task_code, "")) task.setRemark("");
// .eq(SchBasePoint::getIs_used, true); // 设置起/终点
// List<SchBasePoint> schBasePoints = pointService.list(lam); this.setTaskPoint(taskConfig, task, apply_point_code);
// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; taskService.create(task);
//下发
this.renotifyAcs(task);
} }
/**
* 修改任务状态
* 1.任务完成时无需再次组盘将点位表起点货位三个组盘信息移动到终点
* 2.组盘表中三个点位增加移动动作并且修改当前点位到目标地点
* 3.
*
* @param task_code
* @param status
* @return
*/
@Override @Override
// @Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
protected void updateStatus(String task_code, TaskStatus status) { 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())) { if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!"); 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<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
: null;
String startPoint = taskObj.getPoint_code1(); // 获取起点 String startPoint = taskObj.getPoint_code1(); // 获取起点
String endPoint = taskObj.getPoint_code2(); // 获取终点 String endPoint = taskObj.getPoint_code2(); // 获取终点
SchBasePoint startPointObj = pointService.getById(startPoint); SchBasePoint startPointObj = pointService.getById(startPoint);
@ -168,46 +221,41 @@ public class GHSFMTask extends AbstractTask {
taskObj.setRemark("执行中"); taskObj.setRemark("执行中");
} }
if (status.equals(TaskStatus.FINISHED)) { // 完成 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<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList());
for(String vehicleCode:vehicleCodeList) {
SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
.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)) { if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtils.clearPoint(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.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setGroup_id(groupEntity.getGroup_id()); taskObj.setGroup_id(group_id.toString());
taskObj.setRemark("任务完成"); taskObj.setRemark("任务完成");
} }
if (status.equals(TaskStatus.CANCELED)) { // 取消 if (status.equals(TaskStatus.CANCELED)) { // 取消

5
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 * @Date: 2023/10/9
*/ */
public interface PointMapper { public interface PointMapper {
List<SchBasePoint> findPointByRegion(String regionCode); List<SchBasePoint> findPointByRegion(String regionCode,String point_state);
List<SchBasePoint> findPointByPoint(String pointCode);
void updatePointStatus(String device_code,String state);
List<SchBasePoint> findPointForYZSL(JSONObject param); List<SchBasePoint> findPointForYZSL(JSONObject param);
} }

17
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml

@ -6,7 +6,22 @@
p.* p.*
FROM FROM
`sch_base_point` p `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 ORDER BY region_code
</select> </select>
<select id="findPointByRegion" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
FROM
`sch_base_point` p
WHERE p.point_code like CONCAT('%', #{pointCode}, '%')
ORDER BY point_code
</select>
<update id="updatePointStatus">
update sch_base_point set point_status = #{state}
where point_code like CONCAT('%', #{device_code}, '%')
</update>
</mapper> </mapper>

3
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) { public static void clearPoint(SchBasePoint point) {
SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class); 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_type("");
point.setVehicle_code(""); point.setVehicle_code("");
point.setIng_task_code(""); point.setIng_task_code("");
point.setVehicle_qty(0); point.setVehicle_qty(0);
point.setVehicle_type("");
point.setUpdate_time(DateUtil.now()); point.setUpdate_time(DateUtil.now());
pointService.updateById(point); pointService.updateById(point);
} }

Loading…
Cancel
Save