|
|
|
package com.epmet.controller;
|
|
|
|
|
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
|
|
import com.alibaba.excel.ExcelWriter;
|
|
|
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
|
|
|
import com.epmet.commons.tools.annotation.LoginUser;
|
|
|
|
import com.epmet.commons.tools.aop.NoRepeatSubmit;
|
|
|
|
import com.epmet.commons.tools.constant.AppClientConstant;
|
|
|
|
import com.epmet.commons.tools.constant.NumConstant;
|
|
|
|
import com.epmet.commons.tools.constant.ServiceConstant;
|
|
|
|
import com.epmet.commons.tools.exception.EpmetErrorCode;
|
|
|
|
import com.epmet.commons.tools.exception.EpmetException;
|
|
|
|
import com.epmet.commons.tools.exception.ExceptionUtils;
|
|
|
|
import com.epmet.commons.tools.feign.ResultDataResolver;
|
|
|
|
import com.epmet.commons.tools.page.PageData;
|
|
|
|
import com.epmet.commons.tools.security.dto.TokenDto;
|
|
|
|
import com.epmet.commons.tools.utils.EpmetRequestHolder;
|
|
|
|
import com.epmet.commons.tools.utils.ExcelUtils;
|
|
|
|
import com.epmet.commons.tools.utils.FileUtils;
|
|
|
|
import com.epmet.commons.tools.utils.Result;
|
|
|
|
import com.epmet.commons.tools.validator.ValidatorUtils;
|
|
|
|
import com.epmet.constants.ImportTaskConstants;
|
|
|
|
import com.epmet.dto.IcNatDTO;
|
|
|
|
import com.epmet.dto.form.AddIcNatFormDTO;
|
|
|
|
import com.epmet.dto.form.ImportTaskCommonFormDTO;
|
|
|
|
import com.epmet.dto.form.MyNatListFormDTO;
|
|
|
|
import com.epmet.dto.result.ImportTaskCommonResultDTO;
|
|
|
|
import com.epmet.dto.result.MyNatListResultDTO;
|
|
|
|
import com.epmet.dto.result.NatListResultDTO;
|
|
|
|
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
|
|
|
|
import com.epmet.service.IcNatService;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
import org.apache.commons.io.IOUtils;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
import javax.servlet.ServletOutputStream;
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.net.URLEncoder;
|
|
|
|
import java.nio.file.Path;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 核酸上报记录
|
|
|
|
*
|
|
|
|
* @author generator generator@elink-cn.com
|
|
|
|
* @since v1.0.0 2022-03-25
|
|
|
|
*/
|
|
|
|
@Slf4j
|
|
|
|
@RestController
|
|
|
|
@RequestMapping("icNat")
|
|
|
|
public class IcNatController implements ResultDataResolver {
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
private IcNatService icNucleinService;
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 核酸检测-上报核酸记录
|
|
|
|
**/
|
|
|
|
//@NoRepeatSubmit
|
|
|
|
@PostMapping("add")
|
|
|
|
public Result add(@LoginUser TokenDto tokenDto, @RequestBody AddIcNatFormDTO formDTO) {
|
|
|
|
ValidatorUtils.validateEntity(formDTO, AddIcNatFormDTO.Nat.class);
|
|
|
|
formDTO.setCustomerId(tokenDto.getCustomerId());
|
|
|
|
formDTO.setStaffId(tokenDto.getUserId());
|
|
|
|
icNucleinService.add(formDTO);
|
|
|
|
return new Result();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 核酸检测-居民端我的上报
|
|
|
|
**/
|
|
|
|
@NoRepeatSubmit
|
|
|
|
@PostMapping("mynatlist")
|
|
|
|
public Result<List<MyNatListResultDTO>> myNatList(@LoginUser TokenDto tokenDto, @RequestBody MyNatListFormDTO formDTO) {
|
|
|
|
ValidatorUtils.validateEntity(formDTO, MyNatListFormDTO.MyNat.class);
|
|
|
|
formDTO.setCustomerId(tokenDto.getCustomerId());
|
|
|
|
return new Result<List<MyNatListResultDTO>>().ok(icNucleinService.myNatList(formDTO));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 【核酸】核酸检测信息列表
|
|
|
|
**/
|
|
|
|
@NoRepeatSubmit
|
|
|
|
@PostMapping("natlist")
|
|
|
|
public Result<PageData<NatListResultDTO>> natList(@LoginUser TokenDto tokenDto, @RequestBody MyNatListFormDTO formDTO) {
|
|
|
|
formDTO.setCustomerId(tokenDto.getCustomerId());
|
|
|
|
formDTO.setUserId(tokenDto.getUserId());
|
|
|
|
return new Result<PageData<NatListResultDTO>>().ok(icNucleinService.natList(formDTO));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 【核酸】核酸检测信息详情
|
|
|
|
**/
|
|
|
|
@NoRepeatSubmit
|
|
|
|
@PostMapping("detail")
|
|
|
|
public Result<IcNatDTO> detail(@RequestBody MyNatListFormDTO formDTO) {
|
|
|
|
ValidatorUtils.validateEntity(formDTO, MyNatListFormDTO.Detail.class);
|
|
|
|
return new Result<IcNatDTO>().ok(icNucleinService.detail(formDTO));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 【核酸】核酸检测信息修改
|
|
|
|
**/
|
|
|
|
@NoRepeatSubmit
|
|
|
|
@PostMapping("edit")
|
|
|
|
public Result edit(@LoginUser TokenDto tokenDto, @RequestBody AddIcNatFormDTO formDTO) {
|
|
|
|
formDTO.setCustomerId(tokenDto.getCustomerId());
|
|
|
|
formDTO.setStaffId(tokenDto.getUserId());
|
|
|
|
icNucleinService.edit(formDTO);
|
|
|
|
return new Result();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 【核酸】核酸检测信息删除/取消同步
|
|
|
|
**/
|
|
|
|
@NoRepeatSubmit
|
|
|
|
@PostMapping("del")
|
|
|
|
public Result del(@RequestBody MyNatListFormDTO formDTO) {
|
|
|
|
ValidatorUtils.validateEntity(formDTO, MyNatListFormDTO.Del.class);
|
|
|
|
icNucleinService.del(formDTO);
|
|
|
|
return new Result<>();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 【核酸】核酸检测信息同步
|
|
|
|
**/
|
|
|
|
@NoRepeatSubmit
|
|
|
|
@PostMapping("synchro")
|
|
|
|
public Result synchro(@LoginUser TokenDto tokenDto, @RequestBody MyNatListFormDTO formDTO) {
|
|
|
|
ValidatorUtils.validateEntity(formDTO, MyNatListFormDTO.Synchro.class);
|
|
|
|
formDTO.setCustomerId(tokenDto.getCustomerId());
|
|
|
|
formDTO.setUserId(tokenDto.getUserId());
|
|
|
|
icNucleinService.synchro(formDTO);
|
|
|
|
return new Result();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 导入excel
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
@PostMapping("import")
|
|
|
|
public Result importExcel(MultipartFile file) {
|
|
|
|
String userId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID);
|
|
|
|
|
|
|
|
// 1.暂存文件
|
|
|
|
String originalFilename = file.getOriginalFilename();
|
|
|
|
String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
|
|
|
|
|
|
|
|
Path fileSavePath;
|
|
|
|
try {
|
|
|
|
Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_nat", "import");
|
|
|
|
fileSavePath = importPath.resolve(UUID.randomUUID().toString().concat(extName));
|
|
|
|
} catch (IOException e) {
|
|
|
|
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
|
|
|
|
log.error("【核酸检测导入】创建临时存储文件失败:{}", errorMsg);
|
|
|
|
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "文件上传失败", "文件上传失败");
|
|
|
|
}
|
|
|
|
|
|
|
|
InputStream is = null;
|
|
|
|
FileOutputStream os = null;
|
|
|
|
|
|
|
|
try {
|
|
|
|
is = file.getInputStream();
|
|
|
|
os = new FileOutputStream(fileSavePath.toString());
|
|
|
|
IOUtils.copy(is, os);
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} finally {
|
|
|
|
org.apache.poi.util.IOUtils.closeQuietly(is);
|
|
|
|
org.apache.poi.util.IOUtils.closeQuietly(os);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 2.生成导入任务记录
|
|
|
|
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
|
|
|
|
importTaskForm.setOperatorId(userId);
|
|
|
|
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_IC_NAT);
|
|
|
|
importTaskForm.setOriginFileName(originalFilename);
|
|
|
|
|
|
|
|
ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException(commonServiceOpenFeignClient.createImportTask(importTaskForm),
|
|
|
|
ServiceConstant.EPMET_COMMON_SERVICE,
|
|
|
|
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
|
|
|
|
"excel导入核酸检测信息错误",
|
|
|
|
"导入居民核酸检测信息失败");
|
|
|
|
|
|
|
|
// 3.执行导入
|
|
|
|
icNucleinService.execAsyncExcelImport(fileSavePath, rstData.getTaskId());
|
|
|
|
|
|
|
|
return new Result();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 【核酸】核酸检测信息下载模板
|
|
|
|
**/
|
|
|
|
@RequestMapping(value = "import-template-download", method = {RequestMethod.GET, RequestMethod.POST})
|
|
|
|
public void downloadTemplate(HttpServletResponse response) throws IOException {
|
|
|
|
response.setCharacterEncoding("UTF-8");
|
|
|
|
response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition");
|
|
|
|
//response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.ms-excel");
|
|
|
|
response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
|
|
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("社区自组织导入模板", "UTF-8") + ".xlsx");
|
|
|
|
|
|
|
|
InputStream is = this.getClass().getClassLoader().getResourceAsStream("excel/ic_nat.xlsx");
|
|
|
|
try {
|
|
|
|
ServletOutputStream os = response.getOutputStream();
|
|
|
|
IOUtils.copy(is, os);
|
|
|
|
} finally {
|
|
|
|
if (is != null) {
|
|
|
|
is.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Author sun
|
|
|
|
* @Description 【核酸】核酸检测信息列表
|
|
|
|
**/
|
|
|
|
@NoRepeatSubmit
|
|
|
|
@PostMapping("export")
|
|
|
|
public void export(@LoginUser TokenDto tokenDto, @RequestBody MyNatListFormDTO formDTO, HttpServletResponse response) {
|
|
|
|
formDTO.setCustomerId(tokenDto.getCustomerId());
|
|
|
|
formDTO.setUserId(tokenDto.getUserId());
|
|
|
|
|
|
|
|
//formDTO.setCustomerId("45687aa479955f9d06204d415238f7cc");
|
|
|
|
//formDTO.setUserId("73ae6280e46a6653a5605d51d5462725");
|
|
|
|
|
|
|
|
formDTO.setPage(false);
|
|
|
|
|
|
|
|
ExcelWriter excelWriter = null;
|
|
|
|
formDTO.setPageSize(NumConstant.TEN_THOUSAND);
|
|
|
|
int pageNo = formDTO.getPageNo();
|
|
|
|
try {
|
|
|
|
// 这里 需要指定写用哪个class去写
|
|
|
|
String fileName = "核酸检测信息.xlsx";
|
|
|
|
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response),NatListResultDTO.class).build();
|
|
|
|
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
|
|
|
|
PageData<NatListResultDTO> data = null;
|
|
|
|
do {
|
|
|
|
data = icNucleinService.natList(formDTO);
|
|
|
|
data.getList().forEach(o->o.setNatResult(NumConstant.ONE_STR.equals(o.getNatResult())?"阳性":"阴性"));
|
|
|
|
formDTO.setPageNo(++pageNo);
|
|
|
|
excelWriter.write(data.getList(), writeSheet);
|
|
|
|
} while (CollectionUtils.isNotEmpty(data.getList()) && data.getList().size()==formDTO.getPageSize());
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
|
log.error("export exception", e);
|
|
|
|
}finally {
|
|
|
|
// 千万别忘记finish 会帮忙关闭流
|
|
|
|
if (excelWriter != null) {
|
|
|
|
excelWriter.finish();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|