add:添加任务配置

This commit is contained in:
zhangzq
2024-06-06 16:27:44 +08:00
parent cb35636d6f
commit 7e9f52d7db
25 changed files with 198 additions and 134 deletions

View File

@@ -20,7 +20,7 @@ public class MapOf implements Serializable {
}
public static <K> HashMap push(Map...item){
HashMap map = new HashMap<>();
for (int i = 0; i < (item.length & ~1); i=i+2) {
for (int i = 0; i < (item.length & ~1); i=i+1) {
map.putAll(item[i]);
}
return map;

View File

@@ -53,8 +53,8 @@ public class AlmEarlyInterceptor implements Interceptor {
Field field = param1.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return (String) field.get(param1);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

View File

@@ -46,10 +46,10 @@ public class MybatisPlusConfig {
return configuration -> configuration.addInterceptor(new PageInterceptor());
}
@Bean
public Interceptor datazhuazhuaInterceptor() {
return new AlmEarlyInterceptor();
}
// @Bean
// public Interceptor datazhuazhuaInterceptor() {
// return new AlmEarlyInterceptor();
// }
@PostConstruct
public void datainnit() {

View File

@@ -3,6 +3,7 @@ package org.nl.wms.decision_manage.applyTask.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
@@ -21,6 +22,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.function.Consumer;
/**
@@ -58,8 +60,11 @@ public class ApplyFlowTask extends AbstractApplyTask {
}
JSONObject mstJ = (JSONObject) JSONObject.toJSON(mst);
mstJ.put("stor_code",item.get(0).getStor_code());
//更新载具proc_inst_id
BussEventMulticaster.Publish(
new FlowStartEvent("md_group",null,new JSONObject(MapOf.of("start_point",point_code1)))
new FlowStartEvent("md_group",
proc_inst_id -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>().set("proc_inst_id",proc_inst_id).eq("vehicle_code",vehicle_code))
,new JSONObject(MapOf.of("target_point", point_code1)))
.build("md_group_dick",mst.getId(),mst.getSource_form_type(),mst.getSource_form_id(), mstJ)
.build("md_pb_vehicleMater",item)
);

View File

@@ -1,16 +0,0 @@
package org.nl.wms.dispatch_manage.task.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/5/6 14:35
*/
public interface TaskHandler extends ClassProcess {
}

View File

@@ -1,18 +0,0 @@
package org.nl.wms.dispatch_manage.task.handler.impl;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.springframework.stereotype.Service;
/*
* @author ZZQ
* @Date 2024/5/6 14:34
*/
@Service
public class AgvTaskHandler implements TaskHandler {
@Override
public JSONObject process(JSONObject from, JSONObject param) {
return null;
}
}

View File

@@ -55,7 +55,7 @@
md_pb_vehicleMater
LEFT JOIN st_ivt_structattr ON md_pb_vehicleMater.vehicle_code = st_ivt_structattr.vehicle_code
LEFT JOIN md_me_materialbase ON md_pb_vehicleMater.material_id = md_me_materialbase.material_id
LEFT JOIN sch_base_task ON (md_pb_vehicleMater.vehicle_code = sch_base_task.vehicle_code )
LEFT JOIN sch_base_task ON (md_pb_vehicleMater.vehicle_code = sch_base_task.vehicle_code and md_pb_vehicleMater.task_code = sch_base_task.task_code )
where md_pb_vehicleMater.vehicle_code in
<foreach collection="vehicles" item="vehicle_code" open="(" close=")" separator=",">
#{vehicle_code}

View File

@@ -29,6 +29,7 @@ import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -64,6 +65,7 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
StringBuffer buffer = new StringBuffer();
//基于明细id拆分还是继续vehicle_code拆分
List<JSONObject> subList = new ArrayList<>();
Map<String, JSONObject> tmpMap = new HashMap<>();
for (int i = 0; i < items.size(); i++) {
JSONObject item = items.getJSONObject(i);
JSONObject t = (JSONObject)item.remove("t");
@@ -73,10 +75,15 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
subt.put("vehicle_code",vehicle_code);
JSONObject sub = new JSONObject(item);
sub.put("t",subt);
if (tmpMap.get(vehicle_code) == null){
tmpMap.put(vehicle_code,sub);
}
subList.add(sub);
}
}
if (!CollectionUtils.isEmpty(subList)){
//现在子流程跟载具有关后续可以通过配置拆分字段vehicle_code跟拆分规则实现
System.out.println("子流程数据合并结果:"+subList.size()+"__"+tmpMap.size());
if (!CollectionUtils.isEmpty(tmpMap)){
// for (JSONObject o : subList) {
// ExecutionEntity subEntity = new ExecutionEntity();
// subEntity.setParent_id(entity.getProc_inst_id());
@@ -89,7 +96,7 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
// commandExecutor.execute(new StartInstanceCmd(), subEntity);
// }
//子流程并行,子流程单一的时候直接串行
subList.stream().map((Function<Object, CompletableFuture>) o -> CompletableFuture.runAsync(() -> {
tmpMap.values().stream().map((Function<Object, CompletableFuture>) o -> CompletableFuture.runAsync(() -> {
ExecutionEntity subEntity = new ExecutionEntity();
subEntity.setParent_id(entity.getProc_inst_id());
subEntity.setForm_id(entity.getForm_id());

View File

@@ -0,0 +1,78 @@
package org.nl.wms.flow_manage.flow.service.classprocessimpl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.stream.Collectors;
/*
* @author ZZQ
* @Date 2024/5/6 14:34
* 堆垛机入库任务
*/
@Service
public class CreateTaskProcessHandler implements ClassProcess {
@Autowired
ISchBaseTaskService taskService;
@Autowired
IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
@Transactional
public JSONObject process(JSONObject from, JSONObject param) {
//区分出库还是入库
String vehicle_code = from.getString("vehicle_code");
String struct_code = from.getString("struct_code");
String target_point = param.getString("target_point");
String task_type = param.getString("task_type");
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)||StringUtils.isEmpty(struct_code)){
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
}
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.ne("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
//根据不同的任务类型调用不同的任务创建逻辑
SchBaseTask task = new SchBaseTask();
task.setId(IdUtil.getStringId());
task.setSource_form_id(from.getString("id"));
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
task.setHandle_class(this.getClass().getName());
task.setAcs_type("");
task.setCreate_time(DateUtil.now());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setTask_type(param.getString("task_type"));
task.setVehicle_code(vehicle_code);
task.setPoint_code1(target_point);
task.setPoint_code2(struct_code);
taskService.create(task);
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()));
return (JSONObject)JSON.toJSON(task);
}
}

View File

@@ -1,4 +1,4 @@
package org.nl.wms.dispatch_manage.task.handler.impl;
package org.nl.wms.flow_manage.flow.service.classprocessimpl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
@@ -9,7 +9,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.wms.dispatch_manage.task.handler.StructEvent;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
@@ -24,7 +24,7 @@ import java.util.List;
* @Date 2024/5/6 14:34
*/
@Service
public class TaskStatusHandler implements TaskHandler {
public class FinishTaskProcessHandler implements ClassProcess {
@Autowired
private ISchBaseTaskService schBaseTaskService;

View File

@@ -1,24 +1,28 @@
package org.nl.wms.dispatch_manage.task.handler.impl;
package org.nl.wms.flow_manage.flow.service.classprocessimpl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.system_manage.service.param.ISysParamService;
import org.nl.wms.system_manage.service.param.dao.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
@@ -30,7 +34,7 @@ import java.util.stream.Collectors;
* 出库任务入库任务
*/
@Service
public class OutStorageTaskHandler implements TaskHandler {
public class OutStorageTaskHandler implements ClassProcess {
@Autowired
private ISchBaseTaskService taskService;
@@ -39,8 +43,11 @@ public class OutStorageTaskHandler implements TaskHandler {
@Autowired
private IStIvtStructattrService iStIvtStructattrService;
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
@Transactional
public JSONObject process(JSONObject from, JSONObject param) {
//区分出库还是入库
//根据不同的仓位设置不同的终点
@@ -75,6 +82,9 @@ public class OutStorageTaskHandler implements TaskHandler {
task.setPoint_code1(struct_code);
task.setPoint_code2(end_point);
taskService.save(task);
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()));
Boolean isSend = param.getBoolean("is_send");
if (isSend){
//参数封装调acs接口

View File

@@ -1,9 +1,10 @@
package org.nl.wms.dispatch_manage.task.handler.impl;
package org.nl.wms.flow_manage.flow.service.classprocessimpl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
@@ -11,12 +12,14 @@ import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
@@ -28,7 +31,7 @@ import java.util.stream.Collectors;
* 堆垛机入库任务
*/
@Service
public class StackingTaskHandler implements TaskHandler {
public class StackingTaskHandler implements ClassProcess {
@Autowired
ISchBaseTaskService taskService;
@@ -37,6 +40,7 @@ public class StackingTaskHandler implements TaskHandler {
IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
@Transactional
public JSONObject process(JSONObject from, JSONObject param) {
//区分出库还是入库
String vehicle_code = from.getString("vehicle_code");
@@ -64,10 +68,10 @@ public class StackingTaskHandler implements TaskHandler {
task.setPoint_code1(start_point);
task.setPoint_code2(struct_code);
taskService.create(task);
Boolean isSend = param.getBoolean("is_send");
if (isSend){
//参数封装调acs接口
}
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()));
return (JSONObject)JSON.toJSON(task);
}
}

View File

@@ -59,7 +59,7 @@ public class FlowStartEvent extends PublishEvent {
List<ExecutionDto> item =new ArrayList();
for (Z z : datas) {
JSONObject data = (JSONObject)JSONObject.toJSON(z);
String form_id = (String)data.getString("form_id");
String form_id = (String)data.getString("id");
String source_form_id = (String)data.getString("source_form_id");
String source_form_type = (String)data.getString("source_form_type");
ExecutionDto build = ExecutionDto.builder()

View File

@@ -94,6 +94,9 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
dick.setCode(CodeUtil.getNewCode("md_group_dick"));
dick.setId(IdUtil.getStringId());
map.put(vehicle_code,dick);
vehicleMater.setGroup_id(dick.getId());
}else {
vehicleMater.setGroup_id(mdGruopDick.getId());
}
vehicleMater.setId(IdUtil.getStringId());
vehicleMater.setCreate_time(now);

View File

@@ -28,6 +28,11 @@ public class MdPbVehicleMater implements Serializable {
@TableId
private String id;
/**
* 组盘id
*/
private String group_id;
/**
* 仓库
*/
@@ -79,6 +84,10 @@ public class MdPbVehicleMater implements Serializable {
* 源单id
*/
private String source_form_id;
/**
* 任务编码
*/
private String task_code;
/**
* 扩展信息
@@ -107,6 +116,10 @@ public class MdPbVehicleMater implements Serializable {
* 备注
*/
private String remark;
/**
* 流程实例
*/
private String proc_inst_id;
}

View File

@@ -77,5 +77,11 @@ public class StIvtIostorinvController {
iStIvtIostorinvService.cancelVehicle(dtl);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/taskOpen")
@Log("任务下发")
public ResponseEntity<Object> taskOpen(@RequestBody JSONObject form) {
iStIvtIostorinvService.taskOpen(form);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -27,7 +27,7 @@ import java.util.Map;
* @since 2024-03-28
*/
@RestController
@RequestMapping("api/stIvtIostorinvout")
@RequestMapping("api/stIvtIostorinvOut")
public class StIvtIostorinvOutController {
@Autowired

View File

@@ -14,6 +14,7 @@ public class StorInvQuery extends BaseQuery<StIvtIostorinv>{
private String code;
private String status;
private String bill_type;
private Boolean in_storage;
private String product_code;
}

View File

@@ -128,7 +128,6 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
vehicleMater.setSource_form_type("st_ivt_iostorinvdtl");
vehicleMater.setCreate_name(user);
vehicleMater.setId(IdUtil.getStringId());
vehicleMaters.add(vehicleMater);
MdGruopDick dick = new MdGruopDick();
dick.setCode(CodeUtil.getNewCode("md_group_dick"));
dick.setId(IdUtil.getStringId());
@@ -139,6 +138,9 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
dick.setSource_form_id(dtl.getId());
dick.setStatus(StatusEnum.FORM_STATUS.code("完成"));
gruops.add(dick);
vehicleMater.setGroup_id(dick.getId());
vehicleMaters.add(vehicleMater);
}
//载具校验
Set<String> collect = vehicleMaters.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.toSet());
@@ -226,19 +228,11 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
StIvtIostorinv iostorinv = form.toJavaObject(StIvtIostorinv.class);
//查询明细
List<StIvtIostorinvdtl> dtls = iStIvtIostorinvDtlService.list(new QueryWrapper<StIvtIostorinvdtl>().eq("inv_id", iostorinv.getId()));
List<Map> dtlJson = new ArrayList<>();
if (!CollectionUtils.isEmpty(dtls)){
for (StIvtIostorinvdtl dtl : dtls) {
dtlJson.add(MapOf.of("form_id",dtl.getId()
,"t",JSONObject.toJSON(dtl)
,"source_form_type",dtl.getSource_form_type()
,"source_form_id",dtl.getSource_form_id()));
}
}
BussEventMulticaster.Publish(new FlowStartEvent("st_ivt_iostorinv_out", null,null)
.build("st_ivt_iostorinv_out",iostorinv.getId(),iostorinv.getSource_form_type(),iostorinv.getSource_form_id(),form)
.build("st_ivt_iostorinvdtl_out",dtlJson)
,true);
BussEventMulticaster.Publish(new FlowStartEvent("st_ivt_iostorinv_"+(iostorinv.getIn_storage()?"in":"out"), null,null)
.build("st_ivt_iostorinv",iostorinv.getId(),iostorinv.getSource_form_type(),iostorinv.getSource_form_id(),form)
.build("st_ivt_iostorinvdtl",dtls)
);
this.update(new UpdateWrapper<StIvtIostorinv>()
.set("status",StatusEnum.FORM_STATUS.code("执行中"))