From d8cefaf5de729f1977a22cf1b5cf6017cea30c97 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Fri, 17 Dec 2021 17:20:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9D=A5=E6=BA=90=E7=BD=91=E6=A0=BC?= =?UTF-8?q?=E7=9A=84=EF=BC=8C=E5=B7=B2=E7=BB=93=E6=A1=88=E7=9A=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=EF=BC=8C=E6=BB=A1=E6=84=8F=E5=BA=A6=E5=88=86=E6=95=B0?= =?UTF-8?q?=E9=BB=98=E8=AE=A480?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/impl/ScreenProjectDataServiceImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectDataServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectDataServiceImpl.java index 98bd3ff9cf..df52b23ee8 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectDataServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectDataServiceImpl.java @@ -266,6 +266,12 @@ public class ScreenProjectDataServiceImpl extends BaseServiceImpl> partition = ListUtils.partition(meta, NumConstant.ONE_HUNDRED); partition.forEach(part -> { List list = ConvertUtils.sourceToTarget(part, ScreenProjectDataEntity.class); + // 把来源网格的,已结案的项目,满意度分默认设置80 + list.forEach(l -> { + if (l.getOrgType().equals("grid") && l.getProjectStatusCode().equals("closed_case")){ + l.setSatisfactionScore(new BigDecimal(NumConstant.EIGHTY)); + } + }); insertBatch(list); saveCategory(customerId, list); }); From 31aa37d65020429cfed354bc33d0ed57012bd85b Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Mon, 20 Dec 2021 10:42:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=201.ic=E5=B1=85?= =?UTF-8?q?=E6=B0=91=E4=BF=A1=E6=81=AF=E5=AF=BC=E5=85=A5=E6=89=80=E7=94=A8?= =?UTF-8?q?excel=E6=A8=A1=E6=9D=BF=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/IcResiUserController.java | 70 ++++++++++++++++-- ...ic_resi_info_import_cid_for_easy_excel.xls | Bin 0 -> 78848 bytes 2 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_import_cid_for_easy_excel.xls diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java index d6df9f57e0..3a8a77eeec 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java @@ -28,6 +28,7 @@ import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; 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.exception.RenException; import com.epmet.commons.tools.page.PageData; @@ -51,6 +52,7 @@ import com.epmet.feign.OperCustomizeOpenFeignClient; import com.epmet.feign.OssFeignClient; import com.epmet.service.IcResiUserImportService; import com.epmet.service.IcResiUserService; +import jodd.io.FileUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; @@ -58,6 +60,9 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -66,6 +71,7 @@ import java.io.File; 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.nio.file.Paths; @@ -114,6 +120,30 @@ public class IcResiUserController { @Autowired private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient; + /** + * 模板枚举 + */ + public enum IcUserTemplateEnums { + IC_RESI_IMPORT_TEMPLATE("excel/ic_resi_info_import_cid_for_easy_excel.xls", "居民信息导入模板.xls"), + IC_RESI_EXPORT_TEMPLATE("excel/ic_resi_info_cid_for_easy_excel.xlsx", "居民信息导出模板.xlsx"); + + private String pathInApp; + private String templateName; + + IcUserTemplateEnums(String pathInApp, String templateName) { + this.pathInApp = pathInApp; + this.templateName = templateName; + } + + public String getPathInApp() { + return pathInApp; + } + + public String getTemplateName() { + return templateName; + } + } + { // 初始化上传目录 String home = System.getProperty("user.home"); @@ -259,7 +289,7 @@ public class IcResiUserController { pageFormDTO.setPageFlag(false); //获取模版文件 - File file = getExportTemplateFile(customerId); + File file = getIcResiTemplateFile(customerId, IcUserTemplateEnums.IC_RESI_EXPORT_TEMPLATE); ExcelWriter excelWriter = null; try { excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("居民基本信息.xlsx", response)).withTemplate(file).build(); @@ -338,7 +368,7 @@ public class IcResiUserController { * @param customerId * @return */ - private File getExportTemplateFile(String customerId) throws Exception{ + private File getIcResiTemplateFile(String customerId, IcUserTemplateEnums template) throws Exception{ String fileType = ".xlsx"; String fileName = customerId + fileType; File file = new File(IC_RESI_DOWNLOAD_DIR.resolve(fileName).toString()); @@ -354,13 +384,12 @@ public class IcResiUserController { Result result = HttpClientManager.getInstance().getDownloadFilebytes(fileUrlResult.getData(), null); //获取模版失败 则把默认文件写入 if (result == null || !result.success()) { - log.warn("获取居民导出模版失败,path:{},走默认模版", ossFilePath); - String defaultTemplatePath = "excel/ic_resi_info_cid_for_easy_excel.xlsx"; - InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(defaultTemplatePath); + log.warn("获取居民模版失败,path:{},走默认模版", ossFilePath); + InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(template.getPathInApp()); FileUtils.copyInputStreamToFile(resourceAsStream,file); - log.warn("getExportTemplateFile copy default file to template,customerId:{}",customerId); + log.warn("getIcResiTemplateFile copy default file to template,customerId:{}",customerId); } else { - log.warn("getExportTemplateFile reload file form oss default file to template,customerId:{}",customerId); + log.warn("getIcResiTemplateFile reload file form oss default file to template,customerId:{}",customerId); FileUtils.writeByteArrayToFile(file,result.getData()); } redisUtils.hSet(RedisKeys.getResiTempChangedKey(customerId), serverIp, NumConstant.ZERO_STR); @@ -492,4 +521,31 @@ public class IcResiUserController { ValidatorUtils.validateEntity(formDTO, DemandUserFormDTO.InternalGroup.class); return new Result>().ok(icResiUserService.queryDemandUsers(formDTO)); } + + /** + * 下载ic居民信息导入excel模板 + * @param loginUserInfo + * @return + */ + @PostMapping("import/download-template") + public ResponseEntity downloadIcResiDownloadTemplate(@LoginUser TokenDto loginUserInfo) { + String customerId = loginUserInfo.getCustomerId(); + + try { + File icResiImportTemplateFile = getIcResiTemplateFile(customerId, IcUserTemplateEnums.IC_RESI_IMPORT_TEMPLATE); + + HttpHeaders headers = new HttpHeaders(); + headers.add("Access-Control-Expose-Headers", "Content-Disposition"); + headers.add("content-Type", "application/vnd.ms-excel"); + headers.add("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(IcUserTemplateEnums.IC_RESI_IMPORT_TEMPLATE.getTemplateName(), "UTF-8")); + + return new ResponseEntity<>(FileUtil.readBytes(icResiImportTemplateFile), headers, HttpStatus.OK); + } catch (Exception e) { + String errorStackTrace = ExceptionUtils.getErrorStackTrace(e); + + log.error("下载IC居民信息导入模板失败:{}", errorStackTrace); + + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "下载IC居民信息导入模板失败"); + } + } } diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_import_cid_for_easy_excel.xls b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_import_cid_for_easy_excel.xls new file mode 100644 index 0000000000000000000000000000000000000000..1523d6719badec2b9cb0a018e925d1afd4fbd3ec GIT binary patch literal 78848 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 Izi$ovKmJGk=l}o! literal 0 HcmV?d00001