diff --git a/lms/nladmin-system/pom.xml b/lms/nladmin-system/pom.xml
index 391f6f2..aa94df7 100644
--- a/lms/nladmin-system/pom.xml
+++ b/lms/nladmin-system/pom.xml
@@ -372,6 +372,12 @@
httpclient
4.5.13
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ 3.16.4
+
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java
index 17a0f34..e206dfd 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java
@@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "acs接收lms")
@RequestMapping("/api/wms/task")
@Slf4j
+@SaIgnore
public class AcsToWmsController {
private final AcsToWmsService acsToWmsService;
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
index f134492..7defb06 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
@@ -246,13 +246,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 5.油漆线空盘入库: 调用空托盘入库处理类创建任务
if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空");
if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空");
- if (ObjectUtil.isEmpty(vehicle_type)) throw new BadRequestException("载具类型不能为空");
+// if (ObjectUtil.isEmpty(vehicle_type)) throw new BadRequestException("载具类型不能为空");
JSONObject param = new JSONObject();
param.put("point_code1", point_code);
param.put("qty", vehicle_num);
- param.put("vehicle_type", vehicle_type);
- param.put("vehicle_code", vehicle_code);
+// param.put("vehicle_type", vehicle_type);
+// param.put("vehicle_code", vehicle_code);
// 创建任务
YqxSendEmpVehicleTask taskBean = SpringContextHolder.getBean(YqxSendEmpVehicleTask.class);
taskBean.createTask(param);
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java
index 8c3c07c..7e6a2ed 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java
@@ -79,8 +79,6 @@ public class YqxhcqCallMaterialTask extends AbstractAcsTask {
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
// 物料点
JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0);
- // 等待点
- JSONObject wait_point = pointTab.query("point_code = '" + taskObj.getString("point_code3") + "'").uniqueResult(0);
//任务取消
if (StrUtil.equals(status, "0")) {
// 取消删除任务
@@ -106,6 +104,24 @@ public class YqxhcqCallMaterialTask extends AbstractAcsTask {
}
if (StrUtil.equals(status, "2")) {
+ //完成后
+ // 物料点位解锁 并设置空位
+ material_point.put("lock_type", "1");
+ material_point.put("point_status", "1");
+ material_point.put("material_id", "");
+ material_point.put("vehicle_type", "");
+ material_point.put("vehicle_code", "");
+ pointTab.update(material_point);
+
+ // 油漆线缓存点位更新
+ JSONObject yqx_point = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0);
+ yqx_point.put("point_status", "3");
+ yqx_point.put("material_id", taskObj.getString("material_id"));
+ yqx_point.put("vehicle_type", taskObj.getString("vehicle_type"));
+ yqx_point.put("material_qty", taskObj.getString("material_qty"));
+ yqx_point.put("vehicle_qty", taskObj.getString("vehicle_qty"));
+ pointTab.update(yqx_point);
+
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_time", DateUtil.now());
@@ -114,8 +130,6 @@ public class YqxhcqCallMaterialTask extends AbstractAcsTask {
if (ObjectUtil.isEmpty(material_point)) return;
-// JSONObject requestObj = task.getJSONObject("request_param");
-
//区域出入表【st_ivt_regionIO】
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
JSONObject regionIoObj = new JSONObject();
@@ -138,24 +152,6 @@ public class YqxhcqCallMaterialTask extends AbstractAcsTask {
regionIoObj.put("create_name", SecurityUtils.getCurrentNickName());
regionIoObj.put("create_time", DateUtil.now());
regionIoTab.insert(regionIoObj);
-
- //完成后
- // 物料点位解锁 并设置空位
- material_point.put("lock_type", "1");
- material_point.put("point_status", "1");
- material_point.put("material_id", "");
- material_point.put("vehicle_type", "");
- material_point.put("vehicle_code", "");
- pointTab.update(material_point);
-
- // 油漆线缓存点位更新
- JSONObject yqx_point = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0);
- yqx_point.put("point_status", "3");
- yqx_point.put("material_id", taskObj.getString("material_id"));
- yqx_point.put("vehicle_type", taskObj.getString("vehicle_type"));
- yqx_point.put("material_qty", taskObj.getString("material_qty"));
- yqx_point.put("vehicle_qty", taskObj.getString("vehicle_qty"));
- pointTab.update(yqx_point);
}
}
@@ -164,23 +160,9 @@ public class YqxhcqCallMaterialTask extends AbstractAcsTask {
public void autoCreate() {
// 自动叫料
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
- WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
-// JSONArray allPoints = pointTab.query("region_code = 'YQXHCQ' AND lock_type = '1'" +
-// " AND is_used = '1' AND is_delete = '0'").getResultJSONArray(0);
-// String hcs = "";
-// for (int i = 0; i < allPoints.size(); i++) {
-// hcs = hcs + "'" + allPoints.getJSONObject(i).getString("point_code") + "'";
-// if (i < allPoints.size()) hcs = hcs + ",";
-// }
- // 限制只搬一次
-// JSONObject oneTask = taskTab.query("point_code2 in ('YQXHC01','YQXHC02','YQXHC03') AND " +
-// "is_delete='0' AND task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' FOR UPDATE").uniqueResult(0);
-// if (ObjectUtil.isNotEmpty(oneTask)) return;
// 找终点:四个缓存区按顺序获取一个
JSONObject endPoint = WQL.getWO("YQX_AUTOTASK").addParamMap(MapOf.of("flag","1")).process().uniqueResult(0);
-// JSONObject endPoint = pointTab.query("region_code = 'YQXHCQ' AND point_status = '1' AND lock_type = '1'" +
-// " AND is_used = '1' AND is_delete = '0'", "point_code").uniqueResult(0);
if (ObjectUtil.isEmpty(endPoint)) return;
String point_code2 = endPoint.getString("point_code");
// 判断任务
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java
index 5d0e841..089f054 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java
@@ -74,25 +74,30 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
"' and col_num = '9'").uniqueResult(0);
jsonEmpWait.put("lock_type", "1");
+ jsonEmpWait.put("update_time", DateUtil.now());
pointTab.update(jsonEmpWait);
}
jsonStart.put("lock_type", "1");
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
// 更新终点(叠盘架状态)
jsonEnd.put("lock_type", "1");
+ jsonEnd.put("update_time", DateUtil.now());
pointTab.update(jsonEnd);
} else {
// 终点在供给线
JSONObject jsonStart = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
jsonStart.put("lock_type", "1");
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
}
- taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
- taskObj.put("remark", "已取消");
- taskTab.update(taskObj);
+ jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
+ jsonTask.put("remark", "已取消");
+ jsonTask.put("update_time", DateUtil.now());
+ taskTab.update(jsonTask);
}
if (StrUtil.equals(status, "1")) {
@@ -135,6 +140,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
"' and col_num = '9'").uniqueResult(0);
jsonEmpWait.put("lock_type", "1");
+ jsonEmpWait.put("update_time", DateUtil.now());
pointTab.update(jsonEmpWait);
}
}
@@ -144,12 +150,14 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
jsonStart.put("vehicle_type", "");
jsonStart.put("vehicle_code", "");
jsonStart.put("vehicle_qty", 0);
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
// 更新终点(叠盘架状态)
jsonEnd.put("vehicle_qty", NumberUtil.add(jsonEnd.getString("vehicle_qty"), jsonTask.getString("vehicle_qty")));
jsonEnd.put("lock_type", "1");
jsonEnd.put("point_status", "2");
+ jsonEnd.put("update_time", DateUtil.now());
jsonEnd.put("vehicle_type", jsonTask.getString("vehicle_type"));
pointTab.update(jsonEnd);
@@ -157,6 +165,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
JSONObject jsonTask2 = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_id <> '" + jsonTask.getString("task_id") + "'").uniqueResult(0);
jsonTask2.put("point_code1", jsonEnd.getString("point_code"));
jsonTask2.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
+ jsonTask2.put("update_time", DateUtil.now());
taskTab.update(jsonTask2);
} else {
// 终点在供给线线: 更新起点(叠盘架)数量
@@ -167,6 +176,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
jsonStart.put("point_status", "1");
jsonStart.put("vehicle_type", "");
}
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
}
}
@@ -187,17 +197,28 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
Map query = new HashMap<>();
query.put("flag", "2");
query.put("region_code", RegionTypeEnum.DPJQB.getCode());
- JSONArray array = WQL.getWO("QSCH_GjxCallEmpVehicleTask").addParamMap(query).process().getResultJSONArray(0);
+ JSONArray array = WQL.getWO("QSCH_GjxCallEmpVehicleTask")
+ .addParamMap(query)
+ .process()
+ .getResultJSONArray(0);
PointUpdateUtil.updatePoint(array);
// 找叠盘架是否与对应的载具类型
- JSONObject jsonDpjStart = pointTab.query("region_code = '" + RegionTypeEnum.DPJQB.getCode() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and vehicle_qty <> '0'").uniqueResult(0);
+ JSONObject jsonDpjStart = pointTab
+ .query("region_code = '" + RegionTypeEnum.DPJQB.getCode() +
+ "' and can_vehicle_type = '" + vehicle_type +
+ "' and lock_type = '1' and is_used = '1' and is_delete = '0' and vehicle_qty <> '0'")
+ .uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonDpjStart)) {
// todo
// 判断叠盘架是否有任务 有就下一个任务 : 可以去除
boolean is_point = this.isTask(jsonDpjStart.getString("point_code"));
- if (!is_point) continue;
+ if (!is_point) {
+ jsonTask.put("remark", "当前叠盘架有任务");
+ taskTab.update(jsonTask);
+ continue;
+ }
// 更新任务起点
jsonTask.put("point_code1", jsonDpjStart.getString("point_code"));
@@ -218,7 +239,6 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
boolean is_point = this.isTask(jsonDpjStart2.getString("point_code"));
if (!is_point) continue;
- // todo: 如何知道缓存位是否有空托盘
// 找叠盘架暂存位是否有空托盘
JSONObject map = new JSONObject();
map.put("flag", "1");
@@ -314,7 +334,9 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
jsonEmpWait.put("lock_type", "2");
pointTab.update(jsonEmpWait);
} else {
- continue;
+ // 没有找到空载具
+ jsonTask.put("remark", "未找到空载具,查看是否被锁住或者托盘是否为空");
+ taskTab.update(jsonTask);
}
}
}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java
index db6c378..7097858 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java
@@ -70,19 +70,23 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
"' and col_num = '9'").uniqueResult(0);
jsonEmpWait.put("lock_type", "1");
+ jsonEmpWait.put("update_time", DateUtil.now());
pointTab.update(jsonEmpWait);
}
jsonStart.put("lock_type", "1");
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
// 更新终点(叠盘架状态)
jsonEnd.put("lock_type", "1");
+ jsonEnd.put("update_time", DateUtil.now());
pointTab.update(jsonEnd);
} else {
// 终点在油漆线
JSONObject jsonStart = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
jsonStart.put("lock_type", "1");
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
}
@@ -104,8 +108,6 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
* 2.终点为油漆线,更新起点载具数量
*/
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
- jsonTask.put("update_optid", SecurityUtils.getCurrentUserId());
- jsonTask.put("update_optname", SecurityUtils.getCurrentUsername());
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
@@ -129,6 +131,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
"' and col_num = '9'").uniqueResult(0);
jsonEmpWait.put("lock_type", "1");
+ jsonEmpWait.put("update_time", DateUtil.now());
pointTab.update(jsonEmpWait);
}
}
@@ -138,12 +141,14 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
jsonStart.put("vehicle_type", "");
jsonStart.put("vehicle_code", "");
jsonStart.put("vehicle_qty", 0);
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
// 更新终点(叠盘架状态)
jsonEnd.put("vehicle_qty", NumberUtil.add(jsonEnd.getString("vehicle_qty"),jsonTask.getString("vehicle_qty")));
jsonEnd.put("lock_type", "1");
jsonEnd.put("point_status", "2");
+ jsonEnd.put("update_time", DateUtil.now());
jsonEnd.put("vehicle_type", jsonTask.getString("vehicle_type"));
pointTab.update(jsonEnd);
@@ -155,6 +160,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
}
jsonTask2.put("point_code1", jsonEnd.getString("point_code"));
jsonTask2.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
+ jsonTask2.put("update_time", DateUtil.now());
taskTab.update(jsonTask2);
} else {
// 终点在油漆线: 更新起点(叠盘架)数量
@@ -165,6 +171,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
jsonStart.put("point_status", "1");
jsonStart.put("vehicle_type", "");
}
+ jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
}
}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java
index 9c7c9e4..e58795c 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java
@@ -53,11 +53,13 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
}
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("remark", "已取消");
+ taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
// 点位解锁
if (ObjectUtil.isEmpty(material_point)) return;
material_point.put("lock_type", "1");
+ material_point.put("update_time", DateUtil.now());
pointTab.update(material_point);
}
@@ -108,6 +110,7 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
material_point.put("material_id", "");
material_point.put("vehicle_type", "");
material_point.put("vehicle_code", "");
+ material_point.put("update_time", DateUtil.now());
pointTab.update(material_point);
}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java
index e4f0039..eaef2b5 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java
@@ -51,11 +51,13 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
if (ObjectUtil.isNotEmpty(point_code3)) {
JSONObject jsonPoint3 = pointTab.query("point_code ='" + point_code3 + "'").uniqueResult(0);
jsonPoint3.put("point_status", "1");
+ jsonPoint3.put("update_time", DateUtil.now());
pointTab.update(jsonPoint3);
}
if (ObjectUtil.isNotEmpty(point_code2)) {
JSONObject jsonPoint2 = pointTab.query("point_code ='" + point_code2 + "'").uniqueResult(0);
jsonPoint2.put("point_status", "1");
+ jsonPoint2.put("update_time", DateUtil.now());
pointTab.update(jsonPoint2);
}
taskTab.delete("task_id = '" + task_id + "'");
@@ -86,6 +88,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
point2.put("vehicle_type", "");
point2.put("vehicle_code", "");
point2.put("vehicle_qty", 0);
+ point2.put("update_time", DateUtil.now());
pointTab.update(point2);
} else {
point_code = jsonTask.getString("point_code2");
@@ -100,6 +103,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
endPoint.put("lock_type", "1");
endPoint.put("vehicle_qty", vehicle_qty);
endPoint.put("point_status", "2");
+ endPoint.put("update_time", DateUtil.now());
endPoint.put("vehicle_type", jsonTask.getString("vehicle_type"));
pointTab.update(endPoint);
} else {//非叠盘架
@@ -108,6 +112,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
endPoint.put("vehicle_qty", jsonTask.getString("vehicle_qty"));
endPoint.put("vehicle_type", jsonTask.getString("vehicle_type"));
endPoint.put("point_status", "2");
+ endPoint.put("update_time", DateUtil.now());
pointTab.update(endPoint);
}
}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java
index 82560a8..8bcf49a 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java
@@ -49,11 +49,13 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
if (ObjectUtil.isNotEmpty(point_code3)) {
JSONObject jsonPoint3 = pointTab.query("point_code ='" + point_code3 + "'").uniqueResult(0);
jsonPoint3.put("point_status", "1");
+ jsonPoint3.put("update_time", DateUtil.now());
pointTab.update(jsonPoint3);
}
if (ObjectUtil.isNotEmpty(point_code2)) {
JSONObject jsonPoint2 = pointTab.query("point_code ='" + point_code2 + "'").uniqueResult(0);
jsonPoint2.put("point_status", "1");
+ jsonPoint2.put("update_time", DateUtil.now());
pointTab.update(jsonPoint2);
}
taskTab.delete("task_id = '" + task_id + "'");
@@ -84,6 +86,7 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
point2.put("vehicle_type", "");
point2.put("vehicle_code", "");
point2.put("vehicle_qty", 0);
+ point2.put("update_time", DateUtil.now());
pointTab.update(point2);
} else {
point_code = jsonTask.getString("point_code2");
@@ -98,6 +101,7 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
endPoint.put("lock_type", "1");
endPoint.put("vehicle_qty", vehicle_qty);
endPoint.put("point_status", "2");
+ endPoint.put("update_time", DateUtil.now());
endPoint.put("vehicle_type", jsonTask.getString("vehicle_type"));
pointTab.update(endPoint);
} else {//非叠盘架
@@ -106,6 +110,7 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
endPoint.put("vehicle_qty", jsonTask.getString("vehicle_qty"));
endPoint.put("vehicle_type", jsonTask.getString("vehicle_type"));
endPoint.put("point_status", "2");
+ endPoint.put("update_time", DateUtil.now());
pointTab.update(endPoint);
}
}
@@ -130,6 +135,11 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0);
if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除");
+ //任务表【SCH_BASE_Task】
+ //判断当前点是否有未完成的任务
+ JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' FOR UPDATE").uniqueResult(0);
+ if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
+
String vehicleType = workOrderObj.getString("vehicle_type");
if (ObjectUtil.isEmpty(vehicleType)) throw new BadRequestException("载具类型不能为空");
JSONObject jsonObject = pointTab.query("region_code = 'YQQY01' and point_type = '2' and can_vehicle_type = '" + vehicleType + "'").uniqueResult(0);
@@ -146,7 +156,7 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
.point_code1(startPointCode)
.priority("8")
.vehicle_code(form.getString("vehicle_code"))
- .vehicle_type(form.getString("vehicle_type"))
+ .vehicle_type(vehicleType)
.vehicle_qty(form.getIntValue("qty"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java
index 91b82d6..a5f0cb1 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java
@@ -20,12 +20,17 @@ import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.utils.PointUpdateUtil;
import org.nl.wms.util.IdUtil;
+import org.nl.wms.util.RedissonUtils;
import org.slf4j.MDC;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantLock;
/**
@@ -37,10 +42,10 @@ import java.util.List;
public class GjxSendMaterialTask extends AbstractAcsTask {
private final String THIS_CLASS = GjxSendMaterialTask.class.getName();
-
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject task, String status) {
+
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
@@ -57,12 +62,14 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("remark", "已取消");
+ taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
String point_code2 = taskObj.getString("point_code2");
if (ObjectUtil.isEmpty(point_code2)) return;
JSONObject object = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
object.put("lock_type", "1");
+ object.put("update_time", DateUtil.now());
pointTab.update(object);
}
@@ -75,33 +82,45 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
}
if (StrUtil.equals(status, "2")) {
+ //生产工单表【PDM_BD_WorkOrder】
+ WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
+ //完成后入库
+ String point_code2 = taskObj.getString("point_code2");
+ JSONObject requestObj = task.getJSONObject("request_param");
+ JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
+ //工单标识
+ String workorder_id = requestObj.getString("material_info_id");
+ JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0);
+ JSONObject order = orderTab.query("workorder_id = '" + workOrderId + "'").uniqueResult(0);
+
+ if (ObjectUtil.isNotEmpty(endPoint)) {
+ if ( order.getString("workorder_type").equals("1")) {
+ // 货梯口
+ JSONObject param = new JSONObject();
+ param.put("lock_type", "1");
+ param.put("point_status", "3");
+ pointTab.update(param, "point_code = '" + point_code2 + "'");
+ }
+ // 点位解锁
+ endPoint.put("lock_type", "1");
+ endPoint.put("point_status", "3");
+ endPoint.put("material_id", taskObj.getString("material_id"));
+ endPoint.put("instorage_time", DateUtil.now());
+ endPoint.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
+ endPoint.put("ivt_qty", requestObj.getString("qty"));
+ endPoint.put("standing_time", workorderObj.getString("standing_time"));
+ endPoint.put("vehicle_code", taskObj.getString("vehicle_code"));
+ endPoint.put("vehicle_type", taskObj.getString("vehicle_type"));
+ endPoint.put("update_time", DateUtil.now());
+ pointTab.update(endPoint);
+ }
+
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_time", DateUtil.now());
taskObj.put("remark", "任务执行完成");
taskTab.update(taskObj);
- JSONObject order = orderTab.query("workorder_id = '" + workOrderId + "'").uniqueResult(0);
- if (order.getString("workorder_type").equals("1")) {
- // 货梯口
- String point_code2 = taskObj.getString("point_code2");
- JSONObject param = new JSONObject();
- param.put("lock_type", "1");
- param.put("point_status", "3");
- pointTab.update(param, "point_code = '" + point_code2 + "'");
- }
-
-
- String point_code2 = taskObj.getString("point_code2");
- JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
- JSONObject requestObj = task.getJSONObject("request_param");
- //工单标识
- String workorder_id = requestObj.getString("material_info_id");
- //生产工单表【PDM_BD_WorkOrder】
- WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
- JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0);
-
-
//区域出入表【st_ivt_regionIO】
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
JSONObject regionIoObj = new JSONObject();
@@ -124,25 +143,6 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
regionIoObj.put("create_name", SecurityUtils.getCurrentNickName());
regionIoObj.put("create_time", DateUtil.now());
regionIoTab.insert(regionIoObj);
-
-
- //完成后入库
- // 点位解锁
- endPoint.put("lock_type", "1");
- endPoint.put("point_status", "3");
- endPoint.put("material_id", taskObj.getString("material_id"));
- endPoint.put("instorage_time", DateUtil.now());
- endPoint.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
- endPoint.put("ivt_qty", requestObj.getString("qty"));
- endPoint.put("standing_time", workorderObj.getString("standing_time"));
- endPoint.put("vehicle_code", taskObj.getString("vehicle_code"));
- endPoint.put("vehicle_type", taskObj.getString("vehicle_type"));
- pointTab.update(endPoint);
- //释放整列货位
- JSONObject param = new JSONObject();
- param.put("lock_type", "1");
- pointTab.update(param, "task_id = '" + task_id + "'");
-
}
}
@@ -237,14 +237,8 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
pointTab.update(point, "point_code = '" + firstRow.getString("point_code") + "'");
continue;
}
- try {
- MDC.put("log_file_type", LokiLogType.DEFAULT.getDesc());
- log.info("异常日志:" + "第" + block_num + "块" + row_num + "排" + (col_num - 1) + "列被锁,重新安排一排.");
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- MDC.remove("log_file_type");
- }
+ MDC.put("log_file_type", LokiLogType.DEFAULT.getDesc());
+ log.info("异常日志:" + "第" + block_num + "块" + row_num + "排" + (col_num - 1) + "列被锁,重新安排一排.");
// 下一列被锁住,给提示
reminder = "第" + block_num + "块" + row_num + "排" + (col_num - 1) + "列被锁,重新安排一排.";
}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java
index 413b24f..2daff91 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java
@@ -59,6 +59,7 @@ public class HkxSendMaterialTask extends AbstractAcsTask {
}
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("remark", "已取消");
+ taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
}
@@ -119,6 +120,7 @@ public class HkxSendMaterialTask extends AbstractAcsTask {
// 终点解锁
point2Obj.put("lock_type", "1");
point2Obj.put("point_status", "3");
+ point2Obj.put("update_time", DateUtil.now());
// 载具类型
point2Obj.put("vehicle_type", taskObj.getString("vehicle_type"));
pointTab.update(point2Obj);
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql
index 307a363..5f814b8 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql
@@ -70,6 +70,7 @@
AND '3' <> (SELECT p2.point_status FROM SCH_BASE_Point p2 WHERE p2.block_num = p.block_num AND p2.row_num = p.row_num
AND p2.col_num = (SELECT MIN(p3.col_num) FROM SCH_BASE_Point p3 WHERE p3.block_num = p2.block_num AND p3.row_num = p2.row_num AND p3.is_used = '1' AND p3.is_delete = '0' AND p3.lock_type = '1'))
ORDER BY block_num,row_num,col_num
+ FOR UPDATE
ENDSELECT
ENDQUERY
ENDIF
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/utils/PointUpdateUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/utils/PointUpdateUtil.java
index f44e2a7..a6874fd 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/utils/PointUpdateUtil.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/utils/PointUpdateUtil.java
@@ -35,8 +35,13 @@ public class PointUpdateUtil {
pointObj2.put("point_status", vehicleNum.equals("0")?"1":"2");
pointTable.update(pointObj2);
} else if (pointObj2.getString("region_code").equals(RegionTypeEnum.SSX.getCode())) {
- String move = pointObj.getString("move");
- pointObj2.put("point_status", Integer.parseInt(move) + 1);
+ String move = pointObj.getString("move"); // 0 1
+ String mode = pointObj.getString("mode");
+ if (mode.equals("2")) {
+ pointObj2.put("point_status", Integer.parseInt(move) + 1);
+ } else {
+ pointObj2.put("point_status", "2");
+ }
pointTable.update(pointObj2);
}
}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/util/RedissonUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/util/RedissonUtils.java
new file mode 100644
index 0000000..829f7fb
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/util/RedissonUtils.java
@@ -0,0 +1,52 @@
+package org.nl.wms.util;
+
+import lombok.SneakyThrows;
+import org.nl.modules.common.exception.BadRequestException;
+import org.nl.modules.wql.util.SpringContextHolder;
+import org.redisson.api.RReadWriteLock;
+import org.redisson.api.RedissonClient;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.function.Supplier;
+
+/*
+ * @author ZZQ
+ * @Date 2023/3/27 10:30
+ */
+public class RedissonUtils {
+ /**
+ *
+ * @param supplier 业务代码
+ * @param key
+ * @param seconds 尝试获取锁的等待时间,允许为空
+ */
+ @SneakyThrows
+ public static void lock(Supplier supplier, String key, Integer seconds, Boolean isRead){
+ RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
+ RReadWriteLock readWriteLock = redissonClient.getReadWriteLock(key);
+ Lock lock;
+ if (isRead){
+ lock = readWriteLock.readLock();
+ }else {
+ lock = readWriteLock.writeLock();
+ }
+ boolean isLock;
+ if (seconds == null){
+ isLock = lock.tryLock();
+ }else {
+ isLock = lock.tryLock(seconds, TimeUnit.SECONDS);
+ }
+ try {
+ if (isLock){
+ supplier.get();
+ } else {
+ throw new BadRequestException("当前业务 key:"+key+"正在锁定请稍后再试");
+ }
+ }finally {
+ if (isLock){
+ lock.unlock();
+ }
+ }
+ }
+}