package com.epmet.controller; import com.epmet.commons.tools.annotation.MaskResponse; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.ValidateException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.FileUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.form.lingshan.LingShanSpecialTypeSaveFormDTO; import com.epmet.dto.form.lingshan.LingShanSpecialTypeSaveResultDTO; import com.epmet.dto.result.LingShanSpecialCrowdListResultDTO; import com.epmet.enums.LingShanSpecialCrowdTypeEnums; import com.epmet.excel.data.*; import com.epmet.service.LingShanSpecialCrowdService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; 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.Files; import java.nio.file.Path; import java.util.Date; import java.util.List; import java.util.Map; /** * @description: 灵山社会维稳(特殊人群) * @param null: * @return * @author: WangXianZhang * @date: 2023/4/18 9:08 AM */ @Slf4j @RestController @RequestMapping("lingShan/specialCrowd") public class LingShanSpecialCrowdController { @Autowired private LingShanSpecialCrowdService lingShanSpecialCrowdService; /** * @description: 下载导入模板 * @param specialType: * @return * @author: WangXianZhang * @date: 2023/4/21 10:16 AM */ @GetMapping("downloadTemplate") public void downloadTemplate(@RequestParam("specialType") String specialType, HttpServletResponse response) { InputStream is = null; LingShanSpecialCrowdTypeEnums st = LingShanSpecialCrowdTypeEnums.getByType(specialType); if (st == null) { log.error("【灵山街道-下载特殊人群导入模板】传入的特殊人群类型错误:{}", specialType); return; } try (ServletOutputStream os = response.getOutputStream()) { is = this.getClass().getClassLoader().getResourceAsStream("excel/lingshan/special_crowd_" + specialType + "_import.xlsx"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(st.getName(), "UTF-8")); IOUtils.copy(is, os); } catch (IOException e) { throw new RuntimeException(e); } finally { org.apache.poi.util.IOUtils.closeQuietly(is); } } /** * @description: 特殊人群导入 * @param file: * @param crowdCategory: 人群类别 * anzhibangjiao * buliangqingshaonian * shequjiaozheng * jiedurenyuan * xiejiaorenyuan * zhaoshizhaohuojingshenbing * @return * @author: WangXianZhang * @date: 2023/4/18 9:12 AM */ @PostMapping("import") public Result importSpecialCowd(MultipartFile file, @RequestParam("crowdCategory") String crowdCategory) { String originalFilename = file.getOriginalFilename(); String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); // 1.存文件 Path fileSavePath = saveSpecialCrowdTempFile(file, suffix); // 2.执行业务导入 try { String taskId = lingShanSpecialCrowdService.importSpecialCrowd(crowdCategory, fileSavePath.toString(), originalFilename); return new Result().ok(taskId); } catch (Exception e) { // 3.出错的话,删除文件。不能在finally中删除,因为正常执行的话,是在异步线程中执行导入,这里删除了,那子线程就获取不到文件了,所以子线程中有单独的删除逻辑 FileUtils.deleteFileIfExists(fileSavePath); throw e; } } /** * @description: 保存特殊人群临时文件 * @param file: * @return * @author: WangXianZhang * @date: 2023/4/18 9:46 AM */ public Path saveSpecialCrowdTempFile(@RequestParam("file") MultipartFile file, String suffix) { Path fileSavePath; FileOutputStream os = null; try { Path fileSaveDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("special_crowd_import"); String fileName = DateUtils.format(new Date(), "yyyyMMdd_HHmmss_" + System.nanoTime()) + suffix; fileSavePath = fileSaveDir.resolve(fileName); IOUtils.copy(file.getInputStream(), (os = new FileOutputStream(fileSavePath.toString()))); return fileSavePath; } catch (IOException e) { log.error("【灵山街道】导入社会维稳数据,缓存文件失败。"); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, null); } finally { org.apache.poi.util.IOUtils.closeQuietly(os); } } // /** // * @description: 安置帮教新增 // * @param azbjData: // * @return // * @author: WangXianZhang // * @date: 2023/4/20 2:50 PM // */ // @PostMapping("anzhibangjiao/save") // public Result saveSpecialCrowd(@RequestBody LingShanSpecialCrowdDetailAzbjExcelData azbjData) { // ValidatorUtils.validateEntity(azbjData); // // lingShanSpecialCrowdService.createSpecialCrowd(azbjData, "anzhibangjiao"); // return new Result(); // } // // @PostMapping("jiedurenyuan/save") // public Result saveSpecialCrowd(@RequestBody LingshanSpecialCrowdDetailJdryExcelData jdryData) { // ValidatorUtils.validateEntity(jdryData); // // lingShanSpecialCrowdService.createSpecialCrowd(jdryData, "jiedurenyuan"); // return new Result(); // } // // @PostMapping("jingzhanhuanzhe/save") // public Result saveSpecialCrowd(@RequestBody LingshanSpecialCrowdDetailJzhzExcelData jzhzData) { // ValidatorUtils.validateEntity(jzhzData); // // lingShanSpecialCrowdService.createSpecialCrowd(jzhzData, "jingzhanhuanzhe"); // return new Result(); // } // // @PostMapping("shequjiaozheng/save") // public Result saveSpecialCrowd(@RequestBody LingshanSpecialCrowdDetailSqjzExcelData sqjzData) { // ValidatorUtils.validateEntity(sqjzData); // // lingShanSpecialCrowdService.createSpecialCrowd(sqjzData, "shequjiaozheng"); // return new Result(); // } // // @PostMapping("xinfangrenyuan/save") // public Result saveSpecialCrowd(@RequestBody LingshanSpecialCrowdDetailXfryExcelData xfryData) { // ValidatorUtils.validateEntity(xfryData); // // lingShanSpecialCrowdService.createSpecialCrowd(xfryData, "xinfangrenyuan"); // return new Result(); // } /** * @description: 保存 * @param input: * @return * @author: WangXianZhang * @date: 2023/4/23 10:58 AM */ @PostMapping("save") public Result saveSpecialCrowd(@RequestBody LingShanSpecialTypeSaveFormDTO input) { ValidatorUtils.validateEntity(input); lingShanSpecialCrowdService.saveSpecialCrowd(input); return new Result(); } /** * @description: 特殊人群详情 * @return * @author: WangXianZhang * @date: 2023/4/20 3:44 PM */ @GetMapping("getPersonSpecialTypeDetail") public Result getPersonSpecialTypeDetail(@RequestParam("resiId") String resiId) { LingShanSpecialTypeSaveResultDTO r = lingShanSpecialCrowdService.getPersonSpecialTypeDetail(resiId); return new Result().ok(r); } /** * @description: 列表查询 * @param orgId: * @param orgType: * @param specialType: * @param name: * @param mobile: * @param idCard: * @return * @author: WangXianZhang * @date: 2023/4/20 5:42 PM */ @GetMapping("listSpecialCrowd") @MaskResponse(fieldNames = {"name", "mobile", "idCard"}, fieldsMaskType = { MaskResponse.MASK_TYPE_CHINESE_NAME, MaskResponse.MASK_TYPE_MOBILE, MaskResponse.MASK_TYPE_ID_CARD }) public Result> listSpecialCrowds(@RequestParam(value = "orgId", required = false) String orgId, @RequestParam(value = "orgType", required = false) String orgType, @RequestParam(value = "specialType", required = false) String specialType, @RequestParam(value = "name", required = false) String name, @RequestParam(value = "mobile", required = false) String mobile, @RequestParam(value = "idCard", required = false) String idCard, @RequestParam(value = "pageNo", required = false, defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize) { PageData pd = lingShanSpecialCrowdService.listSpecialCrowds(orgId, orgType, specialType, name, mobile, idCard, pageNo, pageSize); return new Result>().ok(pd); } /** * @description: 删除 * @param params: * @return * @author: WangXianZhang * @date: 2023/4/21 9:40 AM */ @PostMapping("deleteByType") public Result deleteByType(@RequestBody Map params) { String resiId = params.get("resiId"); if (StringUtils.isAnyBlank(resiId, resiId)) { throw new ValidateException("特殊人群类型或身份证不能为空"); } lingShanSpecialCrowdService.deleteByType(resiId); return new Result(); } }