1.消息模板配置功能修改

2.通知规则配置功能修改
3.导入数据校验重复
This commit is contained in:
lixinyu 2025-09-10 17:12:45 +08:00
parent 9e0bb28da0
commit 7751b36351
13 changed files with 293 additions and 46 deletions

View File

@ -0,0 +1,28 @@
package com.hzya.frame.finance.conf.fileeigen.controller;
import com.hzya.frame.finance.conf.fileeigen.service.IFeConfModuleService;
import com.hzya.frame.web.entity.JsonResultEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
@RequestMapping("/excel")
public class ExcelController {
@Autowired
private IFeConfModuleService feConfModuleService;
/**
* 导入数据模版
*/
@PostMapping("/importDataTemplate")
public JsonResultEntity importExcel(@RequestParam("file") MultipartFile file, @RequestParam("mdmCode") Long mdmCode, @RequestParam("dbName")String dbName) throws IOException {
feConfModuleService.importDataTemplateBatch(file,mdmCode,dbName);
return new JsonResultEntity("导入模版成功",true,200);
}
}

View File

@ -2,6 +2,8 @@ package com.hzya.frame.finance.conf.fileeigen.service;
import com.hzya.frame.finance.conf.fileeigen.entity.FeConfModuleEntity;
import com.hzya.frame.basedao.service.IBaseService;
import org.springframework.web.multipart.MultipartFile;
/**
* 财资事项(finance_event)-配置-档案特征-模块(FeConfModule)表服务接口
*
@ -9,4 +11,11 @@ import com.hzya.frame.basedao.service.IBaseService;
* @since 2025-08-20 10:00:30
*/
public interface IFeConfModuleService extends IBaseService<FeConfModuleEntity, String>{
/**
* 导入数据模板
* @param file
* @param mdmCode
* @param dbName
*/
void importDataTemplateBatch(MultipartFile file, Long mdmCode, String dbName);
}

View File

@ -1,12 +1,30 @@
package com.hzya.frame.finance.conf.fileeigen.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSONObject;
import com.hzya.frame.finance.conf.fileeigen.entity.FeConfModuleEntity;
import com.hzya.frame.finance.conf.fileeigen.dao.IFeConfModuleDao;
import com.hzya.frame.finance.conf.fileeigen.service.IFeConfModuleService;
import com.hzya.frame.mdm.service.IMdmService;
import com.hzya.frame.voucher.ae.comf.bd.dao.IMdmDBQueryVODAO;
import com.hzya.frame.voucher.ae.comf.bd.dao.IMdmDbFiledVODAO;
import com.hzya.frame.voucher.ae.comf.bd.entity.vo.MdmDBQueryVO;
import com.hzya.frame.voucher.ae.comf.bd.entity.vo.MdmDbFiledVO;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import com.hzya.frame.basedao.service.impl.BaseService;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* 财资事项(finance_event)-配置-档案特征-模块(FeConfModule)表服务实现类
*
@ -17,10 +35,190 @@ import com.hzya.frame.basedao.service.impl.BaseService;
public class FeConfModuleServiceImpl extends BaseService<FeConfModuleEntity, String> implements IFeConfModuleService {
private IFeConfModuleDao feConfModuleDao;
@Autowired
private IMdmDBQueryVODAO mdmDBQueryVODAO;
@Autowired
private IMdmDbFiledVODAO mdmDbFiledVODAO;
@Autowired
private IMdmService iMdmService;
@Autowired
public void setFeConfModuleDao(IFeConfModuleDao dao) {
this.feConfModuleDao = dao;
this.dao = dao;
}
/**
* 导入数据模板
* @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<>();
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);
Boolean aBoolean = checkDuplicate(dataMap, dbName);
if (aBoolean) {
batchDataList.add(dataMap);
}
} catch (Exception e) {
throw new RuntimeException("处理第" + rowNum + "行数据失败:" + e.getMessage(), e);
}
}
/**
* 所有数据解析完成后
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (!batchDataList.isEmpty()) {
// 所有数据读取完成后统一处理
int totalRows = batchDataList.size();
int startRow = 2; // 表头行是第1行数据行从第2行开始
int endRow = startRow + totalRows - 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);
}
}
/**
* 校验重复
* @param dataMap
* @param dbName
* @return
*/
private Boolean checkDuplicate(Map<String, Object> dataMap, String dbName) {
MdmDbFiledVO mdmDbFiledVO = new MdmDbFiledVO();
mdmDbFiledVO.setTablename(dbName);
List<MdmDbFiledVO> mdmDbFiledVOList = mdmDbFiledVODAO.queryMdmDbFiledVO(mdmDbFiledVO);
// 同时判断集合不为null且不为空
if(mdmDbFiledVOList != null && !mdmDbFiledVOList.isEmpty()) {
String tablepkname = mdmDbFiledVOList.get(0).getTablepkname();// 主键字段
Object object = dataMap.get(tablepkname);
MdmDBQueryVO vo = new MdmDBQueryVO();
vo.setTablename(dbName);
vo.setProp1(tablepkname);
vo.setPropValue1(object.toString());
// 检查查询结果是否存在且不为空
List<Map<String, Object>> maps = mdmDBQueryVODAO.queryMdmDb(vo);
return maps == null && maps.isEmpty();
} else {
// 集合为null或空时的处理
return true;
}
}
private void processBatchData(List<Map<String, Object>> batchDataList, Long mdmCode, String dbName, int i, int rowNum) {
List<JSONObject> list = batchDataList.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 : list) {
iMdmService.saveMdmShowDetailsData(jsonObject);
}
}
private JSONObject getStrObj(String key, Object value) {
JSONObject json = new JSONObject();
json.put(key, value);
return json;
}
/**
* 转换单元格值为字符串
*/
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();
}
}
}

View File

@ -1,7 +1,6 @@
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;
@ -66,9 +65,6 @@ public class MessageController {
if(feConfMessageTemplateEntity == null){
throw new Exception("参数不能为空");
}
if(feConfMessageTemplateEntity.getSts().equals("N")){
throw new Exception("该记录已删除");
}
FeConfMessageTemplateEntity update = iFeConfMessageTemplateService.update(feConfMessageTemplateEntity);
return new JsonResultEntity("修改成功",true,update);
}
@ -87,22 +83,26 @@ public class MessageController {
*/
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public JsonResultEntity delete(@RequestBody FeConfMessageTemplateEntity feConfMessageTemplateEntity) throws Exception {
if(feConfMessageTemplateEntity.getSts().equals("N")){
throw new Exception("该记录已删除");
}
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);
public JsonResultEntity queryTemplate(@RequestBody FeConfMessageTemplateEntity feConfMessageTemplateEntity) throws Exception {
PageInfo pageInfo = iFeConfMessageTemplateService.queryTemplate(feConfMessageTemplateEntity);
return new JsonResultEntity("查询成功",true,pageInfo);
}
/**
* 根据模板id查询详情
*/
@PostMapping("/queryTemplateDetail")
public JsonResultEntity queryTemplateDetail(@RequestBody FeConfMessageTemplateEntity feConfMessageTemplateEntity) throws Exception {
FeConfMessageTemplateEntity templateEntity = iFeConfMessageTemplateService.queryTemplateDetail(feConfMessageTemplateEntity);
return new JsonResultEntity("查询成功",true,templateEntity);
}
}

View File

@ -20,5 +20,7 @@ public interface IFeConfMessageTemplateDao extends IBaseDao<FeConfMessageTemplat
List<FeConfMessageTemplateEntity> queryTemplate(String mdmId, String mdmName);
}

View File

@ -45,5 +45,7 @@ public class FeConfMessageTemplateDaoImpl extends MybatisGenericDao<FeConfMessag
}
}

View File

@ -1,7 +1,6 @@
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;
@ -24,5 +23,7 @@ public interface IFeConfMessageTemplateService extends IBaseService<FeConfMessag
List<FeConfMessageTemplateEntity> queryTemplate(FeConfBillTemplateEntity feConfBillTemplateEntity);
PageInfo queryTemplate(FeConfMessageTemplateEntity feConfMessageTemplateEntity);
FeConfMessageTemplateEntity queryTemplateDetail(FeConfMessageTemplateEntity feConfMessageTemplateEntity);
}

View File

@ -2,7 +2,6 @@ package com.hzya.frame.finance.conf.message.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.message.entity.FeConfMessageTemplateEntity;
import com.hzya.frame.finance.conf.message.dao.IFeConfMessageTemplateDao;
import com.hzya.frame.finance.conf.message.service.IFeConfMessageTemplateService;
@ -56,9 +55,6 @@ public class FeConfMessageTemplateServiceImpl extends BaseService<FeConfMessageT
if(feConfMessageTemplate == null){
throw new Exception("该记录不存在");
}
if(feConfMessageTemplateEntity.getSts().equals("N")){
throw new Exception("该记录已删除,无法修改");
}
FeConfMessageTemplateEntity update = feConfMessageTemplateDao.updateStatus(feConfMessageTemplateEntity);
List<FeConfMessageTemplateEntity> query = feConfMessageTemplateDao.query(update);
return query.get(0);
@ -93,12 +89,15 @@ public class FeConfMessageTemplateServiceImpl extends BaseService<FeConfMessageT
}
@Override
public PageInfo queryTemplate(FeConfMessageTemplateEntity feConfMessageTemplateEntity) {
PageHelper.startPage(feConfMessageTemplateEntity.getPageNum(), feConfMessageTemplateEntity.getPageSize());
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);
public FeConfMessageTemplateEntity queryTemplateDetail(FeConfMessageTemplateEntity feConfMessageTemplateEntity) {
return feConfMessageTemplateDao.queryOne(feConfMessageTemplateEntity);
}
}

View File

@ -83,9 +83,9 @@ public class NotificationRulesController {
* 根据mdm_id和mdm_name查询通知规则
*/
@PostMapping("/query")
public JsonResultEntity query(@RequestBody FeConfBillTemplateEntity feConfBillTemplateEntity) {
List<FeConfNotificationRulesEntity> feConfNotificationRulesEntityList = iFeConfNotificationRulesService.queryFeConfNotificationRulesEntity(feConfBillTemplateEntity);
return new JsonResultEntity("查询成功",true,feConfNotificationRulesEntityList);
public JsonResultEntity query(@RequestBody FeConfNotificationRulesEntity feConfNotificationRulesEntity) {
PageInfo pageInfo = iFeConfNotificationRulesService.queryFeConfNotificationRulesEntity(feConfNotificationRulesEntity);
return new JsonResultEntity("查询成功",true,pageInfo);
}
/**
@ -96,4 +96,12 @@ public class NotificationRulesController {
List<BillTypeVO> billTypeVOS = iFeConfNotificationRulesService.queryFeConfBillTypeEntity();
return new JsonResultEntity("查询成功",true,billTypeVOS);
}
/**
* 根据id查询详情
*/
@PostMapping("/queryById")
public JsonResultEntity queryById(@RequestBody FeConfNotificationRulesEntity feConfNotificationRulesEntity) {
FeConfNotificationRulesEntity feConfNotificationRulesEntity1 = iFeConfNotificationRulesService.queryFeConfNotificationRulesEntityById(feConfNotificationRulesEntity);
return new JsonResultEntity("查询成功",true,feConfNotificationRulesEntity1);
}
}

View File

@ -1,7 +1,6 @@
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;
@ -23,7 +22,9 @@ public interface IFeConfNotificationRulesService extends IBaseService<FeConfNoti
FeConfNotificationRulesEntity updateFeConfNotificationRulesEntity(FeConfNotificationRulesEntity feConfNotificationRulesEntity) throws Exception;
List<FeConfNotificationRulesEntity> queryFeConfNotificationRulesEntity(FeConfBillTemplateEntity feConfBillTemplateEntity);
PageInfo queryFeConfNotificationRulesEntity(FeConfNotificationRulesEntity feConfBillTemplateEntity);
List<BillTypeVO> queryFeConfBillTypeEntity();
FeConfNotificationRulesEntity queryFeConfNotificationRulesEntityById(FeConfNotificationRulesEntity feConfNotificationRulesEntity);
}

View File

@ -2,14 +2,12 @@ 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;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import com.hzya.frame.basedao.service.impl.BaseService;
import java.util.List;
@ -77,9 +75,6 @@ public class FeConfNotificationRulesServiceImpl extends BaseService<FeConfNotifi
if(feConfNotificationRulesEntity.getId() == null){
throw new RuntimeException("id不能为空");
}
if(feConfNotificationRulesEntity.getSts().equals("N")){
throw new RuntimeException("该数据已删除,无法修改");
}
int update = feConfNotificationRulesDao.updateStatus(feConfNotificationRulesEntity);
if(update >0){
return feConfNotificationRulesDao.queryById(feConfNotificationRulesEntity.getId());
@ -95,27 +90,30 @@ public class FeConfNotificationRulesServiceImpl extends BaseService<FeConfNotifi
*/
@Override
public FeConfNotificationRulesEntity updateFeConfNotificationRulesEntity(FeConfNotificationRulesEntity feConfNotificationRulesEntity) throws Exception {
if(feConfNotificationRulesEntity.getSts().equals("N")){
throw new Exception("该记录已删除,修改失败");
}
FeConfNotificationRulesEntity update = feConfNotificationRulesDao.update(feConfNotificationRulesEntity);
return update;
}
/**
* 根据mdm_id和mdm_name查询通知规则
* @param feConfBillTemplateEntity
* @param
* @return
*/
@Override
public List<FeConfNotificationRulesEntity> queryFeConfNotificationRulesEntity(FeConfBillTemplateEntity feConfBillTemplateEntity) {
String mdmId = feConfBillTemplateEntity.getId();
String mdmName = feConfBillTemplateEntity.getName();
return feConfNotificationRulesDao.queryFeConfNotificationRulesEntity(mdmId,mdmName);
public PageInfo queryFeConfNotificationRulesEntity(FeConfNotificationRulesEntity feConfNotificationRulesEntity) {
PageHelper.startPage(feConfNotificationRulesEntity.getPageNum(), feConfNotificationRulesEntity.getPageSize());
List<FeConfNotificationRulesEntity> list = feConfNotificationRulesDao.queryNotificationRulesPaged(feConfNotificationRulesEntity);
return new PageInfo(list);
}
@Override
public List<BillTypeVO> queryFeConfBillTypeEntity() {
return feConfNotificationRulesDao.queryFeConfBillTypeEntity();
}
@Override
public FeConfNotificationRulesEntity queryFeConfNotificationRulesEntityById(FeConfNotificationRulesEntity feConfNotificationRulesEntity) {
FeConfNotificationRulesEntity feConfNotificationRulesEntity1 = feConfNotificationRulesDao.queryOne(feConfNotificationRulesEntity);
return feConfNotificationRulesEntity1;
}
}

View File

@ -53,6 +53,7 @@
1=1
<if test="mdmId != null and mdmId != ''">and mdm.id = #{mdmId}</if>
<if test="dbName != null">and mdm.mdm_name like concat('%',#{dbName},'%')</if>
<if test="tablename != null and tablename != ''">and db.db_name = #{tablename}</if>
AND mdm.sts = 'Y'
AND db.db_type = '1'
</select>

View File

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