diff --git a/acs/nladmin-ui/src/views/system/monitor/device/index.vue b/acs/nladmin-ui/src/views/system/monitor/device/index.vue
index bdd40b6..8db7e17 100644
--- a/acs/nladmin-ui/src/views/system/monitor/device/index.vue
+++ b/acs/nladmin-ui/src/views/system/monitor/device/index.vue
@@ -19,11 +19,11 @@
style="width: 100%"
max-height="500px"
>
-
-
@@ -210,6 +210,7 @@ export default {
nodeMenu: false
})
lf.on('node:click', (data, e) => { // 鼠标点击节点
+ console.log("data: ", data)
// 展开显示设备信息
if (data.data.type !== 'pro-rect' && data.data.type !== 'pro-circle' && data.data.type !== 'triangle' && data.data.type !== 'rect-radius') {
if (data.data.properties.device) {
@@ -262,13 +263,12 @@ export default {
break // 匹对完退出
}
}
- console.log(item)
const clickObj = item
- // console.log('clickObj.data', clickObj.data)
+ console.log('clickObj.data', clickObj.data)
if (!item.data) {
return
}
- if (clickObj.data.is_click !== true) {
+ if (!clickObj.data.is_click) {
return
}
if (clickObj.data.device_type === 'scanner') { // 扫码器
@@ -302,7 +302,7 @@ export default {
}
this.arr = [] // 清空
if (item.device_code && item.data) {
- console.log('item', item)
+ // console.log('item', item)
this.arr = [
{ name: '设备编号', value: item.device_code },
{ name: '设备名称', value: item.device_name }
@@ -508,14 +508,15 @@ export default {
}
}
}
- console.log('arr:', this.arr)
+ // console.log('arr:', this.arr)
},
initStatus() { // 初始化所有节点的设备信息,通过节点id对应设备编号
let resion = {}
resion = lf.getGraphData().nodes.map(item => ({ id: item.id, device_code: item.properties.device }))
getDeviceByCodes(resion).then(res => {
+ console.log(res)
this.allDeviceMsg = res // 拿到所有节点的设备数据
- console.log('initStatus-res', res)
+ // console.log('initStatus-res', res)
// 实时设置状态信息
for (var item of res) { // 循环并且设置属性值
if (item.data !== undefined) {
@@ -538,7 +539,7 @@ export default {
}
// 设置动态实时显示设备信息
const { nodes } = lf.getSelectElements() // 获取选中的节点
- console.log(nodes)
+ // console.log(nodes)
if (nodes.length === 1) { // 因为是定时器,没有选中则不用实时更新显示数据
this.moveShow(nodes[0]) // 监控模式下不可能托选,因此就只有一个数据
}
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 09042cb..0150b5f 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
@@ -17,7 +17,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.TaskService;
import org.nl.wms.sch.tasks.callEmpty.GjxCallEmpVehicleTask;
import org.nl.wms.sch.tasks.callEmpty.YqxCallEmpVehicleTask;
-import org.nl.wms.sch.tasks.callMaterial.YqxCallMaterial;
+import org.nl.wms.sch.tasks.callMaterial.YqxCallMaterialTask;
import org.nl.wms.sch.tasks.sendEmpty.HtSendEmpVehicleTask;
import org.nl.wms.sch.tasks.sendEmpty.YqxSendEmpVehicleTask;
import org.nl.wms.sch.tasks.sendMaterial.GjxSendMaterialTask;
@@ -234,7 +234,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
param.put("vehicle_type", vehicle_type);
param.put("vehicle_code", vehicle_code);
// 创建任务
- YqxCallMaterial taskBean = SpringContextHolder.getBean(YqxCallMaterial.class);
+ YqxCallMaterialTask taskBean = SpringContextHolder.getBean(YqxCallMaterialTask.class);
String task_id = taskBean.createTask(param);
} else if (StrUtil.equals(type, "5")) {
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java
index d607f5a..b4c2586 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java
@@ -61,6 +61,9 @@ public class WorkorderDto implements Serializable {
/** 回传MES状态 */
private String passback_status;
+ /** 设备编码 */
+ private String device_code;
+
/** 外部标识 */
private String ext_id;
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java
index 2efb31c..8addcce 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java
@@ -113,6 +113,12 @@ public class WorkorderServiceImpl implements WorkordeService {
@Override
@Transactional(rollbackFor = Exception.class)
public void create(WorkorderDto dto) {
+ Long device_id = dto.getDevice_id();
+ if (ObjectUtil.isNotEmpty(device_id)) {
+ WQLObject deviceTab = WQLObject.getWQLObject("PDM_BI_Device");
+ JSONObject object = deviceTab.query("device_id = '" + device_id + "'").uniqueResult(0);
+ dto.setDevice_code(object.getString("device_code"));
+ }
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
@@ -121,7 +127,6 @@ public class WorkorderServiceImpl implements WorkordeService {
String newCode = CodeUtil.getNewCode("PDM_SHIFTORDER");
dto.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId());
dto.setWorkorder_code(newCode);
- dto.setOrder_status("1");
dto.setCreate_id(currentUserId);
dto.setCreate_time(now);
dto.setCreate_name(nickName);
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterial.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java
similarity index 96%
rename from lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterial.java
rename to lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java
index 33e1f60..25f6881 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterial.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java
@@ -31,8 +31,8 @@ import java.util.List;
@Service
@RequiredArgsConstructor
@Slf4j
-public class YqxCallMaterial extends AbstractAcsTask {
- private final String THIS_CLASS = YqxCallMaterial.class.getName();
+public class YqxCallMaterialTask extends AbstractAcsTask {
+ private final String THIS_CLASS = YqxCallMaterialTask.class.getName();
@Override
@@ -268,10 +268,6 @@ public class YqxCallMaterial extends AbstractAcsTask {
@Override
public void cancel(String task_id) {
- WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
- JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
- if (ObjectUtil.isNotEmpty(taskObj))
- this.updateTaskStatus(taskObj,"0");
}
@Transactional(rollbackFor = Exception.class)
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java
new file mode 100644
index 0000000..665b98a
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java
@@ -0,0 +1,235 @@
+package org.nl.wms.sch.tasks.cpOut;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.nl.modules.common.exception.BadRequestException;
+import org.nl.modules.system.util.CodeUtil;
+import org.nl.modules.wql.WQL;
+import org.nl.modules.wql.core.bean.WQLObject;
+import org.nl.wms.sch.SchTaskDto;
+import org.nl.wms.sch.manage.AbstractAcsTask;
+import org.nl.wms.sch.manage.TaskStatusEnum;
+import org.nl.wms.sch.tasks.AcsTaskDto;
+import org.nl.wms.util.IdUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ *成品出库
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class CpOutTask extends AbstractAcsTask {
+ private final String THIS_CLASS = CpOutTask.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 regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
+
+ String task_id = task.getString("task_id");
+ JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
+
+ //任务取消
+ if (StrUtil.equals(status, "0")) {
+ // 取消删除任务
+ if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
+ throw new BadRequestException("已完成不能取消!");
+ }
+ String point_code2 = taskObj.getString("point_code2");
+ JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
+
+ taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
+ taskObj.put("remark", "任务已取消");
+ taskTab.update(taskObj);
+ // 释放终点点位
+ point2Obj.put("lock_type", "1");
+ point2Obj.put("point_status", "1");
+ pointTab.update(point2Obj);
+ }
+
+ if ("1".equals(status)) {
+ // 更新任务状态为执行中
+ taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode());
+ taskObj.put("update_time", DateUtil.now());
+ taskObj.put("car_no", taskObj.getString("car_no"));
+ taskTab.update(taskObj);
+ }
+
+ if (StrUtil.equals(status, "2")) {
+ // 更改任务状态为完成
+ taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
+ taskObj.put("update_time", DateUtil.now());
+ taskTab.update(taskObj);
+
+ // 任务表的点位1
+ String point_code1 = taskObj.getString("point_code1"); // 起点编码
+ JSONObject point1Obj = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);// 起点
+
+ //table_fk_id = 单据id
+ JSONObject regionIoObject = regionIoTab.query("iostorinv_id = '" + taskObj.getString("table_fk_id") + "'").uniqueResult(0);
+
+ String point_code2 = taskObj.getString("point_code2"); // 终点编码:出库点位
+ JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);// 终点
+
+ // 修改区域出入库 - 起点点位解锁、点位状态更新 - 终点解锁、更新状态
+ //区域出入表【st_ivt_regionIO】
+ regionIoObject.put("end_point_code", point_code2);
+ regionIoObject.put("start_region_id", point1Obj.getString("region_id")); // 终点区域
+ regionIoObject.put("end_region_id", point2Obj.getString("region_id")); // 终点区域
+ regionIoObject.put("bill_status", "3"); // 单据状态
+ regionIoObject.put("task_id", task_id); // 任务id
+ regionIoTab.update(regionIoObject);
+
+ //完成后将仓位库存删掉
+ //仓位库存表【ST_IVT_StructIvt】
+ WQLObject ivtTab = WQLObject.getWQLObject("ST_IVT_StructIvt");
+ ivtTab.delete("point_code = '" + taskObj.getString("point_code1") + "'");
+
+ // 点位解锁 并设置空位
+ point1Obj.put("lock_type", "1");
+ point1Obj.put("point_status", "1");
+ point2Obj.put("lock_type", "1");
+ point2Obj.put("point_status", "1");
+ pointTab.update(point1Obj);
+ pointTab.update(point2Obj);
+ }
+
+ }
+
+ @Override
+ public void findNextPoint() {
+ /*
+ * 根据业务找对应的终点
+ */
+ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
+ WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表
+ JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0);
+ for (int i = 0; i < taskArr.size(); i++) {
+ JSONObject taskObj = taskArr.getJSONObject(i);
+ String material_id = taskObj.getString("material_id");
+ JSONObject param1 = new JSONObject();
+ param1.put("flag", "1");
+ param1.put("material_id", material_id);
+ param1.put("region_code", "CPCKQ01");
+ //1、找空位的终点
+ JSONObject endPoint = WQL.getWO("QSCH_cpOut_01").addParamMap(param1).process().uniqueResult(0);
+ if (ObjectUtil.isNotEmpty(endPoint)) {
+ // 找到终点,上锁
+ taskObj.put("update_time", DateUtil.now());
+ taskObj.put("point_code2", endPoint.getString("point_code"));
+ taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
+ taskTab.update(taskObj);
+
+ //锁住终点
+ endPoint.put("task_id", taskObj.getString("task_id"));
+ endPoint.put("lock_type", "2");
+ pointTab.update(endPoint);
+ } else {
+ taskObj.put("remark", "成品出库区无可用货位");
+ taskObj.put("update_time", DateUtil.now());
+ }
+
+ taskTab.update(taskObj);
+
+ }
+ }
+
+ @Override
+ public List addTask() {
+ /*
+ * 下发给ACS时需要特殊处理
+ */
+ JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
+
+ ArrayList acsTaskArr = new ArrayList<>();
+ for (int i = 0; i < arr.size(); i++) {
+ JSONObject json = arr.getJSONObject(i);
+ AcsTaskDto dto = AcsTaskDto.builder()
+ .task_id(json.getString("task_id"))
+ .task_code(json.getString("task_code"))
+ .task_type(json.getString("acs_task_type"))
+ .start_device_code(json.getString("point_code1"))
+ .next_device_code(json.getString("point_code3"))
+ .vehicle_code(json.getString("vehicle_code"))
+ .vehicle_type(json.getString("vehicle_type"))
+ .priority(json.getString("priority"))
+ .remark(json.getString("remark"))
+ .build();
+ acsTaskArr.add(dto);
+ }
+ return acsTaskArr;
+ }
+
+ @Override
+ public String createTask(JSONObject whereJson) {
+ WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
+ String point_code1 = whereJson.getString("point_code1"); // 起点
+ String vehicle_type = whereJson.getString("vehicle_type");
+ String vehicle_code = whereJson.getString("vehicle_code");
+ String iostorinv_id = whereJson.getString("iostorinv_id");
+
+ SchTaskDto dto = SchTaskDto.builder()
+ .task_id(IdUtil.getLongId())
+ .task_code(CodeUtil.getNewCode("TASK_CODE"))
+ .task_type("task_type")
+ .task_name("成品区出库")
+ .task_status(TaskStatusEnum.SURE_END.getCode())
+ .point_code1(point_code1)
+ .vehicle_code(vehicle_code)
+ .vehicle_type(vehicle_type)
+ .handle_class(THIS_CLASS)
+ .create_time(DateUtil.now())
+ .request_param(whereJson.toJSONString())
+ .table_name("st_ivt_regionIO")
+ .table_fk("iostorinv_id")
+ .table_fk_id(Long.valueOf(iostorinv_id))
+ .build();
+ //任务表【SCH_BASE_Task】
+ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
+ JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
+ taskTab.insert(json);
+
+ // 单据设置执行中
+ JSONObject iostorinv = regionIoTab.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0);
+ iostorinv.put("bill_status", "2");
+ regionIoTab.update(iostorinv);
+
+ //创建好立即下发
+ this.immediateNotifyAcs();
+ return String.valueOf(dto.getTask_id());
+ }
+
+ @Override
+ public void forceFinish(String task_id) {
+ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
+ JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
+ if (ObjectUtil.isNotEmpty(taskObj))
+ this.updateTaskStatus(taskObj,"2");
+ else {
+ throw new BadRequestException("未找到该任务或者任务已完成");
+ }
+ }
+
+ @Override
+ public void cancel(String task_id) {
+ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
+ JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
+ if (ObjectUtil.isNotEmpty(taskObj))
+ this.updateTaskStatus(taskObj,"0");
+ }
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/wql/QSCH_cpOut_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/wql/QSCH_cpOut_01.wql
new file mode 100644
index 0000000..7546033
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/wql/QSCH_cpOut_01.wql
@@ -0,0 +1,59 @@
+[交易说明]
+ 交易名: 成品出库
+ 所属模块:
+ 功能简述:
+ 版权所有:
+ 表引用:
+ 版本经历:
+
+[数据库]
+ --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
+
+[IO定义]
+ #################################################
+ ## 表字段对应输入参数
+ #################################################
+ 输入.flag TYPEAS s_string
+ 输入.region_code TYPEAS s_string
+
+[临时表]
+ --这边列出来的临时表就会在运行期动态创建
+
+[临时变量]
+ --所有中间过程变量均可在此处定义
+
+[业务过程]
+
+ ##########################################
+ # 1、输入输出检查 #
+ ##########################################
+
+
+ ##########################################
+ # 2、主过程前处理 #
+ ##########################################
+
+
+ ##########################################
+ # 3、业务主过程 #
+ ##########################################
+
+ IF 输入.flag = "1"
+ QUERY
+ SELECT
+ *
+ FROM
+ SCH_BASE_Point
+ WHERE
+ is_used = '1'
+ AND is_delete = '0'
+ AND lock_type = '1'
+ AND is_used = '1'
+ AND point_status = '1'
+ OPTION 输入.region_code <> ""
+ region_code = 输入.region_code
+ ENDOPTION
+ ORDER BY point_code
+ ENDSELECT
+ ENDQUERY
+ ENDIF
\ No newline at end of file
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/bill/rest/RegionIoController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/bill/rest/RegionIoController.java
index 3d38fc0..59f7eeb 100644
--- a/lms/nladmin-system/src/main/java/org/nl/wms/st/bill/rest/RegionIoController.java
+++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/bill/rest/RegionIoController.java
@@ -1,5 +1,6 @@
package org.nl.wms.st.bill.rest;
+import com.alibaba.fastjson.JSONArray;
import org.nl.wms.st.bill.service.RegionIoService;
import org.nl.wms.st.bill.service.dto.RegionIoDto;
import org.springframework.data.domain.Pageable;
@@ -60,4 +61,13 @@ public class RegionIoController {
regionioService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
+
+ @PostMapping("/makeTask")
+ @Log("生成任务")
+ @ApiOperation("生成任务")
+ //@SaCheckPermission("@el.check('regionio:add')")
+ public ResponseEntity