rev:自定义表单同步功能

This commit is contained in:
zhangzq
2024-05-13 18:00:12 +08:00
parent e1d67fd23e
commit 86c05ad7a8
25 changed files with 350 additions and 105 deletions

View File

@@ -58,7 +58,7 @@ public class PageQuery implements Serializable {
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
Page<T> page = new Page<>(pageNum, pageSize);
Page<T> page = new Page<>(pageNum+1, pageSize);
if (StringUtils.isNotBlank(sort)){
String[] split = sort.split(",");
for (int i = 0; i < (split.length & ~1); i=i+2) {

View File

@@ -29,10 +29,12 @@ public enum QueryTEnum {
});
}),
LE((q, k, v) -> { q.le(k[0],v); }),
GE((q, k, v) -> { q.ge(k[0],v); }),
BY((q, k, v) -> { q.orderByDesc(k[0],String.valueOf(v)); }),
NO((q, k, v) -> { q.isNull(k[0]); }),
NULL_OR_EMPTY((queryWrapper, k, v) -> { queryWrapper.nested(a->a.isNull(k[0]).or().eq(k[0],"")); }),
LT((q, k, v) -> { q.lt(k[0],v); }),
GT((q, k, v) -> { q.gt(k[0],v); }),
OREQ((q, k, v) -> { if (StringUtils.isBlank((String)v)){ q.isNull(k[0]); }else { q.eq(k[0],v); } });
private LConsumer<QueryWrapper<T>,String[], Object> doP;

View File

@@ -4,6 +4,8 @@ package org.nl.common.utils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
/*
* @author ZZQ
@@ -19,4 +21,12 @@ public class ListOf implements Serializable {
}
return list;
}
public static <K> Set ofSet(K... key){
Set list = new HashSet<>();
for (K k : key) {
list.add(k);
}
return list;
}
}

View File

@@ -0,0 +1,96 @@
package org.nl.common.utils;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.util.HashMap;
import java.util.Map;
/*
* @author ZZQ
* @Date 2024/5/13 16:23
*/
public class SpelUtil {
//SpelExpressionParser方法是否线程安全
private static SpelExpressionParser SPEL_PARSER = new SpelExpressionParser();
public static void main(String[] args) {
JSONObject source = new JSONObject();
JSONObject model = new JSONObject();
JSONObject FBillType = new JSONObject();
JSONArray FARRAY = new JSONArray();
source.put("FID","120222");
source.put("Model",model);
model.put("FDATA", DateUtil.now());
model.put("FCODE", IdUtil.getStringId());
model.put("FBillType", FBillType);
FBillType.put("FNumber",33066);
model.put("FARRAY", FARRAY);
FARRAY.add(MapOf.of("ARR1","子子子数字"));
FARRAY.add(MapOf.of("ARR2","子子子数字2"));
Map parse = SpelUtil.parse(source, MapOf.of("FID", "#M['FID']", "ARR1", "#M['Model']['FARRAY'][1]['ARR2']"));
System.out.println(parse.toString());
/*
{
"FID": "120222",
"Model": {
"FBillType": {"FNumber": 33066 },
"FCODE": "1789927465523744768",
"FDATA": "2024-05-13 15:55:37",
"FARRAY": [
{"ARR1": "子子子数字"},
{"ARR2": "子子子数字2"}
]
}
}
* */
System.out.println(source.toJSONString());
// DemoJSON demoJSON = source.toJavaObject(DemoJSON.class);
//// SpelExpressionParser SPEL_PARSER = new SpelExpressionParser();
//// StandardEvaluationContext context = new StandardEvaluationContext();
//// context.setVariable("source",demoJSON);
//// //这种表达式只支持实体
//// Expression expression = SPEL_PARSER.parseExpression("T(String).valueOf(#source.model.FDATA)");
//// String value = expression.getValue(context, String.class);
// SpelExpressionParser SPEL_PARSER = new SpelExpressionParser();
// StandardEvaluationContext context = new StandardEvaluationContext();
// context.setVariable("k",source);
// //这种表达式只支持实体:map的映射都是通过['xxx']获取,对象的映射通过.xxx
// Expression expression = SPEL_PARSER.parseExpression("#M['Model']['FARRAY'][1]['ARR2']");
// String value = expression.getValue(context, String.class);
// System.out.println(value);
}
public static Map<String,String> parse(JSONObject sourceData,Map<String,String> fieldSkip){
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("M",sourceData);
Map<String, String> result = new HashMap<>();
for (String field : fieldSkip.keySet()) {
String skip = fieldSkip.get(field);
Expression expression = SpelUtil.SPEL_PARSER.parseExpression(skip);
String value = expression.getValue(context, String.class);
result.put(field,value);
}
return result;
}
}
@Data
class DemoJSON{
private String FID;
private Model model;
}
@Data
class Model{
private String FDATA;
private String FCODE;
private FBillType FBillType;
}
@Data
class FBillType{
private Integer FNumber;
}

View File

@@ -37,8 +37,8 @@ public class BmVehicleInfoController {
@GetMapping
@Log("查询载具")
public ResponseEntity<Object> query(VehicleQuery whereJson, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(vehicleInfoService.queryAll(whereJson, page)), HttpStatus.OK);
public ResponseEntity<Object> query(VehicleQuery query, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(vehicleInfoService.page(page.build(), query.build())), HttpStatus.OK);
}
@PostMapping

View File

@@ -13,13 +13,13 @@ import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo;
@Data
public class VehicleQuery extends BaseQuery<BmVehicleInfo> {
private String storagevehicle_code_begin;
private String storagevehicle_code_end;
private String storagevehicle_type;
private String vehicle_code_begin;
private String vehicle_code_end;
private String vehicle_type;
@Override
public void paramMapping() {
super.doP.put("storagevehicle_code_begin", QParam.builder().k(new String[]{"storagevehicle_code"}).type(QueryTEnum.LT).build());
super.doP.put("storagevehicle_code_end", QParam.builder().k(new String[]{"storagevehicle_code"}).type(QueryTEnum.LE).build());
super.doP.put("vehicle_code_begin", QParam.builder().k(new String[]{"vehicle_code"}).type(QueryTEnum.GE).build());
super.doP.put("vehicle_code_end", QParam.builder().k(new String[]{"vehicle_code"}).type(QueryTEnum.LE).build());
}
}

View File

@@ -18,6 +18,9 @@ import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService;
import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo;
import org.nl.wms.base_manage.vehicle.service.dao.mapper.BmVehicleInfoMapper;
import org.nl.wms.base_manage.vehicle.service.dto.VehicleQuery;
import org.nl.wms.system_manage.service.dict.ISysDictService;
import org.nl.wms.system_manage.service.dict.dao.Dict;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,6 +40,8 @@ import java.util.Map;
@Service
public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, BmVehicleInfo> implements IBmVehicleInfoService {
@Autowired
private ISysDictService dictService;
@Override
public BmVehicleInfo vehileInfo(String vehicle_code) {
@@ -50,37 +55,21 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
if (!ObjectUtil.isEmpty(one)) {
throw new BadRequestException("此载具已存在");
}
String code = "";
switch (map.getString("vehicle_type")) {
case "00":
code = "VEHICCLE_CODE_XMTPT";
break;
case "01":
code = "VEHICCLE_CODE_CDMTP";
break;
case "02":
code = "VEHICCLE_CODE_TLD";
break;
case "03":
code = "VEHICCLE_CODE_TTP";
break;
case "04":
code = "VEHICCLE_CODE_XMTPC";
break;
case "05":
code = "VEHICCLE_CODE_LX";
break;
//转编码类型:
Dict dict = dictService.getOne(new QueryWrapper<Dict>().eq("para1", map.getString("vehicle_type")));
if (dict==null){
throw new BadRequestException("此载具类型"+map.getString("vehicle_type")+"没有配置字典值");
}
JSONArray resultCodeArr = new JSONArray();
int num = MapUtil.getInt(map, "num");
for (int i = 0; i < num; i++) {
BmVehicleInfo entity = new BmVehicleInfo();
entity.setVehicle_code(CodeUtil.getNewCode(code));
entity.setVehicle_code(CodeUtil.getNewCode(map.getString("vehicle_type")));
entity.setVehicle_name(entity.getVehicle_name());
entity.setUpdate_name(SecurityUtils.getCurrentNickName());
entity.setUpdate_name(DateUtil.now());
entity.setIs_used(map.getString("is_used").equals("1"));
entity.setVehicle_type(map.getString("vehicle_type"));
entity.setVehicle_type(dict.getValue());
this.save(entity);
resultCodeArr.add(entity.getVehicle_code());
}
@@ -167,30 +156,8 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
@Override
public JSONObject getVehicle(String code) {
String term = "";
switch (code) {
case "00":
term = "VEHICCLE_CODE_XMTPT";
break;
case "01":
term = "VEHICCLE_CODE_CDMTP";
break;
case "02":
term = "VEHICCLE_CODE_TLD";
break;
case "03":
term = "VEHICCLE_CODE_TTP";
break;
case "04":
term = "VEHICCLE_CODE_XMTPC";
break;
case "05":
term = "VEHICCLE_CODE_LX";
break;
}
JSONObject json = new JSONObject();
json.put("value", CodeUtil.codeView(term));
json.put("value", CodeUtil.codeView(code));
return json;
}
}

View File

@@ -46,7 +46,9 @@ public class BmFormStrucController {
,"biz_date","业务单据日期"
,"biz_status","业务单据状态"
,"material_id","物料id"
,"qty","数量");
,"qty","数量"
,"unit_id","单位"
,"vehicle_code","载具");
@Autowired
IBmFormStrucService iBmFormStrucService;
@@ -126,18 +128,19 @@ public class BmFormStrucController {
}
if (form_struc.getHas_child()){
List<Map> dtl_items = new ArrayList<>();
BmFormStruc child_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id", form_struc.getForm_type()));
BmFormStruc child_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id", form_struc.getId()));
if (child_struc == null){
throw new BadRequestException("当前表单配置异常:无子表配置信息");
}
JSONObject child_param = child_struc.getForm_param();
child_param.putAll(BASE_FORM);
for (String key : child_param.keySet()) {
dtl_items.add(MapOf.of("lable",form_param.get(key),"value",key));
dtl_items.add(MapOf.of("lable",child_param.get(key),"value",key));
}
result.put("dtl_item",dtl_items);
}
result.put("item",items);
return new ResponseEntity<>(result,HttpStatus.OK);
}
}

View File

@@ -94,6 +94,11 @@ public class BmFormStruc implements Serializable {
*/
private String qty;
/**
* 单位id
*/
private String unit_id;
/**
* 批次号
*/

View File

@@ -1,7 +1,7 @@
package org.nl.wms.external_system.acs.service;
import cn.hutool.json.JSONArray;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.utils.InterationUtil;
@@ -38,7 +38,7 @@ public class WmsToAcsService implements InitializingBean {
//封装数据:
TransferDto dto = new TransferDto();
MappingSourceDataTypeHandler<JSONObject> typeHandler = new MappingSourceDataTypeHandler<>();
List<JSONObject> items = typeHandler.sourceHandler((JSONArray) JSON.toJSON(arr), mapping);
List<JSONObject> items = typeHandler.sourceHandler((JSONArray)JSONArray.toJSON(arr), mapping);
dto.setModel(items);
JSONObject result = InterationUtil.notifyExt(mapping.getSync_url(), (JSONObject) JSON.toJSON(dto));

View File

@@ -67,7 +67,7 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
// throw new BadRequestException("【flow】当前节点表单类型未定义");
// }
//TEST:这部分数据放在框架中,每个节点都需要
entity.setForm_struc(targetStruc);
entity.setForm_struc(sourceStruc);
//处理自定义参数:
if (currentNode.getSkipExpression()!=null || currentNode.getSkipExpression().size()>0){
@@ -75,7 +75,7 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
if (typeHandler==null){
throw new BadRequestException("【flow】当前节点处理类型未定义");
}
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), entity.getT(), sourceStruc);
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), entity.getT(), targetStruc);
//该参数里包含三部分:主数据基础字段,组数据自定义及明细,
//明细:基础字段,组数据自定义及参数:

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.ListOf;
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
@@ -66,11 +67,14 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
}
returnObj.put("form_data",form_data);
}
JSONArray item = data.getJSONArray("item");
BmFormStruc item_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id",form_struc.getForm_type()));
if (item!=null){
//暂定:强制校验
if (item_struc == null){
throw new BadRequestException("当前数据存在明细且目标单据:"+form_struc.getForm_type()+" 未配置明细表");
}
JSONArray itemList = new JSONArray();
BmFormStruc item_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("parent_id",form_struc.getForm_type()));
for (int i = 0; i < item.size(); i++) {
itemList.add(this.handler(param, item.getJSONObject(i), item_struc));
}

View File

@@ -1,7 +1,7 @@
package org.nl.wms.flow_manage.flow.framework.process.nodeType.source;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.sync_manage.service.form_mapping.dao.SyncFormMapping;

View File

@@ -1,6 +1,6 @@
package org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl;
import cn.hutool.json.JSONArray;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import org.nl.common.utils.ListOf;
@@ -28,15 +28,17 @@ public class MappingSourceDataTypeHandler<Z> extends SourceDataTypeHandler{
public List<Z> sourceHandler(JSONArray entity, SyncFormMapping formMapping) {
List<Z> list = new ArrayList<>();
JSONObject mappingJson = formMapping.getMapping_json();
JSONArray mapping_json = formMapping.getMapping_json();
for (Object jdata : entity) {
JSONObject data = (JSONObject) jdata;
data.putAll(data.getJSONObject("form_data"));
JSONObject item = new JSONObject();
for (String target : mappingJson.keySet()) {
String key = mappingJson.getString(target);
item.put(target,data.get(key));
for (int i = 0; i < mapping_json.size(); i++) {
JSONObject jsonObject = mapping_json.getJSONObject(i);
String key = jsonObject.getString("mapping_field");
item.put(key,data.get(key));
}
TypeReference<Class<Z>> typeRef = new TypeReference<Class<Z>>() {};
list.add(data.toJavaObject(typeRef));
}

View File

@@ -2,6 +2,9 @@ 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;
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
import java.util.List;
/**
* <p>
@@ -15,4 +18,6 @@ public interface IPmFormDataService extends IService<PmFormData> {
Integer syncFormData(String type,String dataString);
List<PmFormData> syncAnalyse(SyncFormMapping mapping, String dataString);
}

View File

@@ -84,6 +84,11 @@ public class PmFormData implements Serializable {
*/
private BigDecimal qty;
/**
* 数量
*/
private String unit_id;
/**
* 批次号
*/

View File

@@ -1,9 +1,13 @@
package org.nl.wms.pm_manage.form_data.service.impl;
import com.alibaba.fastjson.JSONObject;
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.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.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;
@@ -11,13 +15,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
/**
* <p>
@@ -40,13 +44,11 @@ import java.util.Map;
public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormData> implements IPmFormDataService {
@Autowired
private IBmFormStrucService formStrucService;
@Autowired
private ISyncFormMappingService iSyncFormMappingService;
@Autowired
IBmFormStrucService formStrucService;
@Autowired
ISyncFormMappingService iSyncFormMappingService;
// @Autowired
Map<String,SourceDataTypeHandler> SourceDataTypeHandlerMap;
@Override
public Integer syncFormData(String form_type, String dataString) {
@@ -71,5 +73,66 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
return saves.size();
}
@Override
public List<PmFormData> syncAnalyse(SyncFormMapping formMapping, String dataString) {
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formMapping.getForm_type()));
//目标数据
JSONObject dataJson = JSONObject.parseObject(dataString);
if (StringUtils.isNotEmpty(one.getConvert_json())){
dataJson = dataJson.getJSONObject(one.getConvert_json());
}
Map<String, JSONObject> itemMapping = formMapping.getMapping_json().stream().collect(HashMap::new, (formMap, o) -> {
JSONObject item = (JSONObject) o;
formMap.put(item.getString("value"), item);
}, HashMap::putAll);
//基础字段
Set<String> fields = ListOf.ofSet(one.getBiz_code()
, one.getBiz_id()
, one.getBiz_code()
, one.getBiz_status()
, one.getMaterial_id()
, one.getPcsn()
, one.getVehicle_code()
, one.getUnit_id()
, one.getQty());
//查询目标表字段
JSONObject returnObj = new JSONObject();
//基础字段映射:如果只有一个就不迭代
Map<String, String> map = new HashMap<>();
JSONObject targetData = mappingParse(fields, itemMapping, dataJson);
//查询表单配置表获取自定义json:自定义字段参数获取
JSONObject form_param = one.getForm_param();
if (form_param!=null){
JSONObject form_data = mappingParse(form_param.keySet(), itemMapping, dataJson);
targetData.put("form_data",form_data);
}
return null;
}
private JSONObject mappingParse(Set<String> fields,Map<String, JSONObject> itemMapping,JSONObject sourceData){
Map<String, String> SpelMap = new HashMap<>();
JSONObject data = new JSONObject();
for (String field : fields) {
if (StringUtils.isNotEmpty(field)){
JSONObject itemMappingConfig = itemMapping.get(field);
if (itemMappingConfig == null){
throw new BadRequestException(String.format("当前表单没有配置字段:%s 映射", new String[]{field}));
}
if (StringUtils.isNotEmpty(itemMappingConfig.getString("skipExpression"))){
//el表达式解析
SpelMap.put(field,itemMappingConfig.getString("skipExpression"));
}else {
data.put(field,sourceData.getString(itemMappingConfig.getString("mapping_field")));
}
if (!CollectionUtils.isEmpty(SpelMap)){
Map<String, String> parse = SpelUtil.parse(sourceData, SpelMap);
data.putAll(parse);
}
}
}
return data;
}
}

View File

@@ -1,7 +1,6 @@
package org.nl.wms.sync_manage.service.form_mapping.dao;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -62,7 +61,7 @@ public class SyncFormMapping implements Serializable {
* 关系中维护springEL表达式
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private JSONObject mapping_json;
private JSONArray mapping_json;
/**
* 修改人ID

View File

@@ -3,6 +3,7 @@ package org.nl.wms.sync_manage.service.form_mapping.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
@@ -11,6 +12,7 @@ import org.nl.wms.sync_manage.service.form_mapping.dao.mapper.SyncFormMappingMap
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
@@ -38,11 +40,14 @@ public class SyncFormMappingServiceImpl extends ServiceImpl<SyncFormMappingMappe
* skipExpression表达式复杂字段通过这个表达式进行转换
*/
@Override
@Transactional
public void saveSyncMapping(JSONObject param) {
if (param==null){
return;
}
JSONObject mst = param.getJSONObject("mst");
//先删在加
this.remove(new QueryWrapper<SyncFormMapping>().eq("form_type",mst.getString("form_type")));
SyncFormMapping mapping = new SyncFormMapping();
mapping.setId(IdUtil.getStringId());
mapping.setForm_name(mst.getString("form_name"));
@@ -53,7 +58,7 @@ public class SyncFormMappingServiceImpl extends ServiceImpl<SyncFormMappingMappe
mapping.setUpdate_id(SecurityUtils.getCurrentUserId());
mapping.setUpdate_name(SecurityUtils.getCurrentNickName());
mapping.setUpdate_time(DateUtil.now());
mapping.setMapping_json(param.getJSONObject("item"));
mapping.setMapping_json(param.getJSONArray("item"));
this.save(mapping);
}
@@ -72,7 +77,7 @@ public class SyncFormMappingServiceImpl extends ServiceImpl<SyncFormMappingMappe
mapping.setUpdate_id(SecurityUtils.getCurrentUserId());
mapping.setUpdate_name(SecurityUtils.getCurrentNickName());
mapping.setUpdate_time(DateUtil.now());
mapping.setMapping_json(param.getJSONObject("item"));
mapping.setMapping_json(param.getJSONArray("item"));
this.updateById(mapping);
}
}

View File

@@ -5,6 +5,6 @@
<select id="findBycode" resultType="org.nl.wms.system_manage.service.coderule.dao.SysCodeRuleDetail">
select sys_code_rule_detail.* from sys_code_rule_detail
left join sys_code_rule on sys_code_rule_detail.code_rule_id = sys_code_rule.id
where sys_code_rule.code = #{code}
where sys_code_rule.code = #{code} order by sys_code_rule_detail.sort_num asc
</select>
</mapper>

View File

@@ -14,6 +14,6 @@ public class CodeRuleQuery extends BaseQuery<SysCodeRule> {
@Override
public void paramMapping() {
this.doP.put("blurry", QParam.builder().k(new String[]{"code", "name"}).type(QueryTEnum.LK).build());
this.doP.put("blurry", QParam.builder().k(new String[]{"code", "name"}).type(QueryTEnum.ORLK).build());
}
}

View File

@@ -55,6 +55,9 @@ public class SysCodeRuleServiceImpl extends ServiceImpl<SysCodeRuleMapper, SysCo
@Override
public String codeDemo(String flag, String code) {
List<SysCodeRuleDetail> ruleDtl = this.baseMapper.findBycode(code);
if (CollectionUtils.isEmpty(ruleDtl)){
return "";
}
if (CollectionUtils.isEmpty(ruleDtl)){
throw new BadRequestException("编码规则不存在"+code);
}

View File

@@ -60,6 +60,10 @@
<el-form-item label="长度" prop="length">
<el-input v-model="form.length" style="width: 370px;" />
</el-form-item>
<el-form-item label="当前值" prop="max_value">
<el-input v-model="form.current_value" style="width: 370px;" />
</el-form-item>
<el-form-item label="最大值" prop="max_value">
<el-input v-model="form.max_value" style="width: 370px;" />
</el-form-item>

View File

@@ -177,7 +177,7 @@
<el-option
v-for="item in dict.storagevehicle_type"
:label="item.label"
:value="item.value"
:value="item.para1"
/>
</el-select>
</el-form-item>
@@ -188,6 +188,38 @@
<el-form-item label="载具数量" prop="num">
<el-input-number v-model="form.num" :precision="0" style="width: 150px;" />
</el-form-item>
<el-form-item label="高度(mm)" prop="h">
<el-input-number v-model="form.h" :precision="0" style="width: 150px;" />
</el-form-item>
<el-form-item label="宽度(mm)" prop="w">
<el-input-number v-model="form.w" :precision="0" style="width: 150px;" />
</el-form-item>
<el-form-item label="深度(mm)" prop="l">
<el-input-number v-model="form.l" :precision="0" style="width: 150px;" />
</el-form-item>
<el-form-item label="重量(g)" prop="weight">
<el-input-number v-model="form.weight" :precision="0" style="width: 150px;" />
</el-form-item>
<el-form-item label="是否超限" prop="overstruct_type">
<el-select
v-model="form.overstruct_type"
style="width: 150px"
clearable
size="mini"
placeholder="超限类型"
class="filter-item"
>
<el-option
v-for="item in dict.VEHICLE_OVER_TYPE"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item v-if="form.overstruct_type !=='0'" label="超限货位" prop="occupystruct_qty">
<el-input-number v-model="form.occupystruct_qty" :precision="0" style="width: 150px;" />
</el-form-item>
<el-form-item label="是否启用">
<el-radio v-model="form.is_used" label="0">否</el-radio>
<el-radio v-model="form.is_used" label="1">是</el-radio>
@@ -209,7 +241,7 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="storagevehicle_type" label="载具类型">
<el-table-column prop="vehicle_type" label="载具类型">
<template slot-scope="scope">
{{ dict.label.storagevehicle_type[scope.row.vehicle_type] }}
</template>
@@ -289,14 +321,14 @@ const defaultForm = {
l: null,
h: null,
weight: null,
overstruct_type: null,
occupystruct_qty: null,
overstruct_type: '0',
occupystruct_qty: '1',
ext_json: null,
num: '1'
}
export default {
name: 'Storagevehicleinfo',
dicts: ['storagevehicle_type'],
dicts: ['storagevehicle_type',"VEHICLE_OVER_TYPE"],
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
@@ -371,6 +403,9 @@ export default {
[CRUD.HOOK.beforeRefresh]() {
return true
},
onCloseDialog(){
this.form=defaultForm
},
queryMater(index, row) {
this.materialShow = true
},

View File

@@ -128,6 +128,25 @@
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</el-dialog>
<el-dialog
:close-on-click-modal="false"
title="表单同步测试"
:visible.sync=syncShow
width="600px"
@close="syncTestCannel"
>
<el-form ref="form" :model="syncForm" :rules="rules" size="mini" label-width="50px">
<el-form-item label="表单:" prop="occupystruct_qty">
<el-input disabled v-model="syncForm.form_name" :precision="0" style="width: 150px;" />
</el-form-item>
<el-form-item label="测试数据" prop="testData">
<el-input type="textarea" v-model="syncForm.testData" :precision="0" style="width: 450px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="crud.cu === 2" type="primary" @click="syncTestSubmit">同步</el-button>
</div>
</el-dialog>
<!--表格渲染-->
<el-table
ref="table"
@@ -138,24 +157,30 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="form_name" label="表单名称" width="120" />
<el-table-column prop="form_type" label="表单类型" width="120" />
<el-table-column prop="sync_type" label="同步方式" width="120" />
<el-table-column prop="sync_url" label="同步配置" width="120" />
<el-table-column prop="mapping_json" :show-overflow-tooltip="true" :formatter="jsonFormat" label="字段映射关系" width="120" />
<el-table-column prop="update_name" label="更新人" width="120" />
<el-table-column prop="update_time" label="更新事件" width="120" />
<!-- <el-table-column prop="sync_type" label="同步类型">-->
<!-- <template slot-scope="scope">-->
<!-- {{ dict.label.sync_type[scope.row.sync_type] }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="form_name" label="表单名称" width="150" />
<el-table-column prop="form_type" label="表单类型" width="150" />
<el-table-column prop="sync_type" label="同步类型" width="150" >
<template slot-scope="scope">
{{ dict.label.sync_type[scope.row.sync_type] }}
</template>
</el-table-column>
<el-table-column prop="sync_url" label="同步配置" width="210" />
<el-table-column prop="mapping_json" :show-overflow-tooltip="true" :formatter="jsonFormat" label="字段映射关系" width="210" />
<el-table-column prop="update_name" label="更新人" width="150" />
<el-table-column prop="update_time" label="更新时间" width="150" />
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
/>
<el-button
class="filter-item"
icon="el-icon-download"
size="mini"
type="warning"
@click="syncTest(scope.row)"
>同步测试</el-button>
</template>
</el-table-column>
</el-table>
@@ -215,6 +240,8 @@ export default {
dataTypeList: [],
addShow: false,
editShow: false,
syncShow: false,
syncForm: {},
permission: {},
rules: {
position_code: [
@@ -262,6 +289,16 @@ export default {
},
querytable1() {
this.crud.toQuery()
},
syncTest(row){
this.syncShow = true
this.syncForm = row
},
syncTestSubmit(){
this.crud.notify('操作成功'+row.form_type, CRUD.NOTIFICATION_TYPE.SUCCESS)
},
syncTestCannel(){
this.syncForm = {}
}
}
}