add:流程编排2

This commit is contained in:
zhangzq
2024-04-07 13:54:05 +08:00
parent 867d30da73
commit 76c13af3d3
47 changed files with 1473 additions and 2 deletions

View File

@@ -0,0 +1,21 @@
package org.nl.common.utils;
import org.nl.wms.system_manage.service.coderule.ISysCodeRuleService;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
public class CodeUtil {
public static Map<String, ArrayBlockingQueue<String>> CODE_COLLECTION = new HashMap();
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);
return code[0];
}
}

View File

@@ -0,0 +1,10 @@
package org.nl.wms.base_manage.field_mapping.handler;
/*
* @author ZZQ
* @Date 2024/4/2 17:33
*/
public abstract class BaseSyncClassHandler<T> {
public abstract T handler();
}

View File

@@ -0,0 +1,16 @@
package org.nl.wms.base_manage.field_mapping.handler.impl;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.base_manage.field_mapping.handler.BaseSyncClassHandler;
/*
* @author ZZQ
* @Date 2024/4/2 17:34
*/
public class IosinvSyncClassHandler extends BaseSyncClassHandler<JSONObject> {
@Override
public JSONObject handler() {
return null;
}
}

View File

@@ -0,0 +1,82 @@
package org.nl.wms.config_manage.form_struc.controller;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
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.dto.FormStrucQuery;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 前端控制器
* </p>
*
* @author generator
* @since 2024-03-25
*/
@RestController
@RequestMapping("/api/bmFormStruc")
public class BmFormStrucController {
@Autowired
IBmFormStrucService iBmFormStrucService;
@Autowired
IPmFormDataService iPmFormDataService;
@GetMapping
public ResponseEntity<Object> queryAll(FormStrucQuery query, PageQuery pageQuery){
//参数判读,参数解析,调用参数入库
Page<BmFormStruc> page = iBmFormStrucService.page(pageQuery.build(), query.build());
return new ResponseEntity<>(TableDataInfo.build(page),HttpStatus.OK);
}
@PostMapping
public ResponseEntity<Object> save(@RequestBody JSONObject param){
//参数判读,参数解析,调用参数入库
BmFormStruc formStruc = param.toJavaObject(BmFormStruc.class);
formStruc.setCreate_time(DateUtil.now());
formStruc.setId(IdUtil.getStringId());
formStruc.setCreate_id(SecurityUtils.getCurrentUserId());
iBmFormStrucService.save(formStruc);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/delete")
public ResponseEntity<Object> delete(List<String> types){
//参数判读,参数解析,调用参数入库
int dataCount = iPmFormDataService.count(new QueryWrapper<PmFormData>().in("form_type", types));
if (dataCount>0){
throw new BadRequestException("当前表单存在业务数据,不允许删除");
}
iBmFormStrucService.remove(new QueryWrapper<BmFormStruc>().in("form_type", types));
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/getTypes")
public ResponseEntity<Object> getTypes(){
//参数判读,参数解析,调用参数入库
List<Map<String, Object>> select = iBmFormStrucService.listMaps(new QueryWrapper<BmFormStruc>().select("form_type", "form_name").groupBy("form_type"));
List<Map> list = new ArrayList<>();
for (Map<String, Object> map : select) {
list.add(MapOf.of("lable",map.get("form_name"),"value",map.get("form_type")));
}
return new ResponseEntity<>(list,HttpStatus.OK);
}
}

View File

@@ -0,0 +1,16 @@
package org.nl.wms.config_manage.form_struc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
/**
* <p>
* 服务类
* </p>
*
* @author generator
* @since 2024-03-25
*/
public interface IBmFormStrucService extends IService<BmFormStruc> {
}

View File

@@ -0,0 +1,110 @@
package org.nl.wms.config_manage.form_struc.service.dao;
import java.math.BigDecimal;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author generator
* @since 2024-03-25
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "bm_form_struc",autoResultMap = true)
public class BmFormStruc implements Serializable {
private static final long serialVersionUID = 1L;
@TableId()
private String id;
/**
* 单据类型
*/
private String form_type;
/**
* 单据名称
*/
private String form_name;
/**
* 描述
*/
private String form_desc;
/**
* 创建id
*/
private String create_time;
/**
* 创建id
*/
private String create_id;
/**
* 业务单据单据id
*/
private String bus_id;
/**
* 业务单据编号
*/
private String bus_code;
/**
* 业务单据日期
*/
private String bus_date;
/**
* 业务单据状态
*/
private String bus_status;
/**
* 物料id
*/
private String material_id;
/**
* 数量
*/
private String qty;
/**
* 批次号
*/
private String pcsn;
/**
* 自定义表单字段存json:{"dept":"部门","empp":"员工"}
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private JSONObject form_param;
/**
* 是否含有明细表单
*/
private Boolean has_child;
/**
* 关联上级表单id
*/
private String parent_id;
}

View File

@@ -0,0 +1,16 @@
package org.nl.wms.config_manage.form_struc.service.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
/**
* <p>
* Mapper 接口
* </p>
*
* @author generator
* @since 2024-03-25
*/
public interface BmFormStrucMapper extends BaseMapper<BmFormStruc> {
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.config_manage.form_struc.service.dao.mapper.BmFormStrucMapper">
</mapper>

View File

@@ -0,0 +1,27 @@
package org.nl.wms.config_manage.form_struc.service.dto;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nl.common.domain.entity.BaseQuery;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* <p>
*
* </p>
*
* @author generator
* @since 2024-03-25
*/
@Data
public class FormStrucQuery extends BaseQuery<BmFormStruc> {
private String form_type;
}

View File

@@ -0,0 +1,20 @@
package org.nl.wms.config_manage.form_struc.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.config_manage.form_struc.service.dao.mapper.BmFormStrucMapper;
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author generator
* @since 2024-03-25
*/
@Service
public class BmFormStrucServiceImpl extends ServiceImpl<BmFormStrucMapper, BmFormStruc> implements IBmFormStrucService {
}

View File

@@ -0,0 +1,12 @@
package org.nl.wms.decision_manage.handler.service;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:13
*/
public abstract class DecisionHandler<T,P> {
public abstract List<T> handler(List<T> list, P param);
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.decision_manage.handler.service.impl.base;
import org.nl.wms.decision_manage.handler.service.DecisionHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:18
* 巷道均衡策略
*/
public class AlleyAveRuleHandler extends DecisionHandler<String,String> {
@Override
public List<String> handler(List<String> list, String param) {
return null;
}
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.decision_manage.handler.service.impl.base;
import org.nl.wms.decision_manage.handler.service.DecisionHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:18
* 同类型聚簇策略
*/
public class ClusterRuleHandler extends DecisionHandler<String,String> {
@Override
public List<String> handler(List<String> list, String param) {
return null;
}
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.decision_manage.handler.service.impl.base;
import org.nl.wms.decision_manage.handler.service.DecisionHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:18
* 先进先出策略
*/
public class FIFORuleHandler extends DecisionHandler<String,String> {
@Override
public List<String> handler(List<String> list, String param) {
return null;
}
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.decision_manage.handler.service.impl.base;
import org.nl.wms.decision_manage.handler.service.DecisionHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:18
* 货位限位策略:限高,限宽,双货位
*/
public class LimitStorageRuleHandler extends DecisionHandler<String,String> {
@Override
public List<String> handler(List<String> list, String param) {
return null;
}
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.decision_manage.handler.service.impl.base;
import org.nl.wms.decision_manage.handler.service.DecisionHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:18
* 就近放置策略根据物料ABC类区分
*/
public class NearbyRuleHandler extends DecisionHandler<String,String> {
@Override
public List<String> handler(List<String> list, String param) {
return null;
}
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.decision_manage.handler.service.impl.base;
import org.nl.wms.decision_manage.handler.service.DecisionHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:18
* 轻上重下策略
*/
public class WeightRuleHandler extends DecisionHandler<String,String> {
@Override
public List<String> handler(List<String> list, String param) {
return null;
}
}

View File

@@ -0,0 +1,20 @@
##货位分配原则 出入库
###1、上轻下重原则
根据货物重量选择摆放位置。把重的东西放在下层,把轻放在货架上层。需要人工搬运的大型货物以腰部的高度摆放。这样提高效率、保证安全。
###2、优先靠近出入口原则
根据出入库频率选定位置。出入库频率高的货物应放在靠近出入口,易于作业的地方;流动性差的货物放在离出入口较远的地方;季节性物品按季节特性来选定场所摆放。
###3、先进先出原则
一般企业为了加快周转,先入先出一同种物料出库时,先入库的物资,需要先提取出库,以加快物料周转,从而避免因物料长期积压产生锈蚀、变形、变质及其他损坏造成的损失。因此在货位分配时要方便先进物品优先出库。
###4、同类物品集中原则
同一品种同一地方保管。为提高作业效率和保管效率同一物品或类似物品应在同一地方保管,提高仓储工作效率。
###5、多巷道分布原则
货位分配是应提高可靠性,分巷道存放一仓库有多个巷道时,同种物品分散在不同的巷道进行存放。以防止因某巷道堵塞影响某种物料的出库,造成生产中断。
###6.超限分配原则:
对于货位超限:横向/纵向暂用多个货位.高度超限
##规则处理方式:责任链模式
list->5
1->list->2->list->3->list list.get(0)
class
List<> handler(List<货位集合>,入库物料信息)

View File

@@ -0,0 +1,20 @@
package org.nl.wms.decision_manage.handler.service.impl.diy;
import org.nl.common.utils.SpringContextHolder;
import org.nl.wms.decision_manage.handler.service.DecisionHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/6 16:18
* 自定义类处理器
*/
public class ClassRuleHandler extends DecisionHandler<String,String> {
@Override
public List<String> handler(List<String> list, String param) {
// Object bean = SpringContextHolder.getBean("xxxx.ss");
// return bean.xxxx
return null;
}
}

View File

@@ -0,0 +1,79 @@
package org.nl.wms.flow_manage.flow.framework.engine.behavior.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.domain.exception.BadRequestException;
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.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.task.impl.FormTask;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
import org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto;
import org.nl.wms.stor_manage.service.iostor.IStIvtIostorinvService;
import org.nl.wms.stor_manage.service.iostor.dao.StIvtIostorinv;
import org.nl.wms.stor_manage.service.iostor_dtl.IStIvtIostorinvdtlService;
import org.nl.wms.stor_manage.service.iostor_dtl.dao.StIvtIostorinvdtl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/3/18 13:17
* 源UserTask
* 获取不同的类型执行器.处理该节点:获取当前表单
获取表单配置表
确认有没有自定义字段:如果有则创建自定义字段
生成出入库单单据
*/
@Service
public class IostorInActivityBehavior extends FlowNodeActivityBehavior<PmFormDataDto> {
@Autowired
IBmFormStrucService iBmFormStrucService;
@Autowired
IStIvtIostorinvdtlService iostorinvdtlService;
@Autowired
IStIvtIostorinvService iostorinvService;
@Override
public void execute(ExecutionEntity<PmFormDataDto> execution) {
FlowElement flowElement = execution.getCurrentFlowElement();
if (flowElement instanceof FormTask){
//根据当前表单配置生成当前节点表单数据
FormTask formTask = (FormTask) flowElement;
PmFormDataDto sourceData = execution.getT();
BmFormStruc formStruc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>()
.eq("form_type", formTask.getForm_type()));
if (formStruc==null){
throw new BadRequestException("【flow】当前节点表单类型未定义");
}
//处理自定义参数:
if (formTask.getSkipExpression()!=null || formTask.getSkipExpression().size()>0){
TypeHandler<JSONObject,PmFormDataDto> typeHandler = TypeHandler.HANDLER_MAP.get(formTask.getTask_type());
if (typeHandler==null){
throw new BadRequestException("【flow】当前节点处理类型未定义");
}
JSONObject handler = typeHandler.handler(formTask.getSkipExpression(), sourceData, formStruc);
//该参数里包含三部分:主数据基础字段,组数据自定义及明细,
//明细:基础字段,组数据自定义及参数
StIvtIostorinv mst = handler.toJavaObject(StIvtIostorinv.class);
Object itemArr = handler.remove("item");
if(itemArr !=null && itemArr instanceof JSONArray){
JSONArray arr = (JSONArray) itemArr;
List<StIvtIostorinvdtl> iostorinvs = arr.toJavaList(StIvtIostorinvdtl.class);
iostorinvdtlService.batchInsert(iostorinvs);
}
iostorinvService.save(mst);
}
}
}
@Override
public void leave(ExecutionEntity execution) {
super.leave(execution);
}
}

View File

@@ -0,0 +1,40 @@
package org.nl.wms.flow_manage.flow.framework.engine.behavior.impl;
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.task.impl.FormTask;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.springframework.stereotype.Service;
/*
* @author ZZQ
* @Date 2024/3/18 13:17
* 源UserTask
*/
@Service
public class IostorOutActivityBehavior extends FlowNodeActivityBehavior<PmFormData> {
@Override
public void execute(ExecutionEntity<PmFormData> execution) {
FlowElement flowElement = execution.getCurrentFlowElement();
String type = flowElement.getType();
if (flowElement instanceof FormTask){
//根据当前表单配置生成当前节点表单数据
FormTask formTask = (FormTask) flowElement;
}
PmFormData sourceForm = execution.getT();
//TODO:获取不同的类型执行器.处理该节点:获取当前表单
//获取表单配置表
//确认有没有自定义字段:如果有则创建自定义字段
//生成出入库单单据
}
@Override
public void leave(ExecutionEntity execution) {
super.leave(execution);
}
}

View File

@@ -0,0 +1,56 @@
package org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.flow_manage.flow.framework.process.nodeType.TypeHandler;
import org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
/*
* @author ZZQ
* @Date 2024/3/21 15:16
*/
@Service
public class MappingHandler extends TypeHandler<JSONObject, PmFormDataDto> {
@Autowired
IBmFormStrucService iBmFormStrucService;
@Override
public JSONObject handler(List<String> param, PmFormDataDto entity, BmFormStruc form_struc) {
JSONObject returnObj = new JSONObject();
//基础字段映射
JSONObject mapping = JSONObject.parseObject(param.remove(0));
JSONObject data = (JSONObject) JSONObject.toJSON(entity);
for (String item : mapping.keySet()) {
String value = data.getString(item);
returnObj.put(item,value);
}
//查询表单配置表获取自定义json:自定义字段参数获取
JSONObject form_param = form_struc.getForm_param();
if (form_param!=null){
Set<String> diy = form_param.keySet();
JSONObject form_data = new JSONObject();
for (String item : diy) {
String value = data.getString(item);
form_data.put(item,value);
}
returnObj.put("form_data",form_data);
}
BmFormStruc item_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id",form_struc.getForm_type()));
if (item_struc!=null){
JSONArray itemList = new JSONArray();
for (PmFormDataDto item : entity.getDtl()) {
itemList.add(this.handler(param, item, item_struc));
}
returnObj.put("item",itemList);
}
return returnObj;
}
}

View File

@@ -0,0 +1,21 @@
package org.nl.wms.flow_manage.flow.framework.process.nodeType.source;
import cn.hutool.json.JSONObject;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/2 09:46
*/
public abstract class SourceDataTypeHandler<K> extends TypeHandler<JSONObject,String> {
@Override
public JSONObject handler(List<String> param, String entity, BmFormStruc form_struc) {
return null;
}
public abstract K sourceHandler(String entity, BmFormStruc form_struc);
}

View File

@@ -0,0 +1,23 @@
package org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl;
import cn.hutool.json.JSONObject;
import org.nl.common.utils.SpringContextHolder;
import org.nl.wms.base_manage.field_mapping.handler.BaseSyncClassHandler;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.SourceDataTypeHandler;
import org.springframework.stereotype.Service;
/*
* @author ZZQ
* @Date 2024/4/2 09:48
* //TODO:类处理器未实现
*/
@Service
public class ClassSourceDataTypeHandler extends SourceDataTypeHandler {
@Override
public JSONObject sourceHandler(String entity, BmFormStruc form_struc) {
BaseSyncClassHandler<JSONObject> bean = SpringContextHolder.getBean("");
return bean.handler();
}
}

View File

@@ -0,0 +1,48 @@
package org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.SneakyThrows;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.ListOf;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.SourceDataTypeHandler;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/4/2 09:48
*/
@Service
public class MappingSourceDataTypeHandler extends SourceDataTypeHandler<PmFormData> {
//material_id,qty,pcsn,code这些属于基础字段
private List base_parm = ListOf.of("data","code","material_id","qty","pcsn","code");
@Override
@SneakyThrows
public PmFormData sourceHandler(String entity, BmFormStruc form_struc) {
PmFormData formData = new PmFormData();
formData.setId(IdUtil.getStringId());
formData.setForm_type(form_struc.getForm_type());
formData.setStatus("1");
formData.setCreate_time(DateUtil.now());
formData.setStatus("1");
Class<PmFormData> dataClass = PmFormData.class;
JSONObject source = JSONObject.parseObject(entity);
JSONObject form_json = new JSONObject();
for (String key : form_struc.getForm_param().keySet()) {
Object value = source.get(key);
String mapping_field = form_struc.getForm_param().getString(key);
form_json.put(mapping_field,value);
if (base_parm.contains(mapping_field)){
Field field = dataClass.getDeclaredField(mapping_field);
field.setAccessible(true);
field.set(formData,value);
}
}
return formData;
}
}

View File

@@ -0,0 +1,22 @@
package org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl;
import cn.hutool.json.JSONObject;
import groovy.lang.GroovyShell;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.SourceDataTypeHandler;
import org.springframework.stereotype.Service;
/*
* @author ZZQ
* @Date 2024/4/2 09:48
*/
@Service
public class ScriptSourceDataTypeHandler extends SourceDataTypeHandler {
@Override
public Object sourceHandler(String entity, BmFormStruc form_struc) {
GroovyShell shell = new GroovyShell();
Object 脚本 = shell.evaluate("脚本");
return 脚本;
}
}

View File

@@ -0,0 +1,36 @@
package org.nl.wms.pm_manage.form_data.controller;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 表单信息表 前端控制器
* </p>
*
* @author generator
* @since 2024-03-25
*/
@RestController
@RequestMapping("/api/pmFormData")
public class PmFormDataController {
@Autowired
IPmFormDataService formDataService;
@GetMapping("/sync/{type}")
public ResponseEntity<Object> sync(@RequestParam String type, String formDtl){
//参数判读,参数解析,调用参数入库
formDataService.syncFormData("type",formDtl);
return new ResponseEntity<>(HttpStatus.CREATED);
}
}

View File

@@ -0,0 +1,18 @@
package org.nl.wms.pm_manage.form_data.service;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 表单信息表 服务类
* </p>
*
* @author generator
* @since 2024-03-25
*/
public interface IPmFormDataService extends IService<PmFormData> {
Integer syncFormData(String type,String dataString);
}

View File

@@ -0,0 +1,87 @@
package org.nl.wms.pm_manage.form_data.service.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 表单信息表
* </p>
*
* @author generator
* @since 2024-03-25
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("pm_form_data")
public class PmFormData implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 业务单据单据id
*/
private String id;
/**
* 业务单据编号
*/
private String code;
/**
* 业务单据日期
*/
private String date;
/**
* 单据类型
*/
private String form_type;
/**
* 业务单据状态
*/
private String status;
/**
* 创建id
*/
private String create_time;
/**
* 创建id
*/
private String create_id;
/**
* 物料id
*/
private String material_id;
/**
* 数量
*/
private BigDecimal qty;
/**
* 批次号
*/
private String pcsn;
/**
* 自定义表单字段
*/
private String form_data;
/**
* 关联上级表单id
*/
private String parent_id;
}

View File

@@ -0,0 +1,16 @@
package org.nl.wms.pm_manage.form_data.service.dao.mapper;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 表单信息表 Mapper 接口
* </p>
*
* @author generator
* @since 2024-03-25
*/
public interface PmFormDataMapper extends BaseMapper<PmFormData> {
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.pm_manage.form_data.service.dao.mapper.PmFormDataMapper">
</mapper>

View File

@@ -0,0 +1,89 @@
package org.nl.wms.pm_manage.form_data.service.dto;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 表单信息表
* </p>
*
* @author generator
* @since 2024-03-25
*/
@Data
public class PmFormDataDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 业务单据单据id
*/
private String bus_id;
/**
* 业务单据编号
*/
private String bus_code;
/**
* 业务单据日期
*/
private String bus_date;
/**
* 单据类型
*/
private String form_type;
/**
* 业务单据状态
*/
private String status;
/**
* 创建id
*/
private String create_time;
/**
* 创建id
*/
private String create_id;
/**
* 物料id
*/
private String material_id;
/**
* 数量
*/
private BigDecimal qty;
/**
* 批次号
*/
private String pcsn;
/**
* 自定义表单字段
*/
private String form_data;
/**
* 关联上级表单id
*/
private String parent_id;
private List<PmFormDataDto> dtl;
}

View File

@@ -0,0 +1,63 @@
package org.nl.wms.pm_manage.form_data.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.flow_manage.flow.framework.process.nodeType.source.SourceDataTypeHandler;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.nl.wms.pm_manage.form_data.service.dao.mapper.PmFormDataMapper;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* <p>
* 表单信息表 服务实现类
* 表单结构
* ---------------BmFormStruc---------------
* /\
* / \
* / \
* 表单数据 / \表单同步配置表
* PmFormData BmFormSync
* 表单回显时自定义字段通过表单结构获取lebel
* 表单同步设置时通过表单结构获取所有字段进行配置字段映射或者class处理
* </p>
*
* @author generator
* @since 2024-03-25
*/
@Service
public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormData> implements IPmFormDataService {
@Autowired
IBmFormStrucService formStrucService;
@Autowired
Map<String,SourceDataTypeHandler<PmFormData>> SourceDataTypeHandlerMap;
@Override
public Integer syncFormData(String form_type, String dataString) {
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", form_type));
Assert.notNull(one,"当前单据类型未定义"+form_type);
List<PmFormData> saves = new ArrayList<>();
//TODO: 查询同步配置表获取表单的同步处理SourceDataTypeHandler分为字段映射跟class类处理脚本处理
PmFormData formData = SourceDataTypeHandlerMap.get(form_type).sourceHandler(dataString, one);
saves.add(formData);
if (one.getHas_child()){
BmFormStruc item = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id", one.getId()));
String[] split = dataString.split(",");
for (String itemData : split) {
PmFormData itemForm = SourceDataTypeHandlerMap.get(form_type).sourceHandler(itemData, item);
itemForm.setParent_id(formData.getId());
saves.add(itemForm);
}
}
this.saveBatch(saves);
return saves.size();
}
}

View File

@@ -0,0 +1,21 @@
package org.nl.wms.stor_manage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 出入库单主表 前端控制器
* </p>
*
* @author generator
* @since 2024-03-28
*/
@RestController
@RequestMapping("/stIvtIostorinv")
public class StIvtIostorinvController {
}

View File

@@ -0,0 +1,21 @@
package org.nl.wms.stor_manage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 出入库单明细表 前端控制器
* </p>
*
* @author generator
* @since 2024-03-29
*/
@RestController
@RequestMapping("/stIvtIostorinvdtl")
public class StIvtIostorinvdtlController {
}

View File

@@ -0,0 +1,16 @@
package org.nl.wms.stor_manage.service.iostor;
import org.nl.wms.stor_manage.service.iostor.dao.StIvtIostorinv;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 出入库单主表 服务类
* </p>
*
* @author generator
* @since 2024-03-28
*/
public interface IStIvtIostorinvService extends IService<StIvtIostorinv> {
}

View File

@@ -0,0 +1,104 @@
package org.nl.wms.stor_manage.service.iostor.dao;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 出入库单主表
* </p>
*
* @author generator
* @since 2024-03-28
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("st_ivt_iostorinv")
public class StIvtIostorinv implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 出入单标识
*/
private String id;
/**
* 单据编号
*/
private String code;
/**
* 出入类型
*/
private Boolean io_type;
/**
* 业务日期
*/
private String biz_date;
/**
* 生产区域编码
*/
private String product_code;
/**
* 单据状态
*/
private String status;
/**
* 备注
*/
private String remark;
/**
* 是否删除
*/
private Boolean is_delete;
/**
* 源单号
*/
private String source_code;
/**
* 源单类型
*/
private String source_type;
/**
* 关联订单
*/
private String order;
/**
* 制单人
*/
private String create_id;
/**
* 制单时间
*/
private String create_time;
/**
* 修改人
*/
private String update_id;
/**
* 修改时间
*/
private String update_time;
/**
* 自定义映射数据
*/
private String form_data;
}

View File

@@ -0,0 +1,16 @@
package org.nl.wms.stor_manage.service.iostor.dao.mapper;
import org.nl.wms.stor_manage.service.iostor.dao.StIvtIostorinv;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 出入库单主表 Mapper 接口
* </p>
*
* @author generator
* @since 2024-03-28
*/
public interface StIvtIostorinvMapper extends BaseMapper<StIvtIostorinv> {
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.stor_manage.service.iostor.dao.mapper.StIvtIostorinvMapper">
</mapper>

View File

@@ -0,0 +1,20 @@
package org.nl.wms.stor_manage.service.iostor.impl;
import org.nl.wms.stor_manage.service.iostor.IStIvtIostorinvService;
import org.nl.wms.stor_manage.service.iostor.dao.StIvtIostorinv;
import org.nl.wms.stor_manage.service.iostor.dao.mapper.StIvtIostorinvMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 出入库单主表 服务实现类
* </p>
*
* @author generator
* @since 2024-03-28
*/
@Service
public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper, StIvtIostorinv> implements IStIvtIostorinvService {
}

View File

@@ -0,0 +1,19 @@
package org.nl.wms.stor_manage.service.iostor_dtl;
import org.nl.wms.stor_manage.service.iostor_dtl.dao.StIvtIostorinvdtl;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 出入库单明细表 服务类
* </p>
*
* @author generator
* @since 2024-03-29
*/
public interface IStIvtIostorinvdtlService extends IService<StIvtIostorinvdtl> {
void batchInsert(List<StIvtIostorinvdtl> dtls);
}

View File

@@ -0,0 +1,110 @@
package org.nl.wms.stor_manage.service.iostor_dtl.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 出入库单明细表
* </p>
*
* @author generator
* @since 2024-03-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("st_ivt_iostorinvdtl")
public class StIvtIostorinvdtl implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 出入单明细标识
*/
private Long iostorinvdtl_id;
/**
* 出入单标识
*/
private Long iostorinv_id;
/**
* 明细序号
*/
private BigDecimal seq_no;
/**
* 物料标识
*/
private Long material_id;
/**
* 批次
*/
private String pcsn;
/**
* 品质类型
*/
private String quality_scode;
/**
* 单据明细状态
*/
private String bill_status;
/**
* 数量计量单位标识
*/
private Long qty_unit_id;
/**
* 数量计量单位名称
*/
private String qty_unit_name;
/**
* 数量
*/
private BigDecimal plan_qty;
/**
* 来源单据明细标识
*/
private Long source_billdtl_id;
/**
* 来源单据类型
*/
private String source_bill_type;
/**
* 来源单编号
*/
private String source_bill_code;
/**
* 来源单表名
*/
private String source_bill_table;
/**
* 备注
*/
private String remark;
/**
* 已分配数量
*/
private BigDecimal assign_qty;
/**
* 未分配数量
*/
private BigDecimal unassign_qty;
}

View File

@@ -0,0 +1,20 @@
package org.nl.wms.stor_manage.service.iostor_dtl.dao.mapper;
import org.nl.wms.stor_manage.service.iostor_dtl.dao.StIvtIostorinvdtl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 出入库单明细表 Mapper 接口
* </p>
*
* @author generator
* @since 2024-03-29
*/
public interface StIvtIostorinvdtlMapper extends BaseMapper<StIvtIostorinvdtl> {
Integer batchInsert(List<StIvtIostorinvdtl> dtls);
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.stor_manage.service.iostor_dtl.dao.mapper.StIvtIostorinvdtlMapper">
<insert id="batchInsert">
insert into st_ivt_iostorinvdtl() values <foreach collection="dtls" open="(" close=")" item="item">
</foreach>
</insert>
</mapper>

View File

@@ -0,0 +1,27 @@
package org.nl.wms.stor_manage.service.iostor_dtl.impl;
import org.nl.wms.stor_manage.service.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.service.iostor_dtl.dao.mapper.StIvtIostorinvdtlMapper;
import org.nl.wms.stor_manage.service.iostor_dtl.IStIvtIostorinvdtlService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 出入库单明细表 服务实现类
* </p>
*
* @author generator
* @since 2024-03-29
*/
@Service
public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlMapper, StIvtIostorinvdtl> implements IStIvtIostorinvdtlService {
@Override
public void batchInsert(List<StIvtIostorinvdtl> dtls) {
this.baseMapper.batchInsert(dtls);
}
}

View File

@@ -5,7 +5,7 @@
"author": "Zheng Jie",
"license": "Apache-2.0",
"scripts": {
"dev": "vue-cli-service serve",
"dev": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
@@ -55,6 +55,8 @@
"jsencrypt": "^3.0.0-rc.1",
"jszip": "3.1.5",
"mavon-editor": "^2.9.0",
"min-dash": "^4.2.1",
"min-dom": "^5.0.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",

View File

@@ -59,7 +59,7 @@ export const loadMenus = (next, to) => {
const rewriteRoutes = filterAsyncRouter(rdata, false, true)
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
store.dispatch('GenerateRoutes', rewriteRoutes).then(() => { // 存储路由
store.dispatch('GenerateRoutes', rewriteRoutes).then(() => {
router.addRoutes(rewriteRoutes) // 动态添加可访问路由表
next({ ...to, replace: true })
})