diff --git a/base-common/src/main/java/com/hzya/frame/util/AESUtil.java b/base-common/src/main/java/com/hzya/frame/util/AESUtil.java index 349869d8..c1dbc059 100644 --- a/base-common/src/main/java/com/hzya/frame/util/AESUtil.java +++ b/base-common/src/main/java/com/hzya/frame/util/AESUtil.java @@ -5,6 +5,8 @@ import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; +import static cn.hutool.crypto.CipherMode.encrypt; + /** * @Description AES加密解密 * @Author xiang2lin @@ -77,4 +79,9 @@ public class AESUtil { return null; } + public static void main(String[] args) { + String data = "U8C241231"; + String encrypt1 = encrypt(data); + System.out.println(encrypt1); + } } diff --git a/base-common/src/main/java/com/hzya/frame/web/action/DefaultController.java b/base-common/src/main/java/com/hzya/frame/web/action/DefaultController.java index 7eeef491..e83085de 100644 --- a/base-common/src/main/java/com/hzya/frame/web/action/DefaultController.java +++ b/base-common/src/main/java/com/hzya/frame/web/action/DefaultController.java @@ -7,7 +7,6 @@ import org.slf4j.LoggerFactory; import org.springframework.context.support.ApplicationObjectSupport; - /** * @author 郭军辉 *

@@ -26,7 +25,7 @@ public class DefaultController extends ApplicationObjectSupport { * @return */ public JsonResultEntity getFailureMessageEntity(String message) { - return new JsonResultEntity(message, false); + return new JsonResultEntity(message, false, "500"); } /** @@ -35,8 +34,8 @@ public class DefaultController extends ApplicationObjectSupport { * @param message 提示信息 * @return */ - public JsonResultEntity getFailureMessageEntity(String message, Object mo) { - return new JsonResultEntity(message, false, mo); + public JsonResultEntity getFailureMessageEntity(String message, Object mo) { + return new JsonResultEntity(message, false, "500", mo); } /** @@ -46,8 +45,8 @@ public class DefaultController extends ApplicationObjectSupport { * @param mo 返回对象 * @return */ - public JsonResultEntity getSuccessMessageEntity(String message, Object mo) { - return new JsonResultEntity(message, true, mo); + public JsonResultEntity getSuccessMessageEntity(String message, Object mo) { + return new JsonResultEntity(message, true, "200", mo); } /** @@ -56,18 +55,11 @@ public class DefaultController extends ApplicationObjectSupport { * @param message 提示消息 * @return */ - public JsonResultEntity getSuccessMessageEntity(String message ) { - return new JsonResultEntity(message, true); + public JsonResultEntity getSuccessMessageEntity(String message) { + return new JsonResultEntity(message, true, "200"); } - - - - - - - /** * //绑定org_id * diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.java index ab16aca7..730e9eb3 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.java @@ -26,8 +26,45 @@ public class MdmModuleEntity extends BaseEntity { private String createUser; //修改人 private String modifyUser; + /** 0:预制 1:手工 */ + private String tag; + private String u8cDbPk; + private String nccDbPk; + private String ysDbPk; + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getU8cDbPk() { + return u8cDbPk; + } + + public void setU8cDbPk(String u8cDbPk) { + this.u8cDbPk = u8cDbPk; + } + + public String getNccDbPk() { + return nccDbPk; + } + + public void setNccDbPk(String nccDbPk) { + this.nccDbPk = nccDbPk; + } + + public String getYsDbPk() { + return ysDbPk; + } + + public void setYsDbPk(String ysDbPk) { + this.ysDbPk = ysDbPk; + } + public String getMdmName() { return mdmName; } diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml index 822bd239..d9e0129a 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml @@ -19,6 +19,10 @@ + + + + @@ -39,6 +43,10 @@ ,sts ,org_id ,company_id + ,tag + ,u8c_db_pk + ,ncc_db_pk + ,ys_db_pk select + a.u8c_db_pk as u8c_db_pk, + a.ncc_db_pk as ncc_db_pk, + a.ys_db_pk as ys_db_pk, a.id as id, a.mdm_name as mdm_name, a.mdm_logo as mdm_logo, @@ -974,10 +1003,10 @@ where id = #{id} < #{item.filedVaule} - like #{item.filedVaule} + like concat('%',#{item.filedVaule},'%') - not like #{item.filedVaule} + not like concat('%',#{item.filedVaule},'%') diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/IMdmModuleService.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/IMdmModuleService.java index ca980443..2c5f51b2 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/IMdmModuleService.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/IMdmModuleService.java @@ -3,7 +3,14 @@ package com.hzya.frame.mdm.mdmModule.service; import com.alibaba.fastjson.JSONObject; import com.hzya.frame.mdm.mdmModule.entity.MdmModuleEntity; import com.hzya.frame.basedao.service.IBaseService; +import com.hzya.frame.mdm.mdmModule.vo.ImportExcelVO; +import com.hzya.frame.mdm.mdmModuleDbFileds.entity.MdmModuleDbFiledsEntity; import com.hzya.frame.web.entity.JsonResultEntity; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; /** * 主数据模版(MdmModule)表服务接口 @@ -397,4 +404,16 @@ public interface IMdmModuleService extends IBaseService * @return com.hzya.frame.web.entity.JsonResultEntity **/ JsonResultEntity queryMdmDistributeByMdmCode(JSONObject jsonObject); + + /** + * 下载导入模版 + * @return + */ + void generateExcelTemplate(HttpServletResponse response) throws IOException; + + /** + * 导入模版 + * @param file + */ + List importTemplateFile(MultipartFile file, ImportExcelVO importExcelVO); } diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java index c32080d1..533d69d5 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java @@ -1,8 +1,17 @@ package com.hzya.frame.mdm.mdmModule.service.impl; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.util.StringUtils; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.annotation.TableField; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.hzya.frame.beanutil.BeanUtil; import com.hzya.frame.mdm.entity.MdmDbFiledVo; import com.hzya.frame.mdm.entity.MdmDto; import com.hzya.frame.mdm.entity.MdmModuleViewVo; @@ -10,6 +19,8 @@ import com.hzya.frame.mdm.entity.MdmQuery; import com.hzya.frame.mdm.mdmModule.entity.MdmModuleEntity; import com.hzya.frame.mdm.mdmModule.dao.IMdmModuleDao; import com.hzya.frame.mdm.mdmModule.service.IMdmModuleService; +import com.hzya.frame.mdm.mdmModule.vo.ExcelTemplateVO; +import com.hzya.frame.mdm.mdmModule.vo.ImportExcelVO; import com.hzya.frame.mdm.mdmModuleDb.dao.IMdmModuleDbDao; import com.hzya.frame.mdm.mdmModuleDb.dao.impl.MdmModuleDbDaoImpl; import com.hzya.frame.mdm.mdmModuleDb.entity.MdmModuleDbEntity; @@ -50,17 +61,24 @@ import com.hzya.frame.web.entity.BaseResult; import com.hzya.frame.web.entity.JsonResultEntity; import com.hzya.frame.web.exception.BaseSystemException; import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import com.hzya.frame.basedao.service.impl.BaseService; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.util.*; /** * 主数据模版(MdmModule)表服务实现类 @@ -443,6 +461,22 @@ public class MdmModuleServiceImpl extends BaseService i for (int i = 0; i < mdmModuleDbEntities.size(); i++) { if ("1".equals(mdmModuleDbEntities.get(i).getDbType()) || "2".equals(mdmModuleDbEntities.get(i).getDbType())) { dbEntities.add(mdmModuleDbEntities.get(i)); + //查询合并规则。add by zyd 20250707 + List filedNames=new ArrayList<>(); + if (mdmModuleDbEntities.get(i).getMergeRules() != null && !"".equals(mdmModuleDbEntities.get(i).getMergeRules())) { + String mergeRulesIds = mdmModuleDbEntities.get(i).getMergeRules(); + String[] split = mergeRulesIds.split(","); + for (String filedId : split) { + MdmModuleDbFiledsEntity mdmModuleDbFiledsEntity = new MdmModuleDbFiledsEntity(); + mdmModuleDbFiledsEntity.setId(filedId); + List fileds = mdmModuleDbFiledsDao.query(mdmModuleDbFiledsEntity); + if(fileds.size()!=0){ + filedNames.add(fileds.get(0).getChName()); + } + + } + } + mdmModuleDbEntities.get(i).setMergeRulesStr(String.join(",",filedNames)); } } } @@ -1403,7 +1437,8 @@ public class MdmModuleServiceImpl extends BaseService i MdmModuleDbFiledsEntity mdmModuleDbFiledsEntity = new MdmModuleDbFiledsEntity(); mdmModuleDbFiledsEntity.setMdmId(entity.getMdmId()); mdmModuleDbFiledsEntity.setSts("Y"); - List mdmModuleDbFiledsEntityList = mdmServiceCache.queryMdmModuleDbFileds(mdmModuleDbFiledsEntity); +// List mdmModuleDbFiledsEntityList = mdmServiceCache.queryMdmModuleDbFileds(mdmModuleDbFiledsEntity); + List mdmModuleDbFiledsEntityList = mdmModuleDbFiledsDao.query(mdmModuleDbFiledsEntity); if (mdmModuleDbFiledsEntityList != null && mdmModuleDbFiledsEntityList.size() > 0) { for (int i = 0; i < mdmModuleDbFiledsEntityList.size(); i++) { if (entity.getDbId().equals(mdmModuleDbFiledsEntityList.get(i).getDbId()) && entity.getEnName().equals(mdmModuleDbFiledsEntityList.get(i).getEnName())) { @@ -1411,6 +1446,42 @@ public class MdmModuleServiceImpl extends BaseService i } } } + //新增时:查询sysPk,sysCode,sysName段是否存在 add by zyd 2025-06-09 + boolean isSysPk = false; + boolean isSysCode = false; + boolean isSysName = false; + boolean isSysDate = false; + for (MdmModuleDbFiledsEntity dbFiledsEntity : mdmModuleDbFiledsEntityList) { + if (entity.getDbId().equals(dbFiledsEntity.getDbId())) { + if (entity.getDbId().equals(dbFiledsEntity.getDbId())) { + if ("Y".equals(dbFiledsEntity.getIsSysPk())) { + isSysPk = true; + } + if ("Y".equals(dbFiledsEntity.getIsSysCode())) { + isSysCode = true; + } + if ("Y".equals(dbFiledsEntity.getIsSysName())) { + isSysName = true; + } + if ("Y".equals(dbFiledsEntity.getIsSysDate())) { + isSysDate = true; + } + } + } + } + //判端该字段是不是sysPk,sysCode,sysName=true + if ("Y".equals(entity.getIsSysPk()) && isSysPk) { + return BaseResult.getFailureMessageEntity("系统主键字段已存在,请修改"); + } + if ("Y".equals(entity.getIsSysCode()) && isSysCode) { + return BaseResult.getFailureMessageEntity("系统code字段已存在,请修改"); + } + if ("Y".equals(entity.getIsSysName()) && isSysName) { + return BaseResult.getFailureMessageEntity("系统name字段已存在,请修改"); + } + if ("Y".equals(entity.getIsSysDate()) && isSysDate) { + return BaseResult.getFailureMessageEntity("系统date字段已存在,请修改"); + } entity.setCreate(); if ("1".equals(entity.getDbType())) { entity.setAddType("1"); @@ -1488,6 +1559,49 @@ public class MdmModuleServiceImpl extends BaseService i } catch (Exception e) { throw new BaseSystemException("表字段类型,修改失败,请联系管理员"); } + + //更新时:查询sysPk,sysCode,sysName段是否存在 add by zyd 2025-06-09 + MdmModuleDbFiledsEntity mdmModuleDbFiledsEntity = new MdmModuleDbFiledsEntity(); + mdmModuleDbFiledsEntity.setDbId(entity.getDbId()); + mdmModuleDbFiledsEntity.setMdmId(entity.getMdmId()); + mdmModuleDbFiledsEntity.setSts("Y"); + List mdmModuleDbFiledsEntityList = mdmModuleDbFiledsDao.query(mdmModuleDbFiledsEntity); + boolean isSysPk = false; + boolean isSysCode = false; + boolean isSysName = false; + boolean isSysDate = false; + for (MdmModuleDbFiledsEntity dbFiledsEntity : mdmModuleDbFiledsEntityList) { + if (entity.getDbId().equals(dbFiledsEntity.getDbId())) { + if (entity.getDbId().equals(dbFiledsEntity.getDbId())) { + if ("Y".equals(dbFiledsEntity.getIsSysPk())) { + isSysPk = true; + } + if ("Y".equals(dbFiledsEntity.getIsSysCode())) { + isSysCode = true; + } + if ("Y".equals(dbFiledsEntity.getIsSysName())) { + isSysName = true; + } + if ("Y".equals(dbFiledsEntity.getIsSysDate())) { + isSysDate = true; + } + } + } + } + //判端该字段是不是sysPk,sysCode,sysName=true + if ("Y".equals(entity.getIsSysPk()) && isSysPk) { + return BaseResult.getFailureMessageEntity("系统主键字段已存在,请修改"); + } + if ("Y".equals(entity.getIsSysCode()) && isSysCode) { + return BaseResult.getFailureMessageEntity("系统code字段已存在,请修改"); + } + if ("Y".equals(entity.getIsSysName()) && isSysName) { + return BaseResult.getFailureMessageEntity("系统name字段已存在,请修改"); + } + if ("Y".equals(entity.getIsSysDate()) && isSysDate) { + return BaseResult.getFailureMessageEntity("系统date字段已存在,请修改"); + } + List mdmModuleDbFiledsEntities = new ArrayList<>(); mdmModuleDbFiledsEntities.add(entity); mdmServiceCache.saveOrUpdateMdmModuleDbFileds(entity.getMdmId(), mdmModuleDbFiledsEntities); @@ -1551,6 +1665,7 @@ public class MdmModuleServiceImpl extends BaseService i return BaseResult.getFailureMessageEntity("系统错误"); } MdmModuleDbFiledsRuleEntity queryCount = new MdmModuleDbFiledsRuleEntity(); + queryCount.setMdmId(entity.getMdmId()); queryCount.setDbId(entity.getDbId()); queryCount.setRuleCode("label"); queryCount.setRuleValue(entity.getEnName()); @@ -2864,4 +2979,290 @@ public class MdmModuleServiceImpl extends BaseService i List list = mdmModuleDistributeDao.queryBase(entity); return BaseResult.getSuccessMessageEntity("获取分发设置成功", list); } + + /** + * 生成导入模版 + */ + @Override + public void generateExcelTemplate(HttpServletResponse response) throws IOException { + // 设置响应内容类型 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + // 设置文件名,注意中文需要URLEncoder编码 + String fileName = URLEncoder.encode("表字段定义模版", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + // 准备模板的示例数据 + List demoData = new ArrayList<>(); //createTemplateDemoData() + // 使用EasyExcel直接写入响应输出流 + EasyExcel.write(response.getOutputStream(), ExcelTemplateVO.class) + .sheet("表字段定义模版") + .doWrite(demoData); + } + + /*private List createTemplateDemoData() { + List demoData = new ArrayList<>(); + ExcelTemplateVO demo = new ExcelTemplateVO(); + demo.setChName("用户ID"); + demo.setEnName("userId"); + demo.setFiledType("1"); // 对应BIGINT类型 + demo.setFiledLength("20"); + demo.setIsSysPk("Y"); + demo.setIsSysCode("Y"); + demo.setIsSysName("N"); + demo.setIsSysDate("N"); + demo.setTitle("用户ID"); + demo.setRow("6"); + demo.setWidth("100"); + demo.setType("input"); + demo.setRequired("true"); + demo.setDisabled("true"); + + demoData.add(demo); + return demoData; + } +*/ + /** + * 导入模版 + */ + @Transactional + @Override + public List importTemplateFile(MultipartFile file , ImportExcelVO importExcelVO) { + // 校验文件合法性 + if (file == null || file.isEmpty()) { + throw new IllegalArgumentException("导入文件不能为空"); + } + // 校验文件格式 + String fileName = file.getOriginalFilename(); + if (fileName == null || (!fileName.endsWith(".xlsx") && !fileName.endsWith(".xls"))) { + throw new IllegalArgumentException("请上传Excel格式文件"); + } + // 表头数据 + List> headerList = new ArrayList<>(); + // 用于存储内容数据 + List dataList = new ArrayList<>(); + List resultEntities = new ArrayList<>(); + try (InputStream inputStream = file.getInputStream()) { + // 使用EasyExcel读取文件 + EasyExcel.read(inputStream) + .head(ExcelTemplateVO.class) // 指定映射的实体类 + .sheet(0) // 指定第一个sheet页 + .headRowNumber(1) // 表头行数(从1开始) + .autoTrim(true) + .registerReadListener(new AnalysisEventListener() { + /** + * 获取表头行数据 + */ + @Override + public void invokeHeadMap(Map headMap, AnalysisContext context) { + // 1. 转换表头为有序列表 + List header = new ArrayList<>(); + // 获取最大列索引,确保顺序正确 + int maxColIndex = headMap.keySet().stream().mapToInt(Integer::intValue).max().orElse(-1); + for (int i = 0; i <= maxColIndex; i++) { + header.add(headMap.getOrDefault(i, "")); // 无数据的列填空 + } + headerList.add(header); + } + /** + * 每解析一行数据触发 + */ + @Override + public void invoke(ExcelTemplateVO data, AnalysisContext context) { + // 空行直接跳过 + if (isRowEmpty(data)) { + return; + } + // 数据校验 + validateData(data, context.readRowHolder().getRowIndex() + 1); + dataList.add(data); + } + /** + * 所有数据解析完成后触发 + */ + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 解析完成后的数据处理 + List entities = processImportData(headerList, dataList, importExcelVO); + if (entities != null) { + resultEntities.addAll(entities); + } + } + }) + .doRead(); // 执行读取操作 + } catch (IOException e) { + throw new RuntimeException("文件读取失败:" + e.getMessage(), e); + } + return resultEntities; + } + + private boolean isRowEmpty(ExcelTemplateVO data) { + if(data == null) { + return true; + } + return StringUtils.isEmpty(data.getChName() ) && + StringUtils.isEmpty(data.getFiledType()) && + StringUtils.isEmpty(data.getEnName()) ; + } + + /** + * 导入数据,新增字段 + * @param headerList + * @param dataList + */ + private List processImportData(List> headerList, List dataList,ImportExcelVO importExcelVO) { + // 获取表头列名 + List headers = headerList.get(0); + // 数据库字段数据 + List entities = new ArrayList<>(); + for (ExcelTemplateVO data : dataList) { + MdmModuleDbFiledsEntity entity = new MdmModuleDbFiledsEntity(); + BeanUtils.copyProperties(data, entity); + // 字段规则数据集合 + List rules = new ArrayList<>(); + for (String header : headers) { + // 字段规则数据 + MdmModuleDbFiledsRuleEntity rule = new MdmModuleDbFiledsRuleEntity(); + rule.setRuleType("2"); + rule.setFormName("optionRuleForm"); + switch (header) { + case "显示名": + rule.setRuleName("显示名"); + rule.setRuleCode("title"); + rule.setRuleValue(data.getChName()); + break; + case "宽度": + rule.setRuleName("宽度"); + rule.setRuleCode("row"); + rule.setRuleValue(data.getRow()); + break; + case "单元格宽度": + rule.setRuleName("单元格宽度"); + rule.setRuleCode("width"); + rule.setRuleValue(data.getWidth()); + break; + case "数据类型": + rule.setRuleName("数据类型"); + rule.setRuleCode("type"); + rule.setRuleValue(data.getType()); + break; + case "必填": + rule.setRuleName("必填"); + rule.setRuleCode("required"); + rule.setRuleValue(data.getRequired() != null ? "true" : "false"); + break; + case "禁止修改": + rule.setRuleName("禁止修改"); + rule.setRuleCode("disabled"); + rule.setRuleValue(data.getDisabled() != null ? "true" : "false"); + break; + default: + continue; + } + rules.add(rule); + } + entity.setMdmModuleDbFiledsRules(rules); + entity.setDbName(importExcelVO.getDbName()); + entity.setDbId(importExcelVO.getDbId()); + entity.setDbType(importExcelVO.getDbType()); + entity.setMdmId(importExcelVO.getMdmId()); + entities.add(entity); + } + return entities; + } + + /** + * 数据校验方法,验证Excel导入的数据合法性 + * @param data 导入的Excel数据对象 + * @param rowNum 行号 + */ + private void validateData(ExcelTemplateVO data, int rowNum) { + List errors = new ArrayList<>(); + + // 1. 校验中文名称必填 + if (StringUtils.isBlank(data.getChName())) { + errors.add("第" + rowNum + "行:中文名称不能为空"); + } + + // 2. 校验字段类型合法性 + if (StringUtils.isBlank(data.getFiledType())) { + errors.add("第" + rowNum + "行:字段类型不能为空"); + } else { + Set validTypes = new HashSet<>(Arrays.asList("1", "2", "3", "4")); + if (!validTypes.contains(data.getFiledType())) { + errors.add("第" + rowNum + "行:字段类型无效,允许值为1(BIGINT)、2(DECIMAL)、3(VARCHAR)、4(DATETIME)"); + } + } + + // 3. 校验长度(数字类型且当字段类型为1、2、3时必填) + if (StringUtils.isNotBlank(data.getFiledType()) && + (data.getFiledType().equals("1") || data.getFiledType().equals("2") || data.getFiledType().equals("3"))) { + + if (StringUtils.isBlank(data.getFiledLength())) { + errors.add("第" + rowNum + "行:字段长度不能为空"); + } else if (!StringUtils.isNumeric(data.getFiledLength())) { + errors.add("第" + rowNum + "行:字段长度必须为数字"); + } else { + int length = Integer.parseInt(data.getFiledLength()); + if (length <= 0) { + errors.add("第" + rowNum + "行:字段长度必须大于0"); + } + } + } + + // 4. 校验系统主键标识合法性 + if (StringUtils.isNotBlank(data.getIsSysPk()) && + !"Y".equals(data.getIsSysPk()) && !"N".equals(data.getIsSysPk())) { + errors.add("第" + rowNum + "行:是否系统主键只能为Y或N"); + } + + // 5. 校验系统数据编码标识合法性 + if (StringUtils.isNotBlank(data.getIsSysCode()) && + !"Y".equals(data.getIsSysCode()) && !"N".equals(data.getIsSysCode())) { + errors.add("第" + rowNum + "行:是否系统数据编码只能为Y或N"); + } + + // 6. 校验系统数据名称标识合法性 + if (StringUtils.isNotBlank(data.getIsSysName()) && + !"Y".equals(data.getIsSysName()) && !"N".equals(data.getIsSysName())) { + errors.add("第" + rowNum + "行:是否系统数据名称只能为Y或N"); + } + + // 7. 校验系统日期标识合法性 + if (StringUtils.isNotBlank(data.getIsSysDate()) && + !"Y".equals(data.getIsSysDate()) && !"N".equals(data.getIsSysDate())) { + errors.add("第" + rowNum + "行:是否系统日期只能为Y或N"); + } + + // 8. 校验是否必填标识合法性 + if (data.getRequired() != null && !data.getRequired().trim().isEmpty()) { + String required = data.getRequired().trim(); + if (!"TRUE".equalsIgnoreCase(required) && !"FALSE".equalsIgnoreCase(required)) { + errors.add("第" + rowNum + "行:是否必填只能为true或false"); + } + } + + // 9. 校验禁止修改标识合法性 + if (data.getDisabled() != null && !data.getDisabled().trim().isEmpty()) { + String disabled = data.getDisabled().trim(); + if (!"TRUE".equalsIgnoreCase(disabled) && !"FALSE".equalsIgnoreCase(disabled)) { + errors.add("第" + rowNum + "行:禁止修改只能为true或false"); + } + } + + // 如果有错误,抛出异常中断导入 + if (!errors.isEmpty()) { + throw new ExcelDataValidateException(String.join(";", errors)); + } + } + + // 自定义异常类 + public class ExcelDataValidateException extends RuntimeException { + public ExcelDataValidateException(String message) { + super(message); + } + } + + + + } diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.java index 71ad1ac2..871e621e 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.java @@ -27,7 +27,25 @@ public class MdmModuleDbEntity extends BaseEntity { /** 数据类型 1、新增 2、修改 */ private String dataType; private List sublistMdmModuleDbFileds; + /** 合并规则,字段id使用逗号隔开 */ + private String mergeRules; + private String mergeRulesStr; + public String getMergeRules() { + return mergeRules; + } + + public void setMergeRules(String mergeRules) { + this.mergeRules = mergeRules; + } + + public String getMergeRulesStr() { + return mergeRulesStr; + } + + public void setMergeRulesStr(String mergeRulesStr) { + this.mergeRulesStr = mergeRulesStr; + } public String getMdmId() { return mdmId; diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.xml b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.xml index c680877b..b9bb50f0 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.xml +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDb/entity/MdmModuleDbEntity.xml @@ -16,6 +16,7 @@ + @@ -32,6 +33,7 @@ ,sts ,org_id ,company_id + ,merge_rules - select - - from mdm_module_db_fileds - - and id = #{id} - and mdm_id = #{mdmId} - and db_id = #{dbId} - and ch_name = #{chName} - and en_name = #{enName} - and filed_type = #{filedType} - and add_type = #{addType} - and update_type = #{updateType} - and show_type = #{showType} - and query_type = #{queryType} - and list_type = #{listType} - and view_type = #{viewType} - and filed_length = #{filedLength} - and sorts = #{sorts} - and create_user_id = #{create_user_id} - and create_time = #{create_time} - and modify_user_id = #{modify_user_id} - and modify_time = #{modify_time} - and sts = #{sts} - and org_id = #{org_id} - and company_id = #{companyId} + ,sys_pk + ,sys_code + ,sys_name + ,sys_date + + + - - - + + + - + - select - - from mdm_module_db_fileds - - or id = #{id} - or mdm_id = #{mdmId} - or db_id = #{dbId} - or ch_name = #{chName} - or en_name = #{enName} - or filed_type = #{filedType} - or add_type = #{addType} - or update_type = #{updateType} - or show_type = #{showType} - or query_type = #{queryType} - or list_type = #{listType} - or view_type = #{viewType} - or filed_length = #{filedLength} - or sorts = #{sorts} - or create_user_id = #{create_user_id} - or create_time = #{create_time} - or modify_user_id = #{modify_user_id} - or modify_time = #{modify_time} - or sts = #{sts} - or org_id = #{org_id} - or company_id = #{companyId} + and sys_pk like concat('%',#{isSysPk},'%') + and sys_code like concat('%',#{isSysCode},'%') + and sys_name like concat('%',#{isSysName},'%') + and sys_date like concat('%',#{isSysDate},'%') and sts='Y' - - order by sorts asc - order by ${sort} ${order} - + + order by sorts asc + order by ${sort} ${order} + + + + + + + + insert into mdm_module_db_fileds( + + id , + mdm_id , + db_id , + ch_name , + en_name , + filed_type , + add_type , + update_type , + show_type , + query_type , + list_type , + view_type , + filed_length , + sorts , + create_user_id , + create_time , + modify_user_id , + modify_time , + sts , + org_id , + company_id , + sys_pk , + sys_code , + sys_name , + sys_date , + sts, + + )values( + + #{id} , + #{mdmId} , + #{dbId} , + #{chName} , + #{enName} , + #{filedType} , + #{addType} , + #{updateType} , + #{showType} , + #{queryType} , + #{listType} , + #{viewType} , + #{filedLength} , + #{sorts} , + #{create_user_id} , + #{create_time} , + #{modify_user_id} , + #{modify_time} , + #{sts} , + #{org_id} , + #{companyId} , + #{isSysPk} , + #{isSysCode} , + #{isSysName} , + #{isSysDate} , + 'Y', + + ) + + + + insert into mdm_module_db_fileds(mdm_id, db_id, ch_name, en_name, filed_type, add_type, update_type, show_type, + query_type, list_type, view_type, filed_length, create_user_id, create_time, modify_user_id, modify_time, sts, + org_id, company_id, sts) + values + + (#{entity.mdmId},#{entity.dbId},#{entity.chName},#{entity.enName},#{entity.filedType},#{entity.addType},#{entity.updateType},#{entity.showType},#{entity.queryType},#{entity.listType},#{entity.viewType},#{entity.filedLength},#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId}, + 'Y') + + + + + insert into mdm_module_db_fileds(mdm_id, db_id, ch_name, en_name, filed_type, add_type, update_type, show_type, + query_type, list_type, view_type, filed_length, create_user_id, create_time, modify_user_id, modify_time, sts, + org_id, company_id) + values + + (#{entity.mdmId},#{entity.dbId},#{entity.chName},#{entity.enName},#{entity.filedType},#{entity.addType},#{entity.updateType},#{entity.showType},#{entity.queryType},#{entity.listType},#{entity.viewType},#{entity.filedLength},#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId}) + + on duplicate key update + mdm_id = values(mdm_id), + db_id = values(db_id), + ch_name = values(ch_name), + en_name = values(en_name), + filed_type = values(filed_type), + add_type = values(add_type), + update_type = values(update_type), + show_type = values(show_type), + query_type = values(query_type), + list_type = values(list_type), + view_type = values(view_type), + filed_length = values(filed_length), + create_user_id = values(create_user_id), + create_time = values(create_time), + modify_user_id = values(modify_user_id), + modify_time = values(modify_time), + sts = values(sts), + org_id = values(org_id), + company_id = values(company_id) + + + + update mdm_module_db_fileds set + + mdm_id = #{mdmId}, + db_id = #{dbId}, + ch_name = #{chName}, + en_name = #{enName}, + filed_type = #{filedType}, + add_type = #{addType}, + update_type = #{updateType}, + show_type = #{showType}, + query_type = #{queryType}, + list_type = #{listType}, + view_type = #{viewType}, + filed_length = #{filedLength}, + create_user_id = #{create_user_id}, + create_time = #{create_time}, + modify_user_id = #{modify_user_id}, + modify_time = #{modify_time}, + sts = #{sts}, + org_id = #{org_id}, + company_id = #{companyId}, + sys_pk = #{isSysPk}, + sys_pk = null, + sys_code = #{isSysCode}, + sys_code = null, + sys_name = #{isSysName}, + sys_name = null, + sys_date = #{isSysDate}, + sys_date = null, + + where id = #{id} + + + + update mdm_module_db_fileds + set sts= 'N', + modify_time = #{modify_time}, + modify_user_id = #{modify_user_id} + where id = #{id} + + + + update mdm_module_db_fileds set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id} + + and id = #{id} + and mdm_id = #{mdmId} + and db_id = #{dbId} + and ch_name = #{chName} + and en_name = #{enName} + and filed_type = #{filedType} + and add_type = #{addType} + and update_type = #{updateType} + and show_type = #{showType} + and query_type = #{queryType} + and list_type = #{listType} + and view_type = #{viewType} + and filed_length = #{filedLength} + and sorts = #{sorts} + and sts = #{sts} + and company_id = #{companyId} + and sts='Y' + + + + + delete + from mdm_module_db_fileds + where id = #{id} + - delete from mdm_module_db_fileds where mdm_id = #{mdmId} - + delete + from mdm_module_db_fileds + where mdm_id = #{mdmId} + diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFileds/service/impl/MdmModuleDbFiledsServiceImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFileds/service/impl/MdmModuleDbFiledsServiceImpl.java index 82ecb3f0..bf60a8f4 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFileds/service/impl/MdmModuleDbFiledsServiceImpl.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFileds/service/impl/MdmModuleDbFiledsServiceImpl.java @@ -3,7 +3,8 @@ package com.hzya.frame.mdm.mdmModuleDbFileds.service.impl; import com.hzya.frame.mdm.mdmModuleDbFileds.entity.MdmModuleDbFiledsEntity; import com.hzya.frame.mdm.mdmModuleDbFileds.dao.IMdmModuleDbFiledsDao; import com.hzya.frame.mdm.mdmModuleDbFileds.service.IMdmModuleDbFiledsService; -import org.springframework.stereotype.Service; +import com.hzya.frame.web.entity.JsonResultEntity; +import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.Resource; import com.hzya.frame.basedao.service.impl.BaseService; diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFiledsRule/entity/MdmModuleDbFiledsRuleEntity.xml b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFiledsRule/entity/MdmModuleDbFiledsRuleEntity.xml index 30f2c620..cf284f67 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFiledsRule/entity/MdmModuleDbFiledsRuleEntity.xml +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModuleDbFiledsRule/entity/MdmModuleDbFiledsRuleEntity.xml @@ -310,7 +310,12 @@ parameterType="com.hzya.frame.mdm.mdmModuleDbFiledsRule.entity.MdmModuleDbFiledsRuleEntity"> select count(1) from mdm_module_db_fileds_rule - and mdm_id != #{mdmId} + + + + + and mdm_id = #{mdmId} + and db_id = #{dbId} and rule_code = #{ruleCode} and rule_value = #{ruleValue} and sts='Y' diff --git a/pom.xml b/pom.xml index 303e6fd7..981977e1 100644 --- a/pom.xml +++ b/pom.xml @@ -421,6 +421,11 @@ jsch 0.1.53 + + com.alibaba + easyexcel + 3.0.5 +