Browse Source

rev: 混碾下料任务修改、物料修改、工单修改

master
李永德 2 years ago
parent
commit
39d6b27c95
  1. BIN
      lms/nladmin-system/doc/wms.xls
  2. 6
      lms/nladmin-system/nlsso-server/pom.xml
  3. 11
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java
  4. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java
  5. 189
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  6. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java
  7. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java
  8. 8
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java
  9. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml
  10. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java
  11. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java
  12. 58
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java
  13. 108
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/HLYZTask.java
  14. 103
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java
  15. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java
  16. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml
  17. 8
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java
  18. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java
  19. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java
  20. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java
  21. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java
  22. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java
  23. 14
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml
  24. 38
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
  25. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java
  26. 21
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml
  27. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java
  28. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java
  29. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java
  30. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java
  31. 30
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java
  32. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.java
  33. 10
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.xml
  34. 11
      lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
  35. 12
      lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml
  36. 2
      lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
  37. 37
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java
  38. 6
      lms/nladmin-ui/src/views/wms/basedata/material/index.vue
  39. 9
      lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue
  40. 2
      lms/nladmin-ui/src/views/wms/sch/group/MaterialDialog.vue

BIN
lms/nladmin-system/doc/wms.xls

Binary file not shown.

6
lms/nladmin-system/nlsso-server/pom.xml

@ -451,6 +451,12 @@
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.4</version>
</dependency>
</dependencies>

11
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java

@ -26,9 +26,15 @@ public class MdBaseMaterial implements Serializable {
@ApiModelProperty(value = "物料标识")
private String material_id;
@ApiModelProperty(value = "物料编码")
@ApiModelProperty(value = "成品物料编码")
private String material_code;
@ApiModelProperty(value = "半成品物料编码")
private String half_material_code;
@ApiModelProperty(value = "原材料物料编码")
private String raw_material_code;
@ApiModelProperty(value = "物料名称 ")
private String material_name;
@ -41,6 +47,9 @@ public class MdBaseMaterial implements Serializable {
@ApiModelProperty(value = "静置时间(分钟)")
private Integer standing_time;
@ApiModelProperty(value = "冷却时间(分钟)")
private Integer cooling_time;
@ApiModelProperty(value = "车间编码")
private String workshop_code;

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java

@ -10,9 +10,9 @@ import lombok.Data;
@Data
public class SignalData {
private String code;
private String code; // to_command
private String value;
private String value; // 1
}

189
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java

@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.config.MapOf;
@ -47,6 +48,8 @@ import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.CommonUtils;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -54,6 +57,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @Author: lyd
@ -87,6 +91,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private IMdBaseMaterialService materialService;
@Autowired
private IPdmBdProductionProcessTrackingService processTrackingService;
@Autowired
private RedissonClient redissonClient;
@Override
public BaseResponse acsApply(JSONObject param) {
@ -116,86 +122,171 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
/** 任务:申请补满料盅托盘(叫料) */
/**
* 任务申请补满料盅托盘(叫料)
* @see org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest
* @param param: ApplyTaskRequest的json形式
* @return
*/
@SneakyThrows
public ApplyTaskResponse applyPutFullVehicle(JSONObject param) {
// 找到当前的设备
String deviceCode = param.getString("device_code");
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String requestNo = param.getString("requestNo");
String configCode = basePoint.getRegion_code() + "QLTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
RLock lock = redissonClient.getLock(deviceCode);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String configCode = basePoint.getRegion_code() + "QLTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return ApplyTaskResponse.responseOk(requestNo);
}
/** 任务:申请补空料盅托盘(叫空盘) */
/**
* 任务申请补空料盅托盘(叫空盘)
* @see org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest
* @param param: ApplyTaskRequest的json形式
* @return
*/
@SneakyThrows
public ApplyTaskResponse applyPutEmptyVehicle(JSONObject param) {
// 找到当前的设备
String deviceCode = param.getString("device_code");
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String requestNo = param.getString("requestNo");
String configCode = basePoint.getRegion_code() + "QKTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
RLock lock = redissonClient.getLock(deviceCode);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String configCode = basePoint.getRegion_code() + "QKTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return ApplyTaskResponse.responseOk(requestNo);
}
/** 任务:申请取走空料盅托盘(送空盘) */
/**
* 任务申请取走空料盅托盘(送空盘)
* @see org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest
* @param param: ApplyTaskRequest的json形式
* @return
*/
@SneakyThrows
public ApplyTaskResponse applyTakeEmptyVehicle(JSONObject param) {
// 找到当前的设备
String deviceCode = param.getString("device_code");
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String requestNo = param.getString("requestNo");
String configCode = basePoint.getRegion_code() + "SKTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
RLock lock = redissonClient.getLock(deviceCode);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String configCode = basePoint.getRegion_code() + "SKTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return ApplyTaskResponse.responseOk(requestNo);
}
/** 任务:申请取走满料盅托盘(入库) */
/**
* 任务申请取走满料盅托盘入库
* @see org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest
* @param param: ApplyTaskRequest的json形式
* @return
*/
@SneakyThrows
public ApplyTaskResponse applyTakeFullVehicle(JSONObject param) {
// 找到当前的设备
String deviceCode = param.getString("device_code");
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String requestNo = param.getString("requestNo");
String configCode = basePoint.getRegion_code() + "MLTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
RLock lock = redissonClient.getLock(deviceCode);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String configCode = basePoint.getRegion_code() + "MLTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return ApplyTaskResponse.responseOk(requestNo);
}
/** 申请强制取走满料盅托盘(强制入库) */
/**
* 任务申请强制取走满料盅托盘(强制入库)
* @see org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest
* @param param: ApplyTaskRequest的json形式
* @return
*/
@SneakyThrows
public ApplyTaskResponse applyForceTakeFullVehicle(JSONObject param) {
String deviceCode = param.getString("device_code");
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String requestNo = param.getString("requestNo");
String configCode = basePoint.getRegion_code() + "QZRKTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
RLock lock = redissonClient.getLock(deviceCode);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBasePoint basePoint = pointService.getById(deviceCode);
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位错误!");
}
String configCode = basePoint.getRegion_code() + "QZRKTask";
// 组织参数
param.put("config_code", configCode);
taskService.apply(param);
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return ApplyTaskResponse.responseOk(requestNo);
}
/** 申请强制满托入缓存 todo: 暂时 */
/**
* 任务申请强制满托入缓存 todo: 暂时
* @see org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest
* @param param: ApplyTaskRequest的json形式
* @return
*/
public ApplyTaskResponse applyForceTakeFullVehicleInStorage(JSONObject param) {
// 找到当前的设备
String deviceCode = param.getString("device_code");
@ -290,8 +381,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
case GeneralDefinition.GZY: // 如果是入窑口就是记录数据
return this.recordKilnTime(baseRequest); // 直接返回
default:
return (ApplyTaskResponse) ApplyTaskResponse.responseError(baseRequest.getRequestNo(),
"参数错误");
return (ApplyTaskResponse) ApplyTaskResponse.responseError(baseRequest.getRequestNo(),"参数错误");
}
}
@ -384,6 +474,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
* @param param
* @return
*/
@Deprecated
@Transactional(rollbackFor = Exception.class)
public BaseResponse pressRequestMaterial(JSONObject param) { // (公共接口进来)只是给我一个下料位(中间位置)
String requestNo = param.getString("requestNo");
@ -405,7 +496,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 获取原材料物料
PdmBdRequestMaterialRecord requestMaterialRecord = new PdmBdRequestMaterialRecord();
requestMaterialRecord.setRecord_id(IdUtil.getSnowflake(1,1).nextIdStr());
requestMaterialRecord.setMaterial_id(workOrder.getRaw_material_id());
// requestMaterialRecord.setMaterial_id(workOrder.getRaw_material_id());
requestMaterialRecord.setWorkorder_id(workOrder.getWorkorder_id());
requestMaterialRecord.setDevice_code(parentPointCode);
requestMaterialRecord.setCreate_time(DateUtil.now());

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java

@ -2,8 +2,8 @@ package org.nl.wms.ext.record.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.record.service.dao.SysInteractRecord;
@ -46,5 +46,5 @@ public interface ISysInteractRecordService extends IService<SysInteractRecord> {
/**
* 创建记录
*/
void saveRecord(JSONObject param, BaseResponse response, String direction);
void saveRecord(Object request, BaseResponse response, String direction);
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java

@ -63,7 +63,7 @@ public class SysInteractRecordServiceImpl extends ServiceImpl<SysInteractRecordM
}
@Override
public void saveRecord(JSONObject param, BaseResponse response, String direction) {
public void saveRecord(Object param, BaseResponse response, String direction) {
SysInteractRecord entity = new SysInteractRecord();
entity.setInteract_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setInteract_code(response.getRequestNo());

8
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java

@ -40,7 +40,7 @@ public class PdmBdWorkorder implements Serializable {
private String material_id;
@ApiModelProperty(value = "原材料物料标识")
private String raw_material_id;
private String raw_material_code;
@ApiModelProperty(value = "载具类型")
private String vehicle_type;
@ -122,11 +122,7 @@ public class PdmBdWorkorder implements Serializable {
@TableField(exist = false)
private String material_spec;
@TableField(exist = false)
private String raw_material_name;
@TableField(exist = false)
private String raw_material_code;
private String half_material_code;
}

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml

@ -6,11 +6,9 @@
,ma.material_name
,ma.material_code
,ma.material_spec
,ma2.material_name AS raw_material_name
,ma2.material_code AS raw_material_code
,ma.half_material_code
FROM pdm_bd_workorder wo
LEFT JOIN md_base_material ma ON ma.material_id = wo.material_id
LEFT JOIN md_base_material ma2 ON ma2.material_id = wo.raw_material_id
<where>
<if test="query.more_order_status != null and query.more_order_status != ''">
workorder_status IN

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java

@ -31,6 +31,9 @@ public class SchBaseVehiclematerialgroup implements Serializable {
@ApiModelProperty(value = "物料标识")
private String material_id;
@ApiModelProperty(value = "冗余-半成品/泥料")
private String redundance_material_code;
@ApiModelProperty(value = "载具类型")
private String vehicle_type;

9
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java

@ -10,9 +10,9 @@ public class GeneralDefinition {
/** 窑自动任务开启 */
public static final String AUTO_KILN_CALL = "auto_kiln_call";
// 是否
/**是 */
/**是/正确/可用... */
public static final String YES = "1";
/** 否 */
/** 否/错误/不可用... */
public static final String NO = "0";
// 载具类型
/** 料盅 */
@ -57,4 +57,9 @@ public class GeneralDefinition {
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";
}

58
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java

@ -1,13 +1,18 @@
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.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
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.record.service.ISysInteractRecordService;
import org.nl.wms.ext.record.service.impl.SysInteractRecordServiceImpl;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.springframework.http.HttpStatus;
@ -19,7 +24,53 @@ import java.util.List;
*/
@Slf4j
public class AcsUtil {
public static JSONObject notifyAcs(String api, List<AcsTaskDto> list) {
/**
* 统一多数据入口
* @param api
* @param list
* @return
* @param <T>
*/
public static <T> JSONObject notifyAcs(String api, List<T> list) {
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
//判断是否连接ACS系统
Param isConnectAcs = sysParamService.findByCode("IS_CONNECT_ACS");
if (ObjectUtil.isEmpty(isConnectAcs)) {
throw new BadRequestException("参数表中:IS_CONNECT_ACS不存在");
}
String isConnect = isConnectAcs.getValue();
JSONObject result = new JSONObject();
if (StrUtil.equals(GeneralDefinition.NO, isConnect)) {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "未连接ACS!");
result.put("data", new JSONObject());
return result;
}
//ACS地址:127.0.0.1:8010
Param acsUrlObj = sysParamService.findByCode("ACS_URL");
if (ObjectUtil.isEmpty(acsUrlObj)) {
throw new BadRequestException("参数表中:ACS_URL不存在");
}
String acsUrl = acsUrlObj.getValue();
String url = acsUrl + api;
log.info("下发acs任务的参数为:{}", list.toString());
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(list))
.execute().body();
result = JSONObject.parseObject(resultMsg);
} catch (Exception e) {
String msg = e.getMessage();
//ConnectException: Connection refused: connect
//网络不通
log.error("连接失败:{}", msg);
result.put("status", HttpStatus.BAD_REQUEST);
result.put("message", "网络不通,操作失败!");
result.put("data", new JSONObject());
}
return result;
}
public static <T> JSONObject notifyAcs(String api, T object) {
//判断是否连接ACS系统
String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_ACS").getValue();
JSONObject result = new JSONObject();
@ -33,10 +84,10 @@ public class AcsUtil {
String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("ACS_URL").getValue();
String url = acsUrl + api;
log.info("下发acs任务的参数为:{}", list.toString());
log.info("下发acs任务的参数为:{}", object.toString());
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(list))
.body(String.valueOf(object))
.execute().body();
result = JSONObject.parseObject(resultMsg);
} catch (Exception e) {
@ -48,6 +99,7 @@ public class AcsUtil {
result.put("message", "网络不通,操作失败!");
result.put("data", new JSONObject());
}
// 记录交互表
return result;
}
}

108
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/HLYZTask.java

@ -0,0 +1,108 @@
//package org.nl.wms.sch.task_manage.task.tasks.auto;
//
//import cn.hutool.core.util.ObjectUtil;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import org.nl.common.exception.BadRequestException;
//import org.nl.system.service.param.ISysParamService;
//import org.nl.system.service.param.dao.Param;
//import org.nl.wms.sch.point.service.ISchBasePointService;
//import org.nl.wms.sch.point.service.dao.SchBasePoint;
//import org.nl.wms.sch.task.service.ISchBaseTaskService;
//import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
//import org.nl.wms.sch.task.service.dao.SchBaseTask;
//import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
//import org.nl.wms.sch.task_manage.AbstractTask;
//import org.nl.wms.sch.task_manage.GeneralDefinition;
//import org.nl.wms.sch.task_manage.task.TaskType;
//import org.nl.wms.sch.task_manage.task.core.TaskStatus;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.Arrays;
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * @Author: lyd
// * @Description: 混料压制物料输送任务
// * @Date: 2023/7/27
// */
//@Component
//@TaskType("HLYZTask")
//public class HLYZTask extends AbstractTask {
// private static String TASK_CONFIG_CODE = "HLYZTask";
// @Autowired
// private ISchBasePointService pointService;
// @Autowired
// private ISchBaseTaskService taskService;
// @Autowired
// private ISchBaseTaskconfigService taskConfigService;
// @Autowired
// private ISysParamService paramService;
// @Override
// protected void create() throws BadRequestException {
//
// }
//
// @Override
// protected void autoCreate() {
// // 自动创建任务
//// Param autoKilnCall = paramService.findByCode(GeneralDefinition.AUTO_KILN_CALL);
//// if (autoKilnCall.getValue().equals(GeneralDefinition.NO)) {
//// return;
//// }
// // 判断当前点位有没有任务执行
// List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(TASK_CONFIG_CODE);
// if (unFinishTasksByTaskConfig.size() > 0) {
// // 有任务在执行就不创建
// return;
// }
// // 获取任务配置
// SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
// .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
// // 创建任务
// SchBaseTask task = new SchBaseTask(); // 任务实体
// // 2、创建申请任务
// task.setConfig_code(TASK_CONFIG_CODE);
// task.setCreate_mode(GeneralDefinition.AUTO_CREATION);
// task.setTask_status(TaskStatus.APPLY.getCode());
// task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码
// // 设置起/终点
// this.setTaskPoint(taskConfig, task, "***");
// // 找起点
// List<String> nextRegionStr = Arrays
// .stream(taskConfig.getNext_region_str().split(","))
// .collect(Collectors.toList());
// SchBasePoint point = findNextPoint(nextRegionStr);
// if (ObjectUtil.isEmpty(point)) {
// task.setRemark("未找到所需点位!");
// taskService.create(task);
// // 消息通知
// return;
// }
// // 设置终点并修改创建成功状态
// task.setPoint_code2(point.getPoint_code());
// task.setRemark("");
// task.setTask_status(TaskStatus.CREATED.getCode());
// taskService.create(task);
// point.setIng_task_code(task.getTask_code());
// pointService.update(point);
// //下发
//// this.renotifyAcs(task);
// }
//
// @Override
// protected void updateStatus(String task_code, TaskStatus status) {
//
// }
//
// @Override
// public void forceFinish(String task_code) {
//
// }
//
// @Override
// public void cancel(String task_code) {
//
// }
//}

103
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java

@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
@ -12,11 +13,14 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.TaskType;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.dtk.mapper.DTKMapper;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -40,6 +44,8 @@ public class CTQKTask extends AbstractTask {
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISysNoticeService noticeService;
@Autowired
private DTKMapper dtkMapper;
@Override
protected void create() throws BadRequestException {
@ -49,15 +55,15 @@ public class CTQKTask extends AbstractTask {
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task); // 修改修改者
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList());
// 找起点
String extGroupData = task.getExt_group_data();
JSONObject jsonObject = JSONObject.parseObject(extGroupData);
SchBasePoint point = findStartPoint(startRegionStr);
if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!");
taskService.update(task);
task.setRemark("暂无托盘!");
taskService.updateById(task);
// 消息通知
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode());
continue;
}
// 设置终点并修改创建成功状态
@ -65,13 +71,15 @@ public class CTQKTask extends AbstractTask {
task.setRemark("");
task.setVehicle_qty(point.getVehicle_qty());
task.setTask_status(TaskStatus.CREATED.getCode());
taskService.update(task);
taskService.updateById(task);
point.setIng_task_code(task.getTask_code());
pointService.update(point);
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}
@ -81,6 +89,7 @@ public class CTQKTask extends AbstractTask {
* @return
*/
private SchBasePoint findStartPoint(List<String> startRegionStr) {
// 钢托盘缓存区域的空盘是1 状态不同
List<SchBasePoint> points = dtkMapper.findPointForCTQK(startRegionStr);
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
}
@ -95,48 +104,78 @@ public class CTQKTask extends AbstractTask {
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
// 获取参数
String startPoint = taskObj.getPoint_code1(); // 获取起点
String endPoint = taskObj.getPoint_code2(); // 获取起点
SchBasePoint startPointObj = pointService.getById(startPoint);
SchBasePoint endPointObj = pointService.getById(endPoint);
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
TaskUtils.setUpdateByAcs(taskObj);
taskService.updateById(taskObj);
}
if (status.equals(TaskStatus.FINISHED)) { // 完成
// 起点清空
if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtils.clearPoint(startPointObj);
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
endPointObj.setVehicle_type("2");
endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
endPointObj.setUpdate_time(DateUtil.now());
pointService.updateById(endPointObj);
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("任务完成");
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
if (status.equals(TaskStatus.CANCELED)) { // 取消
// 起点解锁
if (ObjectUtil.isNotEmpty(startPointObj)) {
startPointObj.setIng_task_code("");
pointService.update(startPointObj);
}
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
taskService.update(taskObj);
}
@Override
public void forceFinish(String task_code) {
this.updateStatus(task_code, TaskStatus.FINISHED);
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
@Override
public void cancel(String task_code) {
this.updateStatus(task_code, TaskStatus.CANCELED);
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1(); // 获取起点
String endPoint = taskObj.getPoint_code2(); // 获取起点
SchBasePoint startPointObj = pointService.getById(startPoint);
SchBasePoint endPointObj = pointService.getById(endPoint);
// 起点清空
if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
PointUtils.clearPoint(startPointObj);
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
endPointObj.setVehicle_type("2");
endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
endPointObj.setUpdate_time(DateUtil.now());
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
pointService.updateById(endPointObj);
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("任务完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1(); // 获取起点
SchBasePoint startPointObj = pointService.getById(startPoint);
// 起点解锁
if (ObjectUtil.isNotEmpty(startPointObj)) {
startPointObj.setIng_task_code("");
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
pointService.updateById(startPointObj);
}
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark("任务取消");
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java

@ -81,7 +81,7 @@ public class DTSKTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

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

@ -25,7 +25,10 @@
<select id="findPointForCTQK" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT p.*
FROM `sch_base_point` p
WHERE (p.point_type = '3' OR p.point_type IS NULL OR p.point_type = '')
WHERE (
(p.point_type = '3' AND p.region_code = #{regionCode[0]}) OR
(p.point_type = '1' AND p.region_code = #{regionCode[1]})
)
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.point_status = '2'
AND p.is_used = 1

8
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java

@ -82,6 +82,11 @@ public class FJMKTask extends AbstractTask {
NoticeTypeEnum.WARN.getCode());
continue;
}
task.setPoint_code2(packagePoint.getPoint_code()); // 包装线
// todo: 校验是否够码满一托
// 1 获取点位相应数量
// 2 获取库存数量
// 3 木托盘需要多少块
SchBasePoint LaminatePoint = findStartPoint(startRegionStr, jsonObject);
if (ObjectUtil.isEmpty(LaminatePoint)) {
task.setRemark("覆膜区不可用!");
@ -94,7 +99,6 @@ public class FJMKTask extends AbstractTask {
// 生产木托盘编码
String vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE");
// 设置终点并修改创建成功状态
task.setPoint_code2(packagePoint.getPoint_code());
task.setPoint_code3(LaminatePoint.getParent_point_code());
task.setPoint_code4(task.getPoint_code1());
task.setVehicle_code2(vehicleCode);
@ -112,7 +116,7 @@ public class FJMKTask extends AbstractTask {
pointService.updateById(basePoint);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java

@ -19,6 +19,7 @@ import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.AcsUtil;
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.fj.mapper.FJMapper;
@ -94,7 +95,7 @@ public class FJQKTask extends AbstractTask {
pointService.updateById(basePoint);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}
@ -119,6 +120,7 @@ public class FJQKTask extends AbstractTask {
SchBasePoint endPointObj = fjMapper.findPointForFJQK(startRegionStr, new JSONObject()
.fluentPut("vehicleType", vehicleType).fluentPut("pointType", GeneralDefinition.DEVICE_POINT));
// todo: 请求ACS释放一个木托盘
// AcsUtil.notifyAcs("", )
// 这个点的父点位为起点
return ObjectUtil.isNotEmpty(endPointObj) ? endPointObj : null;
}

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java

@ -97,7 +97,7 @@ public class FJQLTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}
@ -117,7 +117,7 @@ public class FJQLTask extends AbstractTask {
: null;
Assert.notNull(workOrder, "工单不能为空!");
// 从所选区域中,选择满料位、无锁、可用的点位
List<SchBasePoint> points = fjMapper.findPointForFJQL(startRegionStr, workOrder.getRaw_material_id());
List<SchBasePoint> points = fjMapper.findPointForFJQL(startRegionStr, workOrder.getRaw_material_code());
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java

@ -85,7 +85,7 @@ public class FJRKTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java

@ -86,7 +86,7 @@ public class FJSKTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java

@ -89,7 +89,7 @@ public class FJSLTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

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

@ -7,13 +7,15 @@
vg.group_id
FROM
`sch_base_point` p
LEFT JOIN sch_base_vehiclematerialgroup vg ON p.vehicle_code = vg.vehicle_code AND p.vehicle_type = vg.vehicle_type AND vg.group_bind_material_status = '2'
LEFT JOIN sch_base_vehiclematerialgroup vg ON p.vehicle_code = vg.vehicle_code AND p.vehicle_type = vg.vehicle_type AND vg.group_bind_material_status = '2'
LEFT JOIN md_base_material ma ON ma.material_id = vg.material_id
WHERE (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.is_used = 1
AND p.point_status = '3'
AND vg.is_firing = true
AND vg.material_id = #{materialId}
AND p.region_code IN
AND p.is_used = 1
AND p.point_status = '3'
AND vg.is_firing = true
AND vg.material_id = #{materialId}
AND TIMESTAMPDIFF(MINUTE, vg.instorage_time, NOW()) > ma.cooling_time
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>

38
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java

@ -110,14 +110,14 @@ public class HNMLTask extends AbstractTask {
// 找终点
SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!");
task.setRemark("未存在生产该料的压机!");
taskService.updateById(task);
// 消息通知
noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode());
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode());
continue;
}
// 叫料完成
requestMaterialRecordService.callMaterialFinish(point.getRecord_id());// todo: 加个组盘标识
// requestMaterialRecordService.callMaterialFinish(point.getRecord_id());
// 设置终点并修改创建成功状态
task.setPoint_code2(point.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode());
@ -136,13 +136,13 @@ public class HNMLTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}
/**
* 根据提前要料表的物料与混料入库请求的物料相同
* 根据压机工单的原料编码以及点位的更新时间
*
* @param nextRegionStr
* @param requestParam
@ -150,12 +150,12 @@ public class HNMLTask extends AbstractTask {
*/
private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject requestParam) {
// *: 混碾无工单
String materialCode = requestParam.getString("material_code");
String materialCode = requestParam.getString("material_code"); // 混碾编码
Assert.notNull(materialCode, "物料编码不能为空!");
MdBaseMaterial baseMaterialObj = materialService.findByCode(materialCode);
Assert.notNull(materialCode, "物料: " + materialCode + "未找到!");
Assert.notNull(baseMaterialObj, "物料: " + materialCode + "未找到!");
// 根据工单物料标识寻找点位
List<SchBasePoint> points = hnMapper.findPointForHNML(nextRegionStr, baseMaterialObj.getMaterial_id());
List<SchBasePoint> points = hnMapper.findPointForHNMLAndWorkOrder(nextRegionStr, baseMaterialObj.getMaterial_id());
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
}
@ -224,6 +224,10 @@ public class HNMLTask extends AbstractTask {
groupEntity.setPoint_code(endPointObj.getPoint_code()); // 当前位置
groupEntity.setPoint_name(endPointObj.getPoint_name());
groupEntity.setMove_way(groupEntity.getMove_way() + " -> " + endPointObj.getPoint_code());
groupEntity.setMaterial_id(one.getMaterial_id());
// *根据压机的工单物料标识查找静置时间
MdBaseMaterial mdBaseMaterial = materialService.getById(one.getMaterial_id());
groupEntity.setStanding_time(mdBaseMaterial.getStanding_time());
}
}
// 更新组盘数据
@ -264,9 +268,10 @@ public class HNMLTask extends AbstractTask {
// LMS组盘时生成混料批次:压制工单+混砂机号+碾次
String vehicleCode = param.getString("vehicle_code");
String vehicleType = param.getString("vehicle_type");
String materialCode = param.getString("material_code");
// 泥料物料对应不出物料标识
String materialCode = param.getString("material_code"); // 泥料编码
String mixTimes = param.getString("bag_number"); // 碾次
// 载具类型默认料盅
if (vehicleType == null) {
vehicleType = GeneralDefinition.MATERIAL_CUP;
}
@ -278,25 +283,16 @@ public class HNMLTask extends AbstractTask {
if (vehicleCode == null) {
throw new BadRequestException("载具编码不能为空");
}
MdBaseMaterial material = materialService.findByCode(materialCode);
if (ObjectUtil.isEmpty(material)) {
throw new BadRequestException("物料[" + materialCode + "]不存在");
}
// 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入
SchBaseVehiclematerialgroup groupObject = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType,
GroupBindMaterialStatusEnum.WAIT_BIND.getValue(), material.getMaterial_id());
GroupBindMaterialStatusEnum.WAIT_BIND.getValue());
if (groupObject != null) {
return groupObject.getGroup_id();
}
// 要把数据存到组盘表
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(material)
? material.getMaterial_id()
: "");
groupEntity.setStanding_time(ObjectUtil.isNotEmpty(material) // 静置时间维护到物料
? material.getStanding_time()
: 0);
groupEntity.setRedundance_material_code(materialCode);
groupEntity.setCreate_id(GeneralDefinition.ACS_ID);
groupEntity.setCreate_name(GeneralDefinition.ACS_NAME);
groupEntity.setCreate_time(DateUtil.now());

1
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java

@ -13,4 +13,5 @@ import java.util.List;
*/
public interface HNMapper extends BaseMapper<JSONObject> {
List<SchBasePoint> findPointForHNML(List<String> regionCode, String materialId);
List<SchBasePoint> findPointForHNMLAndWorkOrder(List<String> regionCode, String materialId);
}

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

@ -21,4 +21,25 @@
</foreach>
ORDER BY r.create_time
</select>
<select id="findPointForHNMLAndWorkOrder" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
FROM
`sch_base_point` p
WHERE
p.point_type = '5'
AND p.point_status = '1'
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.parent_point_code LIKE CONCAT('%',
(SELECT p2.point_code FROM sch_base_point p2
WHERE p2.point_code IN (
SELECT w.point_code FROM pdm_bd_workorder w WHERE w.material_id = #{materialId} AND w.workorder_status = '3'
)
AND p2.point_status = '1'
ORDER BY p2.update_time LIMIT 1), '%')
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</select>
</mapper>

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java

@ -94,7 +94,7 @@ public class CYZCTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java

@ -82,7 +82,7 @@ public class GZYQLTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java

@ -83,7 +83,7 @@ public class YZQKTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java

@ -40,7 +40,6 @@ import java.util.stream.Collectors;
@TaskType("LZKLXSKTask")
public class YZSKTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "LZKLXSKTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
@ -89,7 +88,7 @@ public class YZSKTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}

30
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java

@ -5,9 +5,9 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.config.MapOf;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.brick.service.IMdBaseBrickInfoService;
import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService;
@ -104,7 +104,7 @@ public class YZSLTask extends AbstractTask {
pointService.updateById(point);
//下发
// this.renotifyAcs(task);
this.renotifyAcs(task);
}
}
@ -143,10 +143,23 @@ public class YZSLTask extends AbstractTask {
regionCode = nextRegionStr.get(0);
}
}
// todo: 双层缓存货架的一上一下的区分
List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
MapOf.of("regionCode", regionCode, "pointType", GeneralDefinition.ENTRANCE)));
return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
// 双层缓存货架的一上一下的区分
// 计算缓存上和缓存下的空位数量决定是使用desc还是asc
int countUp = yzMapper.countConveyorLine(nextRegionStr.get(0), GeneralDefinition.UPPER_CONVEYOR_LINE,
PointStatusEnum.EMPTY_POINT.getCode());
int countLower = yzMapper.countConveyorLine(nextRegionStr.get(0), GeneralDefinition.LOWER_CONVEYOR_LINE,
PointStatusEnum.EMPTY_POINT.getCode());
LambdaQueryWrapper<SchBasePoint> lam = new QueryWrapper<SchBasePoint>().lambda();
lam.eq(SchBasePoint::getRegion_code, regionCode)
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
.eq(SchBasePoint::getPoint_type, GeneralDefinition.ENTRANCE) // 对接位
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.eq(SchBasePoint::getIs_used, true)
.orderBy(true, countUp > countLower, SchBasePoint::getPoint_code);
List<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
}
@Override
@ -189,6 +202,10 @@ public class YZSLTask extends AbstractTask {
vehicleType = GeneralDefinition.STEEL_TRAY;
}
String deviceCode = param.getString("device_code");
String isFull = param.getString("is_full");
if (isFull == null) {
isFull = GeneralDefinition.YES;
}
// 砖块数量
Integer qty = param.getInteger("qty");
SchBasePoint basePoint = pointService.getById(deviceCode);
@ -230,6 +247,7 @@ public class YZSLTask extends AbstractTask {
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.WAIT_BIND.getValue()); // 待绑定
groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
groupEntity.setIs_delete(false);
groupEntity.setIs_full(isFull.equals(GeneralDefinition.YES) ? true : false);
vehiclematerialgroupService.save(groupEntity);
// 将所有当前位置的砖块设置组盘标识
baseBrickInfoService.setGroupByCurrentAllBrick(deviceCode, groupEntity.getGroup_id());

9
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.java

@ -12,5 +12,14 @@ import java.util.List;
*/
public interface YZMapper {
List<SchBasePoint> findPointForYZQL(List<String> regionCode, String materialId);
@Deprecated
List<SchBasePoint> findPointForYZSL(JSONObject param);
/**
* 统计输送线数量
* @param regionCode
* @param pointType
* @return
*/
int countConveyorLine(String regionCode, String pointType, String pointStatus);
}

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

@ -31,4 +31,14 @@
AND p.is_used = TRUE
AND ( t.task_code IS NULL OR t.task_code = '')
</select>
<select id="countConveyorLine" resultType="java.lang.Integer">
SELECT
COUNT(*)
FROM
sch_base_point p2
WHERE
p2.region_code = #{regionCode}
AND p2.point_type = #{pointType}
AND p2.point_status = #{pointStatus}
</select>
</mapper>

11
lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml

@ -58,6 +58,17 @@ spring:
host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:}
redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置
login:

12
lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml

@ -57,8 +57,16 @@ spring:
host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:}
#连接超时时间
timeout: 5000
redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置
login:
# 登录缓存

2
lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml

@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999
<contextName>nlAdmin</contextName>
<property name="log.charset" value="utf-8"/>
<property name="log.pattern"
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %cyan(%msg%n)"/>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!--引入默认的一些设置-->

37
lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java

@ -1,10 +1,15 @@
package org.nl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.junit.jupiter.api.Test;
import org.nl.config.MapOf;
import org.nl.system.service.user.ISysUserService;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@ -21,6 +26,8 @@ public class ApplicationTest {
@Autowired
private ISysUserService userService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private YZMapper yzMapper;
@Test
void contextLoads() {
@ -28,8 +35,32 @@ public class ApplicationTest {
}
@Test
void yzMapperTest() {
List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
MapOf.of("regionCode", "HCSSX", "pointType", "1")));
System.out.println(pointForYZSL);
// List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
// MapOf.of("regionCode", "HCSSX", "pointType", "1")));
int countUp = yzMapper.countConveyorLine("HCSSX", GeneralDefinition.UPPER_CONVEYOR_LINE,
PointStatusEnum.EMPTY_POINT.getCode());
System.out.println(countUp);
}
@Test
void yzMapper2Test() {
// String apply = "ORDER BY point_code";
int countUp = yzMapper.countConveyorLine("HCSSX", GeneralDefinition.UPPER_CONVEYOR_LINE,
PointStatusEnum.EMPTY_POINT.getCode());
int countLower = yzMapper.countConveyorLine("HCSSX", GeneralDefinition.LOWER_CONVEYOR_LINE,
PointStatusEnum.EMPTY_POINT.getCode());
// if (countUp < countLower) {
// apply = "ORDER BY point_code DESC";
// }
LambdaQueryWrapper<SchBasePoint> lam = new QueryWrapper<SchBasePoint>().lambda();
lam.eq(SchBasePoint::getRegion_code, "HCSSX")
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
.eq(SchBasePoint::getPoint_type, GeneralDefinition.ENTRANCE) // 对接位
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.eq(SchBasePoint::getIs_used, true)
.orderBy(true, countUp > countLower, SchBasePoint::getPoint_code);
List<SchBasePoint> schBasePoints = pointService.list(lam);
System.out.println(schBasePoints.get(0));
}
}

6
lms/nladmin-ui/src/views/wms/basedata/material/index.vue

@ -73,10 +73,13 @@
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="half_material_code" label="半成品编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="raw_material_code" label="泥料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" label="物料名称 " :min-width="flexWidth('material_name',crud.data,'物料名称 ')" />
<el-table-column prop="material_spec" label="物料规格" :min-width="flexWidth('material_spec',crud.data,'物料规格')" />
<el-table-column prop="class_id" label="物料分类标识" :min-width="flexWidth('class_id',crud.data,'物料分类标识')" />
<el-table-column prop="standing_time" label="静置时间(分钟)" :min-width="flexWidth('standing_time',crud.data,'静置时间(分钟)')" />
<el-table-column prop="cooling_time" label="冷却时间(分钟)" :min-width="flexWidth('cooling_time',crud.data,'静置时间(分钟)')" />
<el-table-column prop="workshop_code" label="车间编码" :min-width="flexWidth('workshop_code',crud.data,'车间编码')" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="is_used" label="是否启用" :min-width="flexWidth('is_used',crud.data,'是否启用')">
@ -121,10 +124,13 @@ import pagination from '@crud/Pagination'
const defaultForm = {
material_id: null,
material_code: null,
half_material_code: null,
raw_material_code: null,
material_name: null,
material_spec: null,
class_id: null,
standing_time: null,
cooling_time: null,
workshop_code: null,
remark: null,
is_used: true,

9
lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue

@ -108,8 +108,8 @@
style="width: 240px;"
/>
</el-form-item>
<el-form-item label="原料名称" prop="material_name">
<el-input v-model="form.raw_material_name" style="width: 240px;" @focus="getMaterial(2)" />
<el-form-item label="半成品编码" prop="material_name">
<el-input v-model="form.half_material_code" style="width: 240px;" disabled />
</el-form-item>
<el-form-item label="原料编码">
<el-input v-model="form.raw_material_code" style="width: 240px;" disabled />
@ -361,8 +361,7 @@ const defaultForm = {
plan_qty: null,
real_qty: null,
material_id: null,
raw_material_id: null,
raw_material_name: null,
half_material_code: null,
raw_material_code: null,
vehicle_type: null,
planproducestart_date: null,
@ -484,6 +483,8 @@ export default {
this.form.material_id = row.material_id
this.form.material_spec = row.material_spec
this.form.material_code = row.material_code
this.form.half_material_code = row.half_material_code
this.form.raw_material_code = row.raw_material_code
} else {
this.form.raw_material_name = row.material_name
this.form.raw_material_id = row.material_id

2
lms/nladmin-ui/src/views/wms/sch/group/MaterialDialog.vue

@ -55,6 +55,8 @@
</template>
</el-table-column>
<el-table-column prop="material_code" label="物料编码" width="160" />
<el-table-column prop="half_material_code" label="半成品编码" width="160" />
<el-table-column prop="raw_material_code" label="泥料编码" width="160" />
<el-table-column prop="material_name" label="物料名称" width="180" show-overflow-tooltip />
<el-table-column prop="material_spec" label="物料规格" width="140" />
<!-- <el-table-column prop="class_name" label="物料分类" width="140" />-->

Loading…
Cancel
Save