rev:出入库流程兼容
This commit is contained in:
@@ -40,6 +40,7 @@ public enum StatusEnum {
|
|||||||
* 点位锁类型
|
* 点位锁类型
|
||||||
*/
|
*/
|
||||||
LOCK(MapOf.of("无","00","入","10","出","20")),
|
LOCK(MapOf.of("无","00","入","10","出","20")),
|
||||||
|
STRATEGY_TYPE(MapOf.of("入库", "1", "出库", "2", "出入库", "3")),
|
||||||
;
|
;
|
||||||
private Map<String, String> code;
|
private Map<String, String> code;
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,17 @@ package org.nl.common.utils;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.alibaba.fastjson.TypeReference;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
import org.springframework.expression.Expression;
|
import org.springframework.expression.Expression;
|
||||||
import org.springframework.expression.spel.SpelEvaluationException;
|
import org.springframework.expression.spel.SpelEvaluationException;
|
||||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||||
|
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -23,7 +27,7 @@ public class SpelUtil {
|
|||||||
|
|
||||||
private static SpelExpressionParser SPEL_PARSER = new SpelExpressionParser();
|
private static SpelExpressionParser SPEL_PARSER = new SpelExpressionParser();
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main2(String[] args) {
|
||||||
JSONObject source = new JSONObject();
|
JSONObject source = new JSONObject();
|
||||||
JSONObject model = new JSONObject();
|
JSONObject model = new JSONObject();
|
||||||
JSONObject FBillType = new JSONObject();
|
JSONObject FBillType = new JSONObject();
|
||||||
@@ -87,6 +91,50 @@ public class SpelUtil {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
public static <Z> Z parse(JSONObject sourceData, String skip, Class<Z> target){
|
||||||
|
StandardEvaluationContext context = new StandardEvaluationContext();
|
||||||
|
context.setVariable("M",sourceData);
|
||||||
|
Expression expression = SpelUtil.SPEL_PARSER.parseExpression(skip);
|
||||||
|
try {
|
||||||
|
return expression.getValue(context, target);
|
||||||
|
}catch (SpelEvaluationException ex){
|
||||||
|
throw new BadRequestException("当前业务数据没有映射 对应的数据"+skip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TypeReference<Class<JSONArray>> typeRef = new TypeReference<Class<JSONArray>>() {};
|
||||||
|
ParameterizedType type = (ParameterizedType) typeRef.getType();
|
||||||
|
Type type1 = type.getActualTypeArguments()[0];
|
||||||
|
Class aClass = (Class) type1;
|
||||||
|
String a="{\n" +
|
||||||
|
"\t\"code\": \"REC10022\",\n" +
|
||||||
|
"\t\"t\": {\n" +
|
||||||
|
"\t\t\"form_data\": {\n" +
|
||||||
|
"\t\t\t\"stor_code\": \"\",\n" +
|
||||||
|
"\t\t\t\"struct_code\": \"\",\n" +
|
||||||
|
"\t\t\t\"order\": \"\"\n" +
|
||||||
|
"\t\t},\n" +
|
||||||
|
"\t\t\"stor_code\": \"FStockId\",\n" +
|
||||||
|
"\t\t\"pcsn\": \"werwe\",\n" +
|
||||||
|
"\t\t\"material_id\": \"FMaterialId\",\n" +
|
||||||
|
"\t\t\"biz_id\": \"1793594766324273152\",\n" +
|
||||||
|
"\t\t\"order\": \"FMoBillNo\"\n" +
|
||||||
|
"\t},\n" +
|
||||||
|
"\t\"create_time\": \"2024-05-23 18:48:31\",\n" +
|
||||||
|
"\t\"form_id\": \"\",\n" +
|
||||||
|
"\t\"id\": \"1793594856053018624\",\n" +
|
||||||
|
"\t\"form_type\": \"PRD_FeedMtrl\",\n" +
|
||||||
|
"\t\"source_form_id\": \"1793594766324273152\",\n" +
|
||||||
|
"\t\"source_form_type\": \"st_ivt_iostorinvdtl_in\",\n" +
|
||||||
|
"\t\"status\": \"10\",\n" +
|
||||||
|
"\t\"create_name\": \"管理员\"\n" +
|
||||||
|
"}";
|
||||||
|
Object o = JSONObject.parseObject(a, aClass);
|
||||||
|
System.out.println(o.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@Data
|
@Data
|
||||||
class DemoJSON{
|
class DemoJSON{
|
||||||
|
|||||||
@@ -96,4 +96,9 @@ public class MdPbVehicleMater implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联实例id
|
||||||
|
*/
|
||||||
|
private String proc_inst_id;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import java.util.stream.Collectors;
|
|||||||
* 先进先出策略
|
* 先进先出策略
|
||||||
*/
|
*/
|
||||||
@Service("fifo")
|
@Service("fifo")
|
||||||
public class FIFORuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvdtl> {
|
public class FIFORuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出入库明细服务
|
* 出入库明细服务
|
||||||
@@ -57,17 +57,17 @@ public class FIFORuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvd
|
|||||||
* @return List<StIvtStructattr> :仓位集合
|
* @return List<StIvtStructattr> :仓位集合
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
|
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
|
||||||
// 判断仓位是否为空
|
// 判断仓位是否为空
|
||||||
if (ObjectUtil.isEmpty(list)) {
|
if (ObjectUtil.isEmpty(list)) {
|
||||||
throw new BadRequestException("仓位集合为空!");
|
throw new BadRequestException("仓位集合为空!");
|
||||||
}
|
}
|
||||||
//分配数量
|
//分配数量
|
||||||
int plan_qty = param.getPlan_qty().intValue();
|
int plan_qty = param.getInteger("plan_qty");
|
||||||
//当前条件只有id,批次
|
//当前条件只有id,批次
|
||||||
List<StructattrVechielDto> vechielDtos = iStIvtStructattrService.collectVechicle(MapOf.of("material_id", param.getMaterial_id()
|
List<StructattrVechielDto> vechielDtos = iStIvtStructattrService.collectVechicle(MapOf.of("material_id", param.getString("material_id")
|
||||||
, "pcsn", param.getPcsn()
|
, "pcsn", param.getString("pcsn")
|
||||||
, "stor_code", param.getStor_code()
|
, "stor_code", param.getString("stor_code")
|
||||||
, "order_by", "update_time asc")
|
, "order_by", "update_time asc")
|
||||||
);
|
);
|
||||||
List<String> need = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList());
|
List<String> need = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList());
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import java.util.List;
|
|||||||
* 就近放置策略:根据物料ABC类区分
|
* 就近放置策略:根据物料ABC类区分
|
||||||
*/
|
*/
|
||||||
@Service("nearby")
|
@Service("nearby")
|
||||||
public class NearbyRuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvdtl> {
|
public class NearbyRuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
||||||
//每个策略的配置信息
|
//每个策略的配置信息
|
||||||
private static StStrategyConfig stStrategyConfig;
|
private static StStrategyConfig stStrategyConfig;
|
||||||
/**
|
/**
|
||||||
@@ -49,7 +49,7 @@ public class NearbyRuleHandler extends Decisioner<StIvtStructattr, StIvtIostorin
|
|||||||
* @return List<StIvtStructattr> :仓位集合
|
* @return List<StIvtStructattr> :仓位集合
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
|
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
|
||||||
if (CollectionUtils.isEmpty(list)){
|
if (CollectionUtils.isEmpty(list)){
|
||||||
throw new BadRequestException("当前分配策略无可用货位");
|
throw new BadRequestException("当前分配策略无可用货位");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ public class StackingTaskHandler implements TaskHandler {
|
|||||||
public JSONObject process(JSONObject from, JSONObject param) {
|
public JSONObject process(JSONObject from, JSONObject param) {
|
||||||
//区分出库还是入库
|
//区分出库还是入库
|
||||||
String vehicle_code = from.getString("vehicle_code");
|
String vehicle_code = from.getString("vehicle_code");
|
||||||
String point_code1 = from.getString("struct_code");
|
String struct_code = from.getString("struct_code");
|
||||||
String point_code2 = param.getString("start_point");
|
String start_point = param.getString("start_point");
|
||||||
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(point_code1)||StringUtils.isEmpty(point_code2)){
|
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(start_point)||StringUtils.isEmpty(struct_code)){
|
||||||
throw new BadRequestException("创建任务失败:StackingTaskHandler#process()方法请求参数不能为空");
|
throw new BadRequestException("创建任务失败:StackingTaskHandler#process()方法请求参数不能为空");
|
||||||
}
|
}
|
||||||
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
|
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
|
||||||
@@ -59,8 +59,8 @@ public class StackingTaskHandler implements TaskHandler {
|
|||||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||||
task.setTask_type(param.getString("task_type"));
|
task.setTask_type(param.getString("task_type"));
|
||||||
task.setVehicle_code(vehicle_code);
|
task.setVehicle_code(vehicle_code);
|
||||||
task.setPoint_code1(point_code1);
|
task.setPoint_code1(start_point);
|
||||||
task.setPoint_code2(point_code2);
|
task.setPoint_code2(struct_code);
|
||||||
taskService.create(task);
|
taskService.create(task);
|
||||||
Boolean isSend = param.getBoolean("is_send");
|
Boolean isSend = param.getBoolean("is_send");
|
||||||
if (isSend){
|
if (isSend){
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class FormConverter extends BaseNodeConverter {
|
|||||||
form.setId(node.getString("id"));
|
form.setId(node.getString("id"));
|
||||||
form.setType(node.getString("type"));
|
form.setType(node.getString("type"));
|
||||||
form.setForm_type(properties.getString("form_type"));
|
form.setForm_type(properties.getString("form_type"));
|
||||||
|
form.setSource_data(properties.getString("sourceData"));
|
||||||
form.setName(properties.getString("name"));
|
form.setName(properties.getString("name"));
|
||||||
form.setCategory(properties.getString("category"));
|
form.setCategory(properties.getString("category"));
|
||||||
form.setDocumentation(properties.getString("documentation"));
|
form.setDocumentation(properties.getString("documentation"));
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
|||||||
import com.alibaba.fastjson.JSONArray;
|
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 org.apache.commons.lang3.StringUtils;
|
||||||
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;
|
||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
@@ -16,6 +17,8 @@ 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.FlowElement;
|
||||||
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.Form;
|
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.Form;
|
||||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
|
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
|
||||||
|
import org.nl.wms.flow_manage.flow.service.history.IActHiExecutionService;
|
||||||
|
import org.nl.wms.flow_manage.flow.service.history.dao.ActHiExecution;
|
||||||
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor.IStIvtIostorinvInService;
|
import org.nl.wms.stor_manage.io.service.in.iostor.IStIvtIostorinvInService;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor.dao.StIvtIostorinvIn;
|
import org.nl.wms.stor_manage.io.service.in.iostor.dao.StIvtIostorinvIn;
|
||||||
@@ -45,6 +48,9 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
|
|||||||
@Autowired
|
@Autowired
|
||||||
IPmFormDataService iPmFormDataService;
|
IPmFormDataService iPmFormDataService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IActHiExecutionService actHiExecutionService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(ExecutionEntity<JSONObject> entity) {
|
public void execute(ExecutionEntity<JSONObject> entity) {
|
||||||
FlowElement flowElement = entity.getCurrentFlowElement();
|
FlowElement flowElement = entity.getCurrentFlowElement();
|
||||||
@@ -60,6 +66,16 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
|
|||||||
// }
|
// }
|
||||||
//TEST:这部分数据放在框架中,每个节点都需要
|
//TEST:这部分数据放在框架中,每个节点都需要
|
||||||
entity.setForm_struc(sourceStruc);
|
entity.setForm_struc(sourceStruc);
|
||||||
|
//怕断是否指定数据源:
|
||||||
|
JSONObject sourceData = entity.getT();
|
||||||
|
|
||||||
|
String dataConfig = currentNode.getSource_data();
|
||||||
|
if (StringUtils.isNotEmpty(dataConfig)){
|
||||||
|
ActHiExecution one = actHiExecutionService.getOne(new QueryWrapper<ActHiExecution>()
|
||||||
|
.eq("activity_id", dataConfig)
|
||||||
|
.eq("proc_inst_id", entity.getProc_inst_id()));
|
||||||
|
sourceData = one.getForm_data();
|
||||||
|
}
|
||||||
|
|
||||||
//处理自定义参数:
|
//处理自定义参数:
|
||||||
if (currentNode.getSkipExpression()!=null || currentNode.getSkipExpression().size()>0){
|
if (currentNode.getSkipExpression()!=null || currentNode.getSkipExpression().size()>0){
|
||||||
@@ -67,7 +83,7 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
|
|||||||
if (typeHandler==null){
|
if (typeHandler==null){
|
||||||
throw new BadRequestException("【flow】当前节点处理类型未定义");
|
throw new BadRequestException("【flow】当前节点处理类型未定义");
|
||||||
}
|
}
|
||||||
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), entity.getT() , targetStruc);
|
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), sourceData , targetStruc);
|
||||||
|
|
||||||
//该参数里包含三部分:主数据基础字段,组数据自定义及明细,
|
//该参数里包含三部分:主数据基础字段,组数据自定义及明细,
|
||||||
//明细:基础字段,组数据自定义及参数:
|
//明细:基础字段,组数据自定义及参数:
|
||||||
|
|||||||
@@ -1,10 +1,19 @@
|
|||||||
package org.nl.wms.flow_manage.flow.framework.entity.node.impl.task;
|
package org.nl.wms.flow_manage.flow.framework.entity.node.impl.task;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode;
|
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author ZZQ
|
* @author ZZQ
|
||||||
* @Date 2024/3/18 11:28
|
* @Date 2024/3/18 11:28
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
public class ExecuteTask extends FlowNode {
|
public class ExecuteTask extends FlowNode {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定数据来源:从节点中获取
|
||||||
|
*/
|
||||||
|
private String source_data;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public class Form extends ExecuteTask {
|
|||||||
* 表单处理类别
|
* 表单处理类别
|
||||||
*/
|
*/
|
||||||
private String category;
|
private String category;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理表达式
|
* 处理表达式
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -18,10 +18,6 @@ public class StrucForm extends ExecuteTask {
|
|||||||
*/
|
*/
|
||||||
private String form_type;
|
private String form_type;
|
||||||
|
|
||||||
/**
|
|
||||||
* 指定数据来源:从节点中获取
|
|
||||||
*/
|
|
||||||
private String source_data;
|
|
||||||
/**
|
/**
|
||||||
* 表单处理类别
|
* 表单处理类别
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ import org.nl.common.enums.StatusEnum;
|
|||||||
import org.nl.common.utils.ListOf;
|
import org.nl.common.utils.ListOf;
|
||||||
import org.nl.common.utils.RedissonUtils;
|
import org.nl.common.utils.RedissonUtils;
|
||||||
import org.nl.common.utils.SpringContextHolder;
|
import org.nl.common.utils.SpringContextHolder;
|
||||||
|
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
|
||||||
|
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.ServerTask;
|
||||||
|
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
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.dao.StIvtStructattr;
|
||||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||||
@@ -41,6 +44,8 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
private IStIvtStructattrService iStIvtStructattrService;
|
private IStIvtStructattrService iStIvtStructattrService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtIostorinvdtlService stIvtIostorinvdtlInService;
|
private IStIvtIostorinvdtlService stIvtIostorinvdtlInService;
|
||||||
|
@Autowired
|
||||||
|
private IPmFormDataService iPmFormDataService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private Map<String, Decisioner> decisionHandlerMap;
|
private Map<String, Decisioner> decisionHandlerMap;
|
||||||
@@ -57,26 +62,37 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
//出入库明细
|
//出入库明细
|
||||||
JSONObject t = entity.getT();
|
JSONObject t = entity.getT();
|
||||||
JSONObject item_json = t.getJSONObject("t");
|
JSONObject item_json = t.getJSONObject("t");
|
||||||
StIvtIostorinvdtl iostorinvdtl = item_json.toJavaObject(StIvtIostorinvdtl.class);
|
ServerTask flow = (ServerTask)entity.getCurrentFlowElement();
|
||||||
List<StIvtStructattr> list = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, iostorinvdtl);
|
List<StIvtStructattr> list = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, item_json);
|
||||||
//更新仓位,更新数据
|
//更新仓位,更新数据
|
||||||
String collect = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(","));
|
String collect = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(","));
|
||||||
System.out.println("更新明细id"+iostorinvdtl.getId());
|
System.out.println("更新明细id"+item_json.getString("id"));
|
||||||
stIvtIostorinvdtlInService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
StringBuffer sql = new StringBuffer();
|
||||||
.set("struct_code",collect)
|
sql.append("update ")
|
||||||
.eq("id",iostorinvdtl.getId()));
|
.append(flow.getForm_type())
|
||||||
|
.append(" set struct_code = ")
|
||||||
|
.append("'"+collect+"'")
|
||||||
|
.append(" where id = ")
|
||||||
|
.append("'"+item_json.getString("id")+"'");
|
||||||
|
iPmFormDataService.dynamicSql(sql.toString());
|
||||||
item_json.put("struct_code",collect);
|
item_json.put("struct_code",collect);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@Transactional(propagation= Propagation.REQUIRES_NEW)
|
@Transactional(propagation= Propagation.REQUIRES_NEW)
|
||||||
public List<StIvtStructattr> dispense(List<String> params, StIvtIostorinvdtl iostorinvdtl) {
|
public List<StIvtStructattr> dispense(List<String> params, JSONObject iostorinvdtl) {
|
||||||
|
Decisioner oneDecisioner = decisionHandlerMap.get(params.get(0));
|
||||||
|
//判断是出库还是入库
|
||||||
|
String stor_code = iostorinvdtl.getString("stor_code");
|
||||||
|
|
||||||
|
String strategy_type = oneDecisioner.strategyConfig.getStrategy_type();
|
||||||
|
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
||||||
AtomicReference<List<StIvtStructattr>> structCode = new AtomicReference<>();
|
AtomicReference<List<StIvtStructattr>> structCode = new AtomicReference<>();
|
||||||
RedissonUtils.lock(()->{
|
RedissonUtils.lock(()->{
|
||||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||||
.eq("is_used", true)
|
.eq("is_used", true)
|
||||||
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
||||||
.eq("stor_code", iostorinvdtl.getStor_code());
|
.eq("stor_code", iostorinvdtl.getString("stor_code"));
|
||||||
if (iostorinvdtl.getIn_storage()){
|
if (in_storage){
|
||||||
query.eq("vehicle_code","");
|
query.eq("vehicle_code","");
|
||||||
}else {
|
}else {
|
||||||
query.ne("vehicle_code","");
|
query.ne("vehicle_code","");
|
||||||
@@ -97,14 +113,14 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
throw new BadRequestException("无可分配货位!");
|
throw new BadRequestException("无可分配货位!");
|
||||||
}
|
}
|
||||||
//如果是入库的话只分配一个,出库的话有可能多个货位
|
//如果是入库的话只分配一个,出库的话有可能多个货位
|
||||||
if (iostorinvdtl.getIn_storage()){
|
if (in_storage){
|
||||||
list= ListOf.of(list.get(0));
|
list= ListOf.of(list.get(0));
|
||||||
}
|
}
|
||||||
structCode.set(list);
|
structCode.set(list);
|
||||||
System.out.println("分配的货位"+list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(",")));
|
System.out.println("分配的货位"+list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(",")));
|
||||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||||
// .set("vehicle_code", iostorinvdtl.getVehicle_code())
|
// .set("vehicle_code", iostorinvdtl.getVehicle_code())
|
||||||
.set("lock_type", StatusEnum.LOCK.code(iostorinvdtl.getIn_storage()?"入":"出"))
|
.set("lock_type", StatusEnum.LOCK.code(in_storage?"入":"出"))
|
||||||
.in("struct_code", list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList())));
|
.in("struct_code", list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList())));
|
||||||
System.out.println("货位绑定成功");
|
System.out.println("货位绑定成功");
|
||||||
},"入",2);
|
},"入",2);
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
import org.nl.common.utils.ListOf;
|
import org.nl.common.utils.ListOf;
|
||||||
|
import org.nl.common.utils.SpelUtil;
|
||||||
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
|
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
|
||||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||||
@@ -33,9 +35,8 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
|
|||||||
JSONObject resultT = new JSONObject();
|
JSONObject resultT = new JSONObject();
|
||||||
|
|
||||||
JSONObject mapping = JSONObject.parseObject(param.size()==1?param.get(0):param.remove(0));
|
JSONObject mapping = JSONObject.parseObject(param.size()==1?param.get(0):param.remove(0));
|
||||||
|
|
||||||
//数据平铺
|
|
||||||
JSONObject sourceFormData = new JSONObject(data.getJSONObject("t"));
|
JSONObject sourceFormData = new JSONObject(data.getJSONObject("t"));
|
||||||
|
//数据平铺
|
||||||
String souceFromId = data.getString("form_id");
|
String souceFromId = data.getString("form_id");
|
||||||
String souceFromType = data.getString("form_type");
|
String souceFromType = data.getString("form_type");
|
||||||
JSONObject forms = sourceFormData.getJSONObject("form_data");
|
JSONObject forms = sourceFormData.getJSONObject("form_data");
|
||||||
@@ -44,16 +45,7 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
|
|||||||
}
|
}
|
||||||
//数据字段列表+自定义的字段:不从配置表获取
|
//数据字段列表+自定义的字段:不从配置表获取
|
||||||
Object formDataMapping = mapping.remove("form_data");
|
Object formDataMapping = mapping.remove("form_data");
|
||||||
// List<String> fields = ListOf.of(form_struc.getBiz_code()
|
|
||||||
// , form_struc.getBiz_id()
|
|
||||||
// , form_struc.getBiz_code()
|
|
||||||
// , form_struc.getBiz_status()
|
|
||||||
// , form_struc.getBiz_form_type()
|
|
||||||
// , form_struc.getMaterial_id()
|
|
||||||
// , form_struc.getPcsn()
|
|
||||||
// , form_struc.getVehicle_code()
|
|
||||||
// , form_struc.getUnit_id()
|
|
||||||
// , form_struc.getQty());
|
|
||||||
JSONObject t = new JSONObject();
|
JSONObject t = new JSONObject();
|
||||||
//查询目标表字段
|
//查询目标表字段
|
||||||
//基础字段映射:如果只有一个就不迭代
|
//基础字段映射:如果只有一个就不迭代
|
||||||
@@ -80,11 +72,17 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
|
|||||||
}
|
}
|
||||||
t.put("form_data",form_data);
|
t.put("form_data",form_data);
|
||||||
}
|
}
|
||||||
JSONArray item = data.getJSONArray("item");
|
Object itemSkip = param.remove("skipExpression");
|
||||||
|
JSONArray item = new JSONArray();
|
||||||
|
if (data.getJSONArray("item") == null){
|
||||||
|
item.add(data);
|
||||||
|
}else {
|
||||||
|
item = data.getJSONArray("item");
|
||||||
|
}
|
||||||
BmFormStruc item_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id",form_struc.getId()));
|
BmFormStruc item_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id",form_struc.getId()));
|
||||||
if (item!=null){
|
if (item_struc != null){
|
||||||
//暂定:强制校验
|
if (item==null){
|
||||||
if (item_struc == null){
|
//暂定:强制校验
|
||||||
throw new BadRequestException("当前数据存在明细且目标单据:"+form_struc.getForm_type()+" 未配置明细表");
|
throw new BadRequestException("当前数据存在明细且目标单据:"+form_struc.getForm_type()+" 未配置明细表");
|
||||||
}
|
}
|
||||||
JSONArray itemList = new JSONArray();
|
JSONArray itemList = new JSONArray();
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ 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.group_dick.service.dao.MdGruopDick;
|
||||||
import org.nl.wms.md_manage.group_dick.service.dto.GroupDickQuery;
|
import org.nl.wms.md_manage.group_dick.service.dto.GroupDickQuery;
|
||||||
import org.nl.wms.md_manage.group_dick.service.dto.MdGruopDtlDto;
|
import org.nl.wms.md_manage.group_dick.service.dto.MdGruopDtlDto;
|
||||||
|
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
@@ -43,6 +44,8 @@ public class MdGruopDickController {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IMdGruopDickService iMdGruopDickService;
|
private IMdGruopDickService iMdGruopDickService;
|
||||||
|
@Autowired
|
||||||
|
private IPmFormDataService iPmFormDataService;
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@Log("查询组盘表")
|
@Log("查询组盘表")
|
||||||
|
|||||||
@@ -29,15 +29,20 @@ public class MdGruopDtl implements Serializable {
|
|||||||
* 主表id
|
* 主表id
|
||||||
*/
|
*/
|
||||||
private String dick_id;
|
private String dick_id;
|
||||||
/**
|
|
||||||
* 实例id
|
|
||||||
*/
|
|
||||||
private String proc_inst_id;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 载具
|
* 载具
|
||||||
*/
|
*/
|
||||||
private String vehicle_code;
|
private String vehicle_code;
|
||||||
|
/**
|
||||||
|
* 仓位
|
||||||
|
*/
|
||||||
|
private String struct_code;
|
||||||
|
/**
|
||||||
|
/**
|
||||||
|
* 仓库
|
||||||
|
*/
|
||||||
|
private String stor_code;
|
||||||
/**
|
/**
|
||||||
* 载具
|
* 载具
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
</select>
|
</select>
|
||||||
<select id="getGroupDtl" resultType="com.alibaba.fastjson.JSONObject">
|
<select id="getGroupDtl" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
SELECT
|
SELECT
|
||||||
*,
|
md_group_dtl.*,md_pb_vehicleMater.*,
|
||||||
md_me_materialbase.material_code,
|
md_me_materialbase.material_code,
|
||||||
md_me_materialbase.material_name,
|
md_me_materialbase.material_name,
|
||||||
md_me_materialbase.material_spec
|
md_me_materialbase.material_spec
|
||||||
|
|||||||
@@ -28,15 +28,18 @@ public class MdGruopDtlDto extends MdPbVehicleMater {
|
|||||||
* 主表id
|
* 主表id
|
||||||
*/
|
*/
|
||||||
private String dick_id;
|
private String dick_id;
|
||||||
/**
|
|
||||||
* 实例id
|
|
||||||
*/
|
|
||||||
private String proc_inst_id;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 载具
|
* 载具
|
||||||
*/
|
*/
|
||||||
private String vehicle_code;
|
private String vehicle_code;
|
||||||
|
/**
|
||||||
|
* 仓位
|
||||||
|
*/
|
||||||
|
private String struct_code;
|
||||||
|
/**
|
||||||
|
* 仓库
|
||||||
|
*/
|
||||||
|
private String stor_code;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组盘状态
|
* 组盘状态
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
|
|||||||
iMdGruopDtlService.saveBatch(items);
|
iMdGruopDtlService.saveBatch(items);
|
||||||
iMdPbVehicleMaterService.saveBatch(vehicleMaters);
|
iMdPbVehicleMaterService.saveBatch(vehicleMaters);
|
||||||
|
|
||||||
BussEventMulticaster.Publish(new FlowStartEvent("md_group_dick", (Consumer<String>) proc_inst_id -> {
|
BussEventMulticaster.Publish(new FlowStartEvent("md_group", (Consumer<String>) proc_inst_id -> {
|
||||||
self.update(new UpdateWrapper<MdGruopDick>()
|
self.update(new UpdateWrapper<MdGruopDick>()
|
||||||
.set("proc_inst_id",proc_inst_id).eq("id",mdGroupMst.getId())); })
|
.set("proc_inst_id",proc_inst_id).eq("id",mdGroupMst.getId())); })
|
||||||
.build("md_group_dick",mdGroupMst.getId(),mdGroupMst.getSource_form_type(),mdGroupMst.getSource_form_id(),forms)
|
.build("md_group_dick",mdGroupMst.getId(),mdGroupMst.getSource_form_type(),mdGroupMst.getSource_form_id(),forms)
|
||||||
|
|||||||
@@ -32,4 +32,6 @@ public interface IPmFormDataService extends IService<PmFormData> {
|
|||||||
|
|
||||||
|
|
||||||
Object getSonDtlFormData(String id);
|
Object getSonDtlFormData(String id);
|
||||||
|
|
||||||
|
void dynamicSql(String sql);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.nl.wms.pm_manage.form_data.service.dao.mapper;
|
package org.nl.wms.pm_manage.form_data.service.dao.mapper;
|
||||||
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Update;
|
||||||
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
|
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery;
|
import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery;
|
||||||
@@ -21,4 +22,6 @@ public interface PmFormDataMapper extends BaseMapper<PmFormData> {
|
|||||||
List<PmFormData> query(@Param("query") FormDataQuery query);
|
List<PmFormData> query(@Param("query") FormDataQuery query);
|
||||||
|
|
||||||
List<PmFormDataDto> queryTree(@Param("query")FormDataQuery query);
|
List<PmFormDataDto> queryTree(@Param("query")FormDataQuery query);
|
||||||
|
@Update("${sql}")
|
||||||
|
void dynamicSql(@Param("sql")String sql);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,5 +216,12 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
|||||||
Assert.notNull(from_type,"表单类型参数不能为空");
|
Assert.notNull(from_type,"表单类型参数不能为空");
|
||||||
return this.list(new QueryWrapper<PmFormData>().eq("form_type",from_type));
|
return this.list(new QueryWrapper<PmFormData>().eq("form_type",from_type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dynamicSql(String sql) {
|
||||||
|
if (StringUtils.isNotEmpty(sql)){
|
||||||
|
this.baseMapper.dynamicSql(sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
|||||||
throw new BadRequestException("未配置出入库默认规则,请在系统配置中配置");
|
throw new BadRequestException("未配置出入库默认规则,请在系统配置中配置");
|
||||||
}
|
}
|
||||||
List<String> decisions = Arrays.asList(byCode.getValue().split(","));
|
List<String> decisions = Arrays.asList(byCode.getValue().split(","));
|
||||||
List<StIvtStructattr> dispense = decisionHandler.dispense(decisions, form.toJavaObject(StIvtIostorinvdtl.class));
|
List<StIvtStructattr> dispense = decisionHandler.dispense(decisions, form);
|
||||||
return dispense;
|
return dispense;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="status" label="实例状态">
|
<el-table-column prop="status" label="实例状态">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ dict.label.FLOW_STATUS[scope.row.status] }}
|
{{ statusEnum.label.FLOW_STATUS[scope.row.status] }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="remark" show-overflow-tooltip show-tooltip-when-overflow label="备注"/>
|
<el-table-column prop="remark" show-overflow-tooltip show-tooltip-when-overflow label="备注"/>
|
||||||
@@ -189,7 +189,7 @@ const defaultForm = {
|
|||||||
form_data: null
|
form_data: null
|
||||||
}
|
}
|
||||||
export default {
|
export default {
|
||||||
dicts: ["FLOW_STATUS"],
|
statusEnums: ["FLOW_STATUS"],
|
||||||
name: 'Execution',
|
name: 'Execution',
|
||||||
components: {pagination, crudOperation, rrOperation, udOperation, ViewCurrentFlowDesigner},
|
components: {pagination, crudOperation, rrOperation, udOperation, ViewCurrentFlowDesigner},
|
||||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||||
|
|||||||
@@ -86,6 +86,13 @@
|
|||||||
border
|
border
|
||||||
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||||
>
|
>
|
||||||
|
<el-table-column show-overflow-tooltip prop="stor_code" label="仓库" width="160" align="center">
|
||||||
|
<template scope="scope">
|
||||||
|
<el-input v-model="tableData[scope.$index].stor_code" class="input-with-select" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位" width="160" align="center" />
|
||||||
|
|
||||||
<el-table-column type="index" label="序号" width="55" align="center" />
|
<el-table-column type="index" label="序号" width="55" align="center" />
|
||||||
<el-table-column show-overflow-tooltip prop="vehicle_code" label="载具编号" width="160" align="center">
|
<el-table-column show-overflow-tooltip prop="vehicle_code" label="载具编号" width="160" align="center">
|
||||||
<template scope="scope">
|
<template scope="scope">
|
||||||
@@ -291,6 +298,7 @@ export default {
|
|||||||
data.material_code = row.material_code
|
data.material_code = row.material_code
|
||||||
data.material_id = row.material_id
|
data.material_id = row.material_id
|
||||||
data.material_spec = row.material_spec
|
data.material_spec = row.material_spec
|
||||||
|
data.stor_code = row.stor_code
|
||||||
data.source_form_type = row.form_type
|
data.source_form_type = row.form_type
|
||||||
data.source_form_id = row.id
|
data.source_form_id = row.id
|
||||||
data.unit_id = row.unit_id
|
data.unit_id = row.unit_id
|
||||||
|
|||||||
@@ -65,6 +65,8 @@
|
|||||||
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||||
>
|
>
|
||||||
<el-table-column type="index" label="序号" width="55" align="center" />
|
<el-table-column type="index" label="序号" width="55" align="center" />
|
||||||
|
<el-table-column show-overflow-tooltip prop="stor_code" label="仓库" width="160" align="center" />
|
||||||
|
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位" width="160" align="center" />
|
||||||
<el-table-column min-width="120" show-overflow-tooltip prop="vehicle_code" label="托盘编号" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="vehicle_code" label="托盘编号" align="center" />
|
||||||
<el-table-column min-width="120" show-overflow-tooltip prop="parent_vehicle_code" label="父托盘编码" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="parent_vehicle_code" label="父托盘编码" align="center" />
|
||||||
<el-table-column min-width="120" show-overflow-tooltip prop="material_id" label="物料id" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="material_id" label="物料id" align="center" />
|
||||||
|
|||||||
Reference in New Issue
Block a user