增加导入导出字典

This commit is contained in:
tangw 2025-06-09 17:13:32 +08:00
parent 530e6e3cbc
commit 579d5a6670
6 changed files with 113 additions and 4 deletions

View File

@ -1,20 +1,32 @@
package com.czlis.common.core.domain.entity;
import com.czlis.common.annotation.Excel;
import com.czlis.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ComDict extends BaseEntity {
@Excel(name = "字典类别")
private String zdlb;
@Excel(name = "编码")
private String zddh;
@Excel(name = "名称")
private String zdmc;
@Excel(name = "简拼")
private String zjf;
@Excel(name = "是否默认", readConverterExp = "Y=是,N=否")
private String zdbz;
@Excel(name = "机构编码")
private String yljg;
@Excel(name = "备注")
private String bz;
@Excel(name = "作废标识", readConverterExp = "1=是,0=否")
private String userflag;
}

View File

@ -5,13 +5,16 @@ import com.czlis.common.core.controller.BaseController;
import com.czlis.common.core.domain.Result;
import com.czlis.common.core.page.TableDataInfo;
import com.czlis.common.core.domain.entity.ComDict;
import com.czlis.common.utils.poi.ExcelUtil;
import com.czlis.liswork.service.ComDictService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@ -61,5 +64,27 @@ public class DictController extends BaseController {
log.info("调用修改字典接口{}",comDict);
return comDictService.updateComDict(comDict);
}
@ApiOperation("导出字典")
@PostMapping("/export")
public void export(HttpServletResponse response,ComDict comDict) {
List<ComDict> list = comDictService.getComDictList(comDict);
ExcelUtil<ComDict> util = new ExcelUtil<ComDict>(ComDict.class);
util.exportExcel(response, list, "字典数据");
}
@GetMapping("/importTemplate")
public void importTemplate(HttpServletResponse response){
ExcelUtil<ComDict> util = new ExcelUtil<>(ComDict.class);
util.exportExcel(response);
}
@ApiOperation("导入字典")
@PostMapping("/importData")
public Result importData(@RequestBody MultipartFile file,boolean updateDlCeshi) throws Exception{
ExcelUtil<ComDict> util = new ExcelUtil<ComDict>(ComDict.class);
List<ComDict> comDictList = util.importExcel(file.getInputStream());
log.info("调用导入字典{}",comDictList);
return comDictService.insertComDictList(comDictList,updateDlCeshi);
}
}

View File

@ -13,5 +13,10 @@ public interface ComDictMapper {
int insertComDict(ComDict comDict);
int delComDict(ComDict comDict);
int updateComDict(ComDict comDict);
//根据主键判断是否存在数据
int getCountById(String zdlb, String zddh) ;
//根据编号查名称
String getNameById(String zdlb,String zdmc);
//根据名称查编号
String getIdByName(String zdlb,String zdmc);
}

View File

@ -16,4 +16,5 @@ public interface ComDictService {
Result updateComDict(ComDict comDict);
Result insertComDictList(List<ComDict> comDictList,boolean updateDlCeshi);
}

View File

@ -2,12 +2,16 @@ package com.czlis.liswork.service.impl;
import cn.hutool.extra.pinyin.PinyinUtil;
import com.czlis.common.constant.HttpStatus;
import com.czlis.common.core.domain.Result;
import com.czlis.common.exception.ServiceException;
import com.czlis.common.utils.ComDictUtils;
import com.czlis.common.utils.StringUtils;
import com.czlis.liswork.mapper.dict.ComDictMapper;
import com.czlis.common.core.domain.entity.ComDict;
import com.czlis.liswork.service.ComDictService;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.ru.INN;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -26,8 +30,6 @@ public class ComDictServiceImpl implements ComDictService {
@Autowired
private ComDictMapper comDictMapper;
@Override
public List<ComDict> getComDictList(ComDict comDict) {
//先从redis缓存中获取,如果没有,就从数据库取
@ -50,7 +52,7 @@ public class ComDictServiceImpl implements ComDictService {
pinyin = pinyin.substring(0, 9);
}
comDict.setZjf(pinyin);
comDict.setZdbz("Y");
comDict.setZdbz("N");
int row = comDictMapper.insertComDict(comDict);
if(row > 0){
List<ComDict> comDictList = comDictMapper.getComDictList(comDict);
@ -59,6 +61,61 @@ public class ComDictServiceImpl implements ComDictService {
return null;
}
@Transactional(rollbackFor = Exception.class)
@Override
public Result insertComDictList(List<ComDict> comDictList,boolean updateDlCeshi) {
int row = 0, fail = 0,row0=0;
String zdlb = "", pinyin = "",zddh="",yljg="",zdbz="";
//判断传入的List 是否为空
if (StringUtils.isNull(comDictList) || comDictList.size() == 0) {
return new Result("-1","导入数据不能为空!");
}
//定义失败条数,接收导入失败数据量
int failureNum = 0;
//遍历导入数据,并且插入数据库。
for (ComDict comDict : comDictList) {
zdlb = comDict.getZdlb();
zddh = comDict.getZddh();
//是否覆盖数据,不覆盖跳过
row0 = comDictMapper.getCountById(zdlb,zddh);
if(row0 > 0 && updateDlCeshi==false) continue;
pinyin = PinyinUtil.getFirstLetter(comDict.getZdmc(), ""); //拼音首字母
if (pinyin.length() >= 9) {
pinyin = pinyin.substring(0, 9);
}
comDict.setZjf(pinyin);
yljg = comDict.getYljg();
zdbz = comDict.getZdbz();
if(yljg == null || yljg.equals("")) comDict.setYljg("1");
if(zdbz == null || zdbz.equals("")) comDict.setZdbz("N");
if (row0>0) {
row = comDictMapper.updateComDict(comDict);
}
else{
row = comDictMapper.insertComDict(comDict);
}
if (row > 0) failureNum++;
}
if (failureNum > 0) {
ComDict comDict0=new ComDict();
comDict0.setZdlb(zdlb);
List<ComDict> comDictList1 = comDictMapper.getComDictList(comDict0);
ComDictUtils.setDictCache(comDict0.getZdlb(),comDictList1);
if (failureNum == comDictList.size()) {
return new Result("0", "数据已全部导入成功!共 " + comDictList.size() + " 条");
} else {
fail = comDictList.size() - failureNum;
return new Result("0", "数据部分导入成功!成功 " + failureNum + " 条,失败 " + fail + " 条");
}
} else {
return new Result("-1", "导入失败!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public Result delComDict(ComDict comDict) {

View File

@ -24,6 +24,15 @@
</if>
</where>
</select>
<select id="getCountById" resultType="Long">
select count(1) from com_dict where zdlb = #{zdlb} and zddh = #{zddh}
</select>
<select id="getNameById" resultType="String">
select zdmc from com_dict where zdlb = #{zdlb} and zddh = #{zddh}
</select>
<select id="getIdByName" resultType="String">
select zddh from com_dict where zdlb = #{zdlb} and zdmc = #{zdmc}
</select>
<insert id="insertComDict" parameterType="com.czlis.common.core.domain.entity.ComDict">
insert into com_dict(