add:任务下发按钮及逻辑

This commit is contained in:
2024-07-17 17:56:17 +08:00
parent ebc6330995
commit e9e5faa32a
2 changed files with 95 additions and 55 deletions

View File

@@ -1,5 +1,8 @@
package org.nl.wms.dispatch_manage.task.service.impl; package org.nl.wms.dispatch_manage.task.service.impl;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -11,6 +14,8 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.poi.ss.formula.functions.T;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.entity.PageQuery; import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException; import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum; import org.nl.common.enums.StatusEnum;
@@ -23,6 +28,7 @@ import org.nl.wms.dispatch_manage.task.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.dispatch_manage.task.service.dto.SchBaseTaskQuery; import org.nl.wms.dispatch_manage.task.service.dto.SchBaseTaskQuery;
import org.nl.wms.external_system.acs.service.WmsToAcsService;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler; import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService; import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService;
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution; import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
@@ -34,6 +40,7 @@ import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
@@ -60,6 +67,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Lazy @Lazy
private MoveStorageTask moveStorageTask; private MoveStorageTask moveStorageTask;
@Autowired
private WmsToAcsService wmsToAcsService;
@Override @Override
public IPage<SchBaseTask> queryAll(SchBaseTaskQuery whereJson, PageQuery page) { public IPage<SchBaseTask> queryAll(SchBaseTaskQuery whereJson, PageQuery page) {
List<String> collect = ObjectUtil.isNotEmpty(whereJson.getMore_status()) List<String> collect = ObjectUtil.isNotEmpty(whereJson.getMore_status())
@@ -76,11 +86,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
} }
@Override @Override
public List<Map> getByVehicle(String vehicle_code) { public List<Map> getByVehicle(String vehicle_code) {
if (StringUtils.isEmpty(vehicle_code)){ if (StringUtils.isEmpty(vehicle_code)) {
return new ArrayList<>(); return new ArrayList<>();
} }
return this.baseMapper.getByVehicle(ListOf.of(vehicle_code.split(","))); return this.baseMapper.getByVehicle(ListOf.of(vehicle_code.split(",")));
@@ -122,40 +130,65 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
} }
@Override @Override
public void operation(JSONObject param) { public void operation(JSONObject param) {
String task_code = param.getString("task_code"); String task_code = param.getString("task_code");
SchBaseTask task = this.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", task_code)); SchBaseTask task = this.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", task_code));
if (task.getStatus().equals(StatusEnum.FORM_STATUS.code("完成"))){ if (task.getStatus().equals(StatusEnum.FORM_STATUS.code("完成"))) {
throw new BadRequestException("当前任务已完成"); throw new BadRequestException("当前任务已完成");
} }
if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("完成"))){ if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("完成"))) {
MdPbVehicleMater vehicleMater = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>() MdPbVehicleMater vehicleMater = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", task.getVehicle_code())); .eq("vehicle_code", task.getVehicle_code()));
if (vehicleMater!=null && !StringUtils.isEmpty(vehicleMater.getProc_inst_id())){ if (vehicleMater != null && !StringUtils.isEmpty(vehicleMater.getProc_inst_id())) {
FlowContinueEvent continueEvent = new FlowContinueEvent(vehicleMater.getProc_inst_id(), null, null); FlowContinueEvent continueEvent = new FlowContinueEvent(vehicleMater.getProc_inst_id(), null, null);
BussEventMulticaster.Publish(continueEvent); BussEventMulticaster.Publish(continueEvent);
}else { } else {
String handleClass = task.getHandle_class(); String handleClass = task.getHandle_class();
try { try {
AbstractTask bean = (AbstractTask)SpringContextHolder.getBean(Class.forName(handleClass)); AbstractTask bean = (AbstractTask) SpringContextHolder.getBean(Class.forName(handleClass));
bean.finish(param); bean.finish(param);
}catch (Exception ex){ } catch (Exception ex) {
throw new BadRequestException(ex.getMessage()); throw new BadRequestException(ex.getMessage());
} }
} }
}else { } else if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("下发"))) {
this.update(new UpdateWrapper<SchBaseTask>() ArrayList<SchBaseTask> list = ListOf.of(task);
.set("status",param.getString("status")) if (!CollectionUtils.isEmpty(list)) {
List<String> taskCodes = list.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList());
TableDataInfo response = wmsToAcsService.interationToExt(list, "createTask");
if (!response.getCode().equals(String.valueOf(HttpStatus.HTTP_OK))) {
JSONArray results = (JSONArray) JSON.toJSON(response.getData());
if (!CollectionUtils.isEmpty(results)) {
for (Object result : results) {
Map resultM = (Map) result;
taskCodes.remove(resultM.get("task_code"));
this.update(new UpdateWrapper<SchBaseTask>()
.eq("task_code", resultM.get("task_code"))
.set("status", StatusEnum.FORM_STATUS.code("暂停"))
.set("update_time", DateUtil.now()).set("remark", resultM.get("msg")));
}
}
}
if (!CollectionUtils.isEmpty(taskCodes)) {
this.update(new UpdateWrapper<SchBaseTask>()
.set("status", StatusEnum.FORM_STATUS.code("下发"))
.in("task_code", taskCodes));
}
}
} else {
this.update(new UpdateWrapper<SchBaseTask>()
.set("status", param.getString("status"))
.eq("task_code", task_code)); .eq("task_code", task_code));
} }
} }
/** /**
"type": * "type":
"rm" 入满 标记目标货位异常,重新分配货位;更新任务终点,反馈目的货位 * "rm" 入满 标记目标货位异常,重新分配货位;更新任务终点,反馈目的货位
"rzd"入库阻挡 异常位生成移库单,标记目标货位异常,后续人工处理;更新任务终点,反馈目的货位 * "rzd"入库阻挡 异常位生成移库单,标记目标货位异常,后续人工处理;更新任务终点,反馈目的货位
"ck"空出 修改目标货位为空位,任务直接取消,不扣件关联单据已出库数量 * "ck"空出 修改目标货位为空位,任务直接取消,不扣件关联单据已出库数量
"czd"取货阻挡 异常位生成移库单,标记目标货位异常,后续人工处理;任务重新下发 * "czd"取货阻挡 异常位生成移库单,标记目标货位异常,后续人工处理;任务重新下发
*
* @return * @return
*/ */
@Override @Override
@@ -165,33 +198,33 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
StIvtStructattr stIvtStructattr = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", struct_code)); StIvtStructattr stIvtStructattr = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", struct_code));
SchBaseTask task = this.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", task_code)); SchBaseTask task = this.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", task_code));
switch (type){ switch (type) {
case "ck": case "ck":
MdPbVehicleMater vehicleCode = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>().eq("vehicle_code", task.getVehicle_code())); MdPbVehicleMater vehicleCode = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>().eq("vehicle_code", task.getVehicle_code()));
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>() iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
.set("status",StatusEnum.FLOW_STATUS.code("异常完成")) .set("status", StatusEnum.FLOW_STATUS.code("异常完成"))
.set("remark",task.getVehicle_code()+"载具空出:货位"+struct_code) .set("remark", task.getVehicle_code() + "载具空出:货位" + struct_code)
.eq("proc_inst_id",vehicleCode.getProc_inst_id())); .eq("proc_inst_id", vehicleCode.getProc_inst_id()));
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>() iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
.set("update_time", DateUtil.now()) .set("update_time", DateUtil.now())
.set("vehicle_code",null) .set("vehicle_code", null)
.set("remark",struct_code+"出库异常") .set("remark", struct_code + "出库异常")
.eq("struct_code", struct_code)); .eq("struct_code", struct_code));
this.update(new UpdateWrapper<SchBaseTask>() this.update(new UpdateWrapper<SchBaseTask>()
.set("status",StatusEnum.FORM_STATUS.code("取消")) .set("status", StatusEnum.FORM_STATUS.code("取消"))
.set("remark",struct_code+"出库异常") .set("remark", struct_code + "出库异常")
.set("update_time",DateUtil.now()) .set("update_time", DateUtil.now())
.eq("task_code",task_code)); .eq("task_code", task_code));
break; break;
case "rm": case "rm":
return dicisionStruct(struct_code,stIvtStructattr, task); return dicisionStruct(struct_code, stIvtStructattr, task);
case "rzd": case "rzd":
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>() iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
.set("update_time", DateUtil.now()) .set("update_time", DateUtil.now())
.set("vehicle_code",null) .set("vehicle_code", null)
.set("lock_type",StatusEnum.LOCK.code("无锁")) .set("lock_type", StatusEnum.LOCK.code("无锁"))
.eq("struct_code", task.getPoint_code2())); .eq("struct_code", task.getPoint_code2()));
return dicisionStruct(struct_code,stIvtStructattr, task); return dicisionStruct(struct_code, stIvtStructattr, task);
case "czd": case "czd":
moveTask(task_code, struct_code, stIvtStructattr); moveTask(task_code, struct_code, stIvtStructattr);
break; break;
@@ -203,15 +236,15 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
private void moveTask(String task_code, String struct_code, StIvtStructattr stIvtStructattr) { private void moveTask(String task_code, String struct_code, StIvtStructattr stIvtStructattr) {
AtomicReference<String> moveStruct = new AtomicReference<>(); AtomicReference<String> moveStruct = new AtomicReference<>();
this.update(new UpdateWrapper<SchBaseTask>() this.update(new UpdateWrapper<SchBaseTask>()
.set("status",StatusEnum.FORM_STATUS.code("生成")) .set("status", StatusEnum.FORM_STATUS.code("生成"))
.set("remark",struct_code+"出库阻挡二次下发") .set("remark", struct_code + "出库阻挡二次下发")
.set("update_time",DateUtil.now()) .set("update_time", DateUtil.now())
.eq("task_code",task_code)); .eq("task_code", task_code));
RedissonUtils.lock(()->{ RedissonUtils.lock(() -> {
System.out.println("---3--"+Thread.currentThread().getName()); System.out.println("---3--" + Thread.currentThread().getName());
Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("nearby"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code()))); Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("nearby"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code())));
moveStruct.set(((Map<String, String>) process.get("form_data")).get("end_struct_code")); moveStruct.set(((Map<String, String>) process.get("form_data")).get("end_struct_code"));
},"1"+ stIvtStructattr.getStor_code(),5); }, "1" + stIvtStructattr.getStor_code(), 5);
Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("异常位移库") Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("异常位移库")
, "is_send", false , "is_send", false
, "vehicle_code", "YCZJ" + task_code, "form_data", new JSONObject(MapOf.of("start_struct_code", struct_code, "end_struct_code", moveStruct.get()))); , "vehicle_code", "YCZJ" + task_code, "form_data", new JSONObject(MapOf.of("start_struct_code", struct_code, "end_struct_code", moveStruct.get())));
@@ -227,20 +260,20 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String new_struct_code = ((Map<String, String>) map.get("form_data")).get("end_struct_code"); String new_struct_code = ((Map<String, String>) map.get("form_data")).get("end_struct_code");
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>() iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
.set("remark", struct_code +"入满异常重新分配货位"+new_struct_code) .set("remark", struct_code + "入满异常重新分配货位" + new_struct_code)
.eq("proc_inst_id",vehicleCode.getProc_inst_id())); .eq("proc_inst_id", vehicleCode.getProc_inst_id()));
this.update(new UpdateWrapper<SchBaseTask>() this.update(new UpdateWrapper<SchBaseTask>()
.set("point_code2",new_struct_code) .set("point_code2", new_struct_code)
.set("remark", struct_code +"入满异常重新分配货位"+new_struct_code) .set("remark", struct_code + "入满异常重新分配货位" + new_struct_code)
.eq("task_code", task_code)); .eq("task_code", task_code));
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>() iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
.eq("struct_code", struct_code) .eq("struct_code", struct_code)
.set("lock_type",StatusEnum.LOCK.code("异常锁定")) .set("lock_type", StatusEnum.LOCK.code("异常锁定"))
.set("update_time",DateUtil.now()) .set("update_time", DateUtil.now())
.set("remark","入满异常:"+ task_code) .set("remark", "入满异常:" + task_code)
.set("vehicle_code","YCZJ"+ task_code)); .set("vehicle_code", "YCZJ" + task_code));
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("point_code2",new_struct_code); result.put("point_code2", new_struct_code);
return result; return result;
} }
} }

View File

@@ -135,9 +135,9 @@
<el-table-column prop="product_area" show-overflow-tooltip show-tooltip-when-overflow label="生产区域"/> <el-table-column prop="product_area" show-overflow-tooltip show-tooltip-when-overflow label="生产区域"/>
<el-table-column prop="task_code" show-overflow-tooltip show-tooltip-when-overflow label="任务编码"/> <el-table-column prop="task_code" show-overflow-tooltip show-tooltip-when-overflow label="任务编码"/>
<el-table-column prop="task_type" show-overflow-tooltip show-tooltip-when-overflow label="任务类型"> <el-table-column prop="task_type" show-overflow-tooltip show-tooltip-when-overflow label="任务类型">
<template slot-scope="scope"> <template slot-scope="scope">
{{ statusEnum.label.TASK_TYPE[scope.row.task_type] }} {{ statusEnum.label.TASK_TYPE[scope.row.task_type] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="acs_type" show-overflow-tooltip show-tooltip-when-overflow width="130" label="ACS任务类型"/> <el-table-column prop="acs_type" show-overflow-tooltip show-tooltip-when-overflow width="130" label="ACS任务类型"/>
<el-table-column prop="status" show-overflow-tooltip show-tooltip-when-overflow label="任务状态"> <el-table-column prop="status" show-overflow-tooltip show-tooltip-when-overflow label="任务状态">
@@ -164,8 +164,15 @@
<el-table-column prop="create_time" show-overflow-tooltip show-tooltip-when-overflow label="创建时间"/> <el-table-column prop="create_time" show-overflow-tooltip show-tooltip-when-overflow label="创建时间"/>
<el-table-column prop="update_name" show-overflow-tooltip show-tooltip-when-overflow label="修改人"/> <el-table-column prop="update_name" show-overflow-tooltip show-tooltip-when-overflow label="修改人"/>
<el-table-column prop="update_time" show-overflow-tooltip show-tooltip-when-overflow label="修改时间"/> <el-table-column prop="update_time" show-overflow-tooltip show-tooltip-when-overflow label="修改时间"/>
<el-table-column v-permission="[]" label="操作" width="200px" align="center" fixed="right"> <el-table-column v-permission="[]" label="操作" width="250px" align="center" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button
type="text"
icon="el-icon-success"
@click="doOperate(scope.row, 'c')"
:disabled="scope.row.status!=='10' && scope.row.status!=='30' "
>下发
</el-button>
<el-button <el-button
type="text" type="text"
icon="el-icon-success" icon="el-icon-success"
@@ -235,7 +242,7 @@ export default {
name: 'Task', name: 'Task',
components: {pagination, crudOperation, rrOperation, udOperation}, components: {pagination, crudOperation, rrOperation, udOperation},
mixins: [presenter(), header(), form(defaultForm), crud()], mixins: [presenter(), header(), form(defaultForm), crud()],
statusEnums: [ 'TASK_TYPE', 'FORM_STATUS' ], statusEnums: ['TASK_TYPE', 'FORM_STATUS'],
cruds() { cruds() {
return CRUD({ return CRUD({
title: '任务管理', title: '任务管理',
@@ -287,7 +294,7 @@ export default {
status = '90' status = '90'
break break
case 'c':// 下发 case 'c':// 下发
status = '20' status = '15'
break break
case 'd':// 详情 case 'd':// 详情
status = 'view' status = 'view'
@@ -310,7 +317,7 @@ export default {
console.log(err.response.data.message) console.log(err.response.data.message)
}) })
}, },
taskScheduler(){ taskScheduler() {
crudSchBaseTask.scheduler().then(res => { crudSchBaseTask.scheduler().then(res => {
this.crud.toQuery() this.crud.toQuery()
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)