diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/CustomerFormQueryDTO.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/CustomerFormQueryDTO.java index 55e1160110..8759909f38 100644 --- a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/CustomerFormQueryDTO.java +++ b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/CustomerFormQueryDTO.java @@ -13,7 +13,10 @@ import java.io.Serializable; @Data public class CustomerFormQueryDTO implements Serializable { public interface AddUserInternalGroup {} - @NotBlank(message = "formCode不能为空,居民信息默认传:resi_base_info",groups =AddUserInternalGroup.class ) + // 获取表单相关信息 + public interface GetFormInfoGroup {} + + @NotBlank(message = "formCode不能为空,居民信息默认传:resi_base_info",groups = { AddUserInternalGroup.class, GetFormInfoGroup.class} ) private String formCode; diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItem.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItem.java index 552ddbe880..7e3abbaa0e 100644 --- a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItem.java +++ b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItem.java @@ -120,5 +120,15 @@ public class FormItem implements Serializable { * 1可以多选,0单选,默认0 */ private Boolean multiSelect; + + /** + * @description 分组label + * + * @param null + * @return + * @author wxz + * @date 2021.10.28 22:57:15 + */ + private String groupLabel; } diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java index 5a02a97f13..58def540a4 100644 --- a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java +++ b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java @@ -7,10 +7,7 @@ import com.epmet.dto.form.CheckFloatFootBarFormDTO; import com.epmet.dto.form.CustomerFootBarFormDTO; import com.epmet.dto.form.CustomerFormQueryDTO; import com.epmet.dto.form.CustomerFunctionListFormDTO; -import com.epmet.dto.result.CheckFloatFootBarResultDTO; -import com.epmet.dto.result.CustomerFormResultDTO; -import com.epmet.dto.result.DefaultFunctionListResultDTO; -import com.epmet.dto.result.IcFormResColumnDTO; +import com.epmet.dto.result.*; import com.epmet.feign.fallback.OperCustomizeOpenFeignClientFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; @@ -80,4 +77,15 @@ public interface OperCustomizeOpenFeignClient { @PostMapping(value = "/oper/customize/icform/queryIcResiSubTables", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) Result> queryIcResiSubTables(@RequestBody CustomerFormQueryDTO queryDTO); + + /** + * @description item列表 + * + * @param formDto + * @return + * @author wxz + * @date 2021.10.28 15:19:59 + */ + @PostMapping("/oper/customize/icform/items") + Result> listItems(@RequestBody CustomerFormQueryDTO formDto); } diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java index 8a300aeb19..2420adb817 100644 --- a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java +++ b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java @@ -8,10 +8,7 @@ import com.epmet.dto.form.CheckFloatFootBarFormDTO; import com.epmet.dto.form.CustomerFootBarFormDTO; import com.epmet.dto.form.CustomerFormQueryDTO; import com.epmet.dto.form.CustomerFunctionListFormDTO; -import com.epmet.dto.result.CheckFloatFootBarResultDTO; -import com.epmet.dto.result.CustomerFormResultDTO; -import com.epmet.dto.result.DefaultFunctionListResultDTO; -import com.epmet.dto.result.IcFormResColumnDTO; +import com.epmet.dto.result.*; import com.epmet.feign.OperCustomizeOpenFeignClient; import java.util.List; @@ -72,4 +69,9 @@ public class OperCustomizeOpenFeignClientFallback implements OperCustomizeOpenFe public Result> queryIcResiSubTables(CustomerFormQueryDTO queryDTO) { return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "queryIcResiSubTables", queryDTO); } + + @Override + public Result> listItems(CustomerFormQueryDTO formDto) { + return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "listItems", formDto); + } } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java index 5443b382a8..8c506cfe74 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java @@ -29,10 +29,7 @@ import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; import com.epmet.dto.IcFormDTO; import com.epmet.dto.form.CustomerFormQueryDTO; -import com.epmet.dto.result.ConditionResultDTO; -import com.epmet.dto.result.CustomerFormResultDTO; -import com.epmet.dto.result.IcFormResColumnDTO; -import com.epmet.dto.result.TableHeaderResultDTO; +import com.epmet.dto.result.*; import com.epmet.excel.IcFormExcel; import com.epmet.service.IcFormItemService; import com.epmet.service.IcFormService; @@ -179,4 +176,20 @@ public class IcFormController { ValidatorUtils.validateEntity(queryDTO,CustomerFormQueryDTO.AddUserInternalGroup.class); return new Result>().ok(icFormItemService.queryIcResiSubTables(queryDTO.getCustomerId(),queryDTO.getFormCode())); } + + /** + * @description item列表 + * + * @param tokenDto + * @param formDto + * @return + * @author wxz + * @date 2021.10.28 15:19:59 + */ + @PostMapping("items") + public Result> listItems(@LoginUser TokenDto tokenDto, @RequestBody CustomerFormQueryDTO formDto) { + ValidatorUtils.validateEntity(formDto, CustomerFormQueryDTO.GetFormInfoGroup.class); + List rst = icFormService.listItems(tokenDto.getCustomerId(), formDto.getFormCode()); + return new Result>().ok(rst); + } } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormDao.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormDao.java index 846e59ad72..6cd4fa7188 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormDao.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormDao.java @@ -55,4 +55,14 @@ public interface IcFormDao extends BaseDao { List selectListGroup(String formId); FormGroupDTO selectChildGroup(String itemId); + + /** + * @description 通用查询item列表,无固定条件 + * + * @param formId + * @return + * @author wxz + * @date 2021.10.28 16:43:00 + */ + List listItems(@Param("formId") String formId); } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormService.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormService.java index 08ae71841b..b1d0dddaf1 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormService.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormService.java @@ -22,6 +22,7 @@ import com.epmet.commons.tools.page.PageData; import com.epmet.dto.IcFormDTO; import com.epmet.dto.form.CustomerFormQueryDTO; import com.epmet.dto.result.CustomerFormResultDTO; +import com.epmet.dto.result.FormItem; import com.epmet.entity.IcFormEntity; import java.util.List; @@ -104,4 +105,15 @@ public interface IcFormService extends BaseService { * @date 2021/10/26 2:41 下午 */ CustomerFormResultDTO getCustomerForm(CustomerFormQueryDTO formDto); + + /** + * @description 查询item列表 + * + * @param customerId + * @param formCode + * @return + * @author wxz + * @date 2021.10.27 17:41:59 + */ + List listItems(String customerId, String formCode); } \ No newline at end of file diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java index f7cf1fe235..23088c3024 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java @@ -131,4 +131,19 @@ public class IcFormServiceImpl extends BaseServiceImpl customerFootBarRedis.setCustomerFormResultDTO(formDto.getFormCode(),formDto.getCustomerId(),resultDTO); return resultDTO; } + + @Override + public List listItems(String customerId, String formCode) { + CustomerFormResultDTO formResultDto=baseDao.selectByCode(customerId, formCode); + if (null == formResultDto) { + throw new RenException(EpmetErrorCode.CUSTOMER_FORM_NOT_EXITS.getCode(),EpmetErrorCode.CUSTOMER_FORM_NOT_EXITS.getMsg()); + } + + List formItems = baseDao.listItems(formResultDto.getFormId()); + formItems.forEach(i -> { + i.setOptions(baseDao.selectListOption(i.getItemId())); + }); + + return formItems; + } } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml b/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml index 6310a06195..44d23cda3f 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml +++ b/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml @@ -210,4 +210,33 @@ g.SORT ASC + diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DynamicQueryFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DynamicQueryFormDTO.java new file mode 100644 index 0000000000..42e163838b --- /dev/null +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DynamicQueryFormDTO.java @@ -0,0 +1,22 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.List; + +/** + * @Description test + * @Author yinzuomei + * @Date 2021/11/2 10:38 上午 + */ +@Data +public class DynamicQueryFormDTO implements Serializable { + private String customerId; + private String formCode="resi_base_info"; + @NotBlank(message = "resultTableName不能为空") + private String resultTableName; + private List conditions; +} + diff --git a/epmet-user/epmet-user-server/pom.xml b/epmet-user/epmet-user-server/pom.xml index c6417f095f..0d8854d5ff 100644 --- a/epmet-user/epmet-user-server/pom.xml +++ b/epmet-user/epmet-user-server/pom.xml @@ -13,6 +13,11 @@ jar + + com.alibaba + easyexcel + 2.2.6 + com.epmet epmet-user-client 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 a03b43299d..f93c505efb 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 @@ -57,6 +57,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.net.URLEncoder; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; /** @@ -330,21 +331,40 @@ public class IcResiUserController { pageFormDTO.setPageFlag(false); //PageData> mapPageData = icResiUserService.pageResiMap(pageFormDTO); //List> list = mapPageData.getList(); - List> list = (List>)JSON.parse("[{\"IS_SPECIAL\":\"1\",\"IS_XFRY\":\"0\",\"REMARKS\":\"beizhu\",\"IS_PARTY\":\"1\",\"icResiUserId\":\"yzmtest2\",\"HOME_ID\":\"中海国际社区一里城1号楼1单元101\",\"HOUSE_TYPE\":\"平房\",\"UNIT_NAME\":\"1单元\",\"GRID_ID\":\"市北区-市北区第三网格3\",\"IS_DB\":\"0\",\"GENDER\":\"男\",\"BIRTHDAY\":\"2021-10-04\",\"IS_VETERANS\":\"0\",\"IS_MB\":\"0\",\"IS_UNEMPLOYED\":\"0\",\"DEMAND_NAME\":null,\"IS_KC\":\"0\",\"IS_ENSURE_HOUSE\":\"0\",\"IS_SD\":\"0\",\"NAME\":\"尹作梅\",\"RDSJ\":null,\"IS_VOLUNTEER\":\"1\",\"GRID_ID_VALUE\":\"e74829ffc43d5470eba6b5e060c11e63\",\"IS_SZ\":\"0\",\"IS_CJ\":\"0\",\"HOME_ID_VALUE\":\"200\",\"DEMAND_CATEGORY_IDS\":null,\"VILLAGE_NAME\":\"中海国际社区一里城\",\"IS_DBH\":\"0\",\"IS_SN\":\"0\",\"BUILD_NAME\":\"1号楼\",\"IS_YLFN\":\"0\",\"IS_UNITED_FRONT\":\"0\",\"ID_CARD\":\"371325199310260529\",\"MOBILE\":\"15764229697\",\"IS_OLD_PEOPLE\":\"0\",\"DOOR_NAME\":\"101\"},{\"IS_SPECIAL\":\"1\",\"IS_XFRY\":\"0\",\"REMARKS\":\"beizhu\",\"IS_PARTY\":\"1\",\"icResiUserId\":\"yzmtest\",\"HOME_ID\":\"中海国际社区一里城1号楼1单元101\",\"HOUSE_TYPE\":\"平房\",\"UNIT_NAME\":\"1单元\",\"GRID_ID\":\"市北区-市北区第三网格3\",\"IS_DB\":\"0\",\"GENDER\":\"男\",\"BIRTHDAY\":\"2021-10-04\",\"IS_VETERANS\":\"0\",\"IS_MB\":\"0\",\"IS_UNEMPLOYED\":\"0\",\"DEMAND_NAME\":\"心理咨询\",\"IS_KC\":\"0\",\"IS_ENSURE_HOUSE\":\"0\",\"IS_SD\":\"0\",\"NAME\":\"尹作梅\",\"RDSJ\":\"2021-10-28 00:00:00\",\"IS_VOLUNTEER\":\"1\",\"GRID_ID_VALUE\":\"e74829ffc43d5470eba6b5e060c11e63\",\"IS_SZ\":\"0\",\"IS_CJ\":\"0\",\"HOME_ID_VALUE\":\"200\",\"DEMAND_CATEGORY_IDS\":\"10180002\",\"VILLAGE_NAME\":\"中海国际社区一里城\",\"IS_DBH\":\"0\",\"IS_SN\":\"0\",\"BUILD_NAME\":\"1号楼\",\"IS_YLFN\":\"0\",\"IS_UNITED_FRONT\":\"0\",\"ID_CARD\":\"371325199310260529\",\"MOBILE\":\"15764229697\",\"IS_OLD_PEOPLE\":\"0\",\"DOOR_NAME\":\"101\"}]" - ); - Map mapData = new HashMap<>(); + List> list = icResiUserService.dynamicQuery(pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), BASE_TABLE_NAME, pageFormDTO.getConditions()); + //list = (List>)JSON.parse("[{\"IS_BDHJ\":\"1\",\"IS_SPECIAL\":\"1\",\"IS_XFRY\":\"0\",\"REMARKS\":\"beizhu\",\"IS_PARTY\":\"1\",\"icResiUserId\":\"yzmtest2\",\"HOME_ID\":\"中海国际社区一里城1号楼1单元101\",\"HOUSE_TYPE\":\"平房\",\"UNIT_NAME\":\"1单元\",\"GRID_ID\":\"市北区-市北区第三网格3\",\"IS_DB\":\"0\",\"GENDER\":\"男\",\"BIRTHDAY\":\"2021-10-04\",\"IS_VETERANS\":\"0\",\"IS_MB\":\"0\",\"IS_UNEMPLOYED\":\"0\",\"DEMAND_NAME\":null,\"IS_KC\":\"0\",\"IS_ENSURE_HOUSE\":\"0\",\"IS_SD\":\"0\",\"NAME\":\"尹作梅\",\"RDSJ\":null,\"IS_VOLUNTEER\":\"1\",\"GRID_ID_VALUE\":\"e74829ffc43d5470eba6b5e060c11e63\",\"IS_SZ\":\"0\",\"IS_CJ\":\"0\",\"HOME_ID_VALUE\":\"200\",\"DEMAND_CATEGORY_IDS\":null,\"VILLAGE_NAME\":\"中海国际社区一里城\",\"IS_DBH\":\"0\",\"IS_SN\":\"0\",\"BUILD_NAME\":\"1号楼\",\"IS_YLFN\":\"0\",\"IS_UNITED_FRONT\":\"0\",\"ID_CARD\":\"371325199310260529\",\"MOBILE\":\"15764229697\",\"IS_OLD_PEOPLE\":\"0\",\"DOOR_NAME\":\"101\"},{\"IS_SPECIAL\":\"1\",\"IS_XFRY\":\"0\",\"REMARKS\":\"beizhu\",\"IS_PARTY\":\"1\",\"icResiUserId\":\"yzmtest\",\"HOME_ID\":\"中海国际社区一里城1号楼1单元101\",\"HOUSE_TYPE\":\"平房\",\"UNIT_NAME\":\"1单元\",\"GRID_ID\":\"市北区-市北区第三网格3\",\"IS_DB\":\"0\",\"GENDER\":\"男\",\"BIRTHDAY\":\"2021-10-04\",\"IS_VETERANS\":\"0\",\"IS_MB\":\"0\",\"IS_UNEMPLOYED\":\"0\",\"DEMAND_NAME\":\"心理咨询\",\"IS_KC\":\"0\",\"IS_ENSURE_HOUSE\":\"0\",\"IS_SD\":\"0\",\"NAME\":\"尹作梅\",\"RDSJ\":\"2021-10-28 00:00:00\",\"IS_VOLUNTEER\":\"1\",\"GRID_ID_VALUE\":\"e74829ffc43d5470eba6b5e060c11e63\",\"IS_SZ\":\"0\",\"IS_CJ\":\"0\",\"HOME_ID_VALUE\":\"200\",\"DEMAND_CATEGORY_IDS\":\"10180002\",\"VILLAGE_NAME\":\"中海国际社区一里城\",\"IS_DBH\":\"0\",\"IS_SN\":\"0\",\"BUILD_NAME\":\"1号楼\",\"IS_YLFN\":\"0\",\"IS_UNITED_FRONT\":\"0\",\"ID_CARD\":\"371325199310260529\",\"MOBILE\":\"15764229697\",\"IS_OLD_PEOPLE\":\"0\",\"DOOR_NAME\":\"101\"}]"); log.info("list:{}", JSON.toJSONString(list)); - mapData.put("list", list); + CustomerFormResultDTO resiFormItems = getResiFormItems(pageFormDTO.getCustomerId()); String templatePath = "excel/ic_resi_info_cid.xls"; - TemplateExportParams params = new TemplateExportParams(templatePath, 0,1); + TemplateExportParams params = new TemplateExportParams(templatePath,true); + + Map> sheetMap = new HashMap<>(); + Map mapData = new HashMap<>(); + mapData.put("list", list); + sheetMap.put(0,mapData); + AtomicInteger n = new AtomicInteger(); + resiFormItems.getItemList().forEach(item->{ + if (item.getChildGroup() != null){ + if (!item.getChildGroup().getTableName().equals(BASE_TABLE_NAME)) { + sheetMap.put( n.incrementAndGet(),mapData); + System.out.println(n.get()); + } + } + }); + for (FormGroupDTO group : resiFormItems.getGroupList()) { - Workbook workbook = ExcelExportUtil.exportExcel(new TemplateExportParams(templatePath), mapData); + } + + + + + Workbook workbook = ExcelExportUtil.exportExcel(sheetMap, params); //header response.setHeader("content-Type", "application/vnd.ms-excel"); - response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("继续追踪导出详情-" + ".xls", "UTF-8")); + response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("居民信息.xls", "UTF-8")); workbook.write(response.getOutputStream()); /* //方式1 通过mv导出 @@ -356,4 +376,18 @@ public class IcResiUserController { } + @PostMapping("import/excel") + public Result importExcelByEasyExcel() { + Object header = icResiUserService.importExcel(); + return new Result().ok(header); + } + + @PostMapping("test") + public Result>> test(@LoginUser TokenDto tokenDto,@RequestBody DynamicQueryFormDTO formDTO){ + formDTO.setCustomerId(tokenDto.getCustomerId()); + return new Result>>().ok(icResiUserService.dynamicQuery(formDTO.getCustomerId(), + formDTO.getFormCode(), + formDTO.getResultTableName(), + formDTO.getConditions())); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java index 47b63f6eec..1d4f66a4cb 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java @@ -80,4 +80,19 @@ public interface IcResiUserDao extends BaseDao { int updateToDel(String icResiUserId); int updateSubTableToDel(@Param("subTalbeName") String subTalbeName, @Param("icResiUserId")String icResiUserId); + + /** + * 接口名称 + * + * @param customerId 客户id + * @param resultTableName 获取哪个表的数据??? + * @param conditions 前端传入的查询入参 + * @return java.util.List> + * @author yinzuomei + * @date 2021/11/2 10:35 上午 + */ + List> dynamicQuery(@Param("customerId")String customerId, + @Param("resultTableName")String resultTableName, + @Param("conditions") List conditions, + @Param("subTables") List subTables); } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java new file mode 100644 index 0000000000..0abf0f28d0 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java @@ -0,0 +1,73 @@ +package com.epmet.excel.handler; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 创建一个监听器 + */ +@Slf4j +public class DynamicEasyExcelListener extends AnalysisEventListener> { + + /** + * 表头数据(存储所有的表头数据) + */ + private List> headList = new ArrayList<>(); + + /** + * 数据体 + */ + private List> dataList = new ArrayList<>(); +// Map dataList = new HashMap<>(); + + /** + * 这里会一行行的返回头 + * + * @param headMap + * @param context + */ + @Override + public void invokeHeadMap(Map headMap, AnalysisContext context) { + log.info("解析到一条头数据:{}", JSON.toJSONString(headMap)); + //存储全部表头数据 + headList.add(headMap); + } + + /** + * 这个每一条数据解析都会来调用 + * + * @param data + * one row value. Is is same as {@link AnalysisContext#readRowHolder()} + * @param context + */ + @Override + public void invoke(Map data, AnalysisContext context) { + log.info("解析到一条数据:{}", JSON.toJSONString(data)); + dataList.add(data); + } + + /** + * 所有数据解析完成了 都会来调用 + * + * @param context + */ + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 这里也要保存数据,确保最后遗留的数据也存储到数据库 + log.info("所有数据解析完成!"); + } + + public List> getHeadList() { + return headList; + } + + public List> getDataList() { + return dataList; + } +} \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiExcelImportHandler.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiExcelImportHandler.java new file mode 100644 index 0000000000..8ae901cd51 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiExcelImportHandler.java @@ -0,0 +1,12 @@ +package com.epmet.excel.handler; + +import cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl; + +import java.util.Map; + +public class IcResiExcelImportHandler extends ExcelDataHandlerDefaultImpl> { + @Override + public Object importHandler(Map obj, String name, Object value) { + return super.importHandler(obj, name, value); + } +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java index 3e582adbb5..cefe0c0e88 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java @@ -21,10 +21,7 @@ import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.dto.IcResiUserDTO; -import com.epmet.dto.form.DelIcResiUserFormDTO; -import com.epmet.dto.form.IcResiDetailFormDTO; -import com.epmet.dto.form.IcResiUserFormDTO; -import com.epmet.dto.form.IcResiUserPageFormDTO; +import com.epmet.dto.form.*; import com.epmet.dto.result.HomeUserResultDTO; import com.epmet.entity.IcResiUserEntity; @@ -130,4 +127,10 @@ public interface IcResiUserService extends BaseService { */ Map queryIcResiDetail(IcResiDetailFormDTO pageFormDTO); + Object importExcel(); + + List> dynamicQuery(String customerId, + String formCode, + String resultTableName, + List conditions); } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index 25b86988b1..b71e120176 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -17,6 +17,7 @@ package com.epmet.service.impl; +import com.alibaba.excel.EasyExcelFactory; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -24,10 +25,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.enums.GenderEnum; import com.epmet.commons.tools.enums.HouseTypeEnum; +import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; +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.ConvertUtils; @@ -37,17 +41,16 @@ import com.epmet.dao.IcResiUserDao; import com.epmet.dto.CustomerAgencyDTO; import com.epmet.dto.IcResiUserDTO; import com.epmet.dto.form.*; -import com.epmet.dto.result.AllGridsByUserIdResultDTO; -import com.epmet.dto.result.HomeUserResultDTO; -import com.epmet.dto.result.HouseInfoDTO; -import com.epmet.dto.result.IcFormResColumnDTO; +import com.epmet.dto.result.*; import com.epmet.entity.IcResiUserEntity; +import com.epmet.excel.handler.DynamicEasyExcelListener; import com.epmet.feign.GovOrgOpenFeignClient; import com.epmet.feign.OperCustomizeOpenFeignClient; import com.epmet.redis.IcResiUserRedis; import com.epmet.service.IcResiUserService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -57,6 +60,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.File; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -69,7 +73,7 @@ import java.util.stream.Collectors; */ @Slf4j @Service -public class IcResiUserServiceImpl extends BaseServiceImpl implements IcResiUserService { +public class IcResiUserServiceImpl extends BaseServiceImpl implements IcResiUserService, ResultDataResolver { private Logger logger = LogManager.getLogger(IcResiUserServiceImpl.class); @Autowired private IcResiUserRedis icResiUserRedis; @@ -417,4 +421,315 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> headList = readListener.getHeadList(); + List> dataList = readListener.getDataList(); + + Map> headers = mergeHead(headList); + + // 查询form相关信息 + CustomerFormQueryDTO form = new CustomerFormQueryDTO(); + form.setFormCode("resi_base_info"); + Result> result = operCustomizeOpenFeignClient.listItems(form); + List customerItems = getResultDataOrThrowsException(result, ServiceConstant.OPER_CUSTOMIZE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【居民信息excel导入】查询表单相关信息失败"); + + // 清洗表头数据 + Map abandonedHeaders = washHeaders(headers, customerItems); + + //合并多级表头 + HashMap> combinedHeaders = combineHeaders(headers); + + // 得到客户配置item数据 + Map formItemMap = customerItems.stream().collect( + Collectors.toMap(formItem -> { + String groupLabel = formItem.getGroupLabel(); + String label = formItem.getLabel(); + if (StringUtils.isNotBlank(groupLabel)) { + return groupLabel.concat(":").concat(label); + } else { + return label; + } + }, formItem -> formItem) + ); + HashMap> headerColumnWrapper = integrate(formItemMap, combinedHeaders, dataList, abandonedHeaders); + + return headerColumnWrapper; + } + + /** + * @description 合并头 + * + * @param headers + * @return + * @author wxz + * @date 2021.10.28 21:27:18 + */ + private HashMap> combineHeaders(Map> headers) { + HashMap> itemAndColIndexs = new HashMap<>(); + + headers.forEach((k, v) -> { + String tempKey = String.join(":", v); + List colIndexs = itemAndColIndexs.get(tempKey); + if (colIndexs == null) { + colIndexs = new ArrayList<>(); + itemAndColIndexs.put(tempKey, colIndexs); + } + colIndexs.add(k); + }); + + return itemAndColIndexs; + } + + /** + * @description 清洗headers + * + * @param headers + * @param items + * @return + * @author wxz + * @date 2021.10.28 21:07:12 + */ + private Map washHeaders(Map> headers, List items) { + List itemLabels = items.stream().map(i -> i.getLabel()).collect(Collectors.toList()); + Map abandonedHeaders = new HashMap<>(); + for (Map.Entry> entry:headers.entrySet()) { + Integer colIdx = entry.getKey(); + List v = entry.getValue(); + int lastPartIndex = v.size() - 1; + String lastValuePart = v.get(lastPartIndex); + if (itemLabels.indexOf(lastValuePart) == -1) { + // 该部分为options,它的上一级是item,那么去掉options这一级 + v.remove(lastPartIndex); + abandonedHeaders.put(colIdx, lastValuePart); + } + } + + return abandonedHeaders; + //headers.forEach((k, v) -> { + // + //}); + } + + /** + * @description 数据整合 + * + * @return + * @author wxz + * @date 2021.10.28 17:08:51 + */ + private HashMap> integrate(Map formItemMap, Map> combinedHeaders, + List> datas, Map abandonedHeaders) { + HashMap> data = new HashMap<>(); + + for (Map.Entry> entry : combinedHeaders.entrySet()) { + String combinedHeader = entry.getKey(); + + FormItem item = formItemMap.get(combinedHeader); + + if (item == null) { + // 如果数据库中没有该项,可能是用户自己定义的项,忽略 + continue; + } + + ColumnWrapper columnWrapper = new ColumnWrapper(); + + // 填充options + columnWrapper.setItemType(item.getItemType()); + String groupLabel = item.getGroupLabel(); + String combinedLabel = StringUtils.isBlank(groupLabel) ? item.getLabel() : groupLabel.concat(":").concat(item.getLabel()); + columnWrapper.setCombinedLabel(combinedLabel); + columnWrapper.setColumnName(item.getColumnName()); + columnWrapper.setColIndexs(entry.getValue()); + + if ("remote".equals(item.getOptionSourceType())) { + Map options = listRemoteOptions(item.getOptionSourceValue()); + columnWrapper.setOptions(options); + } else { + Map options = item.getOptions().stream().collect(Collectors.toMap(OptionDTO::getLabel, OptionDTO::getValue)); + columnWrapper.setOptions(options); + } + + /*switch (item.getItemType()) { + case "input": + case "textarea": + case "datepicker": + case "timerange": + //输入性的 + break; + case "checkbox": + break; + }*/ + + } + return data; + } + + /** + * 获取checkbox列值 + * @param options + * @param writedColIdxs + * @param abandonedHeaders + * @return + */ + private String getCheckBoxColValue(List options, List writedColIdxs, Map abandonedHeaders) { + + Map optionMap = options.stream().collect(Collectors.toMap(OptionDTO::getLabel, OptionDTO::getValue)); + + List optionValues = writedColIdxs.stream().map(i -> { + String optionName = abandonedHeaders.get(i); + return optionMap.get(optionName); + }).collect(Collectors.toList()); + + return String.join(",", optionValues); + } + + /** + * 远程获取options + * @param uri + * @return + */ + private Map listRemoteOptions(String uri) { + + return null; + + // 通用api调用,无法实现 + /*if (!uri.startsWith("/api")) uri = "/api".concat(uri); + + NamingService namingService = discoveryProperties.namingServiceInstance(); + ResponseEntity>> response = null; + try { + // 调用gateway服务,查询相关接口 + Instance gatewayInstance = namingService.getAllInstances(ServiceConstant.EPMET_GATEWAY).get(0); + String ip = gatewayInstance.getIp(); + int port = gatewayInstance.getPort(); + + String url = String.format("http://%s:%s%s", ip, port, uri); + + ParameterizedTypeReference>> tr = new ParameterizedTypeReference>>() {}; + response = new RestTemplate().exchange(url, HttpMethod.POST, null, tr); + } catch (NacosException e) { + e.printStackTrace(); + } + + if (response != null && (response.getStatusCode() == HttpStatus.OK)) { + List options = response.getBody().getData(); + if (options == null) { + System.out.println(6); + } + return options.stream().collect(Collectors.toMap(OptionResultDTO::getLabel, OptionResultDTO::getValue)); + } else { + throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode()); + }*/ + + } + + /** + * @description 合并表头 + * + * @param headList + * @return + * @author wxz + * @date 2021.10.27 16:17:34 + */ + private Map> mergeHead(List> headList) { + Map l1 = headList.get(0); + Map l2 = headList.get(1); + Map l3 = headList.get(2); + + String l1LastHeadName = ""; + String l2LastHeadName = ""; + + //Map resultMap = new HashMap<>(); + HashMap> result = new HashMap<>(); + + for (Map.Entry entry : l1.entrySet()) { + + StringBuilder headerNameConcatStr = new StringBuilder(); + + Integer key = entry.getKey(); + String l1TempValue = entry.getValue(); + + String l2TempValue = l2.get(key); + String l3TempValue = l3.get(key); + + if (StringUtils.isNotBlank(l1TempValue)) { + l1LastHeadName = l1TempValue; + } + + if (StringUtils.isNotBlank(l2TempValue)) { + l2LastHeadName = l2TempValue; + } + + // 开始拼接 + if (StringUtils.isNotBlank(l3TempValue)) { + //headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName).append(":").append(l3TempValue); + //resultMap.put(key, headerNameConcatStr.toString()); + ArrayList parts = new ArrayList<>(); + parts.add(l1LastHeadName); + parts.add(l2LastHeadName); + parts.add(l3TempValue); + result.put(key, parts); + continue; + } + + if (StringUtils.isNotBlank(l2TempValue)) { + //headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName); + //resultMap.put(key, headerNameConcatStr.toString()); + ArrayList parts = new ArrayList<>(); + parts.add(l1LastHeadName); + parts.add(l2LastHeadName); + result.put(key, parts); + continue; + } + + if (StringUtils.isNotBlank(l1TempValue)) { + //headerNameConcatStr.append(l1LastHeadName); + //resultMap.put(key, headerNameConcatStr.toString()); + ArrayList parts = new ArrayList<>(); + parts.add(l1LastHeadName); + result.put(key, parts); + continue; + } + + } + return result; + } + + /** + * @description 列信息封装 + * + * @return + * @author wxz + * @date 2021.10.28 22:18:05 + */ + @Data + public static class ColumnWrapper { + private String combinedLabel; + private String columnName; + private String itemType; + private List colIndexs; + //private List colContents; + private String colValue; + + // key:label,value:value + private Map options; + } + public List> dynamicQuery(String customerId, + String formCode, + String resultTableName, + List conditions){ + CustomerFormQueryDTO queryDTO=new CustomerFormQueryDTO(); + queryDTO.setCustomerId(customerId); + queryDTO.setFormCode(formCode); + Result> subTablesRes=operCustomizeOpenFeignClient.querySubTables(queryDTO); + List subTables=new ArrayList<>(); + if(subTablesRes.success()&&CollectionUtils.isNotEmpty(subTablesRes.getData())){ + subTables =subTablesRes.getData(); + } + return baseDao.dynamicQuery(customerId,resultTableName,conditions,subTables); + } } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls index 51a5d41a94..b6a67b9205 100644 Binary files a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls and b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls differ diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index 26e20f7407..616d55e711 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -104,4 +104,22 @@ update ${subTalbeName} set del_flag='1' where IC_RESI_USER=#{icResiUserId} + + \ No newline at end of file