Browse Source

Merge branch 'persontesting_export' into 123

zy_PrivacyExport
zhangyongzhangyong 4 years ago
parent
commit
2493b3b4fe
  1. 35
      epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/controller/v2/PersonTestingV2Controller.java
  2. 10
      epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/dao/PersonTestingDao.java
  3. 51
      epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/excel/PersonTestingImportMoudleExcel.java
  4. 25
      epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/service/PersonTestingService.java
  5. 162
      epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/service/impl/PersonTestingServiceImpl.java
  6. 25
      epdc-cloud-custom/src/main/resources/mapper/epidemic/PersonTestingDao.xml

35
epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/controller/v2/PersonTestingV2Controller.java

@ -31,12 +31,17 @@ import com.elink.esua.epdc.dto.PersonTestingDTO;
import com.elink.esua.epdc.dto.PersonTestingPageDTO;
import com.elink.esua.epdc.modules.epidemic.dao.PersonTestingDao;
import com.elink.esua.epdc.modules.epidemic.excel.PersonTestingExcel;
import com.elink.esua.epdc.modules.epidemic.excel.PersonTestingImportMoudleExcel;
import com.elink.esua.epdc.modules.epidemic.service.PersonTestingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -123,5 +128,33 @@ public class PersonTestingV2Controller {
return personTestingService.getMobileByIdCard(dto);
}
/**
* 导出模板
* @param
* @return void
* @Author zhangyong
* @Date 11:21 2021-11-06
**/
@GetMapping("exportMoudle")
public void exportMoudle(@RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<PersonTestingPageDTO> list = new ArrayList<>();
PersonTestingPageDTO dto = new PersonTestingPageDTO();
dto.setCreatedBy(" ");
list.add(dto);
personTestingService.exportExcelToTarget(response, "核酸检测模板", list, PersonTestingImportMoudleExcel.class);
}
}
/**
* 信息导入
*
* @param request
* @param file
* @return com.elink.esua.epdc.commons.tools.utils.Result
* @Author zhangyong
* @Date 17:25 2021-11-02
**/
@PostMapping("importExcel")
public Result importExcel(HttpServletRequest request, @RequestParam("file") MultipartFile file) {
return personTestingService.importExcel(file);
}
}

10
epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/dao/PersonTestingDao.java

@ -56,4 +56,14 @@ public interface PersonTestingDao extends BaseDao<PersonTestingEntity> {
**/
PersonTestingDTO getDetailPersonTesting(@Param("id") String id);
/**
* 根据身份证或姓名查询 检测详情
*
* @param idcard
* @param realName
* @return java.util.List<com.elink.esua.epdc.dto.PersonTestingDTO>
* @Author zhangyong
* @Date 15:38 2021-11-04
**/
List<PersonTestingDTO> getDetailByIdCardOrName(@Param("idcard") String idcard, @Param("realName") String realName);
}

51
epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/excel/PersonTestingImportMoudleExcel.java

@ -0,0 +1,51 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.modules.epidemic.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import java.util.Date;
/**
* 核酸检测记录 模板导出
* 导入信息姓名必填身份证号必填手机号核酸检测时间必填住址
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2021-08-20
*/
@Data
public class PersonTestingImportMoudleExcel {
@Excel(name = "姓名")
private String name;
@Excel(name = "身份证号码")
private String idcard;
@Excel(name = "手机号")
private String mobile;
@Excel(name = "住址")
private String address;
@Excel(name = "核酸检测时间(yyyy-MM-dd HH:mm:ss)")
private String testingTimeStr;
private Date testingTime;
}

25
epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/service/PersonTestingService.java

@ -23,8 +23,12 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.PersonTestingDTO;
import com.elink.esua.epdc.dto.PersonTestingPageDTO;
import com.elink.esua.epdc.modules.epidemic.entity.PersonTestingEntity;
import com.elink.esua.epdc.modules.epidemic.excel.PersonTestingImportMoudleExcel;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -122,4 +126,23 @@ public interface PersonTestingService extends BaseService<PersonTestingEntity> {
* @return com.elink.esua.epdc.commons.tools.utils.Result
*/
Result getMobileByIdCard(PersonTestingDTO dto);
}
/**
* excel 模板导出
*
* @return void
* @Author zhangyong
* @Date 17:16 2021-11-02
**/
void exportExcelToTarget(HttpServletResponse response, String fileName, Collection<?> sourceList, Class<PersonTestingImportMoudleExcel> targetClass) throws Exception;
/**
* 信息导入
*
* @param file
* @return com.elink.esua.epdc.commons.tools.utils.Result
* @Author zhangyong
* @Date 17:25 2021-11-02
**/
Result importExcel(MultipartFile file);
}

162
epdc-cloud-custom/src/main/java/com/elink/esua/epdc/modules/epidemic/service/impl/PersonTestingServiceImpl.java

@ -17,6 +17,10 @@
package com.elink.esua.epdc.modules.epidemic.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl;
@ -27,14 +31,14 @@ import com.elink.esua.epdc.commons.tools.exception.RenException;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.security.user.SecurityUser;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail;
import com.elink.esua.epdc.commons.tools.utils.ConvertUtils;
import com.elink.esua.epdc.commons.tools.utils.IdentityNoUtils;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.commons.tools.utils.*;
import com.elink.esua.epdc.dto.PersonTestingDTO;
import com.elink.esua.epdc.dto.PersonTestingPageDTO;
import com.elink.esua.epdc.dto.UploadFormDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcPartyErroyResultDTO;
import com.elink.esua.epdc.modules.epidemic.dao.PersonTestingDao;
import com.elink.esua.epdc.modules.epidemic.entity.PersonTestingEntity;
import com.elink.esua.epdc.modules.epidemic.excel.PersonTestingImportMoudleExcel;
import com.elink.esua.epdc.modules.epidemic.feign.OssFeignClient;
import com.elink.esua.epdc.modules.epidemic.redis.PersonTestingRedis;
import com.elink.esua.epdc.modules.epidemic.service.PersonTestingService;
@ -43,10 +47,19 @@ import com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserInfoEntity;
import com.elink.esua.epdc.vaccine.house.dao.PopulationInformationDao;
import com.elink.esua.epdc.vaccine.house.entity.PopulationInformationEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -385,5 +398,148 @@ public class PersonTestingServiceImpl extends BaseServiceImpl<PersonTestingDao,
return age;
}
@Override
public void exportExcelToTarget(HttpServletResponse response, String fileName, Collection<?> sourceList,
Class<PersonTestingImportMoudleExcel> targetClass) throws Exception {
List<Object> targetList = new ArrayList<>(sourceList.size());
for (Object source : sourceList) {
Object target = targetClass.newInstance();
BeanUtils.copyProperties(source, target);
targetList.add(target);
}
ExportParams exportParams = new ExportParams();
exportParams.setSheetName(fileName);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, targetClass, targetList);
Sheet sheet1 = packageSheet(workbook);
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls");
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 设置Sheet页 格式及数据
*
* @param workbook
* @return org.apache.poi.ss.usermodel.Sheet
* @Author zhangyong
* @Date 14:53 2021-05-12
**/
public Sheet packageSheet(Workbook workbook) {
Sheet sheet = workbook.getSheetAt(NumConstant.ZERO);
sheet.setDefaultColumnWidth(1220 * 1256);
sheet.setDefaultRowHeight((short)(2 * 256));
CellStyle style = workbook.createCellStyle();
DataFormat excelFormat = workbook.createDataFormat();
// 设置居中
style.setAlignment(HorizontalAlignment.CENTER);
//自动换行
style.setWrapText(true);
//文本格式
style.setDataFormat(excelFormat.getFormat("@"));
sheet.setDefaultColumnStyle(NumConstant.ZERO, style);
sheet.setDefaultColumnStyle(NumConstant.ONE, style);
sheet.setDefaultColumnStyle(NumConstant.TWO, style);
sheet.setDefaultColumnStyle(NumConstant.THREE, style);
sheet.setDefaultColumnStyle(NumConstant.FOUR, style);
return sheet;
}
@Override
public Result importExcel(MultipartFile file) {
File f = StreamUtils.conversionFile(file);
ImportParams importParams = new ImportParams();
List<PersonTestingImportMoudleExcel> excelList = ExcelImportUtil.importExcel(f, PersonTestingImportMoudleExcel.class, importParams);
// 校验数据
List<EpdcPartyErroyResultDTO> erroys = this.checkExcel(excelList);
if (erroys.size() > NumConstant.ZERO) {
return new Result().ok(erroys);
}
saveList(excelList);
return new Result();
}
/**
* 组装异常信息
*
* @param errorline 异常列
* @param errorDescribe 异常描述
* @return com.elink.esua.epdc.dto.epdc.result.EpdcPartyErroyResultDTO
* @Author zhangyong
* @Date 15:40 2021-11-04
**/
private EpdcPartyErroyResultDTO packageErrorInfo(int errorline, String errorDescribe) {
EpdcPartyErroyResultDTO errorLineinfoDto = new EpdcPartyErroyResultDTO();
errorLineinfoDto.setErroLine((errorline + NumConstant.TWO) + "");
errorLineinfoDto.setErrorInfo(errorDescribe);
return errorLineinfoDto;
}
private List<EpdcPartyErroyResultDTO> checkExcel(List<PersonTestingImportMoudleExcel> excelList) {
// 不匹配信息
List<EpdcPartyErroyResultDTO> errorLineinfoList = new ArrayList<>();
for (int i = 0; i < excelList.size(); i++) {
PersonTestingImportMoudleExcel data = excelList.get(i);
if (StringUtils.isBlank(data.getName())) {
errorLineinfoList.add(packageErrorInfo(i, "姓名为空"));
} else {
data.setName(data.getName().trim());
}
if (StringUtils.isBlank(data.getIdcard())) {
errorLineinfoList.add(packageErrorInfo(i, "身份证号为空"));
} else {
data.setIdcard(data.getIdcard().trim());
// 是否存在
List<PersonTestingDTO> details = baseDao.getDetailByIdCardOrName(data.getIdcard(), null);
if (NumConstant.ZERO < details.size()) {
errorLineinfoList.add(packageErrorInfo(i, "身份证号已存在"));
}
}
if (StringUtils.isBlank(data.getTestingTimeStr())) {
errorLineinfoList.add(packageErrorInfo(i, "核酸检测时间为空"));
} else {
if (DateUtils.DATE_TIME_PATTERN.length() != data.getTestingTimeStr().length()) {
errorLineinfoList.add(packageErrorInfo(i, "核酸检测时间格式不匹配"));
} else {
data.setTestingTime(DateUtils.stringToDate(data.getTestingTimeStr(), DateUtils.DATE_TIME_PATTERN));
}
}
}
return errorLineinfoList;
}
public void saveList(List<PersonTestingImportMoudleExcel> excelList) {
List<PersonTestingEntity> entitys = new ArrayList<>();
List<PersonTestingDTO> dtos = ConvertUtils.sourceToTarget(excelList, PersonTestingDTO.class);
for (PersonTestingDTO dto : dtos) {
// 0女;1男
String sex = IdentityNoUtils.getSex(dto.getIdcard());
dto.setSex(NumConstant.ONE_STR.equals(sex) ? "男" : "女");
String birthday = IdentityNoUtils.getBirthday(dto.getIdcard());
dto.setBirthday(DateUtils.stringToDate(birthday, DateUtils.DATE_PATTERN));
saveScanningInfoForUserV1(dto);
PersonTestingEntity entity = ConvertUtils.sourceToTarget(dto, PersonTestingEntity.class);
entitys.add(entity);
}
insertBatch(entitys);
}
}

25
epdc-cloud-custom/src/main/resources/mapper/epidemic/PersonTestingDao.xml

@ -122,4 +122,29 @@
AND person.ID = #{id}
</select>
<select id="getDetailByIdCardOrName" resultType="com.elink.esua.epdc.dto.PersonTestingDTO">
SELECT
person.ID,
person.`NAME`,
person.SEX,
person.NATION,
person.BIRTHDAY,
person.MOBILE,
person.ADDRESS,
person.IDCARD,
person.ORGAN,
person.IMG_CODE,
person.IMG_URL,
person.TESTING_RESULT,
person.TESTING_TIME,
person.TESTING_POINT_ID
FROM epdc_person_testing person
WHERE person.DEL_FLAG = '0'
<if test="idcard != null and idcard != ''">
AND person.IDCARD = #{idcard}
</if>
<if test="realName != null and realName != ''">
AND person.`NAME` = #{realName}
</if>
</select>
</mapper>

Loading…
Cancel
Save