1.消息模板配置

2.通知规则配置
3.数据模板批量导入
This commit is contained in:
lixinyu 2025-09-09 11:19:52 +08:00
parent 7438069201
commit 1cd26a247a
16 changed files with 319 additions and 13 deletions

View File

@ -1,14 +1,12 @@
package com.hzya.frame.finance.conf.message.controller;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.finance.conf.billtemplate.entity.FeConfBillTemplateEntity;
import com.hzya.frame.finance.conf.message.entity.FeConfMessageTemplateEntity;
import com.hzya.frame.finance.conf.message.service.IFeConfMessageTemplateService;
import com.hzya.frame.web.entity.JsonResultEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -29,6 +27,7 @@ public class MessageController {
PageInfo pageInfo = iFeConfMessageTemplateService.queryMessagePaged(feConfMessageTemplateEntity);
return new JsonResultEntity("查询成功",true,pageInfo);
}
/**
* 查询消息模板
*/
@ -80,7 +79,6 @@ public class MessageController {
@RequestMapping(value = "/updateStatus", method = RequestMethod.POST)
public JsonResultEntity updateStatus(@RequestBody FeConfMessageTemplateEntity feConfMessageTemplateEntity) throws Exception {
FeConfMessageTemplateEntity update = iFeConfMessageTemplateService.updateStatus(feConfMessageTemplateEntity);
return new JsonResultEntity("修改成功",true,update);
}
@ -95,4 +93,16 @@ public class MessageController {
iFeConfMessageTemplateService.logicRemove(feConfMessageTemplateEntity);
return new JsonResultEntity("删除成功",true,null);
}
/**
* 根据mdm_id和mdm_name查询消息模板
*/
@PostMapping("/queryTemplate")
public JsonResultEntity queryTemplate(@RequestBody FeConfBillTemplateEntity feConfBillTemplateEntity) throws Exception {
List<FeConfMessageTemplateEntity> feConfMessageTemplateEntities = iFeConfMessageTemplateService.queryTemplate(feConfBillTemplateEntity);
return new JsonResultEntity("查询成功",true,feConfMessageTemplateEntities);
}
}

View File

@ -17,5 +17,8 @@ public interface IFeConfMessageTemplateDao extends IBaseDao<FeConfMessageTemplat
List<FeConfMessageTemplateEntity> page(FeConfMessageTemplateEntity feConfMessageTemplateEntity);
List<FeConfMessageTemplateEntity> queryTemplate(String mdmId, String mdmName);
}

View File

@ -2,7 +2,6 @@ package com.hzya.frame.finance.conf.message.dao.impl;
import com.hzya.frame.finance.conf.message.entity.FeConfMessageTemplateEntity;
import com.hzya.frame.finance.conf.message.dao.IFeConfMessageTemplateDao;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import com.hzya.frame.basedao.dao.MybatisGenericDao;
@ -35,5 +34,16 @@ public class FeConfMessageTemplateDaoImpl extends MybatisGenericDao<FeConfMessag
}
@Override
public List<FeConfMessageTemplateEntity> queryTemplate(String mdmId, String mdmName) {
FeConfMessageTemplateEntity feConfMessageTemplateEntity = new FeConfMessageTemplateEntity();
feConfMessageTemplateEntity.setMdmId(mdmId);
feConfMessageTemplateEntity.setMdmName(mdmName);
List<FeConfMessageTemplateEntity> objects = (List<FeConfMessageTemplateEntity>) this.selectList("com.hzya.frame.finance.conf.message.dao.impl.FeConfMessageTemplateDaoImpl.queryTemplate", feConfMessageTemplateEntity);
return objects;
}
}

View File

@ -53,6 +53,15 @@
,mdm_id
,mdm_name
</sql>
<select id="queryTemplate" resultMap="get-FeConfMessageTemplateEntity-result" parameterType = "com.hzya.frame.finance.conf.message.entity.FeConfMessageTemplateEntity">
select *
from fe_conf_message_template
where mdm_id = #{mdmId}
and mdm_name = #{mdmName}
</select>
<!-- 查询 采用==查询 -->
<select id="entity_list_base" resultMap="get-FeConfMessageTemplateEntity-result" parameterType = "com.hzya.frame.finance.conf.message.entity.FeConfMessageTemplateEntity">
select

View File

@ -1,6 +1,7 @@
package com.hzya.frame.finance.conf.message.service;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.finance.conf.billtemplate.entity.FeConfBillTemplateEntity;
import com.hzya.frame.finance.conf.message.entity.FeConfMessageTemplateEntity;
import com.hzya.frame.basedao.service.IBaseService;
@ -20,4 +21,8 @@ public interface IFeConfMessageTemplateService extends IBaseService<FeConfMessag
void delete(FeConfMessageTemplateEntity feConfMessageTemplateEntity) throws Exception;
PageInfo queryMessagePaged(FeConfMessageTemplateEntity feConfMessageTemplateEntity);
List<FeConfMessageTemplateEntity> queryTemplate(FeConfBillTemplateEntity feConfBillTemplateEntity);
}

View File

@ -1,13 +1,11 @@
package com.hzya.frame.finance.conf.message.service.impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.finance.conf.billtemplate.entity.FeConfBillTemplateEntity;
import com.hzya.frame.finance.conf.message.entity.FeConfMessageTemplateEntity;
import com.hzya.frame.finance.conf.message.dao.IFeConfMessageTemplateDao;
import com.hzya.frame.finance.conf.message.service.IFeConfMessageTemplateService;
import com.hzya.frame.page.PageAttribute;
import org.junit.Assert;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import com.hzya.frame.basedao.service.impl.BaseService;
@ -50,12 +48,14 @@ public class FeConfMessageTemplateServiceImpl extends BaseService<FeConfMessageT
*/
@Override
public FeConfMessageTemplateEntity updateStatus(FeConfMessageTemplateEntity feConfMessageTemplateEntity) throws Exception {
if(feConfMessageTemplateEntity == null){
throw new Exception("参数不能为空");
}
if(feConfMessageTemplateEntity.getId() == null){
throw new Exception("id不能为空");
}
List<FeConfMessageTemplateEntity> feConfMessageTemplate = feConfMessageTemplateDao.query(feConfMessageTemplateEntity);
if(feConfMessageTemplate == null){
throw new Exception("该记录不存在");
}
if(feConfMessageTemplateEntity.getSts().equals("N")){
throw new Exception("该记录已删除,无法修改");
}
@ -91,4 +91,14 @@ public class FeConfMessageTemplateServiceImpl extends BaseService<FeConfMessageT
List<FeConfMessageTemplateEntity> query = feConfMessageTemplateDao.page(feConfMessageTemplateEntity);
return new PageInfo(query);
}
@Override
public List<FeConfMessageTemplateEntity> queryTemplate(FeConfBillTemplateEntity feConfBillTemplateEntity) {
String mdmId = feConfBillTemplateEntity.getId();
String mdmName = feConfBillTemplateEntity.getName();
return feConfMessageTemplateDao.queryTemplate(mdmId,mdmName);
}
}

View File

@ -1,8 +1,10 @@
package com.hzya.frame.finance.conf.notificationRules.controller;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.finance.conf.billtemplate.entity.FeConfBillTemplateEntity;
import com.hzya.frame.finance.conf.message.entity.FeConfMessageTemplateEntity;
import com.hzya.frame.finance.conf.notificationRules.dao.impl.FeConfNotificationRulesDaoImpl;
import com.hzya.frame.finance.conf.notificationRules.entity.BillTypeVO;
import com.hzya.frame.finance.conf.notificationRules.entity.FeConfNotificationRulesEntity;
import com.hzya.frame.finance.conf.notificationRules.service.IFeConfNotificationRulesService;
import com.hzya.frame.web.entity.JsonResultEntity;
@ -77,4 +79,21 @@ public class NotificationRulesController {
return new JsonResultEntity("删除成功",true,null);
}
/**
* 根据mdm_id和mdm_name查询通知规则
*/
@PostMapping("/query")
public JsonResultEntity query(@RequestBody FeConfBillTemplateEntity feConfBillTemplateEntity) {
List<FeConfNotificationRulesEntity> feConfNotificationRulesEntityList = iFeConfNotificationRulesService.queryFeConfNotificationRulesEntity(feConfBillTemplateEntity);
return new JsonResultEntity("查询成功",true,feConfNotificationRulesEntityList);
}
/**
* 查询单据类型列表
*/
@PostMapping("/queryBillType")
public JsonResultEntity queryBillType() {
List<BillTypeVO> billTypeVOS = iFeConfNotificationRulesService.queryFeConfBillTypeEntity();
return new JsonResultEntity("查询成功",true,billTypeVOS);
}
}

View File

@ -1,5 +1,6 @@
package com.hzya.frame.finance.conf.notificationRules.dao;
import com.hzya.frame.finance.conf.notificationRules.entity.BillTypeVO;
import com.hzya.frame.finance.conf.notificationRules.entity.FeConfNotificationRulesEntity;
import com.hzya.frame.basedao.dao.IBaseDao;
@ -18,5 +19,9 @@ public interface IFeConfNotificationRulesDao extends IBaseDao<FeConfNotification
FeConfNotificationRulesEntity queryById(String id);
int updateStatus(FeConfNotificationRulesEntity feConfNotificationRulesEntity);
List<FeConfNotificationRulesEntity> queryFeConfNotificationRulesEntity(String mdmId, String mdmName);
List<BillTypeVO> queryFeConfBillTypeEntity();
}

View File

@ -1,5 +1,6 @@
package com.hzya.frame.finance.conf.notificationRules.dao.impl;
import com.hzya.frame.finance.conf.notificationRules.entity.BillTypeVO;
import com.hzya.frame.finance.conf.notificationRules.entity.FeConfNotificationRulesEntity;
import com.hzya.frame.finance.conf.notificationRules.dao.IFeConfNotificationRulesDao;
import org.springframework.stereotype.Repository;
@ -34,6 +35,21 @@ public class FeConfNotificationRulesDaoImpl extends MybatisGenericDao<FeConfNoti
return update;
}
@Override
public List<FeConfNotificationRulesEntity> queryFeConfNotificationRulesEntity(String mdmId, String mdmName) {
FeConfNotificationRulesEntity feConfNotificationRulesEntity = new FeConfNotificationRulesEntity();
feConfNotificationRulesEntity.setMdmId(mdmId);
feConfNotificationRulesEntity.setMdmName(mdmName);
List<FeConfNotificationRulesEntity> feConfNotificationRulesEntities = (List<FeConfNotificationRulesEntity>) this.selectList("com.hzya.frame.finance.conf.notificationRules.dao.impl.FeConfNotificationRulesDaoImpl.queryFeConfNotificationRulesEntity", feConfNotificationRulesEntity);
return feConfNotificationRulesEntities;
}
@Override
public List<BillTypeVO> queryFeConfBillTypeEntity() {
List<BillTypeVO> billTypeVOs = (List<BillTypeVO>) this.selectList("com.hzya.frame.finance.conf.notificationRules.dao.impl.FeConfNotificationRulesDaoImpl.queryBillType",null);
return billTypeVOs;
}
}

View File

@ -0,0 +1,14 @@
package com.hzya.frame.finance.conf.notificationRules.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BillTypeVO {
private String pkBilltypeid;
private String pkBilltypecode;
private String pkBilltypename;
}

View File

@ -265,8 +265,21 @@
and sts='Y'
</trim>
</select>
<select id="queryFeConfNotificationRulesEntity" resultMap="get-FeConfNotificationRulesEntity-result" parameterType = "com.hzya.frame.finance.conf.notificationRules.entity.FeConfNotificationRulesEntity">
select *
from fe_conf_notification_rules
where mdm_id = #{mdmId} and mdm_name = #{mdmName}
</select>
<select id="queryBillType" resultType="com.hzya.frame.finance.conf.notificationRules.entity.BillTypeVO">
select
pk_billtypeid as pkBilltypeid,
pk_billtypecode as pkBilltypecode,
billtypename as pkBilltypename
from mdm_bd_bd_billtype
</select>
<!-- 查询列表 字段采用or格式 -->
<select id="FeConfNotificationRulesentity_list_or" resultMap="get-FeConfNotificationRulesEntity-result" parameterType = "com.hzya.frame.finance.conf.notificationRules.entity.FeConfNotificationRulesEntity">
select
@ -396,6 +409,7 @@
</trim>
)
</insert>
<!-- 批量新增 -->
<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
insert into fe_conf_notification_rules(code, name, mdm_id, mdm_name, pk_billtypeid, pk_billtypecode, pk_billtypename, notification_methodid, notification_methodcode, notification_methodname, notification_strategy, notification_targetid, notification_targetcode, notification_targetname, message_templateid, message_templatecode, message_templatename, enablestate, remark, def1, def2, def3, def4, def5, def6, def7, def8, def9, def10, create_time, create_user, modify_time, modify_user, sts, sts)

View File

@ -1,8 +1,13 @@
package com.hzya.frame.finance.conf.notificationRules.service;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.finance.conf.billtemplate.entity.FeConfBillTemplateEntity;
import com.hzya.frame.finance.conf.notificationRules.entity.BillTypeVO;
import com.hzya.frame.finance.conf.notificationRules.entity.FeConfNotificationRulesEntity;
import com.hzya.frame.basedao.service.IBaseService;
import java.util.List;
/**
* 通知规则表(FeConfNotificationRules)表服务接口
*
@ -17,4 +22,8 @@ public interface IFeConfNotificationRulesService extends IBaseService<FeConfNoti
FeConfNotificationRulesEntity updateStatus(FeConfNotificationRulesEntity feConfNotificationRulesEntity);
FeConfNotificationRulesEntity updateFeConfNotificationRulesEntity(FeConfNotificationRulesEntity feConfNotificationRulesEntity) throws Exception;
List<FeConfNotificationRulesEntity> queryFeConfNotificationRulesEntity(FeConfBillTemplateEntity feConfBillTemplateEntity);
List<BillTypeVO> queryFeConfBillTypeEntity();
}

View File

@ -2,6 +2,8 @@ package com.hzya.frame.finance.conf.notificationRules.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.finance.conf.billtemplate.entity.FeConfBillTemplateEntity;
import com.hzya.frame.finance.conf.notificationRules.entity.BillTypeVO;
import com.hzya.frame.finance.conf.notificationRules.entity.FeConfNotificationRulesEntity;
import com.hzya.frame.finance.conf.notificationRules.dao.IFeConfNotificationRulesDao;
import com.hzya.frame.finance.conf.notificationRules.service.IFeConfNotificationRulesService;
@ -99,4 +101,21 @@ public class FeConfNotificationRulesServiceImpl extends BaseService<FeConfNotifi
FeConfNotificationRulesEntity update = feConfNotificationRulesDao.update(feConfNotificationRulesEntity);
return update;
}
/**
* 根据mdm_id和mdm_name查询通知规则
* @param feConfBillTemplateEntity
* @return
*/
@Override
public List<FeConfNotificationRulesEntity> queryFeConfNotificationRulesEntity(FeConfBillTemplateEntity feConfBillTemplateEntity) {
String mdmId = feConfBillTemplateEntity.getId();
String mdmName = feConfBillTemplateEntity.getName();
return feConfNotificationRulesDao.queryFeConfNotificationRulesEntity(mdmId,mdmName);
}
@Override
public List<BillTypeVO> queryFeConfBillTypeEntity() {
return feConfNotificationRulesDao.queryFeConfBillTypeEntity();
}
}

View File

@ -129,9 +129,10 @@ public class ImportExcelController {
*/
@PostMapping("/importDataTemplate")
public JsonResultEntity importExcel(@RequestParam("file") MultipartFile file,@RequestParam("mdmCode") Long mdmCode,@RequestParam("dbName")String dbName) throws IOException {
iMdmService.importDataTemplate(file,mdmCode,dbName);
iMdmService.importDataTemplateBatch(file,mdmCode,dbName);
return new JsonResultEntity("导入模版成功",true,200);
}
}

View File

@ -159,4 +159,13 @@ public interface IMdmService {
* @return
*/
void importDataTemplate(MultipartFile file, Long mdmCode, String dbName);
/**
* 批量导入数据模版
* @param file
* @param mdmCode
* @param dbName
* @return
*/
void importDataTemplateBatch(MultipartFile file, Long mdmCode, String dbName);
}

View File

@ -74,6 +74,7 @@ import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -81,6 +82,7 @@ import java.util.*;
*/
@Service(value = "mdmService")
public class MdmServiceImpl implements IMdmService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
@ -128,6 +130,8 @@ public class MdmServiceImpl implements IMdmService {
@Value("${zt.url}")
private String url;
// 批量导入数据
private static final int BATCH_SIZE = 200;
/**
* @param object
* @return com.hzya.frame.web.entity.JsonResultEntity
@ -3132,6 +3136,7 @@ public class MdmServiceImpl implements IMdmService {
}
// 存储动态表头信息
List<String> dynamicHeaders = new ArrayList<>();
List<Map<String, Object>> batchDataList = new ArrayList<>(BATCH_SIZE);
try (InputStream inputStream = file.getInputStream()) {
// 使用EasyExcel读取不指定实体类用Map接收动态数据
EasyExcel.read(inputStream)
@ -3229,6 +3234,154 @@ public class MdmServiceImpl implements IMdmService {
return json;
}
/**
* 批量导入数据
* @param file
* @param mdmCode
* @param dbName
*/
@Override
public void importDataTemplateBatch(MultipartFile file, Long mdmCode, String dbName) {
// 校验文件合法性
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格式文件.xlsx或.xls");
}
// 存储动态表头信息
List<String> dynamicHeaders = new ArrayList<>();
// 批量数据缓存
List<Map<String, Object>> batchDataList = new ArrayList<>(BATCH_SIZE);
try (InputStream inputStream = file.getInputStream()) {
EasyExcel.read(inputStream)
.sheet(0) // 读取第一个sheet
.headRowNumber(1) // 表头所在行从1开始
.autoTrim(true) // 自动去除空格
.registerReadListener(new AnalysisEventListener<Map<Integer, Object>>() {
// 存储表头索引与字段名的映射关系
private Map<Integer, String> headerIndexMap;
/**
* 处理表头信息
*/
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
this.headerIndexMap = headMap;
// 转换为有序的表头列表
if (!headMap.isEmpty()) {
int maxIndex = headMap.keySet().stream()
.mapToInt(Integer::intValue)
.max()
.orElse(-1);
for (int i = 0; i <= maxIndex; i++) {
String headerName = headMap.getOrDefault(i, "").trim();
dynamicHeaders.add(headerName);
}
}
}
/**
* 处理每行数据
*/
@Override
public void invoke(Map<Integer, Object> rowData, AnalysisContext context) {
int rowNum = context.readRowHolder().getRowIndex() + 1; // 行号从1开始
try {
// 将索引映射的行数据转换为表头字段映射的Map
Map<String, Object> dataMap = convertRowData(rowData, rowNum);
batchDataList.add(dataMap);
// 达到批量阈值时处理
if (batchDataList.size() >= BATCH_SIZE) {
processBatchData(batchDataList, mdmCode, dbName, rowNum - BATCH_SIZE + 1, rowNum);
batchDataList.clear();
}
} catch (Exception e) {
throw new RuntimeException("处理第" + rowNum + "行数据失败:" + e.getMessage(), e);
}
}
/**
* 所有数据解析完成后处理剩余数据
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (!batchDataList.isEmpty()) {
int startRow = analysisContext.readRowHolder().getRowIndex() - batchDataList.size() + 2;
int endRow = analysisContext.readRowHolder().getRowIndex() + 1;
processBatchData(batchDataList, mdmCode, dbName, startRow, endRow);
batchDataList.clear();
}
}
/**
* 转换行数据为字段映射Map
*/
private Map<String, Object> convertRowData(Map<Integer, Object> rowData, int rowNum) {
Map<String, Object> dataMap = new HashMap<>(16);
rowData.forEach((index, value) -> {
String name = headerIndexMap.getOrDefault(index, "");
String headerName = name.contains("/")
? name.substring(name.lastIndexOf("/") + 1).trim()
: name.trim();
String cellValue = convertCellValue(value);
dataMap.put(headerName, cellValue);
});
return dataMap;
}
})
.doRead();
} catch (IOException e) {
throw new RuntimeException("文件读取失败:" + e.getMessage(), e);
}
}
private void processBatchData(List<Map<String, Object>> batchData, Long mdmCode, String dbName, int i, int rowNum) {
List<JSONObject> batchJsonList = batchData.stream()
.map(dataMap -> {
JSONObject dataObject = new JSONObject();
dataObject.put(dbName, dataMap);
JSONObject result = new JSONObject();
result.put("mdmCode", mdmCode);
result.put("data", dataObject);
return getStrObj("jsonStr", result);
})
.collect(Collectors.toList());
for (JSONObject jsonObject : batchJsonList) {
saveMdmShowDetailsData(jsonObject);
}
}
/**
* 转换单元格值为字符串
*/
private String convertCellValue(Object value) {
if (value == null) {
return null;
}
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format((Date) value);
} else if (value instanceof Boolean) {
return ((Boolean) value) ? "Y" : "N";
} else if (value instanceof Number) {
return new BigDecimal(value.toString()).toPlainString();
} else {
return value.toString().trim();
}
}
/**
* @param jsonObject