package com.epmet.controller; 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.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.FileUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; 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.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Map; 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()); icNucleinService.add(formDTO); return new Result(); } /** * @Author sun * @Description 核酸检测-居民端我的上报 **/ @NoRepeatSubmit @PostMapping("mynatlist") public Result> myNatList(@LoginUser TokenDto tokenDto, @RequestBody MyNatListFormDTO formDTO) { ValidatorUtils.validateEntity(formDTO, MyNatListFormDTO.MyNat.class); formDTO.setCustomerId(tokenDto.getCustomerId()); return new Result>().ok(icNucleinService.myNatList(formDTO)); } /** * @Author sun * @Description 【核酸】核酸检测信息列表 **/ @NoRepeatSubmit @PostMapping("natlist") public Result natList(@LoginUser TokenDto tokenDto, @RequestBody MyNatListFormDTO formDTO) { formDTO.setCustomerId(tokenDto.getCustomerId()); formDTO.setUserId(tokenDto.getUserId()); return new Result().ok(icNucleinService.natList(formDTO)); } /** * @Author sun * @Description 【核酸】核酸检测信息详情 **/ @NoRepeatSubmit @PostMapping("detail") public Result detail(@RequestBody MyNatListFormDTO formDTO) { ValidatorUtils.validateEntity(formDTO, MyNatListFormDTO.Detail.class); return new Result().ok(icNucleinService.detail(formDTO)); } /** * @Author sun * @Description 【核酸】核酸检测信息修改 **/ @NoRepeatSubmit @PostMapping("edit") public Result edit(@RequestBody AddIcNatFormDTO formDTO) { 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("importExcel") 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(); } }