add:添加托盘出入库流程
This commit is contained in:
@@ -31,8 +31,8 @@ public enum StatusEnum {
|
||||
/**
|
||||
* 出入库单据类型
|
||||
*/
|
||||
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask", "拣选出库", "23","conveyorOutStorageTask")),
|
||||
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask","托盘入库", "30","inStorageTask")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask", "拣选出库", "23","conveyorOutStorageTask","托盘出库", "40","outStorageTask")),
|
||||
|
||||
/**
|
||||
* 任务类型
|
||||
|
||||
@@ -6,6 +6,7 @@ import org.nl.wms.system_manage.service.coderule.ISysCodeRuleService;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class CodeUtil {
|
||||
|
||||
@@ -14,7 +15,8 @@ public class CodeUtil {
|
||||
public static String getNewCode(String ruleCode) {
|
||||
final String[] code = {""};
|
||||
ISysCodeRuleService service = SpringContextHolder.getBean(ISysCodeRuleService.class);
|
||||
RedissonUtils.lock(() -> code[0] = service.codeDemo("1",ruleCode), ruleCode, 1);
|
||||
RedissonUtils.lock(() ->
|
||||
code[0] = service.codeDemo("1",ruleCode), ruleCode, 2);
|
||||
return code[0];
|
||||
}
|
||||
public static String codeView(String ruleCode) {
|
||||
|
||||
@@ -40,7 +40,7 @@ public class RedissonUtils {
|
||||
ex.printStackTrace();
|
||||
throw ex;
|
||||
}finally {
|
||||
if (isLock){
|
||||
if (lock.isHeldByCurrentThread() && lock.isLocked()){
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.common.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nl.common.domain.interfaces.CallBack;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
@@ -11,6 +12,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
@@ -66,6 +68,10 @@ public class SpringContextHolder implements ApplicationContextAware, DisposableB
|
||||
assertContextInjected();
|
||||
return applicationContext.getBean(requiredType);
|
||||
}
|
||||
public static <T> Map<String,T> getBeansOfType(Class<T> requiredType) {
|
||||
assertContextInjected();
|
||||
return applicationContext.getBeansOfType(requiredType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取SpringBoot 配置信息
|
||||
|
||||
@@ -1,16 +1,24 @@
|
||||
package org.nl.wms.base_manage.bsrealstorattr.controller;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.wms.base_manage.bsrealstorattr.service.IStIvtBsrealstorattrService;
|
||||
import org.nl.wms.base_manage.bsrealstorattr.service.dao.StIvtBsrealstorattr;
|
||||
import org.nl.wms.base_manage.bsrealstorattr.service.dto.StorQuery;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -31,6 +39,11 @@ public class StIvtBsrealstorattrController {
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtBsrealstorattrService iStIvtBsrealstorattrService;
|
||||
/**
|
||||
* 仓库服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtStructattrService iStIvtStructattrService;
|
||||
|
||||
@GetMapping
|
||||
public ResponseEntity<Object> query(StorQuery query, PageQuery page){
|
||||
@@ -68,4 +81,43 @@ public class StIvtBsrealstorattrController {
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@PostMapping("/batchSaveAttr")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> batchSaveAttr(@Validated @RequestBody JSONObject config) {
|
||||
|
||||
int 排 = config.getInteger("x");
|
||||
int 列 = config.getInteger("y");
|
||||
int 层 = config.getInteger("z");
|
||||
String sect_code = config.getString("sect_code");
|
||||
String stor_code = config.getString("stor_code");
|
||||
String now = DateUtil.now();
|
||||
ArrayList<StIvtStructattr> list = new ArrayList<>();
|
||||
for (int x = 1; x <= 排; x++) {
|
||||
for (int y = 1; y <= 列; y++) {
|
||||
for (int z = 1; z <= 层; z++) {
|
||||
StIvtStructattr attr = new StIvtStructattr();
|
||||
attr.setId(IdUtil.getStringId());
|
||||
attr.setSect_code(sect_code);
|
||||
attr.setStor_code(stor_code);
|
||||
String ny = (y < 10) ? "0" + y : "" + y;
|
||||
String nz = (z < 10) ? "0" + z : "" + z;
|
||||
attr.setStruct_code("T0"+x+"-"+ny+"-"+nz);
|
||||
attr.setStruct_name(x+"排"+y+"列"+z+"层");
|
||||
attr.setCreate_id("1");
|
||||
attr.setRow_num(x);
|
||||
attr.setCol_num(y);
|
||||
attr.setBlock_num(1);
|
||||
attr.setLayer_num(z);
|
||||
attr.setCreate_time(now);
|
||||
attr.setCreate_name("Admin");
|
||||
attr.setIs_temp(false);
|
||||
attr.setIs_used(true);
|
||||
list.add(attr);
|
||||
}
|
||||
}
|
||||
}
|
||||
iStIvtStructattrService.saveBatch(list);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package org.nl.wms.decision_manage.handler.chainer;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.decision_manage.handler.chainer.impl.EndDecisionChainer;
|
||||
import org.nl.wms.decision_manage.handler.chainer.impl.ExecuteDecisionChainer;
|
||||
import org.nl.wms.decision_manage.handler.chainer.impl.StartDecisionChainer;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.interceptor.CommandInterceptor;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.interceptor.impl.InvokeCommandInterceptor;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.interceptor.impl.ThreadCommandInterceptor;
|
||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/3/21 11:26
|
||||
*/
|
||||
@Configuration
|
||||
public class ChainerService {
|
||||
|
||||
|
||||
public static DecisionerChain start(List<String> decisionerTypes, JSONObject form){
|
||||
List<DecisionerChain> chain = new ArrayList<>();
|
||||
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class);
|
||||
Decisioner decisioner = decisionerMap.get(decisionerTypes.get(0));
|
||||
StartDecisionChainer start = new StartDecisionChainer(decisioner.strategyConfig.getStrategy_type(),form);
|
||||
EndDecisionChainer end = new EndDecisionChainer(decisioner.strategyConfig.getStrategy_type(),form);
|
||||
ExecuteDecisionChainer execute = new ExecuteDecisionChainer(decisionerTypes,form);
|
||||
chain.add(start);
|
||||
chain.add(execute);
|
||||
chain.add(end);
|
||||
for (int i = 0; i < chain.size() - 1; i++) {
|
||||
chain.get(i).setNext(chain.get(i + 1));
|
||||
}
|
||||
return chain.get(0);
|
||||
}
|
||||
|
||||
|
||||
public static DecisionerChain initCommandInterceptor(){
|
||||
|
||||
// chain.add(new ThreadCommandInterceptor());
|
||||
// chain.add(new InvokeCommandInterceptor());
|
||||
// for (int i = 0; i < chain.size() - 1; i++) {
|
||||
// chain.get(i).setNext(chain.get(i + 1));
|
||||
// }
|
||||
// return chain.get(0);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package org.nl.wms.decision_manage.handler.chainer;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/3/21 11:10
|
||||
* 链式调用
|
||||
*/
|
||||
@Data
|
||||
public abstract class DecisionerChain<T> {
|
||||
|
||||
private DecisionerChain<T> next;
|
||||
|
||||
protected abstract T execute(T executeParam);
|
||||
|
||||
public final T chainExecute(T executeParam){
|
||||
T result = this.execute(executeParam);
|
||||
if (this.next!=null){
|
||||
result = this.next.chainExecute(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public final Map process(T executeParam){
|
||||
T t = this.chainExecute(executeParam);
|
||||
return packge(t);
|
||||
}
|
||||
public Map packge(T processResult){
|
||||
return new HashMap();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package org.nl.wms.decision_manage.handler.chainer.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.Data;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
|
||||
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.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/3/21 11:10
|
||||
* 链式调用
|
||||
*/
|
||||
@Data
|
||||
public class EndDecisionChainer extends DecisionerChain<List> {
|
||||
|
||||
private String strategy_type;
|
||||
|
||||
private JSONObject startParam;
|
||||
|
||||
private List result;
|
||||
|
||||
|
||||
public EndDecisionChainer(String strategy_type, JSONObject startParam) {
|
||||
this.strategy_type = strategy_type;
|
||||
this.startParam = startParam;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List execute(List transfers) {
|
||||
if (CollectionUtils.isEmpty(transfers)){
|
||||
throw new BadRequestException("当前分配策略无可用货位");
|
||||
}
|
||||
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
||||
IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class);
|
||||
IMdPbVehicleMaterService iMdPbVehicleMaterService = SpringContextHolder.getBean(IMdPbVehicleMaterService.class);
|
||||
List<String> structs = new ArrayList<>();
|
||||
if (in_storage){
|
||||
StIvtStructattr structattr = (StIvtStructattr)transfers.get(0);
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("vehicle_code", startParam.getString("vehicle_code"))
|
||||
.set("lock_type", StatusEnum.LOCK.code("入"))
|
||||
.eq("struct_code", structattr.getStruct_code()));
|
||||
System.out.println("货位绑定成功"+structattr.getStruct_code());
|
||||
structs.add(structattr.getStruct_code());
|
||||
}else {
|
||||
for (StructattrVechielDto vechielDto : ((List<StructattrVechielDto>) transfers)) {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty",vechielDto.getFrozen_qty())
|
||||
.eq("id",vechielDto.getVm_id()));
|
||||
}
|
||||
List<String> collect = ((List<StructattrVechielDto>) transfers).stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList());
|
||||
System.out.println("载具绑定成功"+collect.toString());
|
||||
structs = collect;
|
||||
}
|
||||
return structs;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package org.nl.wms.decision_manage.handler.chainer.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.Data;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.unify.Command;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||
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.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/3/21 11:10
|
||||
* 链式调用
|
||||
*/
|
||||
@Data
|
||||
public class ExecuteDecisionChainer extends DecisionerChain<List> {
|
||||
|
||||
private List<String> decisionerTypes;
|
||||
private JSONObject startPatam;
|
||||
|
||||
public ExecuteDecisionChainer(List<String> decisionerTypes, JSONObject startPatam) {
|
||||
this.decisionerTypes = decisionerTypes;
|
||||
this.startPatam = startPatam;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List execute(List transfers) {
|
||||
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class);
|
||||
List list = new ArrayList();
|
||||
for (String decisionerType : decisionerTypes) {
|
||||
Decisioner decisioner = decisionerMap.get(decisionerType);
|
||||
list = decisioner.handler(transfers, startPatam);
|
||||
if (CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+transfers.size());
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package org.nl.wms.decision_manage.handler.chainer.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.Data;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.unify.Command;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
|
||||
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.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/3/21 11:10
|
||||
* 链式调用
|
||||
*/
|
||||
@Data
|
||||
public class StartDecisionChainer extends DecisionerChain<List> {
|
||||
|
||||
private String strategy_type;
|
||||
|
||||
private JSONObject startParam;
|
||||
|
||||
|
||||
public StartDecisionChainer(String strategy_type,JSONObject startParam) {
|
||||
this.strategy_type = strategy_type;
|
||||
this.startParam = startParam;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List execute(List from) {
|
||||
List list;
|
||||
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
||||
IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class);
|
||||
if (in_storage){
|
||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("is_used", true)
|
||||
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
||||
.eq("stor_code", startParam.getString("stor_code"));
|
||||
query.isNull("vehicle_code");
|
||||
list = iStIvtStructattrService.list(query);
|
||||
}else {
|
||||
list = iStIvtStructattrService.structVehicle(MapOf.of("stor_code",startParam.getString("stor_code")));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map packge(List processResult) {
|
||||
if (CollectionUtils.isEmpty(processResult)){
|
||||
throw new BadRequestException("策略分配异常:结果值为空");
|
||||
}
|
||||
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
||||
if (in_storage){
|
||||
return MapOf.of("struct_code",processResult.get(0));
|
||||
}else {
|
||||
return MapOf.of("vehicle_code",processResult.stream().collect(Collectors.joining(",")));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.nl.wms.decision_manage.handler;
|
||||
package org.nl.wms.decision_manage.handler.decisioner;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.nl.wms.decision_manage.handler.impl.base;
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
@@ -6,7 +6,7 @@ import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery;
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.nl.wms.decision_manage.handler.impl.base;
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -7,7 +7,7 @@ import org.nl.common.utils.ListOf;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -1,24 +1,19 @@
|
||||
package org.nl.wms.decision_manage.handler.impl.base;
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.utils.MapOf;
|
||||
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
@@ -51,7 +46,7 @@ public class FIFORuleHandler extends Decisioner<StructattrVechielDto, JSONObject
|
||||
public List<StructattrVechielDto> handler(List<StructattrVechielDto> list, JSONObject param) {
|
||||
// 判断仓位是否为空
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
throw new BadRequestException("仓位集合为空!");
|
||||
throw new BadRequestException("库存分配失败:库存不足!");
|
||||
}
|
||||
//分配数量
|
||||
int plan_qty = param.getInteger("qty");
|
||||
@@ -65,7 +60,7 @@ public class FIFORuleHandler extends Decisioner<StructattrVechielDto, JSONObject
|
||||
|
||||
List<StructattrVechielDto> disList = new ArrayList<>();
|
||||
for (StructattrVechielDto structattr : vechielDtos) {
|
||||
if (need.contains(structattr.getVehicle_code())){
|
||||
if (need.contains(structattr.getVehicle_code()) && structattr.getFrozen_qty().intValue()==0){
|
||||
int cause_qty = structattr.getQty().subtract(structattr.getFrozen_qty()).intValue();
|
||||
int sub = plan_qty - cause_qty;
|
||||
disList.add(structattr);
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.nl.wms.decision_manage.handler.impl.base;
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
@@ -7,7 +7,7 @@ import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService;
|
||||
import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo;
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -1,13 +1,10 @@
|
||||
package org.nl.wms.decision_manage.handler.impl.base;
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.decision_manage.service.dao.StStrategyConfig;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.nl.wms.decision_manage.handler.impl.base;
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.nl.wms.decision_manage.handler.impl.diy;
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.diy;
|
||||
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -42,7 +42,7 @@ import java.util.List;
|
||||
* @created 2020年6月12日 下午5:53:28
|
||||
*/
|
||||
@Slf4j
|
||||
@Service("ZPInStorage")
|
||||
@Service("groupInStorage")
|
||||
public class GroupDickInStorageTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package org.nl.wms.dispatch_manage.task.handler.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;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.publish.BussEventMulticaster;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||
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.monitor.event.FlowContinueEvent;
|
||||
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
|
||||
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
|
||||
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* Title: AbstractAcsTask.java Description:任务抽象类
|
||||
* <p>
|
||||
* Task状态:01生成 ,02:确定起点,03、确定终点,04、起点和终点都确认,05:下发,可以下发, 06、执行中 07、完成
|
||||
* 完成方式:01自动,02:wcs删除,03、wms删除,04、发给wcs失败自动删除
|
||||
*
|
||||
* @author ldjun
|
||||
* @created 2020年6月12日 下午5:53:28
|
||||
*/
|
||||
@Slf4j
|
||||
@Service("palletInStorageTask")
|
||||
public class PalletInStorageTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
@Autowired
|
||||
private IActRuExecutionService iActRuExecutionService;
|
||||
|
||||
@Override
|
||||
public JSONObject createTask(JSONObject data) {
|
||||
for (String vehicle_code : data.keySet()) {
|
||||
String point_code1 = data.getString(vehicle_code);
|
||||
if (StringUtils.isEmpty(point_code1)){
|
||||
throw new BadRequestException("申请任务失败:请求参数数据异常");
|
||||
}
|
||||
List<MdPbVehicleMaterVo> item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code);
|
||||
if (CollectionUtils.isEmpty(item)){
|
||||
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"物料信息不存在");
|
||||
}
|
||||
MdPbVehicleMaterVo vehicleMater = item.get(0);
|
||||
//更新载具proc_inst_id
|
||||
String currentInstId = vehicleMater.getProc_inst_id();
|
||||
if (StringUtils.isEmpty(currentInstId)){
|
||||
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"未创建入库流程");
|
||||
}
|
||||
ActRuExecution execution = iActRuExecutionService.getById(currentInstId);
|
||||
if (execution == null){
|
||||
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"流程信息不存在"+currentInstId);
|
||||
}
|
||||
FlowContinueEvent continueEvent = new FlowContinueEvent(currentInstId, null, new JSONObject(MapOf.of("start_point", point_code1)));
|
||||
BussEventMulticaster.Publish(continueEvent);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(JSONObject data) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,10 @@
|
||||
package org.nl.wms.external_system;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.nl.common.utils.InterationUtil;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.external_system.acs.service.AcsToWmsService;
|
||||
import org.nl.wms.external_system.acs.service.dto.TransferDto;
|
||||
import org.nl.wms.external_system.dto.InteracteDto;
|
||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl.MappingSourceDataTypeHandler;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/5/6 14:53
|
||||
@@ -33,8 +19,9 @@ public class GateWayService {
|
||||
public void apply(InteracteDto param){
|
||||
//处理日志相关
|
||||
String service = param.getService();
|
||||
String type = param.getType();
|
||||
//根据服务拆分不同的业务
|
||||
acsToWmsService.applyTask(param.getService(),param.getData());
|
||||
acsToWmsService.applyTask(param.getService(), type, param.getData());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.InterationUtil;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||
import org.nl.wms.dispatch_manage.task.handler.impl.GroupDickInStorageTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.external_system.acs.service.dto.TransferDto;
|
||||
@@ -37,9 +36,20 @@ public class AcsToWmsService implements InitializingBean {
|
||||
|
||||
private SyncFormMapping mapping;
|
||||
|
||||
public void applyTask(String service,JSONObject data){
|
||||
if (service.equals("ZPInStorage")){
|
||||
applyTaskMap.get("ZPInStorage").createTask(data);
|
||||
public void applyTask(String service,String type,JSONObject data){
|
||||
if (service.equals("InStorage")){
|
||||
/*
|
||||
{
|
||||
"service": "ZPInStorage",
|
||||
"ip": "ip_7va9w",
|
||||
"request_time": "request_time_pbi5u",
|
||||
"trace_id": "trace_id_xl8dk",
|
||||
"data": {
|
||||
"D00018": "start001"
|
||||
}
|
||||
}
|
||||
* */
|
||||
applyTaskMap.get(type).createTask(data);
|
||||
}
|
||||
if (service.equals("TaskStatus")){
|
||||
String task_code = data.getString("task_code");
|
||||
|
||||
@@ -11,6 +11,7 @@ import lombok.Data;
|
||||
public class InteracteDto {
|
||||
|
||||
String service;
|
||||
String type;
|
||||
String ip;
|
||||
String request_time;
|
||||
String trace_id;
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -69,8 +70,15 @@ public class ExecutionController {
|
||||
|
||||
@DeleteMapping
|
||||
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
|
||||
List<String> removeCollect = new ArrayList<>();
|
||||
removeCollect.addAll(Arrays.asList(ids));
|
||||
if (ids.length > 0) {
|
||||
executionService.removeByIds(Arrays.asList(ids));
|
||||
for (String proc_inst_id : ids) {
|
||||
removeCollect.addAll(executionService.getChildList(proc_inst_id));
|
||||
}
|
||||
if (removeCollect.size()>0){
|
||||
executionService.removeByIds(removeCollect);
|
||||
}
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@@ -27,8 +27,12 @@ public class SubProcessConverter extends BaseNodeConverter {
|
||||
subProcess.setChildren(node.getJSONArray("children").toJavaList(String.class));
|
||||
subProcess.setName(properties.getString("name"));
|
||||
subProcess.setSplit(properties.getString("split"));
|
||||
subProcess.setSplitSwitch(properties.getBoolean("splitSwitch"));
|
||||
subProcess.setPermeate(properties.getBoolean("permeate"));
|
||||
if (properties.getBoolean("splitSwitch")!=null){
|
||||
subProcess.setSplitSwitch(properties.getBoolean("splitSwitch"));
|
||||
}
|
||||
if (properties.getBoolean("permeate")!=null){
|
||||
subProcess.setPermeate(properties.getBoolean("permeate"));
|
||||
}
|
||||
subProcess.setDocumentation(properties.getString("documentation"));
|
||||
//设置触发事件
|
||||
subProcess.setExecutionListeners(null);
|
||||
|
||||
@@ -13,7 +13,9 @@ import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.operation.impl.SequenceFlowOperation;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.Sequence.SequenceFlow;
|
||||
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.history.IActHiExecutionService;
|
||||
@@ -43,12 +45,13 @@ public abstract class FlowNodeActivityBehavior<T> {
|
||||
public final void activity(ExecutionEntity<T> entity) {
|
||||
IActRuExecutionService iActRuExecutionService = SpringContextHolder.getBean(IActRuExecutionService.class);
|
||||
|
||||
String proc_inst_id = entity.getProc_inst_id();
|
||||
try {
|
||||
//当前节点:子节点更换form_type
|
||||
log.info("流程:{},开始流程数据:{}", entity.getActivityName(),JSONObject.toJSONString(entity.getT()));
|
||||
if (StringUtils.isNotEmpty(entity.getProc_inst_id())){
|
||||
if (StringUtils.isNotEmpty(proc_inst_id)){
|
||||
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
|
||||
.eq("proc_inst_id",entity.getProc_inst_id())
|
||||
.eq("proc_inst_id", proc_inst_id)
|
||||
.set("activity_id", entity.getActivityId())
|
||||
.set("activity_name", entity.getActivityName())
|
||||
.set("form_type", entity.getForm_type())
|
||||
@@ -62,7 +65,7 @@ public abstract class FlowNodeActivityBehavior<T> {
|
||||
this.execute(entity);
|
||||
log.info("流程:{},结束流程数据:{}", entity.getActivityName(), JSONObject.toJSONString(entity.getT()));
|
||||
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
|
||||
.eq("proc_inst_id",entity.getProc_inst_id())
|
||||
.eq("proc_inst_id", entity.getProc_inst_id())
|
||||
.set("status", StatusEnum.FLOW_STATUS.code("节点完成"))
|
||||
.set("form_data", entity.getT().toString())
|
||||
.set("aux_param", entity.getAuxParam().toString())
|
||||
@@ -75,11 +78,12 @@ public abstract class FlowNodeActivityBehavior<T> {
|
||||
ex.printStackTrace();
|
||||
log.error(entity.getActivityName()+"流程执行异常:{}",ex.getMessage());
|
||||
ActRuExecution execution = new ActRuExecution();
|
||||
execution.setProc_inst_id(entity.getProc_inst_id());
|
||||
execution.setProc_inst_id(proc_inst_id);
|
||||
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
|
||||
.eq("proc_inst_id",entity.getProc_inst_id())
|
||||
.eq("proc_inst_id", proc_inst_id)
|
||||
.set("status", StatusEnum.FLOW_STATUS.code("暂停"))
|
||||
.set("remark","节点:"+entity.getActivityName()+":异常:"+ex.getMessage()));
|
||||
throw new BadRequestException(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,10 +102,16 @@ public abstract class FlowNodeActivityBehavior<T> {
|
||||
historyEntity.setUpdate_time(DateUtil.now());
|
||||
history.save(historyEntity);
|
||||
this.leave(entity);
|
||||
FlowNode currentFlowElement = (FlowNode)entity.getCurrentFlowElement();
|
||||
if (currentFlowElement.getPassNode()){
|
||||
FlowElement flowElement = entity.getCurrentFlowElement();
|
||||
if (flowElement instanceof FlowNode){
|
||||
if (((FlowNode)flowElement).getPassNode()){
|
||||
CommandExecutor.getAgenda().planOperation(new SequenceFlowOperation(entity));
|
||||
}
|
||||
}
|
||||
if (flowElement instanceof SequenceFlow){
|
||||
CommandExecutor.getAgenda().planOperation(new SequenceFlowOperation(entity));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void execute(ExecutionEntity<T> entity) {}
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
package org.nl.wms.flow_manage.flow.framework.engine.behavior.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.utils.ListOf;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SpelUtil;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.Sequence.SequenceFlow;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.gateway.GateWay;
|
||||
import org.nl.wms.flow_manage.flow.service.history.IActHiExecutionService;
|
||||
import org.nl.wms.flow_manage.flow.service.history.dao.ActHiExecution;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@@ -33,19 +37,34 @@ public class GateWayActivityBehavior extends FlowNodeActivityBehavior<JSONObject
|
||||
|
||||
FlowElement element = entity.getCurrentFlowElement();
|
||||
GateWay gateWay = (GateWay) element;
|
||||
List<SequenceFlow> targetSequence = new ArrayList<>();
|
||||
SequenceFlow targetSequence = null;
|
||||
for (SequenceFlow sequenceFlow : gateWay.getOutgoingFlows()) {
|
||||
String skipExpression = sequenceFlow.getSkipExpression();
|
||||
Boolean parse = SpelUtil.parse(entity.getT().getJSONObject("t"),skipExpression, Boolean.class);
|
||||
if (parse){
|
||||
targetSequence.add(sequenceFlow);
|
||||
System.out.println(Thread.currentThread().getName()+"_执行网关判断:"+skipExpression+"_"+sequenceFlow.getName());
|
||||
targetSequence = sequenceFlow;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isEmpty(targetSequence)){
|
||||
if (targetSequence == null){
|
||||
throw new BadRequestException("当前网关没有满足的流程线");
|
||||
}
|
||||
gateWay.setOutgoingFlows(targetSequence);
|
||||
//手动保存网关调用
|
||||
IActHiExecutionService history = SpringContextHolder.getBean(IActHiExecutionService.class);
|
||||
ActHiExecution historyEntity = new ActHiExecution();
|
||||
historyEntity.setProc_inst_id(entity.getProc_inst_id());
|
||||
historyEntity.setParent_id(entity.getParent_id());
|
||||
historyEntity.setActivity_id(entity.getActivityId());
|
||||
historyEntity.setActivity_name(entity.getActivityName());
|
||||
historyEntity.setForm_type(entity.getForm_type());
|
||||
historyEntity.setForm_id(entity.getForm_id());
|
||||
historyEntity.setForm_data((JSONObject) entity.getT());
|
||||
historyEntity.setAux_param(entity.getAuxParam());
|
||||
historyEntity.setUpdate_time(DateUtil.now());
|
||||
history.save(historyEntity);
|
||||
|
||||
entity.setCurrentFlowElement(targetSequence);
|
||||
//处理流程线:将结果值封装
|
||||
super.execute(entity);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.wms.flow_manage.flow.framework.converter.BpmnJSONConverter;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
|
||||
@@ -54,6 +55,10 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
|
||||
List<Object> subList = new ArrayList<>();
|
||||
String splitParam = subProcess.getSplit();
|
||||
if (StringUtils.isNotEmpty(splitParam)){
|
||||
if (items == null){
|
||||
items = new JSONArray();
|
||||
items.add(form);
|
||||
}
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
JSONObject item = items.getJSONObject(i);
|
||||
JSONObject t = (JSONObject)item.remove("t");
|
||||
@@ -94,6 +99,9 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
|
||||
subEntity.setForm_id(entity.getForm_id());
|
||||
subEntity.setForm_type(entity.getForm_type());
|
||||
subEntity.setDeploymentId(entity.getDeploymentId());
|
||||
JSONObject subAuxParam = new JSONObject();
|
||||
subAuxParam.putAll(entity.getAuxParam());
|
||||
subEntity.setAuxParam(subAuxParam);
|
||||
subEntity.setCurrentFlowElement(startEvent);
|
||||
if (subProcess.getPermeate()){
|
||||
subEntity.setCallback(entity.getCallback().andThen(() -> ((JSONObject) o).getJSONObject("t").getString("vehicle_code")));
|
||||
@@ -102,6 +110,7 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
|
||||
//在endEvent中有个所有子流程结束的判断:如果判断成功会触发父流程:startEvent暂时通过等待处理防止自动流程导致endEvent判断出错
|
||||
commandExecutor.execute(new StartInstanceCmd(), subEntity);
|
||||
}).exceptionally(throwable -> {
|
||||
throwable.printStackTrace();
|
||||
buffer.append("子流程执行异常"+throwable.getMessage());
|
||||
return null;
|
||||
})).parallel().forEach(CompletableFuture::join);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.flow_manage.flow.framework.engine.operation.impl;
|
||||
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
|
||||
import org.nl.wms.flow_manage.flow.framework.engine.operation.AbstractOperation;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||
@@ -28,14 +29,22 @@ public class SequenceFlowOperation extends AbstractOperation {
|
||||
FlowNode flowNode = (FlowNode) flowElement;
|
||||
//EndEvent没有outgoing
|
||||
List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
|
||||
if (!CollectionUtils.isEmpty(outgoingFlows)){
|
||||
for (SequenceFlow sequenceFlow : outgoingFlows) {
|
||||
String skipExpression = sequenceFlow.getSkipExpression();
|
||||
//TODO:流程线的脚本判断获取当下一个节点:当前节点或者下个节点:这一步统一在网关中处理!!!
|
||||
execution.setCurrentFlowElement(sequenceFlow.getTargetFlowElement());
|
||||
}
|
||||
CommandExecutor.getAgenda().planOperation(new ContinuOperation(execution));
|
||||
if (CollectionUtils.isEmpty(outgoingFlows)){
|
||||
return;
|
||||
}
|
||||
if (outgoingFlows.size()>1){
|
||||
throw new BadRequestException("流程异常:当前流程节点"+flowNode.getName()+"存在2条流程线且无网关配置");
|
||||
}
|
||||
execution.setCurrentFlowElement(outgoingFlows.get(0).getTargetFlowElement());
|
||||
}
|
||||
if (flowElement instanceof SequenceFlow){
|
||||
FlowNode flowNode = ((SequenceFlow) flowElement).getTargetFlowElement();
|
||||
if (flowNode == null){
|
||||
throw new BadRequestException("流程异常:当前流程线"+flowNode.getId()+"为配置目标流程节点");
|
||||
}
|
||||
execution.setCurrentFlowElement(flowNode);
|
||||
}
|
||||
CommandExecutor.getAgenda().planOperation(new ContinuOperation(execution));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,11 +35,11 @@ public class SubProcess extends FlowNode {
|
||||
/**
|
||||
* 数据拆分
|
||||
*/
|
||||
protected Boolean splitSwitch;
|
||||
protected Boolean splitSwitch=Boolean.FALSE;
|
||||
/**
|
||||
* 透传回调函数
|
||||
*/
|
||||
protected Boolean permeate;
|
||||
protected Boolean permeate =Boolean.FALSE;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3,22 +3,22 @@ package org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.ListOf;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
|
||||
import org.nl.wms.decision_manage.handler.chainer.ChainerService;
|
||||
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.ServerTask;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
|
||||
|
||||
@@ -29,7 +29,6 @@ import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
@@ -74,69 +73,20 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
||||
Map<String, String> map = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, item_json);
|
||||
//更新仓位,更新数据
|
||||
System.out.println(flow.getForm_type()+"更新明细id"+item_json.getString("id"));
|
||||
// StringBuffer sql = new StringBuffer();
|
||||
// sql.append("update ")
|
||||
// .append(flow.getForm_type())
|
||||
// .append(" set struct_code = ")
|
||||
// .append("'"+collect+"'")
|
||||
// .append(" where id = ")
|
||||
// .append("'"+item_json.getString("id")+"'");
|
||||
// iPmFormDataService.dynamicSql(sql.toString());
|
||||
item_json.putAll(map);
|
||||
return t;
|
||||
}
|
||||
@Transactional(propagation= Propagation.REQUIRES_NEW)
|
||||
public Map<String,String> dispense(List<String> params, JSONObject iostorinvdtl) {
|
||||
Decisioner oneDecisioner = decisionHandlerMap.get(params.get(0));
|
||||
//判断是出库还是入库
|
||||
String strategy_type = oneDecisioner.strategyConfig.getStrategy_type();
|
||||
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
||||
AtomicReference<Map> structCode = new AtomicReference<>();
|
||||
if (StringUtils.isEmpty(iostorinvdtl.getString("stor_code"))){
|
||||
throw new BadRequestException("出入库策略执行异常:单据确认仓库编码");
|
||||
}
|
||||
AtomicReference<Map> atomicResult = new AtomicReference<>();
|
||||
RedissonUtils.lock(()->{
|
||||
List list;
|
||||
if (in_storage){
|
||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("is_used", true)
|
||||
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
||||
.eq("stor_code", iostorinvdtl.getString("stor_code"));
|
||||
query.isNull("vehicle_code");
|
||||
list = iStIvtStructattrService.list(query);
|
||||
|
||||
}else {
|
||||
list = iStIvtStructattrService.structVehicle(null);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException("当前分配策略无可用货位");
|
||||
}
|
||||
for (String param : params) {
|
||||
Decisioner decisioner = decisionHandlerMap.get(param);
|
||||
list = decisioner.handler(list, iostorinvdtl);
|
||||
if (CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException("当前分配策略无可用货位");
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException("无可分配货位!");
|
||||
}
|
||||
if (in_storage){
|
||||
StIvtStructattr structattr = (StIvtStructattr)list.get(0);
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
// .set("vehicle_code", iostorinvdtl.getVehicle_code())
|
||||
.set("lock_type", StatusEnum.LOCK.code("入"))
|
||||
.eq("struct_code", structattr.getStruct_code()));
|
||||
System.out.println("货位绑定成功"+structattr.getStruct_code());
|
||||
structCode.set(MapOf.of("struct_code",structattr.getStruct_code()));
|
||||
}else {
|
||||
for (StructattrVechielDto vechielDto : ((List<StructattrVechielDto>) list)) {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty",vechielDto.getFrozen_qty())
|
||||
.eq("id",vechielDto.getVm_id()));
|
||||
}
|
||||
List<String> collect = ((List<StructattrVechielDto>) list).stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList());
|
||||
System.out.println("载具绑定成功"+collect.toString());
|
||||
structCode.set(MapOf.of("vehicle_code",collect.stream().collect(Collectors.joining(","))));
|
||||
}
|
||||
},"入",2);
|
||||
return structCode.get();
|
||||
DecisionerChain<List<String>> start = ChainerService.start(params, iostorinvdtl);
|
||||
Map process = start.process(null);
|
||||
atomicResult.set(process);
|
||||
},"入"+iostorinvdtl.getString("stor_code"),2);
|
||||
return atomicResult.get();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,9 +31,6 @@ public class StorageChangesProcessHandler implements ClassProcess {
|
||||
@Autowired
|
||||
private ISchBaseTaskService schBaseTaskService;
|
||||
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService vehicleMaterService;
|
||||
|
||||
@Override
|
||||
public JSONObject process(JSONObject from, JSONObject param) {
|
||||
//暂时出入入库的问题:库存变动中任务变动由任务变动接口处理
|
||||
@@ -52,13 +49,9 @@ public class StorageChangesProcessHandler implements ClassProcess {
|
||||
StatusEnum.FORM_STATUS.code("完成");
|
||||
StatusEnum.FORM_STATUS.code("取消");
|
||||
//TODO:后续在流程节点中配置监听时间触发
|
||||
List<MdPbVehicleMater> vehicleMaters = vehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>().eq("vehicle_code", schBaseTask.getVehicle_code()));
|
||||
MdPbVehicleMater vehicleMater = vehicleMaters.get(0);
|
||||
BussEventMulticaster.Publish(StructEvent.builder()
|
||||
.task_type(schBaseTask.getTask_type())
|
||||
.status(schBaseTask.getStatus())
|
||||
.source_form_id(vehicleMater.getSource_form_id())
|
||||
.source_form_type(vehicleMater.getSource_form_type())
|
||||
.vehicle_code(schBaseTask.getVehicle_code())
|
||||
.point_code1(schBaseTask.getPoint_code1())
|
||||
.point_code2(schBaseTask.getPoint_code2())
|
||||
|
||||
@@ -20,4 +20,7 @@ public interface IActRuExecutionService extends IService<ActRuExecution> {
|
||||
Object getAll(ExecutionQuery query, PageQuery page);
|
||||
|
||||
List<String> queryHisActivityId(String proc_inst_id);
|
||||
|
||||
|
||||
List<String> getChildList(String proc_inst_id);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package org.nl.wms.flow_manage.flow.service.execution.dao.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 流程实例表 Mapper 接口
|
||||
@@ -12,5 +15,16 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
* @since 2024-03-21
|
||||
*/
|
||||
public interface ActRuExecutionMapper extends BaseMapper<ActRuExecution> {
|
||||
|
||||
@Select("SELECT\n" +
|
||||
" max(t3.childId)\n" +
|
||||
" from\n" +
|
||||
" (\n" +
|
||||
" select *,\n" +
|
||||
" if( find_in_set(parent_id, @p) > 0,@p := concat(@p,',',proc_inst_id),0 ) as childId\n" +
|
||||
" from\n" +
|
||||
" (select t.proc_inst_id as proc_inst_id, t.parent_id from act_ru_execution t ) t1,\n" +
|
||||
" (select @p := #{proc_inst_id}) t2\n" +
|
||||
" ) t3\n" +
|
||||
" where childId != '0'")
|
||||
String findAllChild(String proc_inst_id);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package org.nl.wms.flow_manage.flow.service.execution.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||
@@ -23,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -92,4 +95,14 @@ public class ActRuExecutionServiceImpl extends ServiceImpl<ActRuExecutionMapper,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getChildList(String proc_inst_id) {
|
||||
Assert.notNull(proc_inst_id, "参数不能为空");
|
||||
String allChild = this.baseMapper.findAllChild(proc_inst_id);
|
||||
if (StringUtils.isNotEmpty(allChild)){
|
||||
return Arrays.asList(allChild.split(","));
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,11 +50,11 @@ public class FlowOperationServiceImpl implements IFlowOperationService {
|
||||
|
||||
@Override
|
||||
public String startUp(String model_key, PermeateFunction callback, ExecutionDto dto, JSONObject auxParam) {
|
||||
ActRuExecution one = iActRuExecutionService.getOne(new QueryWrapper<ActRuExecution>()
|
||||
Integer one = iActRuExecutionService.count(new QueryWrapper<ActRuExecution>()
|
||||
.eq("form_type", dto.getForm_type())
|
||||
.eq("form_id", dto.getForm_id())
|
||||
.lt("status",StatusEnum.FLOW_STATUS.code("完成")));
|
||||
if (one!=null){
|
||||
if (one>0){
|
||||
throw new BadRequestException("当前单据流程已存在:"+dto.getForm_type()+"_"+dto.getForm_id());
|
||||
}
|
||||
ActReProcdef deployment = actReProcdefService.getCurrentVersion(model_key);
|
||||
|
||||
@@ -19,7 +19,7 @@ public class FlowStartEvent extends PublishEvent {
|
||||
private ExecutionDto dto;
|
||||
|
||||
private String model_key;
|
||||
|
||||
//流程内部函数;在启动时出传入,如果流程失败透传函数将丢失
|
||||
private PermeateFunction flowStartCallback;
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package org.nl.wms.pda_manage.palletio;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService;
|
||||
import org.nl.wms.stor_manage.io.service.dto.StorInvQuery;
|
||||
import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService;
|
||||
import org.nl.wms.stor_manage.io.service.iostor.dao.StIvtIostorinv;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出入库单主表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2024-03-28
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("api/pdaPalletIostorinv")
|
||||
public class PalletStIvtIostorinvController {
|
||||
|
||||
@Autowired
|
||||
private PalletIostorinvService palletIostorinvService;
|
||||
|
||||
|
||||
@PostMapping("in")
|
||||
@SaIgnore
|
||||
@Log("手持托盘入库")
|
||||
public ResponseEntity<Object> inStorage(@RequestBody JSONObject form) {
|
||||
palletIostorinvService.inStorage(form);
|
||||
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("out")
|
||||
@SaIgnore
|
||||
@Log("手持托盘出库")
|
||||
public ResponseEntity<Object> outStorage(@RequestBody JSONObject form) {
|
||||
palletIostorinvService.outStorage(form);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package org.nl.wms.pda_manage.palletio.service;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.publish.BussEventMulticaster;
|
||||
import org.nl.common.utils.*;
|
||||
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
|
||||
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
|
||||
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 java.math.BigDecimal;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/6/21 14:23
|
||||
*/
|
||||
@Service
|
||||
public class PalletIostorinvService {
|
||||
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
//托盘库
|
||||
static String STOR_CODE = "FStockPallet";
|
||||
public void inStorage(JSONObject form){
|
||||
Assert.notNull(form, "参数不能为空");
|
||||
String vehicle_code = form.getString("vehicle_code");
|
||||
String material_id = form.getString("material_id");
|
||||
MdPbVehicleMater vehicleMater = new MdPbVehicleMater();
|
||||
vehicleMater.setGroup_id(IdUtil.getStringId());
|
||||
vehicleMater.setId(IdUtil.getStringId());
|
||||
vehicleMater.setCreate_time(DateUtil.now());
|
||||
vehicleMater.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
vehicleMater.setVehicle_code(vehicle_code);
|
||||
vehicleMater.setMaterial_id(material_id);
|
||||
vehicleMater.setPcsn("1");
|
||||
vehicleMater.setStor_code(STOR_CODE);
|
||||
vehicleMater.setQty(new BigDecimal(1));
|
||||
vehicleMater.setUnit_id("16");
|
||||
iMdPbVehicleMaterService.save(vehicleMater);
|
||||
//触发流程
|
||||
BussEventMulticaster.Publish(
|
||||
new FlowStartEvent("pallet_in",
|
||||
(proc_inst_id,empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>().set("proc_inst_id",proc_inst_id).eq("vehicle_code",vehicle_code))
|
||||
,null)
|
||||
.build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater))
|
||||
);
|
||||
|
||||
};
|
||||
public void outStorage(JSONObject form){
|
||||
Assert.notNull(form, "参数不能为空");
|
||||
//触发流程
|
||||
JSONObject flowData = new JSONObject();
|
||||
flowData.put("material_id",form.getString("material_id"));
|
||||
flowData.put("qty",form.getInteger("qty"));
|
||||
flowData.put("pcsn","1");
|
||||
flowData.put("stor_code",STOR_CODE);
|
||||
JSONObject auxParam = new JSONObject();
|
||||
auxParam.put("target_point",form.getString("target_point"));
|
||||
|
||||
BussEventMulticaster.Publish(
|
||||
new FlowStartEvent("pallet_out",
|
||||
(proc_inst_id,vehicle) -> {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("proc_inst_id",proc_inst_id)
|
||||
.eq("vehicle_code",vehicle));
|
||||
}
|
||||
,auxParam)
|
||||
.build("st_ivt_iostorinv",null,null,null, flowData)
|
||||
);
|
||||
};
|
||||
}
|
||||
@@ -52,20 +52,21 @@ public class FlowEndEventListener extends AbstraceListener<FlowEndEvent> {
|
||||
.eq("proc_inst_id", proc_inst_id)
|
||||
.in("form_type",finish)
|
||||
.select("activity_id","update_time","form_type","form_id"));
|
||||
Set<String> tmpFormTypes = historys.stream().map(ActHiExecution::getForm_type).collect(Collectors.toSet());
|
||||
List<BmFormStruc> tmpFormTypeCollect = iBmFormStrucService.list(new QueryWrapper<BmFormStruc>().in("form_type", tmpFormTypes));
|
||||
Set<String> baseFromCollect = tmpFormTypeCollect.stream().filter(BmFormStruc::getIs_base).map(BmFormStruc::getForm_type).collect(Collectors.toSet());
|
||||
for (ActHiExecution history : historys) {
|
||||
StringBuffer sql = new StringBuffer();
|
||||
sql.append("update ")
|
||||
.append(baseFromCollect.contains(history.getForm_type())?history.getForm_type():"pm_form_data")
|
||||
.append(" set status = ")
|
||||
.append("'"+StatusEnum.FORM_STATUS.code("完成")+"'")
|
||||
.append(" where id = ")
|
||||
.append("'"+history.getForm_id()+"'");
|
||||
iPmFormDataService.dynamicSql(sql.toString());
|
||||
if (!CollectionUtils.isEmpty(historys)){
|
||||
Set<String> tmpFormTypes = historys.stream().map(ActHiExecution::getForm_type).collect(Collectors.toSet());
|
||||
List<BmFormStruc> tmpFormTypeCollect = iBmFormStrucService.list(new QueryWrapper<BmFormStruc>().in("form_type", tmpFormTypes));
|
||||
Set<String> baseFromCollect = tmpFormTypeCollect.stream().filter(BmFormStruc::getIs_base).map(BmFormStruc::getForm_type).collect(Collectors.toSet());
|
||||
for (ActHiExecution history : historys) {
|
||||
StringBuffer sql = new StringBuffer();
|
||||
sql.append("update ")
|
||||
.append(baseFromCollect.contains(history.getForm_type())?history.getForm_type():"pm_form_data")
|
||||
.append(" set status = ")
|
||||
.append("'"+StatusEnum.FORM_STATUS.code("完成")+"'")
|
||||
.append(" where id = ")
|
||||
.append("'"+history.getForm_id()+"'");
|
||||
iPmFormDataService.dynamicSql(sql.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -46,8 +46,6 @@ public class StructEventListener extends AbstraceListener<StructEvent> {
|
||||
if (status.equals(StatusEnum.FORM_STATUS.code("取消"))){
|
||||
|
||||
}
|
||||
iostorinvdtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
||||
.set("status",status).eq("id",event.getSource_form_id()));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,10 @@ public class StIvtStructivtflow implements Serializable {
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 仓库编码
|
||||
*/
|
||||
private String stor_code;
|
||||
/**
|
||||
* 仓位编码
|
||||
*/
|
||||
|
||||
@@ -71,7 +71,10 @@
|
||||
FROM st_ivt_structattr
|
||||
LEFT JOIN md_pb_vehicleMater ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code
|
||||
WHERE st_ivt_structattr.vehicle_code is not null
|
||||
and md_pb_vehicleMater.is_lock = false
|
||||
and IF(ISNULL(md_pb_vehicleMater.is_lock),true,md_pb_vehicleMater.is_lock = false)
|
||||
<if test="stor_code != null and stor_code != ''">
|
||||
and st_ivt_structattr.stor_code = #{stor_code}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="getStructIvt" resultType="java.util.Map">
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.nl.wms.system_manage.service.param.dao.Param;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -64,16 +65,16 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
}
|
||||
@Override
|
||||
public void changeStruct(String struct_code, String vehicle_code, String task_type) {
|
||||
List<MdPbVehicleMater> vehicleMaters = vehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>().eq("vehicle_code", vehicle_code));
|
||||
String now = DateUtil.now();
|
||||
|
||||
this.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("vehicle_code",vehicle_code)
|
||||
.set("update_time",now)
|
||||
.set("lock_type", StatusEnum.LOCK.code("无"))
|
||||
.eq("struct_code",struct_code));
|
||||
//b变动结存
|
||||
//变动结存记录"如果没有载具物料信息则不考虑结存:TODO:多级载具处理
|
||||
List<MdPbVehicleMater> vehicleMaters = vehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>().eq("vehicle_code", vehicle_code));
|
||||
List<StIvtStructivtflow> records = new ArrayList<>();
|
||||
StIvtStructattr attr = this.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", struct_code).select("stor_code"));
|
||||
for (MdPbVehicleMater vehicleMater : vehicleMaters) {
|
||||
StIvtStructivtflow record = new StIvtStructivtflow();
|
||||
record.setId(IdUtil.getStringId());
|
||||
@@ -88,11 +89,14 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
record.setSource_form_id(vehicleMater.getSource_form_id());
|
||||
record.setUnit_id(vehicleMater.getUnit_id());
|
||||
record.setStruct_code(struct_code);
|
||||
record.setStor_code(attr.getStor_code());
|
||||
record.setVehicle_form_data(vehicleMater.getForm_data());
|
||||
record.setGrowth( StatusEnum.IOBILL_TYPE_IN.check(task_type));
|
||||
records.add(record);
|
||||
}
|
||||
structivtflowService.saveBatch(records);
|
||||
if (!CollectionUtils.isEmpty(records)){
|
||||
structivtflowService.saveBatch(records);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.nl.wms.system_manage.service.coderule.dao.mapper.SysCodeRuleMapper;
|
||||
import org.nl.wms.system_manage.service.coderule.dto.CodeRuleQuery;
|
||||
import org.nl.wms.system_manage.service.coderule.utils.CodeRuleTypeEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@@ -59,6 +60,7 @@ public class SysCodeRuleServiceImpl extends ServiceImpl<SysCodeRuleMapper, SysCo
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation= Propagation.REQUIRES_NEW)
|
||||
public String codeDemo(String flag, String code) {
|
||||
SysCodeRule codeRule = this.getOne(new QueryWrapper<SysCodeRule>().eq("code", code));
|
||||
if (codeRule == null){
|
||||
|
||||
Reference in New Issue
Block a user