diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml index 11d9e4aaef..0c8a18627c 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml @@ -1152,7 +1152,7 @@ and temp.result=1 - and temp.result !=1 + and temp.result = -1 group by temp.orgId,temp.FIELD_NAME diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ResiCategoryItemResultDTO.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ResiCategoryItemResultDTO.java new file mode 100644 index 0000000000..8ab985676e --- /dev/null +++ b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ResiCategoryItemResultDTO.java @@ -0,0 +1,17 @@ +package com.epmet.dto.result; + +import lombok.Data; + +/** + * @ClassName ResiCategoryItemResultDTO + * @Description 居民类别item查询结果 + * @Author wangxianzhang + * @Date 2022/1/18 4:43 下午 + */ +@Data +public class ResiCategoryItemResultDTO { + + private String columnName; + private String label; + +} 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 8cdf6e39de..0ccbfa1655 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 @@ -145,4 +145,11 @@ public interface OperCustomizeOpenFeignClient { @PostMapping("/oper/customize/icresicategorywarnconfig/categorywarnconfiglist/{customerId}") Result> categoryWarnConfigList(@PathVariable String customerId); + /** + * 查询客户下的居民类别item列表 + * @param customerId + * @return + */ + @PostMapping("/oper/customize/icformitem/resi-category-items/list") + Result> listResiCategoryItems(@RequestParam("customer-id") String customerId); } 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 fde2def25e..9dec3f4afe 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 @@ -119,4 +119,9 @@ public class OperCustomizeOpenFeignClientFallback implements OperCustomizeOpenFe public Result> categoryWarnConfigList(String customerId) { return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "categoryWarnConfigList", customerId); } + + @Override + public Result> listResiCategoryItems(String customerId) { + return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "listResiCategoryItems", customerId); + } } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java index 1cfe0d4276..f38a16f323 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java @@ -19,12 +19,10 @@ package com.epmet.controller; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.result.ColumnTableNameResultDTO; +import com.epmet.dto.result.ResiCategoryItemResultDTO; import com.epmet.service.IcFormItemService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -51,4 +49,15 @@ public class IcFormItemController { return new Result>().ok(icFormItemService.getMustColumn(customerId)); } + /** + * 查询客户下的居民类别item列表 + * @param customerId + * @return + */ + @PostMapping("resi-category-items/list") + public Result> listResiCategoryItems(@RequestParam("customer-id") String customerId) { + List r = icFormItemService.listResiCategoryItems(customerId); + return new Result().ok(r); + } + } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormItemService.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormItemService.java index 575e31d6b1..f9eb17f8e3 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormItemService.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcFormItemService.java @@ -19,10 +19,7 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.dto.form.CustomerFormQueryDTO; -import com.epmet.dto.result.ColumnTableNameResultDTO; -import com.epmet.dto.result.ConditionResultDTO; -import com.epmet.dto.result.IcFormResColumnDTO; -import com.epmet.dto.result.TableHeaderResultDTO; +import com.epmet.dto.result.*; import com.epmet.entity.IcFormItemEntity; import java.util.List; @@ -58,4 +55,11 @@ public interface IcFormItemService extends BaseService { * @Description 居民信息新增查询各表必填字段 **/ List getMustColumn(String customerId); + + /** + * 查询 + * @param customerId + * @return + */ + List listResiCategoryItems(String customerId); } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormItemServiceImpl.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormItemServiceImpl.java index 00c79db52c..697aaca89e 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormItemServiceImpl.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormItemServiceImpl.java @@ -17,6 +17,7 @@ package com.epmet.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; @@ -27,10 +28,7 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.dao.IcFormItemDao; import com.epmet.dto.IcFormItemDTO; import com.epmet.dto.form.CustomerFormQueryDTO; -import com.epmet.dto.result.ColumnTableNameResultDTO; -import com.epmet.dto.result.ConditionResultDTO; -import com.epmet.dto.result.IcFormResColumnDTO; -import com.epmet.dto.result.TableHeaderResultDTO; +import com.epmet.dto.result.*; import com.epmet.entity.IcFormItemEntity; import com.epmet.service.IcFormItemService; import org.apache.commons.lang3.StringUtils; @@ -39,6 +37,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 表单项 @@ -118,4 +118,28 @@ public class IcFormItemServiceImpl extends BaseServiceImpl listResiCategoryItems(String customerId) { + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(IcFormItemEntity::getCustomerId, customerId); + query.eq(IcFormItemEntity::getDataAnalyse, 1); + + List categoryItems = baseDao.selectList(query); + + // 如果该客户没配置,那么使用默认配置 + if (CollectionUtils.isEmpty(categoryItems)) { + LambdaQueryWrapper query1 = new LambdaQueryWrapper<>(); + query1.eq(IcFormItemEntity::getDataAnalyse, 1); + query1.eq(IcFormItemEntity::getCustomerId, "default"); + categoryItems = baseDao.selectList(query1); + } + + return categoryItems.stream().map((e) -> { + ResiCategoryItemResultDTO d = new ResiCategoryItemResultDTO(); + d.setColumnName(e.getColumnName()); + d.setLabel(e.getLabel()); + return d; + }).collect(Collectors.toList()); + } } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcUserChangeRecordInitFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcUserChangeRecordInitFormDTO.java new file mode 100644 index 0000000000..0e7a105fe1 --- /dev/null +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcUserChangeRecordInitFormDTO.java @@ -0,0 +1,20 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 【基础信息】变更记录 + * @Author sun + */ +@Data +public class IcUserChangeRecordInitFormDTO implements Serializable { + private static final long serialVersionUID = 9156247659994638103L; + + /** + * 客户Id + */ + private String customerId; + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java new file mode 100644 index 0000000000..436be52b29 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java @@ -0,0 +1,51 @@ +package com.epmet.bean; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * @ClassName ResiImportTransferOldDim + * @Description TODO + * @Author wangxianzhang + * @Date 2022/1/18 5:53 下午 + */ +@Data +public class ResiImportCategoryData { + + private String agencyId; + private String gridId; + private String villageId; + private String buildId; + private String unitId; + private String homeId; + + /** + * key:居民类别在ic_resi_user表中的列名 + * value:居民类别的值。0:否,1:是 + */ + private Map categories = new HashMap<>(); + + public ResiImportCategoryData() { + } + + public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map categories) { + this.agencyId = agencyId; + this.gridId = gridId; + this.villageId = villageId; + this.buildId = buildId; + this.unitId = unitId; + this.homeId = homeId; + this.categories = categories; + } + + public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId) { + this.agencyId = agencyId; + this.gridId = gridId; + this.villageId = villageId; + this.buildId = buildId; + this.unitId = unitId; + this.homeId = homeId; + } +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportChangedData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportChangedData.java new file mode 100644 index 0000000000..ff74a880a0 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportChangedData.java @@ -0,0 +1,20 @@ +package com.epmet.bean; + +import lombok.Data; + +/** + * @ClassName ResiImportTransferCache + * @Description TODO + * @Author wangxianzhang + * @Date 2022/1/18 5:51 下午 + */ +@Data +public class ResiImportChangedData { + private ResiImportCategoryData oldData = new ResiImportCategoryData(); + private ResiImportCategoryData newData = new ResiImportCategoryData(); + + public ResiImportChangedData(ResiImportCategoryData oldData, ResiImportCategoryData newData) { + this.oldData = oldData; + this.newData = newData; + } +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java new file mode 100644 index 0000000000..6203c917a9 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java @@ -0,0 +1,30 @@ +package com.epmet.bean; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * 导入操作中,居民信息操作的分类bean + */ +@Data +public class ResiImportResiCategoryChangedCache { + + /** + * 新增居民 + * Map> + */ + private Map newResis = new HashMap<>(); + + /** + * 调动的居民 + */ + private Map transferedResis = new HashMap<>(); + + /** + * 类别变更的居民 + */ + private Map categoryChangedResis = new HashMap<>(); + +} \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcUserChangeRecordController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcUserChangeRecordController.java index 5ab2dae1eb..7e77f5b6ab 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcUserChangeRecordController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcUserChangeRecordController.java @@ -22,6 +22,7 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.form.IcResiUserChangeRecordFormDTO; import com.epmet.dto.form.IcResiUserTransferFormDTO; +import com.epmet.dto.form.IcUserChangeRecordInitFormDTO; import com.epmet.dto.form.IcUsercategoryAnalysisFormDTO; import com.epmet.dto.result.IcUserChangeRecordResultDTO; import com.epmet.dto.result.IcUsercategoryAnalysisResultDTO; @@ -32,6 +33,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.text.ParseException; + /** * 居民变更记录表 @@ -67,4 +70,14 @@ public class IcUserChangeRecordController { ValidatorUtils.validateEntity(formDTO,IcUsercategoryAnalysisFormDTO.AddUserShowGroup.class,IcUsercategoryAnalysisFormDTO.AddUserInternalGroup.class); return new Result>().ok(icUserChangeRecordService.categoryAnalysisList(formDTO)); } + /** + * @Author sun + * @Description 历史居民数据生成变更记录和变更明细数据 + **/ + @PostMapping("icuserchangerecordinit") + public Result icUserChangeRecordInit(@RequestBody IcUserChangeRecordInitFormDTO formDTO) throws ParseException { + icUserChangeRecordService.icUserChangeRecordInit(formDTO); + return new Result(); + } + } \ No newline at end of file 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 bc292276a2..dbbe42d2c9 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 @@ -232,5 +232,11 @@ public interface IcResiUserDao extends BaseDao { Map getCategoryListMap(@Param("icUserId") String icUserId); + Map selectResiInfoMap(@Param("idCard") String idCard); + List> selectResiUsers(@Param("types")List types,@Param("orgId")String orgId); + + List icUserCustomerIds(); + + List> getIcUserList(@Param("customerId") String customerId); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeDetailedDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeDetailedDao.java index 6ba4093056..b78f1077e2 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeDetailedDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeDetailedDao.java @@ -20,6 +20,7 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.entity.IcUserChangeDetailedEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 变更明细表 @@ -30,5 +31,10 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface IcUserChangeDetailedDao extends BaseDao { - + + /** + * @Author sun + * @Description 删除客户是新增类型的变更明细历史数据 + **/ + void delByCustomerId(@Param("customerId") String customerId, @Param("type") String type); } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeRecordDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeRecordDao.java index 0e82f9564e..9e9b0b06af 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeRecordDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcUserChangeRecordDao.java @@ -43,4 +43,10 @@ public interface IcUserChangeRecordDao extends BaseDao List getList(@Param("icUserId") String icUserId); List categoryAnalysisList(IcUsercategoryAnalysisFormDTO formDTO); + + /** + * @Author sun + * @Description 删除客户是新增类型的变更历史数据 + **/ + void delByCustomerId(@Param("customerId") String customerId, @Param("type") String type); } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeDetailedService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeDetailedService.java index 859a324c82..04f01d63a1 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeDetailedService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeDetailedService.java @@ -29,4 +29,9 @@ import com.epmet.entity.IcUserChangeDetailedEntity; */ public interface IcUserChangeDetailedService extends BaseService { + /** + * @Author sun + * @Description 删除客户是新增类型的变更明细历史数据 + **/ + void delByCustomerId(String customerId, String type); } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeRecordService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeRecordService.java index 252c5abd94..a75d3a1fe1 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeRecordService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcUserChangeRecordService.java @@ -20,11 +20,14 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; import com.epmet.dto.form.IcResiUserChangeRecordFormDTO; +import com.epmet.dto.form.IcUserChangeRecordInitFormDTO; import com.epmet.dto.form.IcUsercategoryAnalysisFormDTO; import com.epmet.dto.result.IcUserChangeRecordResultDTO; import com.epmet.dto.result.IcUsercategoryAnalysisResultDTO; import com.epmet.entity.IcUserChangeRecordEntity; +import java.text.ParseException; + /** * 居民变更记录表 * @@ -45,4 +48,10 @@ public interface IcUserChangeRecordService extends BaseService categoryAnalysisList(IcUsercategoryAnalysisFormDTO formDTO); + + /** + * @Author sun + * @Description 历史居民数据生成变更记录和变更明细数据 + **/ + void icUserChangeRecordInit(IcUserChangeRecordInitFormDTO formDTO) throws ParseException; } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java index 0b554c980e..43e3263c94 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java @@ -6,6 +6,9 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcelFactory; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.epmet.bean.ResiImportCategoryData; +import com.epmet.bean.ResiImportResiCategoryChangedCache; +import com.epmet.bean.ResiImportChangedData; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.dto.result.OptionResultDTO; @@ -22,12 +25,14 @@ import com.epmet.dto.form.LoginUserDetailsFormDTO; import com.epmet.dto.result.FormItemResult; import com.epmet.dto.result.LoginUserDetailsResultDTO; import com.epmet.dto.result.OptionDTO; +import com.epmet.dto.result.ResiCategoryItemResultDTO; import com.epmet.entity.IcResiUserEntity; import com.epmet.enums.IcResiUserTableEnum; import com.epmet.excel.handler.DynamicEasyExcelListener; import com.epmet.feign.EpmetAdminOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.GovOrgOpenFeignClient; +import com.epmet.feign.OperCustomizeOpenFeignClient; import com.epmet.service.IcResiUserImportService; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -61,6 +66,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res public static final ThreadLocal>> errorRows = new ThreadLocal<>(); public static final ThreadLocal>> skipedRows = new ThreadLocal<>(); + /** + * 类别发生变更的居民 + */ + public static final ThreadLocal categoryChangedResi = new ThreadLocal<>(); + + /** + * 居民类别items列表 + */ + public static final ThreadLocal> resiCategoryItemsCache = new ThreadLocal<>(); + /** * key: itemId * value: @@ -85,6 +100,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res @Autowired private IcResiUserDao icResiUserDao; + @Autowired + private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient; + /** * @description 列信息封装 * @@ -168,6 +186,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res */ @Override public void importIcResiInfoFromExcel(List formItemList, String excelPathName, HttpServletResponse response) { + String loginUserId = loginUserUtil.getLoginUserId(); String loginUserApp = loginUserUtil.getLoginUserApp(); String loginUserClient = loginUserUtil.getLoginUserClient(); @@ -185,7 +204,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res String customerId = agencyInfo.getCustomerId(); try { - initThreadLocalRowsStorage(); + initImportThreadLocal(customerId); // 上传主表信息 importIcResiBaseInfoFromExcel(formItemList,excelPathName, IcResiUserTableEnum.IC_RESI_USER.getSheetNo(), IcResiUserTableEnum.IC_RESI_USER.getHeadRowNo(), @@ -209,11 +228,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res } } - //String errors = JSON.toJSONString(errorRows.get()); - //String skipeds = JSON.toJSONString(skipedRows.get()); - - //log.error(errors); - //log.error(skipeds); + // 执行人员类别变更记录 + Map newResis = categoryChangedResi.get().getNewResis(); + Map categoryChangedResis = categoryChangedResi.get().getCategoryChangedResis(); + Map transferedResis = categoryChangedResi.get().getTransferedResis(); try { downLoadResults(response); @@ -223,25 +241,42 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res } finally { skipedRows.remove(); errorRows.remove(); + categoryChangedResi.remove(); + resiCategoryItemsCache.remove(); itemIdAndOptionsCache.invalidateAll(); } } /** - * 暂存rows信息初始化 + * threadLocal初始化 */ - private void initThreadLocalRowsStorage() { + private void initImportThreadLocal(String customerId) { + // 跳过的,不导入的行 Map> skipedRowsMap = new LinkedHashMap<>(); for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) { skipedRowsMap.put(e.getTableName(), new LinkedList<>()); } skipedRows.set(skipedRowsMap); + // 错误信息 Map> errorRowsMap = new LinkedHashMap<>(); for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) { errorRowsMap.put(e.getTableName(), new LinkedList<>()); } errorRows.set(errorRowsMap); + + // 居民类别信息 + ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache(); + categoryChangedResi.set(c); + + List resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId), + ServiceConstant.OPER_CUSTOMIZE_SERVER, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + String.format("【居民信息导入】查询居民类别items失败,customerId:%s", customerId), + "居民信息导入失败"); + + List l = resiCategoryItems.stream().map(ResiCategoryItemResultDTO::getColumnName).collect(Collectors.toList()); + resiCategoryItemsCache.set(l); } /** @@ -374,26 +409,45 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res String idCard = columnAndValues.get("ID_CARD"); LambdaQueryWrapper idCardQuery = new LambdaQueryWrapper<>(); idCardQuery.eq(IcResiUserEntity::getIdCard, idCard); - IcResiUserEntity resiBaseInfo = icResiUserDao.selectOne(idCardQuery); + //IcResiUserEntity resiBaseInfo = icResiUserDao.selectOne(idCardQuery); + + Map existingResiMap = icResiUserDao.selectResiInfoMap(idCard); + + if (existingResiMap != null) { + // 修改居民信息 + icResiUserDao.upTable(tableName, existingResiMap.get("ID"), columnAndValues); - if (resiBaseInfo != null) { - icResiUserDao.upTable(tableName, resiBaseInfo.getId(), columnAndValues); + // 任意组织维度一个发生变化,则放到调动居民缓存中 + ResiImportChangedData transferData; + if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) { + categoryChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData); + } else { + // 组织维度没有发生变化,看是否有居民类型变更 + ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues); + if (d != null) { + categoryChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d); + } + } } else { + // 新增居民 columnAndValues.put("CREATED_BY", currentUserId); columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); icResiUserDao.add(tableName, columnAndValues); - } - //if (icResiUserDao.selectCount(idCardQuery) > 0) { - // //log.info("身份证号为【{}】的居民信息已存在,跳过导入", idCard); - // SkipedRow skipedRow = new SkipedRow(); - // skipedRow.setName(columnAndValues.get("NAME")); - // skipedRow.setIdCard(idCard); - // skipedRow.setInfo("身份证号已存在,跳过导入"); - // skipedRow.setTableName(tableName); - // skipedRows.get().get(IcResiUserTableEnums.IC_RESI_USER.getTableName()).add(skipedRow); - // continue; - //} + Map categories = resiCategoryItemsCache.get() + .stream() + .filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName))) + .collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k))); + + categoryChangedResi.get().getNewResis().put(columnAndValues.get("ID"), + new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"), + columnAndValues.get("GRID_ID"), + columnAndValues.get("VILLAGE_ID"), + columnAndValues.get("BUILD_ID"), + columnAndValues.get("UNIT_ID"), + columnAndValues.get("HOME_ID"), + categories)); + } } catch (Exception e) { String errorMsg; @@ -950,4 +1004,145 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res workbook.write(response.getOutputStream()); } + + public ResiImportCategoryData generateResiImportChangeData(String agencyId, String gridId, String villageId, String buildId, String unitId, + String homeId , Map categories) { + ResiImportCategoryData ricd = new ResiImportCategoryData(); + ricd.setAgencyId(agencyId); + ricd.setBuildId(buildId); + ricd.setGridId(gridId); + ricd.setVillageId(villageId); + ricd.setUnitId(unitId); + ricd.setHomeId(homeId); + ricd.setCategories(categories); + return ricd; + } + + ///** + // * 判断是否有组织维度的变化 + // * @param existingResiMap + // * @param newResiMap + // * @return + // */ + //public boolean isOrgDimChanged(Map existingResiMap, Map newResiMap) { + // return !existingResiMap.get("AGENCY_ID").equals(newResiMap.get("AGENCY_ID")) + // || !existingResiMap.get("GRID_ID").equals(newResiMap.get("GRID_ID")) + // || !existingResiMap.get("VILLAGE_ID").equals(newResiMap.get("VILLAGE_ID")) + // || !existingResiMap.get("BUILD_ID").equals(newResiMap.get("BUILD_ID")) + // || !existingResiMap.get("UNIT_ID").equals(newResiMap.get("UNIT_ID")) + // || !existingResiMap.get("HOME_ID").equals(newResiMap.get("HOME_ID")) + //} + + /** + * 生成导入调动数据 + * @param existingResiMap + * @param newResiMap + * @return + */ + private ResiImportChangedData getResiImportTrasferData(Map existingResiMap, Map newResiMap) { + + // 维度未变化,则返回null + if (existingResiMap.get("AGENCY_ID").equals(newResiMap.get("AGENCY_ID")) + && existingResiMap.get("GRID_ID").equals(newResiMap.get("GRID_ID")) + && existingResiMap.get("VILLAGE_ID").equals(newResiMap.get("VILLAGE_ID")) + && existingResiMap.get("BUILD_ID").equals(newResiMap.get("BUILD_ID")) + && existingResiMap.get("UNIT_ID").equals(newResiMap.get("UNIT_ID")) + && existingResiMap.get("HOME_ID").equals(newResiMap.get("HOME_ID"))) { + + return null; + } + + HashMap existingResiCategories = new HashMap<>(); + HashMap newResiCategories = new HashMap<>(); + + for (String categoryColumnName : resiCategoryItemsCache.get()) { + String oldCategoryValue = existingResiMap.get(categoryColumnName); + String newCategoryValue = newResiMap.get(categoryColumnName); + + if (StringUtils.isNotBlank(oldCategoryValue) && "1".equals(oldCategoryValue)) { + existingResiCategories.put(categoryColumnName, oldCategoryValue); + } + + if (StringUtils.isNotBlank(newCategoryValue) && "1".equals(newCategoryValue)) { + newResiCategories.put(categoryColumnName, newResiMap.get(categoryColumnName)); + } + } + + ResiImportCategoryData oldOne = new ResiImportCategoryData( + existingResiMap.get("AGENCY_ID"), + existingResiMap.get("GRID_ID"), + existingResiMap.get("VILLAGE_ID"), + existingResiMap.get("BUILD_ID"), + existingResiMap.get("UNIT_ID"), + existingResiMap.get("HOME_ID"), + existingResiCategories); + + ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"), + newResiMap.get("GRID_ID"), + newResiMap.get("VILLAGE_ID"), + newResiMap.get("BUILD_ID"), + newResiMap.get("UNIT_ID"), + newResiMap.get("HOME_ID"), + newResiCategories); + + return new ResiImportChangedData(oldOne, newOne); + } + + /** + * 类别变更的居民信息封装 + * @param existingResiMap + * @param newResiMap + * @return + */ + private ResiImportChangedData getResiImportCategoryChangedData(Map existingResiMap, Map newResiMap) { + // 发生变化的类别列明 + HashMap oldCategories = new HashMap<>(); + HashMap newCategories = new HashMap<>(); + + List categoryColumnNames = resiCategoryItemsCache.get(); + for (String categoryColumnName : categoryColumnNames) { + String existingColumnValue = existingResiMap.get(categoryColumnName); + String newColumnValue = newResiMap.get(categoryColumnName); + + if (StringUtils.isAllBlank(existingColumnValue, newColumnValue)) { + // 都为空,则没发生变化 + continue; + } else if (StringUtils.isNoneBlank(existingColumnValue, newColumnValue)) { + // 都不为空,则执行比较 + if (!existingColumnValue.equals(newColumnValue)) { + oldCategories.put(categoryColumnName, existingColumnValue); + newCategories.put(categoryColumnName, newColumnValue); + continue; + } + } else { + // 一个为空一个不为空,则发生变化 + oldCategories.put(categoryColumnName, existingColumnValue); + newCategories.put(categoryColumnName, newColumnValue); + } + + } + + if (oldCategories.size() == 0) { + return null; + } + + ResiImportCategoryData oldOne = new ResiImportCategoryData( + existingResiMap.get("AGENCY_ID"), + existingResiMap.get("GRID_ID"), + existingResiMap.get("VILLAGE_ID"), + existingResiMap.get("BUILD_ID"), + existingResiMap.get("UNIT_ID"), + existingResiMap.get("HOME_ID"), + oldCategories); + + ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"), + newResiMap.get("GRID_ID"), + newResiMap.get("VILLAGE_ID"), + newResiMap.get("BUILD_ID"), + newResiMap.get("UNIT_ID"), + newResiMap.get("HOME_ID"), + newCategories); + + return new ResiImportChangedData(oldOne, newOne); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeDetailedServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeDetailedServiceImpl.java index 6bff100276..c6ffcb3c14 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeDetailedServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeDetailedServiceImpl.java @@ -33,5 +33,12 @@ import org.springframework.stereotype.Service; @Service public class IcUserChangeDetailedServiceImpl extends BaseServiceImpl implements IcUserChangeDetailedService { - + /** + * @Author sun + * @Description 删除客户是新增类型的变更明细历史数据 + **/ + @Override + public void delByCustomerId(String customerId, String type) { + baseDao.delByCustomerId(customerId, type); + } } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java index 9f764e9c05..7a882e807e 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcUserChangeRecordServiceImpl.java @@ -20,29 +20,39 @@ package com.epmet.service.impl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; 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.page.PageData; +import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.utils.Result; +import com.epmet.dao.IcResiUserDao; import com.epmet.dao.IcUserChangeRecordDao; +import com.epmet.dto.IcResiCategoryWarnConfigDTO; import com.epmet.dto.IcUserChangeRecordDTO; import com.epmet.dto.form.IcResiUserChangeRecordFormDTO; +import com.epmet.dto.form.IcUserChangeRecordInitFormDTO; import com.epmet.dto.form.IcUsercategoryAnalysisFormDTO; import com.epmet.dto.result.AllGridsByUserIdResultDTO; import com.epmet.dto.result.BuildingResultDTO; import com.epmet.dto.result.IcUserChangeRecordResultDTO; import com.epmet.dto.result.IcUsercategoryAnalysisResultDTO; +import com.epmet.entity.IcUserChangeDetailedEntity; import com.epmet.entity.IcUserChangeRecordEntity; import com.epmet.feign.GovOrgOpenFeignClient; +import com.epmet.feign.OperCustomizeOpenFeignClient; +import com.epmet.service.IcUserChangeDetailedService; import com.epmet.service.IcUserChangeRecordService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -53,9 +63,18 @@ import java.util.stream.Collectors; * @since v1.0.0 2022-01-14 */ @Service +@Slf4j public class IcUserChangeRecordServiceImpl extends BaseServiceImpl implements IcUserChangeRecordService { @Autowired private GovOrgOpenFeignClient govOrgOpenFeignClient; + @Autowired + private IcResiUserDao icResiUserDao; + @Autowired + private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient; + @Autowired + private IcUserChangeRecordService icUserChangeRecordService; + @Autowired + private IcUserChangeDetailedService icUserChangeDetailedService; /** @@ -118,4 +137,119 @@ public class IcUserChangeRecordServiceImpl extends BaseServiceImpl(list, pageInfo.getTotal()); } + /** + * @Author sun + * @Description 历史居民数据生成变更记录和变更明细数据 + **/ + @Override + public void icUserChangeRecordInit(IcUserChangeRecordInitFormDTO formDTO) throws ParseException { + //1.有客户id按客户执行,没有的按ic_resi_user表有效客户执行 + //入参有客户Id的则按客户Id执行,没有的则全部客户都执行 + if (null != formDTO && StringUtils.isNotBlank(formDTO.getCustomerId())) { + initIcUserChange(formDTO.getCustomerId()); + } else { + List customerIdList = icResiUserDao.icUserCustomerIds(); + for (String customerId : customerIdList) { + try { + //遍历统计每一个客户数据 + initIcUserChange(customerId); + } catch (Exception e) { + log.error("初始客户居民变更记录数据失败,对应客户Id:" + customerId, e); + log.error("Error creating model JSON", e); + } + } + } + } + + /** + * @Author sun + * @Description 按客户初始化客户下居民的变更记录、变更明细数据 + **/ + @Transactional(rollbackFor = Exception.class) + public void initIcUserChange(String customerId) throws ParseException { + log.info("开始初始客户下居民的变更记录和变更明细数据,客户Id->"+customerId); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //1.获取客户居民类别预警配置表数据 + Result> resultList = operCustomizeOpenFeignClient.categoryWarnConfigList(customerId); + if (!resultList.success()) { + throw new RuntimeException("居民信息修改,获取客户居民类别预警配置表数据失败"); + } + List changeList = new ArrayList<>(); + IcUserChangeRecordEntity change = null; + List detailedList = new ArrayList<>(); + IcUserChangeDetailedEntity detailed = null; + //存放工作人员姓名 + Map hash = new HashMap<>(); + //2.分批处理客户下居民数据 + int pageNo = NumConstant.ONE; + List> icUserList = new ArrayList<>(); + do { + //一千条一循环查询客户下居民数据 + PageHelper.startPage(pageNo, NumConstant.ONE_THOUSAND); + icUserList = icResiUserDao.getIcUserList(customerId); + pageNo++; + + //3.遍历封装数据 + for (Map map : icUserList){ + //存放一个人的类别为是的变更明细数据 + List subList = new ArrayList<>(); + String changeId = UUID.randomUUID().toString().replaceAll("-", ""); + for (IcResiCategoryWarnConfigDTO dto : resultList.getData()){ + if(map.containsKey(dto.getColumnName())&&"1".equals(map.get(dto.getColumnName()))){ + detailed = new IcUserChangeDetailedEntity(); + detailed.setCustomerId(customerId); + detailed.setIcUserChangeRecordId(changeId); + detailed.setPids(map.get("PIDS")); + detailed.setAgencyId(map.get("AGENCY_ID")); + detailed.setGridId(map.get("GRID_ID")); + detailed.setNeighborHoodId(map.get("VILLAGE_ID")); + detailed.setBuildingId(map.get("BUILD_ID")); + detailed.setBuildingUnitId(map.get("UNIT_ID")); + detailed.setHouseId(map.get("HOME_ID")); + detailed.setIcUserId(map.get("HOME_ID")); + detailed.setType("add"); + detailed.setTypeName("新增"); + detailed.setFieldName(dto.getColumnName()); + detailed.setValue(1); + detailed.setCreatedBy(map.get("CREATED_BY")); + detailed.setCreatedTime(sdf.parse(map.get("CREATED_TIME"))); + detailed.setUpdatedBy("APP_USER"); + detailed.setUpdatedTime(new Date()); + subList.add(detailed); + } + } + if (subList.size() > NumConstant.ZERO) { + detailedList.addAll(subList); + if (!hash.containsKey(map.get("CREATED_BY"))) { + CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(customerId, map.get("CREATED_BY")); + //被删除或被移除的工作人员,名字为空 + hash.put(map.get("CREATED_BY"), null != staffInfoCache ? staffInfoCache.getRealName() : ""); + } + change = new IcUserChangeRecordEntity(); + change.setId(changeId); + change.setCustomerId(customerId); + change.setOperatorId(map.get("CREATED_BY")); + change.setIcUserId(map.get("ID")); + change.setOperatorName(hash.get(map.get("CREATED_BY"))); + change.setIcUserName(map.get("NAME")); + change.setType("add"); + change.setTypeName("新增"); + change.setBeforeChangeName("-"); + change.setAfterChangeName("-"); + change.setChangeTime(sdf.parse(map.get("CREATED_TIME"))); + change.setCreatedBy(map.get("CREATED_BY")); + change.setCreatedTime(sdf.parse(map.get("CREATED_TIME"))); + change.setUpdatedBy("APP_USER"); + change.setUpdatedTime(new Date()); + changeList.add(change); + } + } + } while (icUserList.size() == NumConstant.ONE_THOUSAND); + //4.批量新增数据,先删后增【只删除新增节点的历史数据】 + baseDao.delByCustomerId(customerId, "add"); + icUserChangeDetailedService.delByCustomerId(customerId, "add"); + icUserChangeRecordService.insertBatch(changeList); + icUserChangeDetailedService.insertBatch(detailedList); + } + } \ No newline at end of file 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 dbba0456fc..99031d8f5e 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 @@ -560,4 +560,59 @@ ORDER BY CREATED_TIME DESC + + + + + + + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeDetailedDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeDetailedDao.xml index acb4aa197b..24fe11c678 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeDetailedDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeDetailedDao.xml @@ -3,5 +3,13 @@ + + DELETE + FROM + ic_user_change_detailed + WHERE + CUSTOMER_ID = #{customerId} + AND type = #{type} + \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeRecordDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeRecordDao.xml index 8dc8770dcb..80bd84eccb 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeRecordDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcUserChangeRecordDao.xml @@ -58,4 +58,14 @@ order by d.CREATED_TIME asc,d.id asc + + + DELETE + FROM + ic_user_change_record + WHERE + CUSTOMER_ID = #{customerId} + AND type = #{type} + + \ No newline at end of file