Browse Source

Merge remote-tracking branch 'remotes/origin/dev_ic_platform' into develop

dev_shibei_match
jianjun 4 years ago
parent
commit
2232128a4f
  1. 5
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/CustomerFormQueryDTO.java
  2. 10
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItem.java
  3. 16
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java
  4. 10
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java
  5. 21
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java
  6. 10
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormDao.java
  7. 12
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormService.java
  8. 15
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java
  9. 29
      epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml
  10. 22
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DynamicQueryFormDTO.java
  11. 5
      epmet-user/epmet-user-server/pom.xml
  12. 48
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  13. 15
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  14. 73
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java
  15. 12
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiExcelImportHandler.java
  16. 11
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java
  17. 325
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java
  18. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls
  19. 18
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

5
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;

10
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;
}

16
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<Set<String>> queryIcResiSubTables(@RequestBody CustomerFormQueryDTO queryDTO);
/**
* @description item列表
*
* @param formDto
* @return
* @author wxz
* @date 2021.10.28 15:19:59
*/
@PostMapping("/oper/customize/icform/items")
Result<List<FormItem>> listItems(@RequestBody CustomerFormQueryDTO formDto);
}

10
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<Set<String>> queryIcResiSubTables(CustomerFormQueryDTO queryDTO) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "queryIcResiSubTables", queryDTO);
}
@Override
public Result<List<FormItem>> listItems(CustomerFormQueryDTO formDto) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "listItems", formDto);
}
}

21
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<Set<String>>().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<List<FormItem>> listItems(@LoginUser TokenDto tokenDto, @RequestBody CustomerFormQueryDTO formDto) {
ValidatorUtils.validateEntity(formDto, CustomerFormQueryDTO.GetFormInfoGroup.class);
List<FormItem> rst = icFormService.listItems(tokenDto.getCustomerId(), formDto.getFormCode());
return new Result<List<FormItem>>().ok(rst);
}
}

10
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormDao.java

@ -55,4 +55,14 @@ public interface IcFormDao extends BaseDao<IcFormEntity> {
List<FormGroupDTO> selectListGroup(String formId);
FormGroupDTO selectChildGroup(String itemId);
/**
* @description 通用查询item列表无固定条件
*
* @param formId
* @return
* @author wxz
* @date 2021.10.28 16:43:00
*/
List<FormItem> listItems(@Param("formId") String formId);
}

12
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<IcFormEntity> {
* @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<FormItem> listItems(String customerId, String formCode);
}

15
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<IcFormDao, IcFormEntity>
customerFootBarRedis.setCustomerFormResultDTO(formDto.getFormCode(),formDto.getCustomerId(),resultDTO);
return resultDTO;
}
@Override
public List<FormItem> 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<FormItem> formItems = baseDao.listItems(formResultDto.getFormId());
formItems.forEach(i -> {
i.setOptions(baseDao.selectListOption(i.getItemId()));
});
return formItems;
}
}

29
epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml

@ -210,4 +210,33 @@
g.SORT ASC
</select>
<select id="listItems" resultType="com.epmet.dto.result.FormItem">
SELECT fi.ID AS item_id,
case
when g.TABLE_NAME is null or g.TABLE_NAME = '' then 'ic_resi_user'
else g.TABLE_NAME end as table_name,
fi.PARENT_ITEM_ID,
pitem.LABEL PARENT_ITEM_LABEL,
fi.LABEL,
fi.ITEM_TYPE,
fi.ITEM_GROUP_ID,
g.LABEL as GROUP_LABEL,
fi.REQUIRED,
IFNULL(fi.VALID_TYPE, '') as VALID_TYPE,
IFNULL(fi.DEFAULT_VALUE, '') as DEFAULT_VALUE,
IFNULL(fi.OPTION_SOURCE_TYPE, '') as OPTION_SOURCE_TYPE,
IFNULL(fi.OPTION_SOURCE_VALUE, '') as OPTION_SOURCE_VALUE,
fi.SORT,
IFNULL(fi.PLACEHOLDER, '') as PLACEHOLDER,
fi.SEARCH_DISPLAY,
fi.LIST_DISPLAY,
fi.DATA_ANALYSE,
fi.COLUMN_NAME,
fi.COLUMN_NUM
FROM ic_form_item fi
left join ic_form_item_group g on (fi.ITEM_GROUP_ID = g.ID and fi.DEL_FLAG = 0 and g.DEL_FLAG = 0)
left join ic_form_item pitem on (pitem.DEL_FLAG = 0 and fi.PARENT_ITEM_ID = pitem.ID)
WHERE fi.FORM_ID = #{formId}
ORDER BY fi.SORT ASC
</select>
</mapper>

22
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<ResiUserQueryValueDTO> conditions;
}

5
epmet-user/epmet-user-server/pom.xml

@ -13,6 +13,11 @@
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-user-client</artifactId>

48
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<Map<String, Object>> mapPageData = icResiUserService.pageResiMap(pageFormDTO);
//List<Map<String, Object>> list = mapPageData.getList();
List<Map<String, Object>> list = (List<Map<String, Object>>)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<String, Object> mapData = new HashMap<>();
List<Map<String, Object>> list = icResiUserService.dynamicQuery(pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), BASE_TABLE_NAME, pageFormDTO.getConditions());
//list = (List<Map<String, Object>>)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<Integer,Map<String,Object>> sheetMap = new HashMap<>();
Map<String, Object> 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<List<Map<String,Object>>> test(@LoginUser TokenDto tokenDto,@RequestBody DynamicQueryFormDTO formDTO){
formDTO.setCustomerId(tokenDto.getCustomerId());
return new Result<List<Map<String,Object>>>().ok(icResiUserService.dynamicQuery(formDTO.getCustomerId(),
formDTO.getFormCode(),
formDTO.getResultTableName(),
formDTO.getConditions()));
}
}

15
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java

@ -80,4 +80,19 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
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<java.util.Map<java.lang.String,java.lang.Object>>
* @author yinzuomei
* @date 2021/11/2 10:35 上午
*/
List<Map<String,Object>> dynamicQuery(@Param("customerId")String customerId,
@Param("resultTableName")String resultTableName,
@Param("conditions") List<ResiUserQueryValueDTO> conditions,
@Param("subTables") List<String> subTables);
}

73
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<Map<Integer, String>> {
/**
* 表头数据存储所有的表头数据
*/
private List<Map<Integer, String>> headList = new ArrayList<>();
/**
* 数据体
*/
private List<Map<Integer, String>> dataList = new ArrayList<>();
// Map<Integer, String> dataList = new HashMap<>();
/**
* 这里会一行行的返回头
*
* @param headMap
* @param context
*/
@Override
public void invokeHeadMap(Map<Integer, String> 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<Integer, String> data, AnalysisContext context) {
log.info("解析到一条数据:{}", JSON.toJSONString(data));
dataList.add(data);
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
log.info("所有数据解析完成!");
}
public List<Map<Integer, String>> getHeadList() {
return headList;
}
public List<Map<Integer, String>> getDataList() {
return dataList;
}
}

12
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<Map<String, Object>> {
@Override
public Object importHandler(Map<String, Object> obj, String name, Object value) {
return super.importHandler(obj, name, value);
}
}

11
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<IcResiUserEntity> {
*/
Map queryIcResiDetail(IcResiDetailFormDTO pageFormDTO);
Object importExcel();
List<Map<String,Object>> dynamicQuery(String customerId,
String formCode,
String resultTableName,
List<ResiUserQueryValueDTO> conditions);
}

325
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<IcResiUserDao, IcResiUserEntity> implements IcResiUserService {
public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResiUserEntity> implements IcResiUserService, ResultDataResolver {
private Logger logger = LogManager.getLogger(IcResiUserServiceImpl.class);
@Autowired
private IcResiUserRedis icResiUserRedis;
@ -417,4 +421,315 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
return resultMap;
}
@Override
public Object importExcel() {
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener();
EasyExcelFactory.read(new File("/opt/test/基础信息表/resi_info.xls")).registerReadListener(readListener).headRowNumber(3).sheet(0).doRead();
List<Map<Integer, String>> headList = readListener.getHeadList();
List<Map<Integer, String>> dataList = readListener.getDataList();
Map<Integer, List<String>> headers = mergeHead(headList);
// 查询form相关信息
CustomerFormQueryDTO form = new CustomerFormQueryDTO();
form.setFormCode("resi_base_info");
Result<List<FormItem>> result = operCustomizeOpenFeignClient.listItems(form);
List<FormItem> customerItems = getResultDataOrThrowsException(result, ServiceConstant.OPER_CUSTOMIZE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【居民信息excel导入】查询表单相关信息失败");
// 清洗表头数据
Map<Integer, String> abandonedHeaders = washHeaders(headers, customerItems);
//合并多级表头
HashMap<String, List<Integer>> combinedHeaders = combineHeaders(headers);
// 得到客户配置item数据
Map<String, FormItem> 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<String, List<ColumnWrapper>> headerColumnWrapper = integrate(formItemMap, combinedHeaders, dataList, abandonedHeaders);
return headerColumnWrapper;
}
/**
* @description 合并头
*
* @param headers
* @return
* @author wxz
* @date 2021.10.28 21:27:18
*/
private HashMap<String, List<Integer>> combineHeaders(Map<Integer, List<String>> headers) {
HashMap<String, List<Integer>> itemAndColIndexs = new HashMap<>();
headers.forEach((k, v) -> {
String tempKey = String.join(":", v);
List<Integer> 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<Integer, String> washHeaders(Map<Integer, List<String>> headers, List<FormItem> items) {
List<String> itemLabels = items.stream().map(i -> i.getLabel()).collect(Collectors.toList());
Map<Integer, String> abandonedHeaders = new HashMap<>();
for (Map.Entry<Integer, List<String>> entry:headers.entrySet()) {
Integer colIdx = entry.getKey();
List<String> 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<String, List<ColumnWrapper>> integrate(Map<String, FormItem> formItemMap, Map<String, List<Integer>> combinedHeaders,
List<Map<Integer, String>> datas, Map<Integer, String> abandonedHeaders) {
HashMap<String, List<ColumnWrapper>> data = new HashMap<>();
for (Map.Entry<String, List<Integer>> 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<String, String> options = listRemoteOptions(item.getOptionSourceValue());
columnWrapper.setOptions(options);
} else {
Map<String, String> 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<OptionDTO> options, List<Integer> writedColIdxs, Map<Integer, String> abandonedHeaders) {
Map<String, String> optionMap = options.stream().collect(Collectors.toMap(OptionDTO::getLabel, OptionDTO::getValue));
List<String> 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<String, String> listRemoteOptions(String uri) {
return null;
// 通用api调用,无法实现
/*if (!uri.startsWith("/api")) uri = "/api".concat(uri);
NamingService namingService = discoveryProperties.namingServiceInstance();
ResponseEntity<Result<List<OptionResultDTO>>> 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<Result<List<OptionResultDTO>>> tr = new ParameterizedTypeReference<Result<List<OptionResultDTO>>>() {};
response = new RestTemplate().exchange(url, HttpMethod.POST, null, tr);
} catch (NacosException e) {
e.printStackTrace();
}
if (response != null && (response.getStatusCode() == HttpStatus.OK)) {
List<OptionResultDTO> 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<Integer, List<String>> mergeHead(List<Map<Integer, String>> headList) {
Map<Integer, String> l1 = headList.get(0);
Map<Integer, String> l2 = headList.get(1);
Map<Integer, String> l3 = headList.get(2);
String l1LastHeadName = "";
String l2LastHeadName = "";
//Map<Integer, String> resultMap = new HashMap<>();
HashMap<Integer, List<String>> result = new HashMap<>();
for (Map.Entry<Integer, String> 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<String> 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<String> 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<String> 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<Integer> colIndexs;
//private List<String> colContents;
private String colValue;
// key:label,value:value
private Map<String, String> options;
}
public List<Map<String,Object>> dynamicQuery(String customerId,
String formCode,
String resultTableName,
List<ResiUserQueryValueDTO> conditions){
CustomerFormQueryDTO queryDTO=new CustomerFormQueryDTO();
queryDTO.setCustomerId(customerId);
queryDTO.setFormCode(formCode);
Result<List<String>> subTablesRes=operCustomizeOpenFeignClient.querySubTables(queryDTO);
List<String> subTables=new ArrayList<>();
if(subTablesRes.success()&&CollectionUtils.isNotEmpty(subTablesRes.getData())){
subTables =subTablesRes.getData();
}
return baseDao.dynamicQuery(customerId,resultTableName,conditions,subTables);
}
}

BIN
epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls

Binary file not shown.

18
epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

@ -104,4 +104,22 @@
<update id="updateSubTableToDel" parameterType="map">
update ${subTalbeName} set del_flag='1' where IC_RESI_USER=#{icResiUserId}
</update>
<select id="dynamicQuery" parameterType="map" resultType="map">
select
${resultTableName}.*
FROM
ic_resi_user
<if test="null != subTables and subTables.size() > 0">
<foreach item="subTableName" collection="subTables" open="" separator="" close="">
${subTableName}
</foreach>
</if>
<where>
<include refid="listWhere"></include>
</where>
group by IC_RESI_USER.id
order by ic_resi_user.CREATED_TIME desc
</select>
</mapper>
Loading…
Cancel
Save