rev:出入库流程兼容

This commit is contained in:
zhangzq
2024-05-29 13:15:50 +08:00
parent 364dc9870c
commit fc521f7580
25 changed files with 184 additions and 60 deletions

View File

@@ -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;

View File

@@ -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{

View File

@@ -96,4 +96,9 @@ public class MdPbVehicleMater implements Serializable {
*/ */
private String remark; private String remark;
/**
* 关联实例id
*/
private String proc_inst_id;
} }

View File

@@ -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());

View File

@@ -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("当前分配策略无可用货位");
} }

View File

@@ -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){

View File

@@ -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"));

View File

@@ -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);
//该参数里包含三部分:主数据基础字段,组数据自定义及明细, //该参数里包含三部分:主数据基础字段,组数据自定义及明细,
//明细:基础字段,组数据自定义及参数: //明细:基础字段,组数据自定义及参数:

View File

@@ -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;
} }

View File

@@ -23,6 +23,7 @@ public class Form extends ExecuteTask {
* 表单处理类别 * 表单处理类别
*/ */
private String category; private String category;
/** /**
* 处理表达式 * 处理表达式
*/ */

View File

@@ -18,10 +18,6 @@ public class StrucForm extends ExecuteTask {
*/ */
private String form_type; private String form_type;
/**
* 指定数据来源:从节点中获取
*/
private String source_data;
/** /**
* 表单处理类别 * 表单处理类别
*/ */

View File

@@ -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);

View File

@@ -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();

View File

@@ -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("查询组盘表")

View File

@@ -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;
/** /**
* 载具 * 载具
*/ */

View File

@@ -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

View File

@@ -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;
/** /**
* 组盘状态 * 组盘状态

View File

@@ -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)

View File

@@ -32,4 +32,6 @@ public interface IPmFormDataService extends IService<PmFormData> {
Object getSonDtlFormData(String id); Object getSonDtlFormData(String id);
void dynamicSql(String sql);
} }

View File

@@ -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);
} }

View File

@@ -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);
}
}
} }

View File

@@ -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;
} }

View File

@@ -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()],

View File

@@ -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

View File

@@ -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" />