diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java
index 055d174c2e..3321091b4f 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java
@@ -10,6 +10,7 @@ import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DuplicateKeyException;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@@ -286,6 +287,7 @@ public abstract class BaseRequestLogAspect {
if (object != null
&& !(object instanceof ServletRequest)
&& !(object instanceof ServletResponse)
+ && !(object instanceof MultipartFile)
) {
try {
// 尝试作为json解析
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/ThreadDispatcherConfig.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/ThreadDispatcherConfig.java
new file mode 100644
index 0000000000..1b2d32c2cc
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/ThreadDispatcherConfig.java
@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2018 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.epmet.commons.tools.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.filter.RequestContextFilter;
+import org.springframework.web.servlet.DispatcherServlet;
+
+import javax.annotation.PostConstruct;
+
+
+/**
+ * DESC:设置线程继承属性为true,便于子线程获取到父线程的request,两个都设置为了保险
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 1.0.0
+ */
+@Configuration
+public class ThreadDispatcherConfig {
+
+ @Autowired
+ RequestContextFilter requestContextFilter;
+ @Autowired
+ DispatcherServlet dispatcherServlet;
+
+ @PostConstruct
+ public void init() {
+ // 设置线程继承属性为true,便于子线程获取到父线程的request,两个都设置为了保险。
+ requestContextFilter.setThreadContextInheritable(true);
+ dispatcherServlet.setThreadContextInheritable(true);
+ }
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/Constant.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/Constant.java
index 400e3893e4..77875d5415 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/Constant.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/Constant.java
@@ -171,4 +171,7 @@ public interface Constant {
* 被禁用标识
* */
String DISABLE = "disable";
+
+ String OPITON_SOURCE_REMOTE = "remote";
+ String OPITON_SOURCE_LOCAL = "local";
}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/SpecialCustomerOrgConstant.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/SpecialCustomerOrgConstant.java
new file mode 100644
index 0000000000..05058b1211
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/SpecialCustomerOrgConstant.java
@@ -0,0 +1,31 @@
+package com.epmet.commons.tools.constant;
+
+
+/**
+ * 需要特殊处理的客户id
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 1.0.0
+ */
+public interface SpecialCustomerOrgConstant {
+ /**
+ * 榆山街道组织id
+ */
+ String YUSHAN_AGENCY_ID_PROD="1258587398679126017";
+
+ /**
+ * 南宁社区-开发测试用的
+ */
+ String test="6e511da6816e53af4cda952365a26eb9";
+
+ // /**
+ // * 榆山生产客户id
+ // */
+ // String YUSHAN_PROD_CUSTOMER_ID = "46c55cb862d6d5e6d05d2ab61a1cc07e";
+ //
+ // /**
+ // * 榆山测试客户id
+ // */
+ // String YUSHAN_TEST_CUSTOMER_ID = "a4bbf298d8e427844038cee466f022ef";
+
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java
index a18f34f72b..62d9fef763 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java
@@ -95,6 +95,8 @@ public interface StrConstant {
String SPECIAL_CUSTOMER = "150282ed25c14ff0785e7e06283b6283";
//平音客户
String PY_CUSTOMER = "6f203e30de1a65aab7e69c058826cd80";
+ //平音客户跟组织Id
+ String PY_ROOT_AGENCY = "53613e1c5de6ed473467f0159a10b135";
/**
* 单位积分,积分上限,积分说明,积分事件
@@ -105,4 +107,7 @@ public interface StrConstant {
* 积分规则修改的头
*/
String POINT_CHANGE_HEAD = "修改了%s规则,";
+
+ String YES = "是";
+ String NO = "否";
}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/UpdateUserPointsFormDTO.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/UpdateUserPointsFormDTO.java
new file mode 100644
index 0000000000..1eb3092d07
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/UpdateUserPointsFormDTO.java
@@ -0,0 +1,29 @@
+package com.epmet.commons.tools.dto.form;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UpdateUserPointsFormDTO implements Serializable {
+
+ /**
+ * 行为类型:
+ * 双十信息更新-double_info_update
+ * 网格巡查-grid_patrol
+ * 网格上报事件-grid_report_event
+ * 网格工作上传-grid_work_upload
+ */
+ private String behaviorType;
+
+ /**
+ * 手机号
+ */
+ private String mobile;
+
+ /**
+ * 工作端用户id
+ */
+ private String staffId;
+ private String customerId;
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BehaviorTypeYuShanEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BehaviorTypeYuShanEnum.java
new file mode 100644
index 0000000000..8c5b1caf5b
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BehaviorTypeYuShanEnum.java
@@ -0,0 +1,43 @@
+package com.epmet.commons.tools.enums;
+
+
+/**
+ * 更新用户积分(双实信息更新 网格巡查)
+ * 行为类型枚举类
+ */
+public enum BehaviorTypeYuShanEnum {
+
+ DOUBLE_INFO_UPDATE("double_info_update", "双十信息更新"),
+ GRID_PATROL("grid_patrol", "网格巡查"),
+ GRID_REPORT_EVENT("grid_report_event", "网格上报事件"),
+ GRID_WORK_UPLOAD("grid_work_upload", "网格工作上传"),
+ ;
+
+ private String code;
+ private String name;
+
+
+ BehaviorTypeYuShanEnum(String code, String name) {
+ this.code = code;
+ this.name = name;
+ }
+
+ public static BehaviorTypeYuShanEnum getEnum(String code) {
+ BehaviorTypeYuShanEnum[] values = BehaviorTypeYuShanEnum.values();
+ for (BehaviorTypeYuShanEnum value : values) {
+ if (value.getCode().equals(code)) {
+ return value;
+ }
+ }
+ return null;
+ }
+
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/ExternalApiEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/ExternalApiEnum.java
new file mode 100644
index 0000000000..ed916dd6df
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/ExternalApiEnum.java
@@ -0,0 +1,35 @@
+package com.epmet.commons.tools.enums;
+
+/**
+ * 外部api
+ */
+public enum ExternalApiEnum {
+
+ /**
+ * 榆山-测试服务器地址
+ */
+ UPDATE_USER_POINTS("/api/points/behavior/updateUserPoints","更新用户积分(双实信息更新 网格巡查)","http://yapi.elinkservice.cn/project/57/interface/api/7466");
+
+ private String apiPath;
+ private String desc;
+ private String descUrl;
+
+
+ ExternalApiEnum(String apiPath, String desc,String descUrl) {
+ this.apiPath = apiPath;
+ this.desc = desc;
+ this.descUrl=descUrl;
+ }
+
+ public String getApiPath() {
+ return apiPath;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public String getDescUrl() {
+ return descUrl;
+ }
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/ExternalServerEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/ExternalServerEnum.java
new file mode 100644
index 0000000000..119a222e27
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/ExternalServerEnum.java
@@ -0,0 +1,55 @@
+package com.epmet.commons.tools.enums;
+
+import com.epmet.commons.tools.constant.StrConstant;
+
+
+/**
+ * 外部客户的服务器地址
+ */
+public enum ExternalServerEnum {
+ DEV_TEST("45687aa479955f9d06204d415238f7cc", "https://epdc-api-test.elinkservice.cn/epdc-api"),
+ /**
+ * 榆山-测试服务器地址
+ */
+ YUSHAN_TEST("a4bbf298d8e427844038cee466f022ef", "https://epdc-api-test.elinkservice.cn/epdc-api"),
+ /**
+ * 榆山-生产服务器地址
+ */
+ YUSHAN_PROD("46c55cb862d6d5e6d05d2ab61a1cc07e", "https://epdc-yushan.elinkservice.cn/epdc-api");
+
+
+ private String customerId;
+ private String url;
+
+
+ ExternalServerEnum(String customerId, String url) {
+ this.customerId = customerId;
+ this.url = url;
+ }
+
+ public static String getUrl(String customerId) {
+ ExternalServerEnum[] array = values();
+ for (ExternalServerEnum enumValue : array) {
+ if (enumValue.getCustomerId().equals(customerId)) {
+ return enumValue.getUrl();
+ }
+ }
+ return StrConstant.EPMETY_STR;
+ }
+
+ public String getCustomerId() {
+ return customerId;
+ }
+
+ public void setCustomerId(String customerId) {
+ this.customerId = customerId;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java
index d0ba1f61de..9f6be36819 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java
@@ -66,6 +66,7 @@ public class LogMsgSendFilter extends LevelFilter {
}
if (StringUtils.isNotBlank(activeEnv)) {
+ stringBuilder.append("告警环境:").append(activeEnv);
stringBuilder.append("\n");
}
@@ -112,7 +113,6 @@ public class LogMsgSendFilter extends LevelFilter {
if (!flag) {
logger.warn("msgSender.sendMsg fail,param:{}", stringBuilder.toString());
}
- stringBuilder.append("告警环境:").append(activeEnv);
} catch (Exception e) {
logger.warn("decide exception", e);
}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
index dc3fb232bc..0798627046 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
@@ -640,4 +640,100 @@ public class RedisKeys {
public static String getHouseInfoCacheKey(String houseId,String customerId){
return rootPrefix.concat("house:").concat(customerId).concat(":").concat(houseId);
}
+
+ /**
+ * 居民导入-缓存目录key
+ * @param importTag
+ * @return
+ */
+ public static String icResiImportBaseKey(String importTag) {
+ return rootPrefix.concat("resi:").concat("import:").concat(importTag);
+ }
+
+ /**
+ * 居民导入-数据分类的key
+ * add:新增居民
+ * category:类别变更
+ * transfer:调动
+ * @param importTag
+ * @param type
+ * @return
+ */
+ public static String icResiImportTypeKey(String importTag, String type) {
+ return icResiImportBaseKey(importTag).concat(":").concat(type);
+ }
+
+ /**
+ * 居民导入-详细信息key
+ * @param importTag
+ * @param type
+ * @param resiId
+ * @return
+ */
+ public static String icResiImportResiCategoryKey(String importTag, String type, String resiId) {
+ return icResiImportTypeKey(importTag, type).concat(":").concat(resiId);
+ }
+
+ /**
+ * @Description 临时房屋缓存key
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 9:38 上午
+ */
+ public static String getTemporaryHouseInfoCacheKey(String customerId,String userId){
+ return rootPrefix.concat("temporary:").concat("temporaryHouse:").concat(customerId).concat(":").concat(userId);
+ }
+
+ /**
+ * @Description 临时网格缓存key
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 9:38 上午
+ */
+ public static String getTemporaryGridInfoCacheKey(String customerId,String userId){
+ return rootPrefix.concat("temporary:").concat("temporaryGrid:").concat(customerId).concat(":").concat(userId);
+ }
+
+ /**
+ * @Description 临时小区缓存key
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 9:39 上午
+ */
+ public static String getTemporaryNeighborHoodInfoCacheKey(String customerId,String userId){
+ return rootPrefix.concat("temporary:").concat("temporaryNeighborHood:").concat(customerId).concat(":").concat(userId);
+ }
+
+ /**
+ * @Description 临时楼栋缓存key
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 9:39 上午
+ */
+ public static String getTemporaryBuildingInfoCacheKey(String customerId,String userId){
+ return rootPrefix.concat("temporary:").concat("temporaryBuilding:").concat(customerId).concat(":").concat(userId);
+ }
+
+ /**
+ * @Description 临时楼栋单元缓存key
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:54 下午
+ */
+ public static String getTemporaryBuildingUnitInfoCacheKey(String customerId,String userId){
+ return rootPrefix.concat("temporary:").concat("temporaryBuildingUnit:").concat(customerId).concat(":").concat(userId);
+ }
+
+ public static String getTemporaryImportResultCacheKey(String customerId,String userId){
+ return rootPrefix.concat("temporary:").concat("temporaryResult:").concat(customerId).concat(":").concat(userId);
+ }
+
+ public static String getCustomerMenuList(String customerId, Integer type) {
+ return rootPrefix.concat("oper:access:nav:customerId:").concat(customerId).concat(":type:")+type;
+ }
}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YuShanSysApiService.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YuShanSysApiService.java
new file mode 100644
index 0000000000..9779c6d990
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YuShanSysApiService.java
@@ -0,0 +1,72 @@
+package com.epmet.commons.tools.utils;
+
+
+import com.alibaba.fastjson.JSON;
+import com.epmet.commons.tools.constant.SpecialCustomerOrgConstant;
+import com.epmet.commons.tools.dto.form.UpdateUserPointsFormDTO;
+import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
+import com.epmet.commons.tools.enums.ExternalApiEnum;
+import com.epmet.commons.tools.enums.ExternalServerEnum;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.RenException;
+import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * e事通调用榆山api
+ *
+ * @author yinzuomei
+ * @date 2022-02-16
+ **/
+@Service
+@Slf4j
+public class YuShanSysApiService {
+
+
+ /**
+ * 更新用户积分(双实信息更新 网格巡查)
+ *
+ * @return
+ */
+ @Async
+ public void updateUserPoints(String customerId, List paramList) {
+ if (StringUtils.isBlank(customerId) || CollectionUtils.isEmpty(paramList)) {
+ throw new RenException("参数错误");
+ }
+ String serverUrl = ExternalServerEnum.getUrl(customerId);
+ if (StringUtils.isBlank(serverUrl)) {
+ log.warn(String.format("当前客户:%s,未配置服务器地址", customerId));
+ return;
+ }
+ String apiPath = serverUrl.concat(ExternalApiEnum.UPDATE_USER_POINTS.getApiPath());
+ log.info(String.format("updateUserPoints 接口路径:%s", apiPath));
+ for (UpdateUserPointsFormDTO formDTO : paramList) {
+ try {
+ CustomerStaffInfoCacheResult staff = CustomerStaffRedis.getStaffInfo(customerId, formDTO.getStaffId());
+ //只有榆山街道的工作人员才调用
+ if (null != staff && (staff.getAgencyId().equals(SpecialCustomerOrgConstant.YUSHAN_AGENCY_ID_PROD) || staff.getAgencyPIds().contains(SpecialCustomerOrgConstant.YUSHAN_AGENCY_ID_PROD))) {
+ formDTO.setMobile(staff.getMobile());
+ //测试用手机号
+ // formDTO.setMobile("13205302682");
+ Result res = HttpClientManager.getInstance().sendPostByJSON(apiPath, JSON.toJSONString(formDTO));
+ Result result = JSON.parseObject(res.getData(), Result.class);
+ log.info(String.format("updateUserPoints 入参:%s;返参:%s", JSON.toJSONString(formDTO),JSON.toJSONString(result)));
+ if (!result.success()) {
+ log.warn("updateUserPoints failed:{}", JSON.toJSONString(result));
+ }
+ }
+ } catch (Exception e) {
+ log.warn("updateUserPoints exception 入参:{}", JSON.toJSONString(formDTO));
+ throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
+ }
+ }
+ }
+
+
+}
diff --git a/epmet-gateway/src/main/java/com/epmet/GatewayApplication.java b/epmet-gateway/src/main/java/com/epmet/GatewayApplication.java
index a1630c821e..064b59610e 100644
--- a/epmet-gateway/src/main/java/com/epmet/GatewayApplication.java
+++ b/epmet-gateway/src/main/java/com/epmet/GatewayApplication.java
@@ -10,6 +10,7 @@ package com.epmet;
import com.epmet.commons.tools.aspect.ServletExceptionHandler;
import com.epmet.commons.tools.config.RedissonConfig;
+import com.epmet.commons.tools.config.ThreadDispatcherConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@@ -27,7 +28,7 @@ import org.springframework.context.annotation.FilterType;
@EnableDiscoveryClient
@EnableFeignClients
//@ServletComponentScan
-@ComponentScan(basePackages = {"com.epmet.*"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {RedissonConfig.class, ServletExceptionHandler.class}))
+@ComponentScan(basePackages = {"com.epmet.*"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {RedissonConfig.class, ThreadDispatcherConfig.class, ServletExceptionHandler.class}))
public class GatewayApplication {
public static void main(String[] args) {
diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
index b60e166a5f..527b6a484b 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
+++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
@@ -1874,6 +1874,7 @@ public class DataStatsServiceImpl implements DataStatsService, ResultDataResolve
*/
@Override
public void CustomerDataManage(CustomerDataManageFormDTO formDTO, HttpServletResponse response) throws Exception {
+ String openTime = formDTO.getStartTime();
List result = operateExport(formDTO).getList();
if (!CollectionUtils.isEmpty(result)){
CustomerDataManageResultDTO.CustomerDataManage c = new CustomerDataManageResultDTO.CustomerDataManage();
@@ -1893,6 +1894,7 @@ public class DataStatsServiceImpl implements DataStatsService, ResultDataResolve
c.setPatrolDuration(getHm(c.getPatrolDurationInteger()));
result.add(c);
}
+ formDTO.setStartTime(openTime);
String fileName = excelName(formDTO);
ExcelUtils.exportExcelToTargetDisposeAll(response,fileName,result, CustomerDataManageExcel.class);
}
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/StatsStaffPatrolRecordDailyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/StatsStaffPatrolRecordDailyDao.java
index 42233f31d6..7c37db8f28 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/StatsStaffPatrolRecordDailyDao.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/StatsStaffPatrolRecordDailyDao.java
@@ -43,7 +43,7 @@ public interface StatsStaffPatrolRecordDailyDao extends BaseDao insertList);
+ Integer insertBatchOrUpdate(@Param("list") List insertList);
/**
* desc: 删除内部数据
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java
index c4c0138ad0..a096dc3307 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.constants.MQUserPropertys;
import com.epmet.commons.rocketmq.messages.DisputeProcessMQMsg;
import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg;
+import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
@@ -111,12 +112,19 @@ public class ProjectChangedCustomListener implements MessageListenerConcurrently
String customerId = msgObj.getCustomerId();
distributedLock = SpringContextUtils.getBean(DistributedLock.class);
lock = distributedLock.getLock(String.format("lock:project_changed:%s:%s", customerId, msgObj.getProjectId())
- ,30L, 30L, TimeUnit.SECONDS);
+ ,60L, 60L, TimeUnit.SECONDS);
if (StringUtils.isBlank(customerId)){
logger.error("consumer project_changed fail,msg:{}",customerId);
return;
}
+ //睡一秒 要不然那边执行不完
+ try {
+ Thread.sleep(NumConstant.ONE_THOUSAND);
+ } catch (InterruptedException e) {
+ log.error("consumeMessage exception",e);
+ }
+
ExtractOriginFormDTO extractOriginFormDTO = new ExtractOriginFormDTO();
extractOriginFormDTO.setCustomerId(customerId);
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java
index 15d3ba8b06..0b0d0d5f1c 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java
@@ -130,6 +130,7 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
List insertList = buildInitPatrolStatsData(formDTO, allGridMembers);
Map yesterdayStatsMap = insertList.stream().collect(Collectors.toMap(o -> o.getGridId() + o.getStaffId(), o -> o, (o1, o2) -> o1));
+ log.debug("reloadStaffPatrolStatsData 所有网格员数据{}",JSON.toJSONString(yesterdayStatsMap));
//获取昨日的巡查记录
List yesterdayPatrolList = userService.selectStaffPatrolListByDateId(formDTO.getCustomerId(), formDTO.getDateId());
@@ -138,7 +139,7 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
//获取昨日的例行工作数据
List yesterdayWorkList = userService.selectRoutineWorkListByDateId(formDTO.getCustomerId(), formDTO.getDateId());
-
+ log.debug("reloadStaffPatrolStatsData 例行工作数据数据{}",JSON.toJSONString(yesterdayWorkList));
//遍历网格员 设置其 巡查次数 巡查时常 上报项目数
yesterdayPatrolList.forEach(patrolRecord -> {
String key = patrolRecord.getGrid().concat(patrolRecord.getStaffId());
@@ -172,7 +173,7 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
String unqPatrolKey = getUnqPatrolKey(patrol.getGrid(), patrol.getStaffId());
StatsStaffPatrolRecordDailyDTO recordDailyDTO = yesterdayStatsMap.get(unqPatrolKey);
if (recordDailyDTO == null) {
- log.error("have project data but have any patrolRecordDaily,gridId:{},staffId:{}", patrol.getGrid(), patrol.getStaffId());
+ log.error("reloadStaffPatrolStatsData have project data but have any patrolRecordDaily,gridId:{},staffId:{}", patrol.getGrid(), patrol.getStaffId());
return;
}
@@ -181,17 +182,17 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
});
});
yesterdayWorkList.forEach(work->{
- String key = work.getGridId().concat(work.getUserId());
+ String key = getUnqPatrolKey(work.getGridId(),work.getUserId());
StatsStaffPatrolRecordDailyDTO patrolRecordDailyDTO = yesterdayStatsMap.get(key);
if (patrolRecordDailyDTO == null){
+ log.warn("reloadStaffPatrolStatsData getRoutineWorkCount key{} not exist in gridMembers",key);
return;
}
patrolRecordDailyDTO.setRoutineWorkCount(patrolRecordDailyDTO.getRoutineWorkCount() + NumConstant.ONE);
-
});
- Integer effectRow = statsStaffPatrolService.delAndInsertBatch(formDTO, insertList);
- log.debug("initStaffPatrolStats insert rows:{}", effectRow);
+ Integer effectRow = statsStaffPatrolService.insertBatchOrUpdate(formDTO, insertList);
+ log.info("initStaffPatrolStats insert rows:{}", effectRow);
}
/**
@@ -218,7 +219,7 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
private void initStaffPatrolTodayData(StaffPatrolStatsFormDTO formDTO, List allGridMembers) {
log.info("initStaffPatrolTodayData param:{}", JSON.toJSONString(formDTO));
List insertList = buildInitPatrolStatsData(formDTO, allGridMembers);
- Integer effectRow = statsStaffPatrolService.delAndInsertBatch(formDTO, insertList);
+ Integer effectRow = statsStaffPatrolService.insertBatchOrUpdate(formDTO, insertList);
log.debug("initStaffPatrolStats insert rows:{}", effectRow);
}
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
index a3ccd6c5a1..0f3f9de0ce 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
@@ -3,6 +3,7 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.DateUtils;
@@ -252,7 +253,8 @@ public class StatsUserServiceImpl implements StatsUserService {
m.setSourceType("external");
m.setParentCustomerId(crm.getParentCustomerId());
m.setPid(pid.toString());
- m.setPids(pids.toString());
+ //20220214 上报数据的pids是从街道开始,需要在前边拼接上平阴县的id才能保证后续的查询用like时可以筛选出数据 sun
+ m.setPids(StrConstant.PY_ROOT_AGENCY + ":" + pids.toString());
} else {
log.warn(String.format("网格员数据分析上报,数据错误,根据agencyId未查询到组织信息,客户Id->%s,组织Id->%s", m.getCustomerId(), m.getAgencyId()));
iterator.remove();
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/StatsStaffPatrolService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/StatsStaffPatrolService.java
index 1f1f9cefff..7a50ff5546 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/StatsStaffPatrolService.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/StatsStaffPatrolService.java
@@ -10,7 +10,7 @@ import java.util.List;
*/
public interface StatsStaffPatrolService {
- Integer delAndInsertBatch(StaffPatrolStatsFormDTO formDTO, List insertList);
+ Integer insertBatchOrUpdate(StaffPatrolStatsFormDTO formDTO, List insertList);
List selectData(String customerId, String yesterdayStr);
}
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/StatsStaffPatrolServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/StatsStaffPatrolServiceImpl.java
index 97bc67ed86..32145d5c76 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/StatsStaffPatrolServiceImpl.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/StatsStaffPatrolServiceImpl.java
@@ -1,6 +1,5 @@
package com.epmet.service.user.impl;
-import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.utils.ConvertUtils;
@@ -33,10 +32,8 @@ public class StatsStaffPatrolServiceImpl implements StatsStaffPatrolService {
@Transactional(rollbackFor = Exception.class)
@Override
- public Integer delAndInsertBatch(StaffPatrolStatsFormDTO formDTO, List insertList) {
- int delete = statsStaffPatrolRecordDailyDao.deleteInternal(formDTO);
- log.debug("delAndInsertBatch delete:{},param:{}", delete, JSON.toJSONString(formDTO));
- return statsStaffPatrolRecordDailyDao.insertBatch(insertList);
+ public Integer insertBatchOrUpdate(StaffPatrolStatsFormDTO formDTO, List insertList) {
+ return statsStaffPatrolRecordDailyDao.insertBatchOrUpdate(insertList);
}
@Override
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/StatsStaffPatrolRecordDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/StatsStaffPatrolRecordDailyDao.xml
index 7e00ed10c8..ebf1914935 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/StatsStaffPatrolRecordDailyDao.xml
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/StatsStaffPatrolRecordDailyDao.xml
@@ -2,7 +2,7 @@
-
+
insert into stats_staff_patrol_record_daily
(
ID,
@@ -63,6 +63,11 @@
ON DUPLICATE KEY UPDATE
PATROL_TOTAL = values(PATROL_TOTAL),
TOTAL_TIME = values(TOTAL_TIME),
+ LATEST_PATROL_STATUS = values(LATEST_PATROL_STATUS),
+ LATEST_PATROL_TIME = values(LATEST_PATROL_TIME),
+ REPORT_PROJECT_COUNT = values(REPORT_PROJECT_COUNT),
+ ROUTINE_WORK_COUNT = values(ROUTINE_WORK_COUNT),
+ UPDATED_TIME = now(),
UPDATED_BY = VALUES(UPDATED_BY)
diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java
index 786fc77928..2b07959e33 100644
--- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java
+++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java
@@ -20,6 +20,7 @@ package com.epmet.controller;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ExcelPoiUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
@@ -27,10 +28,8 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.AddSocietyOrgFormDTO;
import com.epmet.dto.form.EditSocietyOrgFormDTO;
-import com.epmet.dto.form.GetListPlaceOrgFormDTO;
import com.epmet.dto.form.GetListSocietyOrgFormDTO;
import com.epmet.dto.form.demand.ServiceQueryFormDTO;
-import com.epmet.dto.result.GetListPlaceOrgResultDTO;
import com.epmet.dto.result.GetListSocietyOrgResultDTO;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.excel.IcSocietyOrgExcel;
@@ -164,9 +163,9 @@ public class IcSocietyOrgController {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
- return new Result().error(9999, str + "第" + subList + "行未成功!");
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);
}
-}
\ No newline at end of file
+}
diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java
index cdfa84d5e2..4cea3f9136 100644
--- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java
+++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java
@@ -24,6 +24,7 @@ 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.dto.result.CustomerStaffInfoCacheResult;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto;
@@ -267,7 +268,7 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl list = result.stream().map(item -> {
@@ -296,7 +297,7 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl list = result.stream().map(item -> {
@@ -405,7 +405,7 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl govMenuDTOS) {
+ if (checkParam(customerId, type)) {
+ String key = RedisKeys.getCustomerMenuList(customerId, type);
+ redisUtils.set(key, govMenuDTOS, RedisUtils.DEFAULT_EXPIRE);
+ }
+ }
+ /**
+ * desc:获取客户菜单缓存
+ * @param customerId
+ * @param type
+ * @see com.epmet.enums.MenuTypeEnum
+ */
+ public List getCustomerMenuList(String customerId, Integer type) {
+ if (checkParam(customerId, type)) {
+ String key = RedisKeys.getCustomerMenuList(customerId, type);
+ return (List) redisUtils.get(key);
+ }
+ return null;
}
- public void set(){
+ /**
+ * desc:删除客户菜单缓存
+ * @param customerId
+ * @param type
+ * @see com.epmet.enums.MenuTypeEnum
+ */
+ public void delCustomerMenu(String customerId, Integer type) {
+ if (checkParam(customerId, type)) {
+ String key = RedisKeys.getCustomerMenuList(customerId, type);
+ redisUtils.delete(key);
+ }
}
- public String get(String id){
- return null;
+ private boolean checkParam(String customerId, Integer type) {
+ if (StringUtils.isBlank(customerId) || type == null){
+ log.warn("checkParam fail, param is null");
+ return false;
+ }
+ return true;
}
-
-}
\ No newline at end of file
+}
diff --git a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/redis/GovMenuRedis.java b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/redis/GovMenuRedis.java
index 361d6c3014..b96405de2e 100644
--- a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/redis/GovMenuRedis.java
+++ b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/redis/GovMenuRedis.java
@@ -70,5 +70,4 @@ public class GovMenuRedis {
String key = RedisKeys.getUserPermissionsKey(userId, app, client);
return (Set)redisUtils.get(key);
}
-
-}
\ No newline at end of file
+}
diff --git a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovCustomerMenuServiceImpl.java b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovCustomerMenuServiceImpl.java
index 8d7ef26acc..95e4f2f8d2 100644
--- a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovCustomerMenuServiceImpl.java
+++ b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovCustomerMenuServiceImpl.java
@@ -20,14 +20,15 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
-import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.GovCustomerMenuDao;
import com.epmet.dto.GovCustomerMenuDTO;
import com.epmet.dto.form.MenuConfigFormDTO;
import com.epmet.entity.GovCustomerMenuEntity;
+import com.epmet.enums.MenuTypeEnum;
import com.epmet.redis.GovCustomerMenuRedis;
import com.epmet.service.GovCustomerMenuService;
import org.apache.commons.lang3.StringUtils;
@@ -105,6 +106,7 @@ public class GovCustomerMenuServiceImpl extends BaseServiceImpl govCustomerMenuRedis.delCustomerMenu(customerId, MenuTypeEnum.MENU.value()));
}
@Override
diff --git a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovMenuServiceImpl.java b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovMenuServiceImpl.java
index 4e4c142b55..eb9467e926 100644
--- a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovMenuServiceImpl.java
+++ b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/GovMenuServiceImpl.java
@@ -33,7 +33,7 @@ import com.epmet.dao.GovMenuDao;
import com.epmet.dto.GovMenuDTO;
import com.epmet.entity.GovMenuEntity;
import com.epmet.enums.MenuTypeEnum;
-import com.epmet.feign.EpmetUserFeignClient;
+import com.epmet.redis.GovCustomerMenuRedis;
import com.epmet.redis.GovMenuRedis;
import com.epmet.service.*;
import org.apache.commons.lang3.StringUtils;
@@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory;
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.*;
@@ -57,7 +58,7 @@ public class GovMenuServiceImpl extends BaseServiceImpl getCustomerMenuList(String customerId, Integer type) {
+ List govMenuDTOS = govCustomerMenuRedis.getCustomerMenuList(customerId,type);
+ if (!CollectionUtils.isEmpty(govMenuDTOS)){
+ return govMenuDTOS;
+ }
List menuList = baseDao.getCustomerMenuList(customerId, type, HttpContextUtils.getLanguage());
List dtoList = ConvertUtils.sourceToTarget(menuList, GovMenuDTO.class);
- return TreeUtils.buildTree(dtoList);
+ govMenuDTOS = TreeUtils.buildTree(dtoList);
+ govCustomerMenuRedis.setCustomerMenuList(customerId,type,govMenuDTOS);
+ return govMenuDTOS;
}
@Override
diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java
new file mode 100644
index 0000000000..9039cda6ef
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java
@@ -0,0 +1,150 @@
+package com.epmet.dto;
+
+import com.epmet.commons.tools.constant.NumConstant;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/13 4:32 下午
+ * @DESC
+ */
+@Data
+public class ImportGeneralDTO implements Serializable {
+
+ private static final long serialVersionUID = -345610717773879687L;
+
+ /**
+ * 组织名、ID
+ */
+ private String agencyName;
+ private String agencyId;
+
+ /**
+ * agencyId的pid
+ */
+ private String pid;
+ private String pids;
+
+ /**
+ * 网格名、ID
+ */
+ private String gridName;
+ private String gridId;
+
+ /**
+ * 小区名、ID
+ */
+ private String neighborHoodName;
+ private String neighborHoodId;
+
+ /**
+ * 所属楼栋、ID
+ */
+ private String buildingName;
+ private String buildingId;
+
+ /**
+ * 房屋类型
+ */
+ private String type;
+
+ /**
+ * 单元数
+ */
+ private Integer totalUnitNum = NumConstant.ONE;
+
+ /**
+ * 层数
+ */
+ private Integer totalFloorNum;
+
+ /**
+ * 户数
+ */
+ private Integer totalHouseNum;
+
+ /**
+ * 单元号、ID
+ */
+ private Integer buildingUnit;
+ private String buildingUnitId;
+
+ /**
+ * 门牌号
+ */
+ private String doorName;
+
+ /**
+ * 房屋类型
+ */
+ private String houseType;
+
+ /**
+ * 房屋用途
+ */
+ private String purpose;
+
+ /**
+ * 是否出租
+ */
+ private String rentFlagString;
+ private Integer rentFlag;
+
+ /**
+ * 姓名
+ */
+ private String ownerName;
+
+ /**
+ * 电话
+ */
+ private String ownerPhone;
+
+ /**
+ * 身份证
+ */
+ private String ownerIdCard;
+
+ /**
+ * 行号
+ */
+ private Integer num;
+
+ /**
+ * 关联物业
+ */
+ private String propertyName;
+
+ /**
+ * 详细地址
+ */
+ private String address;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 房屋ID
+ */
+ private String houseId;
+
+ private String houseName;
+
+ private String customerId;
+
+ private Boolean existStatus = false;
+
+ /**
+ * 楼栋重复状态
+ */
+ private Boolean buildingExistStatus = false;
+
+ /**
+ * 小区重复状态
+ */
+ private Boolean neighborHoodExistStatus = false;
+}
diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/NeighborHoodAndManagementDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/NeighborHoodAndManagementDTO.java
new file mode 100644
index 0000000000..babc828970
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/NeighborHoodAndManagementDTO.java
@@ -0,0 +1,42 @@
+package com.epmet.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/13 8:51 上午
+ * @DESC
+ */
+@Data
+public class NeighborHoodAndManagementDTO implements Serializable {
+
+ private static final long serialVersionUID = -7500263771019585308L;
+
+ private String gridId;
+
+ /**
+ * 小区ID
+ */
+ private String id;
+
+ private String gridName;
+
+ /**
+ * 小区名字
+ */
+ private String neighborHoodName;
+ private String neighborHoodId;
+
+ /**
+ * 物业ID
+ */
+ private String propertyId;
+
+ /**
+ * 物业名字
+ */
+ private String propertyName;
+
+}
diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/ImportInfoFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/ImportInfoFormDTO.java
new file mode 100644
index 0000000000..ca83776f30
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/ImportInfoFormDTO.java
@@ -0,0 +1,34 @@
+package com.epmet.dto.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/12 10:38 上午
+ * @DESC
+ */
+@Data
+public class ImportInfoFormDTO implements Serializable {
+
+ private static final long serialVersionUID = -3978921489168201769L;
+
+ public interface ImportInfoForm{}
+
+ /**
+ * 选中的组织ID
+ */
+ @NotBlank(message = "orgId不能为空",groups = ImportInfoForm.class)
+ private String orgId;
+
+ /**
+ * 组织类型 agency:组织,grid:网格,neighborHood:小区,building:楼栋
+ */
+ @NotBlank(message = "orgType不能为空",groups = ImportInfoForm.class)
+ private String orgType;
+
+ private String customerId;
+ private String userId;
+}
diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ImportResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ImportResultDTO.java
new file mode 100644
index 0000000000..ddaa2d5bff
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ImportResultDTO.java
@@ -0,0 +1,31 @@
+package com.epmet.dto.result;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/15 9:25 上午
+ * @DESC
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImportResultDTO implements Serializable {
+
+ private static final long serialVersionUID = -5817164530837181890L;
+
+ /**
+ * 未导入的行号
+ */
+ private List nums;
+
+ /**
+ * 总条数
+ */
+ private Integer num;
+}
diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/InfoByNamesResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/InfoByNamesResultDTO.java
new file mode 100644
index 0000000000..00e92b3ece
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/InfoByNamesResultDTO.java
@@ -0,0 +1,31 @@
+package com.epmet.dto.result;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/12 2:15 下午
+ * @DESC
+ */
+@Data
+public class InfoByNamesResultDTO implements Serializable {
+
+ private static final long serialVersionUID = 264490056071606346L;
+
+ private String gridId;
+ private String agencyId;
+
+ private String gridName;
+ private String agencyName;
+
+ private String pid;
+
+ private String pids;
+
+ private String parentAgencyId;
+
+ private String agencyPids;
+
+}
diff --git a/epmet-module/gov-org/gov-org-server/pom.xml b/epmet-module/gov-org/gov-org-server/pom.xml
index 9bd6cedb44..094292fe13 100644
--- a/epmet-module/gov-org/gov-org-server/pom.xml
+++ b/epmet-module/gov-org/gov-org-server/pom.xml
@@ -125,6 +125,12 @@
2.0.0
compile
+
+ com.alibaba
+ easyexcel
+ 3.0.3
+ compile
+
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java
index 4374038f6f..bfe1fbe93c 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java
@@ -16,4 +16,7 @@ public interface CustomerGridConstant {
String DEPT = "dept";
String GRID = "grid";
+
+ String NEIGHBORHOOD = "neighborHood";
+ String BUILDING = "building";
}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
index adaa3ed3f1..2ac1605193 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@@ -31,6 +32,7 @@ import com.epmet.dao.IcBuildingUnitDao;
import com.epmet.dto.BuildingTreeLevelDTO;
import com.epmet.dto.form.IcBulidingFormDTO;
import com.epmet.dto.form.IcBulidingUnitFormDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.dto.result.BuildingResultPagedDTO;
@@ -194,11 +196,32 @@ public class BuildingController {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
- return new Result().error(9999, str+"第"+subList+"行未成功!");
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str+"第"+subList+"行未成功!");
}
return new Result().ok(str);
}
+ /**
+ * @Description 楼宇导入
+ * @param tokenDTO
+ * @param file
+ * @param orgId
+ * @param orgType
+ * @author zxc
+ * @date 2022/2/13 10:18 上午
+ */
+ @PostMapping("buildingimport")
+ public Result buildingImportExcel(@LoginUser TokenDto tokenDTO, @RequestParam("file") MultipartFile file,
+ @RequestParam("orgId")String orgId,
+ @RequestParam("orgType")String orgType) throws IOException{
+ ImportInfoFormDTO formDTO = new ImportInfoFormDTO();
+ formDTO.setCustomerId(tokenDTO.getCustomerId());
+ formDTO.setOrgType(orgType);
+ formDTO.setOrgId(orgId);
+ formDTO.setUserId(tokenDTO.getUserId());
+ return buildingService.buildingImportExcel(formDTO,file);
+ }
+
/**
* 查看楼宇单元列表
* @param tokenDTO
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
index cd54f15e64..017da95fd9 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
@@ -19,6 +19,9 @@ package com.epmet.controller;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
@@ -28,17 +31,21 @@ import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
-import com.epmet.dto.form.IcHouseFormDTO;
-import com.epmet.dto.form.IcNeighborHoodFormDTO;
-import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
-import com.epmet.dto.form.LoginUserDetailsFormDTO;
+import com.epmet.dao.IcBuildingDao;
+import com.epmet.dto.form.*;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
+import com.epmet.dto.result.ImportResultDTO;
import com.epmet.dto.result.LoginUserDetailsResultDTO;
import com.epmet.excel.IcHouseExcel;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
+import com.epmet.model.HouseInfoModel;
+import com.epmet.model.ImportHouseInfoListener;
+import com.epmet.redis.IcHouseRedis;
import com.epmet.service.HouseService;
+import com.epmet.service.IcHouseService;
+import com.epmet.service.IcNeighborHoodService;
import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -49,6 +56,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
@@ -69,6 +77,14 @@ public class HouseController implements ResultDataResolver {
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
+ @Autowired
+ private IcBuildingDao icBuildingDao;
+ @Autowired
+ private IcHouseRedis icHouseRedis;
+ @Autowired
+ private IcNeighborHoodService neighborHoodService;
+ @Autowired
+ private IcHouseService icHouseService;
@PostMapping("houselist")
@@ -223,7 +239,7 @@ public class HouseController implements ResultDataResolver {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
- return new Result().error(9999, str+"第"+subList+"行未成功!");
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str+"第"+subList+"行未成功!");
}
return new Result().ok(str);
}
@@ -232,4 +248,48 @@ public class HouseController implements ResultDataResolver {
Result> queryListHouseInfo(@RequestBody Set houseIds, @RequestParam("customerId") String customerId){
return new Result>().ok(houseService.queryListHouseInfo(houseIds,customerId));
}
+
+ @PostMapping("houseimport")
+ public Result houseImport(@LoginUser TokenDto tokenDTO, @RequestParam("file") MultipartFile file,
+ @RequestParam("orgId")String orgId,
+ @RequestParam("orgType")String orgType){
+ ImportInfoFormDTO formDTO = new ImportInfoFormDTO();
+ formDTO.setCustomerId(tokenDTO.getCustomerId());
+ formDTO.setOrgType(orgType);
+ formDTO.setOrgId(orgId);
+ formDTO.setUserId(tokenDTO.getUserId());
+ ExcelReader excelReader = null;
+ try {
+ InputStream inputStream = null;
+ try {
+ inputStream = file.getInputStream();
+ } catch (IOException e) {
+ return new Result().error("读取文件失败");
+ }
+ excelReader = EasyExcel.read(inputStream).build();
+ // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
+ ReadSheet readSheet = EasyExcel.readSheet(0).head(HouseInfoModel.class)
+ .registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis,neighborHoodService,icHouseService))
+ .build();
+ excelReader.read(readSheet);
+ } finally {
+ if (excelReader != null) {
+ excelReader.finish();
+ }
+ }
+ ImportResultDTO dto = icHouseRedis.getImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId());
+ if (null == dto){
+ return new Result<>();
+ }
+ List nums = dto.getNums();
+ Integer num = dto.getNum();
+ String s = "共%s条数据,导入成功%s条。";
+ if (nums.size() > NumConstant.ZERO){
+ Collections.sort(nums);
+ s = s + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"条导入失败";
+ return new Result<>().error(9999,String.format(s,num,num - nums.size()));
+ }
+ return new Result<>().error(9999,String.format(s,num,num));
+ }
+
}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
index fcd64c4658..a78ea28431 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
@@ -28,10 +28,13 @@ import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IcNeighborHoodDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.service.IcNeighborHoodService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -85,6 +88,18 @@ public class IcNeighborHoodController {
return new Result();
}
+ /**
+ * @Description 通过ID查询小区信息
+ * @Param ids
+ * @Return {@link Result< List< IcNeighborHoodDTO>>}
+ * @Author zhaoqifeng
+ * @Date 2021/11/8 10:46
+ */
+ @PostMapping("getlistbyids")
+ public Result> getListByIds(@RequestBody List ids) {
+ return new Result>().ok(icNeighborHoodService.getListByIds(ids));
+ }
+
/**
* @Description 获取网格下小区列表
* @Param dto
@@ -98,15 +113,22 @@ public class IcNeighborHoodController {
}
/**
- * @Description 通过ID查询小区信息
- * @Param ids
- * @Return {@link Result< List< IcNeighborHoodDTO>>}
- * @Author zhaoqifeng
- * @Date 2021/11/8 10:46
+ * @Description 小区信息导入
+ * @param tokenDTO
+ * @param file
+ * @author zxc
+ * @date 2022/2/12 10:47 上午
*/
- @PostMapping("getlistbyids")
- public Result> getListByIds(@RequestBody List ids) {
- return new Result>().ok(icNeighborHoodService.getListByIds(ids));
+ @PostMapping("neighborhoodimport")
+ public Result neighborhoodImport(@LoginUser TokenDto tokenDTO, @RequestParam("file") MultipartFile file,
+ @RequestParam("orgId")String orgId,
+ @RequestParam("orgType")String orgType) throws IOException {
+ ImportInfoFormDTO formDTO = new ImportInfoFormDTO();
+ formDTO.setCustomerId(tokenDTO.getCustomerId());
+ formDTO.setOrgType(orgType);
+ formDTO.setOrgId(orgId);
+ formDTO.setUserId(tokenDTO.getUserId());
+ return icNeighborHoodService.neighborhoodImport(formDTO,file);
}
}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java
index 60c1651315..da7f783c1e 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java
@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@@ -223,7 +224,7 @@ public class NeighborHoodController {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
- return new Result().error(9999, str + "第" + subList + "行未成功!");
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);
}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerGridDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerGridDao.java
index 7eef403d38..3dcedd5c73 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerGridDao.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerGridDao.java
@@ -365,4 +365,13 @@ public interface CustomerGridDao extends BaseDao {
@Param("operateUserId") String operateUserId);
List getStaffGridList(@Param("customerId") String customerId, @Param("orgId") String orgId, @Param("orgType") String orgType);
+
+ /**
+ * @Description 根据网格名字查询网格信息
+ * @param names
+ * @author zxc
+ * @date 2022/2/12 2:06 下午
+ */
+ List selectGridInfoByNames(@Param("names")List names,@Param("customerId")String customerId);
+
}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
index 6d029cb291..cc052eed19 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
@@ -19,6 +19,7 @@ package com.epmet.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.result.BaseInfoFamilyBuildingResultDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.entity.CustomerAgencyEntity;
@@ -73,4 +74,92 @@ public interface IcBuildingDao extends BaseDao {
List buildingListByIds(@Param("buildingIdList") List buildingIdList);
IPage buildingListByIds(IPage page,@Param("buildingIdList") List buildingIdList);
+ /**
+ * @Description 根据ID查询楼栋名
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/13 2:32 下午
+ */
+ String selectBuildingNameById(@Param("orgId")String orgId);
+
+ /**
+ * @Description 根据ID查询小区名
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/13 4:21 下午
+ */
+ String selectNeighborHoodNameById(@Param("orgId")String orgId);
+
+ /**
+ * @Description 根据ID查询网格名
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/13 4:26 下午
+ */
+ String selectGridNameById(@Param("orgId")String orgId);
+
+ /**
+ * @Description 根据ID查询组织名
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/13 4:29 下午
+ */
+ String selectAgencyNameById(@Param("orgId")String orgId);
+
+ /**
+ * @Description 查询组织下所有网格信息
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/14 9:48 上午
+ */
+ List selectAllGridByOrgId(@Param("orgId")String orgId);
+
+ /**
+ * @Description 查询网格下所有的小区
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/14 10:21 上午
+ */
+ List selectAllNeighborHoodByGridIds(@Param("orgIds")List orgId);
+
+ /**
+ * @Description 根据小区ID查询楼栋
+ * @param neighborHoodId
+ * @author zxc
+ * @date 2022/2/14 1:25 下午
+ */
+ List selectAllBuildingByNeighborHoodId(@Param("orgId")String orgId);
+
+ /**
+ * @Description 根据楼栋ID查询楼栋单元
+ * @param building
+ * @author zxc
+ * @date 2022/2/14 1:58 下午
+ */
+ List selectAllBuildingUnitByBuildingId(@Param("orgId")String orgId);
+
+ /**
+ * @Description 根据ID查询小区
+ * @param id
+ * @author zxc
+ * @date 2022/2/14 3:16 下午
+ */
+ ImportGeneralDTO selectNeighborHoodById(@Param("id")String id);
+
+ /**
+ * @Description 根据ID查询楼栋
+ * @param id
+ * @author zxc
+ * @date 2022/2/14 4:26 下午
+ */
+ ImportGeneralDTO selectBuildingById(@Param("id")String id);
+
+ /**
+ * @Description 查询已存在的房屋
+ * @param ids
+ * @author zxc
+ * @date 2022/2/14 5:32 下午
+ */
+ List selectExistHouse(@Param("ids")List ids);
+
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcNeighborHoodDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcNeighborHoodDao.java
index 6e5d0487eb..3203e96854 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcNeighborHoodDao.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcNeighborHoodDao.java
@@ -51,4 +51,14 @@ public interface IcNeighborHoodDao extends BaseDao {
Integer checkNameUq(@Param("customerId") String customerId,
@Param("neighborHoodName")String neighborHoodName,
@Param("neighborId")String neighborId);
+
+ /**
+ * @Description 根据小区名查询存在小区
+ * @param names
+ * @param customerId
+ * @author zxc
+ * @date 2022/2/12 2:59 下午
+ */
+ List selectNeighborhoodNameByNames(@Param("names")List names,@Param("customerId") String customerId);
+
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcPropertyManagementDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcPropertyManagementDao.java
index b79a5cc3e6..442f3d0514 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcPropertyManagementDao.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcPropertyManagementDao.java
@@ -20,6 +20,10 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.IcPropertyManagementEntity;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
/**
* 物业表
@@ -31,4 +35,20 @@ import org.apache.ibatis.annotations.Mapper;
public interface IcPropertyManagementDao extends BaseDao {
IcPropertyManagementEntity selectByName(String name);
+
+ /**
+ * @Description 根据物业名查询已存在的物业名
+ * @param names
+ * @author zxc
+ * @date 2022/2/13 9:21 上午
+ */
+ List selectExistNames(@Param("names")List names);
+
+ /**
+ * @Description 根据名字查ID
+ * @param names
+ * @author zxc
+ * @date 2022/2/13 9:59 上午
+ */
+ List selectIdByName(@Param("names")List names);
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcNeighborHoodEntity.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcNeighborHoodEntity.java
index 62489898d2..9fb05feb87 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcNeighborHoodEntity.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcNeighborHoodEntity.java
@@ -17,6 +17,7 @@
package com.epmet.entity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
@@ -98,4 +99,9 @@ public class IcNeighborHoodEntity extends BaseEpmetEntity {
*/
private String location;
+ @TableField(exist = false)
+ private String gridName;
+
+ @TableField(exist = false)
+ private String propertyName;
}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcNeighborHoodExcel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcNeighborHoodExcel.java
index 72c57047e0..b996da1bf2 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcNeighborHoodExcel.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcNeighborHoodExcel.java
@@ -21,6 +21,7 @@ import cn.afterturn.easypoi.excel.annotation.Excel;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.util.ExcelVerifyInfo;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@@ -121,4 +122,16 @@ public class IcNeighborHoodExcel extends ExcelVerifyInfo implements Serializable
@Length(max=500,message = "不能超过500个字")
private String remark;
+ @JsonIgnore
+ private Boolean status = false;
+
+ @JsonIgnore
+ private Boolean existNameStatus = false;
+
+ @JsonIgnore
+ private Boolean agencyNameStatus = false;
+
+ @JsonIgnore
+ private Boolean reStatus = false;
+
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingInfoModel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingInfoModel.java
new file mode 100644
index 0000000000..e76c391324
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingInfoModel.java
@@ -0,0 +1,38 @@
+package com.epmet.model;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/15 10:07 上午
+ * @DESC
+ */
+@Data
+public class BuildingInfoModel {
+
+ @ExcelProperty(value = "所属组织")
+ private String agencyName;
+
+ @ExcelProperty(value = "所属网格")
+ private String gridName;
+
+ @ExcelProperty(value = "小区名称")
+ private String neighborHoodName;
+
+ @ExcelProperty(value = "楼栋名称")
+ private String buildingName;
+
+ @ExcelProperty(value = "楼栋类型")
+ private String type;
+
+ @ExcelProperty(value = "单元数")
+ private Integer totalUnitNum;
+
+ @ExcelProperty(value = "层数")
+ private Integer totalFloorNum;
+
+ @ExcelProperty(value = "户数")
+ private Integer totalHouseNum;
+
+}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModel.java
new file mode 100644
index 0000000000..9330a1a2d0
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModel.java
@@ -0,0 +1,52 @@
+package com.epmet.model;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/13 1:26 下午
+ * @DESC
+ */
+@Data
+public class HouseInfoModel {
+
+ @ExcelProperty(value = "所属组织")
+ private String agencyName;
+
+ @ExcelProperty(value = "所属网格")
+ private String gridName;
+
+ @ExcelProperty(value = "所属小区")
+ @Length(max=50,message = "不能超过50个字")
+ private String neighborHoodName;
+
+ @ExcelProperty(value = "所属楼栋")
+ private String buildingName;
+
+ @ExcelProperty(value = "单元号")
+ private Integer buildingUnit;
+
+ @ExcelProperty(value = "门牌号")
+ private String doorName;
+
+ @ExcelProperty(value = "房屋类型")
+ private String houseType;
+
+ @ExcelProperty(value = "房屋用途")
+ private String purpose;
+
+ @ExcelProperty(value = "出租")
+ private String rentFlagString;
+
+ @ExcelProperty(value = "房主姓名")
+ private String ownerName;
+
+ @ExcelProperty(value = "房主电话")
+ private String ownerPhone;
+
+ @ExcelProperty(value = "房主身份证")
+ private String ownerIdCard;
+
+}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
new file mode 100644
index 0000000000..808a69f810
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
@@ -0,0 +1,323 @@
+package com.epmet.model;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetException;
+import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
+import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
+import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
+import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.constant.CustomerGridConstant;
+import com.epmet.dao.IcBuildingDao;
+import com.epmet.dto.ImportGeneralDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
+import com.epmet.dto.result.ImportResultDTO;
+import com.epmet.enums.BuildingTypeEnums;
+import com.epmet.redis.IcHouseRedis;
+import com.epmet.service.IcNeighborHoodService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/15 10:06 上午
+ * @DESC
+ */
+public class ImportBuildingInfoListener extends AnalysisEventListener {
+
+ List nums = new ArrayList<>();
+ Integer num = NumConstant.ZERO;
+
+ List needDisposeList = new ArrayList<>();
+ List needInsertList = new ArrayList<>();
+
+ String gridName = null;
+ String agencyName = null;
+
+ Map gridInfos = null;
+ List gridInfoDTOs = null;
+ Map neighborHoodInfos = null;
+ List neighborHoodInfoDTOs = null;
+ ImportGeneralDTO neighborHoodGeneralDTO = null;
+ Map buildingInfos = null;
+ List buildingInfoDTOs = null;
+ ImportGeneralDTO buildingGeneralDTO = null;
+
+ private ImportInfoFormDTO formDTO;
+ private IcHouseRedis icHouseRedis;
+ private IcBuildingDao icBuildingDao;
+ private IcNeighborHoodService neighborHoodService;
+
+ public ImportBuildingInfoListener(ImportInfoFormDTO formDTO, IcHouseRedis icHouseRedis,IcBuildingDao icBuildingDao,IcNeighborHoodService neighborHoodService){
+ this.formDTO = formDTO;
+ this.icHouseRedis = icHouseRedis;
+ this.icBuildingDao = icBuildingDao;
+ this.neighborHoodService = neighborHoodService;
+ }
+
+ @Override
+ public void invoke(BuildingInfoModel data, AnalysisContext context) {
+ if (null == data){
+ return;
+ }
+ num = num + NumConstant.ONE;
+ ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
+ dto.setNum(num);
+ dto.setCustomerId(formDTO.getCustomerId());
+ // 应产品要求添加
+ if (StringUtils.isNotBlank(dto.getType()) && (!dto.getType().equals("商品房") && !dto.getType().equals("自建房")) && !dto.getType().equals("别墅")){
+ nums.add(num);
+ return;
+ }
+ dto.setType(BuildingTypeEnums.getKeyByValue(dto.getType()));
+ if (formDTO.getOrgType().equals(CustomerGridConstant.NEIGHBORHOOD)){
+ disposeNeighborHoodBuilding(dto);
+ }else if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
+ disposeGridBuilding(dto);
+ }else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
+ disposeAgencyBuilding(dto);
+ }
+ // 数据筛选完毕,当num每满100条,处理一次
+ if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
+ finalDispose();
+ }
+ }
+
+ public void finalDispose(){
+ if (CollectionUtils.isEmpty(needDisposeList)){
+ return;
+ }
+ Map groupByAllName = needDisposeList.stream().collect(Collectors.groupingBy(
+ n -> n.getAgencyName() + "_" + n.getGridName() + "_" +
+ n.getNeighborHoodName() + "_" + n.getBuildingName(), Collectors.counting()));
+ groupByAllName.forEach((k,v) -> {
+ if (Integer.valueOf(v.toString()).compareTo(1) > 0){
+ for (ImportGeneralDTO r : needDisposeList) {
+ if (k.equals(r.getAgencyName() + "_" + r.getGridName() + "_" +
+ r.getNeighborHoodName() + "_" + r.getBuildingName())){
+ // 集合里重复的
+ nums.add(r.getNum());
+ r.setExistStatus(true);
+ }
+ }
+ }
+ });
+ Map> groupByStatus = needDisposeList.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getExistStatus));
+ List importGeneralDTOS = groupByStatus.get(false);
+ if (!CollectionUtils.isEmpty(importGeneralDTOS)){
+ List importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS);
+ Map> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getBuildingExistStatus));
+ List existList = groupByBuildingExistStatus.get(true);
+ if (!CollectionUtils.isEmpty(existList)){
+ existList.forEach(e -> {
+ nums.add(e.getNum());
+ });
+ }
+ }
+ // 清除
+ needDisposeList = new ArrayList<>();
+ needInsertList = new ArrayList<>();
+ gridName = null;
+ agencyName = null;
+ gridInfos = null;
+ gridInfoDTOs = null;
+ neighborHoodInfos = null;
+ neighborHoodInfoDTOs = null;
+ neighborHoodGeneralDTO = null;
+ buildingInfos = null;
+ buildingInfoDTOs = null;
+ buildingGeneralDTO = null;
+ }
+
+ public void fillData(ImportGeneralDTO dto, String orgType){
+ if (orgType.equals(CustomerGridConstant.GRID) || orgType.equals(CustomerGridConstant.AGENCY)){
+ List gridIds = new ArrayList<>();
+ if (orgType.equals(CustomerGridConstant.GRID)){
+ gridIds = Arrays.asList(formDTO.getOrgId());
+ }else if (orgType.equals(CustomerGridConstant.AGENCY)){
+ gridIds = gridInfoDTOs.stream().map(m -> m.getGridId()).collect(Collectors.toList());
+ }
+ neighborHoodInfos = null == neighborHoodInfos ? getNeighborHoodInfos(gridIds) : neighborHoodInfos;
+ Object cacheNeighBorHood = icHouseRedis.getTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId(), formDTO.getOrgId() + "_" + dto.getNeighborHoodName());
+ // 赋值小区ID
+ dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
+ }
+ if (StringUtils.isNotBlank(dto.getNeighborHoodId())){
+ //小区ID不为空赋值楼栋ID
+ buildingInfos = null == buildingInfos ? getBuildingInfos(dto.getAgencyId()) : buildingInfos;
+ Object cacheBuilding = icHouseRedis.getTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId(), dto.getNeighborHoodId() + "_" + dto.getBuildingName());
+ dto.setBuildingId(null == cacheBuilding ? "" : cacheBuilding.toString());
+ if (StringUtils.isNotBlank(dto.getBuildingId())){
+ // 说明数据库已存在此楼栋,不需添加
+ nums.add(num);
+ }else {
+ needDisposeList.add(dto);
+ }
+ }else {
+ needDisposeList.add(dto);
+ }
+ }
+
+ /**
+ * @Description 左侧树点击小区时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/15 10:41 上午
+ */
+ public void disposeNeighborHoodBuilding(ImportGeneralDTO dto){
+ neighborHoodGeneralDTO = null == neighborHoodGeneralDTO ? icBuildingDao.selectNeighborHoodById(formDTO.getOrgId()) : neighborHoodGeneralDTO;
+ //排除不是本小区的
+ if (!dto.getNeighborHoodName().equals(neighborHoodGeneralDTO.getNeighborHoodName())){
+ nums.add(num);
+ }else {
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(neighborHoodGeneralDTO.getGridId());
+ if (null == gridInfo){
+ throw new EpmetException("查询网格失败...");
+ }
+ // 1.排除网格名不一样但小区名一样 2.排除组织不一样,网格一样,小区一样
+ if ((!gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName())) ||
+ (!gridInfo.getAgencyName().equals(dto.getAgencyName()) && gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()))){
+ nums.add(num);
+ return;
+ }
+ dto.setNeighborHoodId(formDTO.getOrgId());
+ dto.setGridId(neighborHoodGeneralDTO.getGridId());
+ dto.setAgencyId(neighborHoodGeneralDTO.getAgencyId());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ // 填充各种ID
+ fillData(dto,CustomerGridConstant.NEIGHBORHOOD);
+ }
+ }
+
+ /**
+ * @Description 左侧树点击网格时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/15 10:41 上午
+ */
+ public void disposeGridBuilding(ImportGeneralDTO dto){
+ gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
+ if (null == gridInfo){
+ throw new EpmetException("查询网格失败...");
+ }
+ //排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
+ if (dto.getGridName().compareTo(gridName) != 0 || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
+ nums.add(num);
+ }else {
+ //
+ dto.setGridId(formDTO.getOrgId());
+ dto.setAgencyId(gridInfo.getPid());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ // 填充各种ID
+ fillData(dto, CustomerGridConstant.GRID);
+ }
+ }
+
+ /**
+ * @Description 左侧树点击组织时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/15 10:41 上午
+ */
+ public void disposeAgencyBuilding(ImportGeneralDTO dto){
+ agencyName = null == agencyName ? icBuildingDao.selectAgencyNameById(formDTO.getOrgId()) : agencyName;
+ //排除不是本组织的
+ if (!dto.getAgencyName().equals(agencyName)){
+ nums.add(num);
+ }else {
+ // 根据组织查询出所有网格,甩出不是本组织下的网格
+ gridInfos = null == gridInfos ? getGridInfos(formDTO.getOrgId()) : gridInfos;
+ if (null == gridInfos){
+ // 组织下确实不存在网格
+ nums.add(num);
+ return;
+ }
+ // 根据网格名对比,没有找到的就把行号加入到未执行成功队列中
+ Object cacheGridName = icHouseRedis.getTemporaryCacheGrid(formDTO.getCustomerId(), formDTO.getUserId(), dto.getGridName());
+ if (null == cacheGridName){
+ nums.add(num);
+ return;
+ }
+ dto.setGridId(cacheGridName.toString());
+ dto.setAgencyId(formDTO.getOrgId());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ // 填充各种ID
+ fillData(dto,CustomerGridConstant.AGENCY);
+ }
+ }
+
+ /**
+ * @Description 获取网格信息
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/14 9:57 上午
+ */
+ public Map getGridInfos(String orgId){
+ gridInfoDTOs = icBuildingDao.selectAllGridByOrgId(orgId);
+ gridInfos = gridInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridName(), n -> n.getGridId()));
+ icHouseRedis.setTemporaryCacheGrid(formDTO.getCustomerId(), gridInfos, formDTO.getUserId());
+ return gridInfos;
+ }
+
+ /**
+ * @Description 获取网格下的小区
+ * @param gridIds
+ * @author zxc
+ * @date 2022/2/14 10:16 上午
+ */
+ public Map getNeighborHoodInfos(List gridIds){
+ neighborHoodInfoDTOs = icBuildingDao.selectAllNeighborHoodByGridIds(gridIds);
+ neighborHoodInfos = neighborHoodInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridId() + "_" + n.getNeighborHoodName(), n -> n.getNeighborHoodId()));
+ icHouseRedis.setTemporaryCacheNeighBorHood(formDTO.getCustomerId(), neighborHoodInfos, formDTO.getUserId());
+ return neighborHoodInfos;
+ }
+
+ /**
+ * @Description 获取小区下的楼栋
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/14 1:32 下午
+ */
+ public Map getBuildingInfos(String orgId){
+ buildingInfoDTOs = icBuildingDao.selectAllBuildingByNeighborHoodId(orgId);
+ buildingInfos = buildingInfoDTOs.stream().collect(Collectors.toMap(n -> n.getNeighborHoodId() + "_" + n.getBuildingName(), n -> n.getBuildingId()));
+ icHouseRedis.setTemporaryCacheBuilding(formDTO.getCustomerId(), buildingInfos, formDTO.getUserId());
+ return buildingInfos;
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+ finalDispose();
+ // 删除缓存
+ icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
+ // 放结果
+ icHouseRedis.setImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId(), new ImportResultDTO(nums,num));
+ }
+}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
new file mode 100644
index 0000000000..e572980355
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
@@ -0,0 +1,449 @@
+package com.epmet.model;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetException;
+import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
+import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
+import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
+import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.constant.CustomerGridConstant;
+import com.epmet.dao.IcBuildingDao;
+import com.epmet.dto.ImportGeneralDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
+import com.epmet.dto.result.ImportResultDTO;
+import com.epmet.entity.IcHouseEntity;
+import com.epmet.enums.HousePurposeEnums;
+import com.epmet.enums.HouseRentFlagEnums;
+import com.epmet.enums.HouseTypeEnums;
+import com.epmet.redis.IcHouseRedis;
+import com.epmet.service.IcHouseService;
+import com.epmet.service.IcNeighborHoodService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/13 1:25 下午
+ * @DESC
+ */
+public class ImportHouseInfoListener extends AnalysisEventListener {
+
+ List nums = new ArrayList<>();
+ Integer num = NumConstant.ZERO;
+
+ List needDisposeList = new ArrayList<>();
+ List needInsertList = new ArrayList<>();
+
+ String gridName = null;
+ String agencyName = null;
+
+ Map gridInfos = null;
+ List gridInfoDTOs = null;
+ Map neighborHoodInfos = null;
+ List neighborHoodInfoDTOs = null;
+ ImportGeneralDTO neighborHoodGeneralDTO = null;
+ Map buildingInfos = null;
+ List buildingInfoDTOs = null;
+ ImportGeneralDTO buildingGeneralDTO = null;
+ Map buildingUnitInfos = null;
+ List buildingUnitInfoDTOs = null;
+
+ private ImportInfoFormDTO formDTO;
+ private IcBuildingDao icBuildingDao;
+ private IcHouseRedis icHouseRedis;
+ private IcNeighborHoodService neighborHoodService;
+ private IcHouseService icHouseService;
+
+ public ImportHouseInfoListener(ImportInfoFormDTO formDTO,IcBuildingDao icBuildingDao, IcHouseRedis icHouseRedis,IcNeighborHoodService neighborHoodService, IcHouseService icHouseService){
+ this.formDTO = formDTO;
+ this.icBuildingDao = icBuildingDao;
+ this.icHouseRedis = icHouseRedis;
+ this.neighborHoodService = neighborHoodService;
+ this.icHouseService = icHouseService;
+ }
+
+ @Override
+ public void invoke(HouseInfoModel data, AnalysisContext context) {
+ if (null == data){
+ return;
+ }
+ num = num + NumConstant.ONE;
+ ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
+ dto.setNum(num);
+ dto.setCustomerId(formDTO.getCustomerId());
+ // 应产品要求
+ if (StringUtils.isNotBlank(dto.getHouseType()) ){
+ if( !"楼房".equals(dto.getHouseType()) && !dto.getHouseType().equals("平房") && !dto.getHouseType().equals("别墅") ){
+ nums.add(num);
+ return;
+ }
+ }
+ dto.setHouseType(HouseTypeEnums.getKeyByValue(dto.getHouseType()));
+
+ if (StringUtils.isNotBlank(dto.getPurpose()) && (!dto.getPurpose().equals("住宅") &&
+ !dto.getPurpose().equals("商业") &&
+ !dto.getPurpose().equals("办公") &&
+ !dto.getPurpose().equals("工业") &&
+ !dto.getPurpose().equals("仓储") &&
+ !dto.getPurpose().equals("商住混用") &&
+ !dto.getPurpose().equals("其他")) ){
+ nums.add(num);
+ return;
+ }
+ dto.setPurpose(HousePurposeEnums.getKeyByValue(dto.getPurpose()));
+ if (StringUtils.isNotBlank(dto.getRentFlagString()) && (!dto.getRentFlagString().equals("是") && !dto.getRentFlagString().equals("否"))){
+ nums.add(num);
+ return;
+ }
+ dto.setRentFlag(HouseRentFlagEnums.getCodeByName(dto.getRentFlagString()));
+ dto.setHouseName(dto.getBuildingName()+"-"+dto.getBuildingUnit()+"-"+dto.getDoorName());
+ if (formDTO.getOrgType().equals(CustomerGridConstant.BUILDING)){
+ disposeBuildingHouse(dto);
+ }else if (formDTO.getOrgType().equals(CustomerGridConstant.NEIGHBORHOOD)){
+ disposeNeighborHoodHouse(dto);
+ }else if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
+ disposeGridHouse(dto);
+ }else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
+ disposeAgencyHouse(dto);
+ }
+ // 数据筛选完毕,当num每满100条,处理一次
+ if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
+ finalDispose();
+ }
+ }
+
+ public void finalDispose(){
+ if (!CollectionUtils.isEmpty(needDisposeList)){
+ List importInfo = neighborHoodService.getImportInfo(formDTO, needDisposeList);
+ needInsertList.addAll(importInfo);
+ }
+ if (CollectionUtils.isEmpty(needInsertList)){
+ return;
+ }
+ Map collect = needInsertList.stream().collect(Collectors.groupingBy(n -> n.getBuildingUnitId() + "_" + n.getDoorName(), Collectors.counting()));
+ collect.forEach((k,v) -> {
+ if (Integer.valueOf(v.toString()).compareTo(1) > 0){
+ for (ImportGeneralDTO r : needInsertList) {
+ if (k.equals(r.getBuildingUnitId()+"_"+r.getDoorName())){
+ // 集合里重复的
+ if (r.getExistStatus()){
+
+ }
+ nums.add(r.getNum());
+ r.setExistStatus(true);
+ }
+ }
+ }
+ });
+ // 根据单元ID_doorName查询已存在的
+ List ids = needInsertList.stream().filter(n -> StringUtils.isNotBlank(n.getBuildingUnitId())).map(m -> m.getBuildingUnitId() + "_" + m.getDoorName()).distinct().collect(Collectors.toList());
+ List existHouses = icBuildingDao.selectExistHouse(ids);
+ existHouses.forEach(e -> {
+ for (ImportGeneralDTO n : needInsertList) {
+ if ((n.getBuildingUnitId()+"_"+n.getDoorName()).equals(e)){
+ // 库里存在的
+ nums.add(n.getNum());
+ n.setExistStatus(true);
+ }
+ }
+ });
+ // 根据存在状态分组
+ Map> groupByExistStatus = needInsertList.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getExistStatus));
+ List importGeneralDTOS = groupByExistStatus.get(false);
+ houseInsert(importGeneralDTOS);
+ // 清除
+ needDisposeList = new ArrayList<>();
+ needInsertList = new ArrayList<>();
+ gridName = null;
+ agencyName = null;
+ gridInfos = null;
+ gridInfoDTOs = null;
+ neighborHoodInfos = null;
+ neighborHoodInfoDTOs = null;
+ neighborHoodGeneralDTO = null;
+ buildingInfos = null;
+ buildingInfoDTOs = null;
+ buildingGeneralDTO = null;
+ buildingUnitInfos = null;
+ buildingUnitInfoDTOs = null;
+ }
+
+ /**
+ * @Description 左侧树点击楼栋时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/14 3:23 下午
+ */
+ public void disposeBuildingHouse(ImportGeneralDTO dto){
+ buildingGeneralDTO = null == buildingGeneralDTO ? icBuildingDao.selectBuildingById(formDTO.getOrgId()) : buildingGeneralDTO;
+ // 排除不是本楼的
+ if (!dto.getBuildingName().equals(buildingGeneralDTO.getBuildingName())){
+ nums.add(num);
+ }else {
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(buildingGeneralDTO.getGridId());
+ if (null == gridInfo){
+ throw new EpmetException("查询网格失败...");
+ }
+ // 排除 1、小区名不一样&&楼栋名一样 2、网格名不一样&&小区名一样&&楼名一样 3、组织名不一样&&网格名一样&&小区名一样&&楼名一样
+ if ((!buildingGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()) && buildingGeneralDTO.getBuildingName().equals(dto.getBuildingName()))
+ || (!gridInfo.getGridName().equals(dto.getGridName())&&buildingGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()) && buildingGeneralDTO.getBuildingName().equals(dto.getBuildingName()))
+ || (!gridInfo.getAgencyName().equals(dto.getAgencyName())&&gridInfo.getGridName().equals(dto.getGridName())&&buildingGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()) && buildingGeneralDTO.getBuildingName().equals(dto.getBuildingName()))){
+ nums.add(num);
+ return;
+ }
+ dto.setBuildingId(formDTO.getOrgId());
+ dto.setNeighborHoodId(buildingGeneralDTO.getNeighborHoodId());
+ dto.setGridId(buildingGeneralDTO.getGridId());
+ dto.setAgencyId(buildingGeneralDTO.getAgencyId());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ dto.setType(buildingGeneralDTO.getType());
+ dto.setTotalHouseNum(buildingGeneralDTO.getTotalHouseNum());
+ dto.setTotalFloorNum(buildingGeneralDTO.getTotalFloorNum());
+ dto.setTotalUnitNum(buildingGeneralDTO.getTotalUnitNum());
+ // 补充单元ID
+ buildingUnitInfos = null == buildingUnitInfos ? getBuildingUnitInfos(dto.getAgencyId()) : buildingUnitInfos;
+ Object cacheBuildingUnit = icHouseRedis.getTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId(), dto.getBuildingId() + "_" + dto.getBuildingUnit());
+ dto.setBuildingUnitId(null == cacheBuildingUnit ? "" : cacheBuildingUnit.toString());
+ if (StringUtils.isNotBlank(dto.getBuildingUnitId())){
+ // 所有ID补充完毕,不需调用补用方法
+ needInsertList.add(dto);
+ }else {
+ needDisposeList.add(dto);
+ }
+ }
+ }
+
+ /**
+ * @Description 左侧树点击小区时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/14 3:23 下午
+ */
+ public void disposeNeighborHoodHouse(ImportGeneralDTO dto){
+ neighborHoodGeneralDTO = null == neighborHoodGeneralDTO ? icBuildingDao.selectNeighborHoodById(formDTO.getOrgId()) : neighborHoodGeneralDTO;
+ //排除不是本小区的
+ if (!dto.getNeighborHoodName().equals(neighborHoodGeneralDTO.getNeighborHoodName())){
+ nums.add(num);
+ }else {
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(neighborHoodGeneralDTO.getGridId());
+ if (null == gridInfo){
+ throw new EpmetException("查询网格失败...");
+ }
+ // 1.排除网格名不一样但小区名一样 2.排除组织不一样,网格一样,小区一样
+ if ((!gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName())) ||
+ (!gridInfo.getAgencyName().equals(dto.getAgencyName()) && gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()))){
+ nums.add(num);
+ return;
+ }
+ dto.setNeighborHoodId(formDTO.getOrgId());
+ dto.setGridId(neighborHoodGeneralDTO.getGridId());
+ dto.setAgencyId(neighborHoodGeneralDTO.getAgencyId());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ // 填充各种ID
+ fillData(dto,CustomerGridConstant.NEIGHBORHOOD);
+ }
+ }
+
+ /**
+ * @Description 左侧树点击网格时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/14 2:14 下午
+ */
+ public void disposeGridHouse(ImportGeneralDTO dto){
+ gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
+ if (null == gridInfo){
+ throw new EpmetException("查询网格失败...");
+ }
+ //排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
+ if (dto.getGridName().compareTo(gridName) != 0 || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
+ nums.add(num);
+ }else {
+ //
+ dto.setGridId(formDTO.getOrgId());
+ dto.setAgencyId(gridInfo.getPid());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ // 填充各种ID
+ fillData(dto, CustomerGridConstant.GRID);
+ }
+ }
+
+ /**
+ * @Description 左侧树点击组织时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/14 1:35 下午
+ */
+ public void disposeAgencyHouse(ImportGeneralDTO dto){
+ agencyName = null == agencyName ? icBuildingDao.selectAgencyNameById(formDTO.getOrgId()) : agencyName;
+ //排除不是本组织的
+ if (!dto.getAgencyName().equals(agencyName)){
+ nums.add(num);
+ }else {
+ // 根据组织查询出所有网格,甩出不是本组织下的网格
+ gridInfos = null == gridInfos ? getGridInfos(formDTO.getOrgId()) : gridInfos;
+ if (null == gridInfos){
+ // 组织下确实不存在网格
+ nums.add(num);
+ return;
+ }
+ // 根据网格名对比,没有找到的就把行号加入到未执行成功队列中
+ Object cacheGridName = icHouseRedis.getTemporaryCacheGrid(formDTO.getCustomerId(), formDTO.getUserId(), dto.getGridName());
+ if (null == cacheGridName){
+ nums.add(num);
+ return;
+ }
+ dto.setGridId(cacheGridName.toString());
+ dto.setAgencyId(formDTO.getOrgId());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ // 填充各种ID
+ fillData(dto, CustomerGridConstant.AGENCY);
+ }
+ }
+
+ public void fillData(ImportGeneralDTO dto, String orgType){
+ if (orgType.equals(CustomerGridConstant.GRID) || orgType.equals(CustomerGridConstant.AGENCY)){
+ List gridIds = new ArrayList<>();
+ if (orgType.equals(CustomerGridConstant.GRID)){
+ gridIds = Arrays.asList(formDTO.getOrgId());
+ }else if (orgType.equals(CustomerGridConstant.AGENCY)){
+ gridIds = gridInfoDTOs.stream().map(m -> m.getGridId()).collect(Collectors.toList());
+ }
+ neighborHoodInfos = null == neighborHoodInfos ? getNeighborHoodInfos(gridIds) : neighborHoodInfos;
+ Object cacheNeighBorHood = icHouseRedis.getTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId(), dto.getGridId() + "_" + dto.getNeighborHoodName());
+ // 赋值小区ID
+ dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
+ }
+ if (StringUtils.isNotBlank(dto.getNeighborHoodId())){
+ //小区ID不为空赋值楼栋ID
+ buildingInfos = null == buildingInfos ? getBuildingInfos(dto.getNeighborHoodId()) : buildingInfos;
+ Object cacheBuilding = icHouseRedis.getTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId(), dto.getNeighborHoodId() + "_" + dto.getBuildingName());
+ dto.setBuildingId(null == cacheBuilding ? "" : cacheBuilding.toString());
+ if (StringUtils.isNotBlank(dto.getBuildingId())){
+ // 楼栋ID不为空赋值单元ID
+ buildingUnitInfos = null == buildingUnitInfos ? getBuildingUnitInfos(dto.getAgencyId()) : buildingUnitInfos;
+ Object cacheBuildingUnit = icHouseRedis.getTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId(), dto.getBuildingId() + "_" + dto.getBuildingUnit());
+ dto.setBuildingUnitId(null == cacheBuildingUnit ? "" : cacheBuildingUnit.toString());
+ if (StringUtils.isNotBlank(dto.getBuildingUnitId())){
+ // 所有ID补充完毕,不需调用补用方法
+ needInsertList.add(dto);
+ }else {
+ needDisposeList.add(dto);
+ }
+ }else {
+ needDisposeList.add(dto);
+ }
+ }else {
+ needDisposeList.add(dto);
+ }
+ }
+
+ /**
+ * @Description 获取网格信息
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/14 9:57 上午
+ */
+ public Map getGridInfos(String orgId){
+ gridInfoDTOs = icBuildingDao.selectAllGridByOrgId(orgId);
+ gridInfos = gridInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridName(), n -> n.getGridId()));
+ icHouseRedis.setTemporaryCacheGrid(formDTO.getCustomerId(), gridInfos, formDTO.getUserId());
+ return gridInfos;
+ }
+
+ /**
+ * @Description 获取网格下的小区
+ * @param gridIds
+ * @author zxc
+ * @date 2022/2/14 10:16 上午
+ */
+ public Map getNeighborHoodInfos(List gridIds){
+ neighborHoodInfoDTOs = icBuildingDao.selectAllNeighborHoodByGridIds(gridIds);
+ neighborHoodInfos = neighborHoodInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridId() + "_" + n.getNeighborHoodName(), n -> n.getNeighborHoodId()));
+ icHouseRedis.setTemporaryCacheNeighBorHood(formDTO.getCustomerId(), neighborHoodInfos, formDTO.getUserId());
+ return neighborHoodInfos;
+ }
+
+ /**
+ * @Description 获取小区下的楼栋
+ * @param neighborHoodId
+ * @author zxc
+ * @date 2022/2/14 1:32 下午
+ */
+ public Map getBuildingInfos(String orgId){
+ buildingInfoDTOs = icBuildingDao.selectAllBuildingByNeighborHoodId(orgId);
+ buildingInfos = buildingInfoDTOs.stream().collect(Collectors.toMap(n -> n.getNeighborHoodId() + "_" + n.getBuildingName(), n -> n.getBuildingId()));
+ icHouseRedis.setTemporaryCacheBuilding(formDTO.getCustomerId(), buildingInfos, formDTO.getUserId());
+ return buildingInfos;
+ }
+
+ /**
+ * @Description 获取组织下的单元
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/14 2:04 下午
+ */
+ public Map getBuildingUnitInfos(String orgId){
+ buildingUnitInfoDTOs = icBuildingDao.selectAllBuildingUnitByBuildingId(orgId);
+ if (!CollectionUtils.isEmpty(buildingUnitInfoDTOs)){
+ buildingUnitInfos = buildingUnitInfoDTOs.stream().collect(Collectors.toMap(n -> n.getBuildingId() + "_" + n.getBuildingUnit(), n -> n.getBuildingUnitId()));
+ icHouseRedis.setTemporaryCacheBuildingUnit(formDTO.getCustomerId(), buildingUnitInfos, formDTO.getUserId());
+ }
+ return buildingInfos;
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+ finalDispose();
+ // 删除缓存
+ icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
+ // 放结果
+ icHouseRedis.setImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId(), new ImportResultDTO(nums,num));
+
+ }
+
+ /**
+ * @Description 房屋信息插入
+ * @param houses
+ * @author zxc
+ * @date 2022/2/14 5:21 下午
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void houseInsert(List houses){
+ if (!CollectionUtils.isEmpty(houses)){
+ icHouseService.insertBatch(ConvertUtils.sourceToTarget(houses, IcHouseEntity.class));
+ }
+ }
+
+}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java
new file mode 100644
index 0000000000..c31e83960b
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java
@@ -0,0 +1,283 @@
+package com.epmet.model;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetException;
+import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
+import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
+import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
+import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.constant.CustomerGridConstant;
+import com.epmet.dao.IcBuildingDao;
+import com.epmet.dao.IcPropertyManagementDao;
+import com.epmet.dto.ImportGeneralDTO;
+import com.epmet.dto.NeighborHoodAndManagementDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
+import com.epmet.dto.result.ImportResultDTO;
+import com.epmet.entity.IcNeighborHoodPropertyEntity;
+import com.epmet.entity.IcPropertyManagementEntity;
+import com.epmet.redis.IcHouseRedis;
+import com.epmet.service.IcNeighborHoodService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/15 2:16 下午
+ * @DESC
+ */
+public class ImportNeighborHoodInfoListener extends AnalysisEventListener {
+
+ List nums = new ArrayList<>();
+ Integer num = NumConstant.ZERO;
+
+ List needDisposeList = new ArrayList<>();
+ List needInsertList = new ArrayList<>();
+
+ String gridName = null;
+ String agencyName = null;
+
+ Map gridInfos = null;
+ List gridInfoDTOs = null;
+ Map neighborHoodInfos = null;
+ List neighborHoodInfoDTOs = null;
+ ImportGeneralDTO neighborHoodGeneralDTO = null;
+
+ private ImportInfoFormDTO formDTO;
+ private IcHouseRedis icHouseRedis;
+ private IcBuildingDao icBuildingDao;
+ private IcNeighborHoodService neighborHoodService;
+ private IcPropertyManagementDao propertyManagementDao;
+
+ public ImportNeighborHoodInfoListener(ImportInfoFormDTO formDTO, IcHouseRedis icHouseRedis,IcBuildingDao icBuildingDao,IcNeighborHoodService neighborHoodService, IcPropertyManagementDao propertyManagementDao){
+ this.formDTO = formDTO;
+ this.icHouseRedis = icHouseRedis;
+ this.icBuildingDao = icBuildingDao;
+ this.neighborHoodService = neighborHoodService;
+ this.propertyManagementDao = propertyManagementDao;
+ }
+
+
+ @Override
+ public void invoke(NeighborHoodInfoModel data, AnalysisContext context) {
+ if (null == data){
+ return;
+ }
+ num = num + NumConstant.ONE;
+ ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
+ dto.setNum(num);
+ dto.setCustomerId(formDTO.getCustomerId());
+ if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
+ disposeGridNeighborHood(dto);
+ }else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
+ disposeAgencyNeighborHood(dto);
+ }
+ // 数据筛选完毕,当num每满100条,处理一次
+ if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
+ finalDispose();
+ }
+ }
+
+ public void finalDispose(){
+ if (CollectionUtils.isEmpty(needDisposeList)){
+ return;
+ }
+ Map groupByAllName = needDisposeList.stream().collect(Collectors.groupingBy(
+ n -> n.getAgencyName() + "_" + n.getGridName() + "_" + n.getNeighborHoodName(), Collectors.counting()));
+ groupByAllName.forEach((k,v) -> {
+ if (Integer.valueOf(v.toString()).compareTo(1) > 0){
+ for (ImportGeneralDTO r : needDisposeList) {
+ if (k.equals(r.getAgencyName() + "_" + r.getGridName() + "_" + r.getNeighborHoodName())){
+ // 集合里重复的
+ nums.add(r.getNum());
+ r.setExistStatus(true);
+ }
+ }
+ }
+ });
+ Map> groupByStatus = needDisposeList.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getExistStatus));
+ List importGeneralDTOS = groupByStatus.get(false);
+ if (!CollectionUtils.isEmpty(importGeneralDTOS)){
+ List importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS);
+ Map> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getNeighborHoodExistStatus));
+ List existList = groupByBuildingExistStatus.get(true);
+ if (!CollectionUtils.isEmpty(existList)){
+ existList.forEach(e -> {
+ nums.add(e.getNum());
+ });
+ }
+ List notExistList = groupByBuildingExistStatus.get(false);
+ if (!CollectionUtils.isEmpty(notExistList)){
+ // 物业表插入
+ List propertyNames = notExistList.stream().filter(n -> StringUtils.isNotBlank(n.getPropertyName())).map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
+ List disposePropertyNames = notExistList.stream().filter(n -> StringUtils.isNotBlank(n.getPropertyName())).map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
+ if (!CollectionUtils.isEmpty(propertyNames)){
+ List existPropertyNames = propertyManagementDao.selectExistNames(propertyNames);
+ disposePropertyNames.removeAll(existPropertyNames);
+ List propertyManagementEntities = new ArrayList<>();
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(disposePropertyNames)){
+ disposePropertyNames.forEach(name -> {
+ IcPropertyManagementEntity e = new IcPropertyManagementEntity();
+ e.setName(name);
+ propertyManagementEntities.add(e);
+ });
+ }
+ neighborHoodService.insertPropertyManagement(propertyManagementEntities);
+
+ // 小区物业关系表插入
+ List neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(notExistList, NeighborHoodAndManagementDTO.class);
+ List propertyManagementInfos = propertyManagementDao.selectIdByName(propertyNames);
+ neighborHoodAndManagementDTOS.forEach(n -> propertyManagementInfos.stream().filter(p -> p.getName().equals(n.getPropertyName()))
+ .forEach(p -> {
+ n.setPropertyId(p.getId());
+ n.setNeighborHoodId(n.getNeighborHoodId());
+ }));
+ List icNeighborHoodPropertyEntities = ConvertUtils.sourceToTarget(neighborHoodAndManagementDTOS, IcNeighborHoodPropertyEntity.class);
+ neighborHoodService.neighborHoodPropertyInsert(icNeighborHoodPropertyEntities);
+ }
+ }
+ }
+
+ // 清除
+ needDisposeList = new ArrayList<>();
+ needInsertList = new ArrayList<>();
+ gridName = null;
+ agencyName = null;
+ gridInfos = null;
+ gridInfoDTOs = null;
+ neighborHoodInfos = null;
+ neighborHoodInfoDTOs = null;
+ neighborHoodGeneralDTO = null;
+ }
+
+ /**
+ * @Description 左侧树点击网格时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/15 2:37 下午
+ */
+ public void disposeGridNeighborHood(ImportGeneralDTO dto){
+ gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
+ if (null == gridInfo){
+ throw new EpmetException("查询网格失败...");
+ }
+ //排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
+ if (dto.getGridName().compareTo(gridName) != 0 || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
+ nums.add(num);
+ }else {
+ //
+ dto.setGridId(formDTO.getOrgId());
+ dto.setAgencyId(gridInfo.getPid());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ fillData(dto,CustomerGridConstant.GRID);
+ }
+ }
+
+ /**
+ * @Description 左侧树点击组织时调用
+ * @param dto
+ * @author zxc
+ * @date 2022/2/15 2:37 下午
+ */
+ public void disposeAgencyNeighborHood(ImportGeneralDTO dto){
+ agencyName = null == agencyName ? icBuildingDao.selectAgencyNameById(formDTO.getOrgId()) : agencyName;
+ //排除不是本组织的
+ if (!dto.getAgencyName().equals(agencyName)){
+ nums.add(num);
+ }else {
+ // 根据组织查询出所有网格,甩出不是本组织下的网格
+ gridInfos = null == gridInfos ? getGridInfos(formDTO.getOrgId()) : gridInfos;
+ if (null == gridInfos){
+ // 组织下确实不存在网格
+ nums.add(num);
+ return;
+ }
+ // 根据网格名对比,没有找到的就把行号加入到未执行成功队列中
+ Object cacheGridName = icHouseRedis.getTemporaryCacheGrid(formDTO.getCustomerId(), formDTO.getUserId(), dto.getGridName());
+ if (null == cacheGridName){
+ nums.add(num);
+ return;
+ }
+ dto.setGridId(cacheGridName.toString());
+ dto.setAgencyId(formDTO.getOrgId());
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
+ if (null == agencyInfo){
+ throw new EpmetException("查询组织信息失败...");
+ }
+ dto.setPid(agencyInfo.getPid());
+ dto.setPids(agencyInfo.getPids());
+ fillData(dto,CustomerGridConstant.AGENCY);
+ }
+ }
+
+ public void fillData(ImportGeneralDTO dto,String orgType){
+ List gridIds = new ArrayList<>();
+ if (orgType.equals(CustomerGridConstant.GRID)){
+ gridIds = Arrays.asList(formDTO.getOrgId());
+ }else if (orgType.equals(CustomerGridConstant.AGENCY)){
+ gridIds = gridInfoDTOs.stream().map(m -> m.getGridId()).collect(Collectors.toList());
+ }
+ neighborHoodInfos = null == neighborHoodInfos ? getNeighborHoodInfos(gridIds) : neighborHoodInfos;
+ Object cacheNeighBorHood = icHouseRedis.getTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId(), dto.getGridId() + "_" + dto.getNeighborHoodName());
+ // 赋值小区ID
+ dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
+ if (StringUtils.isNotBlank(dto.getNeighborHoodId())){
+ // 小区已存在
+ nums.add(dto.getNum());
+ }else {
+ needDisposeList.add(dto);
+ }
+ }
+
+ /**
+ * @Description 获取网格信息
+ * @param orgId
+ * @author zxc
+ * @date 2022/2/14 9:57 上午
+ */
+ public Map getGridInfos(String orgId){
+ gridInfoDTOs = icBuildingDao.selectAllGridByOrgId(orgId);
+ gridInfos = gridInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridName(), n -> n.getGridId()));
+ icHouseRedis.setTemporaryCacheGrid(formDTO.getCustomerId(), gridInfos, formDTO.getUserId());
+ return gridInfos;
+ }
+
+ /**
+ * @Description 获取网格下的小区
+ * @param gridIds
+ * @author zxc
+ * @date 2022/2/14 10:16 上午
+ */
+ public Map getNeighborHoodInfos(List gridIds){
+ neighborHoodInfoDTOs = icBuildingDao.selectAllNeighborHoodByGridIds(gridIds);
+ neighborHoodInfos = neighborHoodInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridId() + "_" + n.getNeighborHoodName(), n -> n.getNeighborHoodId()));
+ icHouseRedis.setTemporaryCacheNeighBorHood(formDTO.getCustomerId(), neighborHoodInfos, formDTO.getUserId());
+ return neighborHoodInfos;
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+ finalDispose();
+ // 删除缓存
+ icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId());
+ icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
+ // 放结果
+ icHouseRedis.setImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId(), new ImportResultDTO(nums,num));
+ }
+}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/NeighborHoodInfoModel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/NeighborHoodInfoModel.java
new file mode 100644
index 0000000000..8dbdbafccd
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/NeighborHoodInfoModel.java
@@ -0,0 +1,32 @@
+package com.epmet.model;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @Author zxc
+ * @DateTime 2022/2/15 2:15 下午
+ * @DESC
+ */
+@Data
+public class NeighborHoodInfoModel {
+
+ @ExcelProperty(value = "所属组织")
+ private String agencyName;
+
+ @ExcelProperty(value = "所属网格")
+ private String gridName;
+
+ @ExcelProperty(value = "小区名称")
+ private String neighborHoodName;
+
+ @ExcelProperty(value = "关联物业")
+ private String propertyName;
+
+ @ExcelProperty(value = "详细地址")
+ private String address;
+
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java
index 4f3ece54a8..2329e467d6 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java
@@ -23,7 +23,9 @@ import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.IcHouseDao;
import com.epmet.dto.result.HouseInfoDTO;
+import com.epmet.dto.result.ImportResultDTO;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@@ -43,6 +45,9 @@ public class IcHouseRedis {
@Autowired
private IcHouseDao icHouseDao;
+ @Autowired
+ private RedisTemplate redisTemplate;
+
public void delete(Object[] ids) {
}
@@ -79,4 +84,221 @@ public class IcHouseRedis {
return houseInfo;
}
+ /**
+ * @Description 存放房屋临时缓存
+ * @param customerId
+ * @param map
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 9:04 上午
+ */
+ public void setTemporaryCacheHouse(String customerId, Map map,String userId){
+ String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
+ redisUtils.hMSet(key,map);
+ }
+
+ /**
+ * @Description 获取房屋临时缓存
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 9:28 上午
+ */
+ public Object getTemporaryCacheHouse(String customerId,String userId,String buildingIdAndUnitIdAndHouseName){
+ String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
+ return redisUtils.hGet(key, buildingIdAndUnitIdAndHouseName);
+ }
+
+ /**
+ * @Description 删除房屋临时缓存
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 9:29 上午
+ */
+ public void delTemporaryCacheHouses(String customerId,String userId){
+ String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
+ redisUtils.delete(key);
+ }
+
+ /**
+ * @Description 保存网格临时缓存
+ * @param customerId
+ * @param map
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:49 下午
+ */
+ public void setTemporaryCacheGrid(String customerId, Map map,String userId) {
+ String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId, userId);
+ redisUtils.hMSet(key, map);
+ }
+
+ /**
+ * @Description 获取网格临时缓存【单个】
+ * @param customerId
+ * @param userId
+ * @param gridName
+ * @author zxc
+ * @date 2022/2/14 1:49 下午
+ */
+ public Object getTemporaryCacheGrid(String customerId,String userId,String gridName){
+ String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
+ Object o = redisUtils.hGet(key, gridName);
+ return o;
+ }
+
+ /**
+ * @Description 获取网格临时缓存【多个】
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:50 下午
+ */
+ public Map getTemporaryCacheGrids(String customerId,String userId){
+ String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
+ return redisUtils.hGetAll(key);
+ }
+
+ /**
+ * @Description 删除网格临时缓存
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:50 下午
+ */
+ public void delTemporaryCacheGrids(String customerId,String userId){
+ String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
+ redisUtils.delete(key);
+ }
+
+ /**
+ * @Description 保存临时小区缓存
+ * @param customerId
+ * @param map
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:50 下午
+ */
+ public void setTemporaryCacheNeighBorHood(String customerId, Map map,String userId) {
+ String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId, userId);
+ redisUtils.hMSet(key, map);
+ }
+
+ /**
+ * @Description 获取临时小区缓存【单个】
+ * @param customerId
+ * @param userId
+ * @param gridIdAndNeighborHoodName
+ * @author zxc
+ * @date 2022/2/14 1:50 下午
+ */
+ public Object getTemporaryCacheNeighBorHood(String customerId,String userId,String gridIdAndNeighborHoodName){
+ String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId,userId);
+ return redisUtils.hGet(key, gridIdAndNeighborHoodName);
+ }
+
+ /**
+ * @Description 删除临时小区缓存
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:51 下午
+ */
+ public void delTemporaryCacheNeighBorHood(String customerId,String userId){
+ String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId,userId);
+ redisUtils.delete(key);
+ }
+
+ /**
+ * @Description 保存临时楼栋缓存
+ * @param customerId
+ * @param map
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:51 下午
+ */
+ public void setTemporaryCacheBuilding(String customerId, Map map,String userId) {
+ String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId, userId);
+ redisUtils.hMSet(key, map);
+ }
+
+ /**
+ * @Description 获取临时楼栋缓存【单个】
+ * @param customerId
+ * @param userId
+ * @param neighborHoodIdAndBuildingName
+ * @author zxc
+ * @date 2022/2/14 1:51 下午
+ */
+ public Object getTemporaryCacheBuilding(String customerId,String userId,String neighborHoodIdAndBuildingName){
+ String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId,userId);
+ return redisUtils.hGet(key, neighborHoodIdAndBuildingName);
+ }
+
+ /**
+ * @Description 删除临时楼栋缓存
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:51 下午
+ */
+ public void delTemporaryCacheBuilding(String customerId,String userId){
+ String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId,userId);
+ redisUtils.delete(key);
+ }
+
+ /**
+ * @Description 保存临时楼栋单元缓存
+ * @param customerId
+ * @param map
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:51 下午
+ */
+ public void setTemporaryCacheBuildingUnit(String customerId, Map map,String userId) {
+ String key = RedisKeys.getTemporaryBuildingUnitInfoCacheKey(customerId, userId);
+ redisUtils.hMSet(key, map);
+ }
+
+ /**
+ * @Description 获取临时楼栋单元缓存【单个】
+ * @param customerId
+ * @param userId
+ * @param buildingIdAndUnitName
+ * @author zxc
+ * @date 2022/2/14 1:51 下午
+ */
+ public Object getTemporaryCacheBuildingUnit(String customerId,String userId,String buildingIdAndUnitName){
+ String key = RedisKeys.getTemporaryBuildingUnitInfoCacheKey(customerId,userId);
+ return redisUtils.hGet(key, buildingIdAndUnitName);
+ }
+
+ /**
+ * @Description 删除临时楼栋单元缓存
+ * @param customerId
+ * @param userId
+ * @author zxc
+ * @date 2022/2/14 1:51 下午
+ */
+ public void delTemporaryCacheBuildingUnit(String customerId,String userId){
+ String key = RedisKeys.getTemporaryBuildingUnitInfoCacheKey(customerId,userId);
+ redisUtils.delete(key);
+ }
+
+ public void setImportResultDTO(String customerId, String userId, ImportResultDTO dto){
+ String key = RedisKeys.getTemporaryImportResultCacheKey(customerId,userId);
+ Map result = BeanUtil.beanToMap(dto, false, true);
+ redisUtils.hMSet(key,result,RedisUtils.MINUTE_ONE_EXPIRE);
+ }
+
+ public ImportResultDTO getImportResultDTO(String customerId, String userId){
+ String key = RedisKeys.getTemporaryImportResultCacheKey(customerId,userId);
+ Map map = redisUtils.hGetAll(key);
+ if (CollectionUtils.isEmpty(map)){
+ return null;
+ }
+ return ConvertUtils.mapToEntity(map,ImportResultDTO.class);
+ }
+
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java
index 81b70a4bd2..240c24d454 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java
@@ -17,15 +17,19 @@
package com.epmet.service;
+import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.BuildingTreeLevelDTO;
import com.epmet.dto.form.IcBulidingFormDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.dto.result.BuildingResultPagedDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
import com.epmet.excel.IcBuildingExcel;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.util.List;
/**
@@ -62,4 +66,14 @@ public interface BuildingService {
List buildingListByIds(List buildingIdList);
BuildingResultPagedDTO buildinglistbyidsPage(List buildingIdList, Integer pageNo, Integer pageSize);
+
+ /**
+ * @Description 楼宇导入
+ * @param formDTO
+ * @param file
+ * @author zxc
+ * @date 2022/2/13 10:18 上午
+ */
+ Result buildingImportExcel(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException;
+
}
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java
index 5b5ff7d05d..b7279e59ad 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java
@@ -102,4 +102,15 @@ public interface IcBuildingService extends BaseService {
* @Date 2021/10/26 14:43
*/
List getBuildingOptions(String neighborHoodId);
+
+ /**
+ * 根据楼栋名获取楼栋信息
+ *
+ * @Param neighborHoodId
+ * @Param buildingName
+ * @Return {@link IcBuildingDTO}
+ * @Author zhaoqifeng
+ * @Date 2022/2/14 15:19
+ */
+ IcBuildingDTO getBuildingInfo(String neighborHoodId, String buildingName);
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java
index 40045f2b75..0d315539e6 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java
@@ -102,4 +102,14 @@ public interface IcBuildingUnitService extends BaseService
* @Date 2021/10/26 14:49
*/
List getUnitOptions(String buildingId);
+
+ /**
+ * 根据单元名获取单元信息
+ * @Param buildingId
+ * @Param unitName
+ * @Return {@link IcBuildingUnitDTO}
+ * @Author zhaoqifeng
+ * @Date 2022/2/14 15:42
+ */
+ IcBuildingUnitDTO getUnitInfo(String buildingId, String unitName);
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java
index 3592d82175..6a7ba74a55 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java
@@ -20,9 +20,16 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.IcNeighborHoodDTO;
+import com.epmet.dto.ImportGeneralDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.entity.IcNeighborHoodEntity;
+import com.epmet.entity.IcNeighborHoodPropertyEntity;
+import com.epmet.entity.IcPropertyManagementEntity;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -112,4 +119,28 @@ public interface IcNeighborHoodService extends BaseService
* @Date 2021/11/8 10:45
*/
List getListByIds(List ids);
+
+ /**
+ * @Description 小区信息导入
+ * @param formDTO
+ * @param file
+ * @author zxc
+ * @date 2022/2/12 11:11 上午
+ */
+ Result neighborhoodImport(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException;
+
+ /**
+ * 获取导入小区,楼栋,单元ID
+ *
+ * @Param formDTO
+ * @Param list
+ * @Return {@link List< ImportGeneralDTO >}
+ * @Author zhaoqifeng
+ * @Date 2022/2/14 9:40
+ */
+ List getImportInfo(ImportInfoFormDTO formDTO, List list);
+
+ void insertPropertyManagement(List propertyManagementEntities);
+
+ void neighborHoodPropertyInsert(List entities);
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
index cdf6227a8e..15daabf246 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
@@ -1,6 +1,9 @@
package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -13,18 +16,26 @@ import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.*;
import com.epmet.dto.BuildingTreeLevelDTO;
import com.epmet.dto.CustomerStaffAgencyDTO;
import com.epmet.dto.IcBuildingDTO;
import com.epmet.dto.form.IcBulidingFormDTO;
+import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.dto.result.BuildingResultPagedDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
+import com.epmet.dto.result.ImportResultDTO;
import com.epmet.entity.*;
import com.epmet.enums.BuildingTypeEnums;
import com.epmet.excel.IcBuildingExcel;
+import com.epmet.model.BuildingInfoModel;
+import com.epmet.model.HouseInfoModel;
+import com.epmet.model.ImportBuildingInfoListener;
+import com.epmet.redis.IcHouseRedis;
+import com.epmet.service.*;
import com.epmet.service.BuildingService;
import com.epmet.service.IcBuildingService;
import com.epmet.service.IcBuildingUnitService;
@@ -36,9 +47,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -71,6 +85,10 @@ public class BuildingServiceImpl implements BuildingService {
private CustomerStaffAgencyDao customerStaffAgencyDao;
@Resource
private IcBuildingUnitDao icBuildingUnitDao;
+ @Autowired
+ private IcHouseRedis icHouseRedis;
+ @Autowired
+ private IcNeighborHoodService neighborHoodService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -174,7 +192,7 @@ public class BuildingServiceImpl implements BuildingService {
buildingTreeLevelDTO.setId(item.getId());
buildingTreeLevelDTO.setPId(item.getGridId());
buildingTreeLevelDTO.setLabel(item.getNeighborHoodName());
- buildingTreeLevelDTO.setLevel("neighbourHood");
+ buildingTreeLevelDTO.setLevel("neighborHood");
buildingTreeLevelDTO.setLongitude(item.getLongitude());
buildingTreeLevelDTO.setLatitude(item.getLatitude());
buildingTreeLevelDTO.setChildren(new ArrayList<>());
@@ -325,7 +343,7 @@ public class BuildingServiceImpl implements BuildingService {
icBuildingUnitService.insertBatch(icBuildingUnitEntityList);
/* if(!"".equals(str)){
- return new Result().error(9999, str.append("不存在").toString());
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str.append("不存在").toString());
}*/
return numList;
}
@@ -366,6 +384,54 @@ public class BuildingServiceImpl implements BuildingService {
return result;
}
+ /**
+ * @Description 楼宇导入
+ * 根据左侧树选中的层级,可导入对应数据:
+ * 1. 选中社区可导入该社区下所有小区信息、楼宇信息、房屋信息(没有匹配的小区、楼宇均新增,网格没有对应的不新增);
+ * 2. 选中网格可导入该网格下所有小区信息、楼宇信息、房屋信息(没有匹配的小区、楼宇均新增);
+ * 3. 选中小区可导入该小区下所有楼宇信息、房屋信息(没有匹配的楼宇均新增);
+ * 4. 选中楼宇可导入该楼宇下所有房屋信息。
+ * @param formDTO
+ * @param file
+ * @author zxc
+ * @date 2022/2/13 10:15 上午
+ */
+ @Override
+ public Result buildingImportExcel(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException {
+ ExcelReader excelReader = null;
+ try {
+ InputStream inputStream = null;
+ try {
+ inputStream = file.getInputStream();
+ } catch (IOException e) {
+ return new Result().error("读取文件失败");
+ }
+ excelReader = EasyExcel.read(inputStream).build();
+ // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
+ ReadSheet readSheet = EasyExcel.readSheet(0).head(BuildingInfoModel.class)
+ .registerReadListener(new ImportBuildingInfoListener(formDTO,icHouseRedis,icBuildingDao,neighborHoodService))
+ .build();
+ excelReader.read(readSheet);
+ } finally {
+ if (excelReader != null) {
+ excelReader.finish();
+ }
+ }
+ ImportResultDTO dto = icHouseRedis.getImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId());
+ if (null == dto){
+ return new Result<>();
+ }
+ List nums = dto.getNums();
+ Integer num = dto.getNum();
+ String s = "共%s条数据,导入成功%s条。";
+ if (nums.size() > NumConstant.ZERO){
+ Collections.sort(nums);
+ s = s + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"条导入失败";
+ return new Result<>().error(9999,String.format(s,num,num - nums.size()));
+ }
+ return new Result<>().error(9999,String.format(s,num,num));
+ }
+
private List searchAllBuilding(ListIcNeighborHoodFormDTO formDTO) {
// QueryWrapper neighborHoodEntityQueryWrapper = new QueryWrapper<>();
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffGridServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffGridServiceImpl.java
index 184a4b7acd..c744a1b0a2 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffGridServiceImpl.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffGridServiceImpl.java
@@ -176,8 +176,9 @@ public class CustomerStaffGridServiceImpl extends BaseServiceImpl();
}
- gridStaff.stream().forEach(g -> data.stream().filter(d -> g.getStaffId().equals(d.getStaffId()) && g.getGridId().equals(d.getGridId())).forEach(d -> g.setMobile(d.getMobile())));
- return gridStaff.stream().filter(g -> StringUtils.isNotBlank(g.getMobile())).collect(Collectors.toList());
+ /*gridStaff.stream().forEach(g -> data.stream().filter(d -> g.getStaffId().equals(d.getStaffId()) && g.getGridId().equals(d.getGridId())).forEach(d -> g.setMobile(d.getMobile())));
+ return gridStaff.stream().filter(g -> StringUtils.isNotBlank(g.getMobile())).collect(Collectors.toList());*/
+ return data;
}
/**
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java
index ea85e2ce33..122e9755a0 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java
@@ -133,4 +133,24 @@ public class IcBuildingServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(IcBuildingEntity::getNeighborHoodId, neighborHoodId);
+ wrapper.eq(IcBuildingEntity::getBuildingName, buildingName);
+ IcBuildingEntity entity = baseDao.selectOne(wrapper);
+ return ConvertUtils.sourceToTarget(entity, IcBuildingDTO.class);
+ }
+
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java
index 4b8cb1f094..3b8409c0cd 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java
@@ -133,4 +133,24 @@ public class IcBuildingUnitServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(IcBuildingUnitEntity::getBuildingId, buildingId);
+ wrapper.eq(IcBuildingUnitEntity::getUnitNum, unitName);
+ IcBuildingUnitEntity entity = baseDao.selectOne(wrapper);
+ return ConvertUtils.sourceToTarget(entity, IcBuildingUnitDTO.class);
+ }
+
}
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
index 3d5b6fa96b..99db449d72 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
@@ -17,30 +17,56 @@
package com.epmet.service.impl;
+import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
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;
import com.epmet.commons.tools.constant.FieldConstant;
+import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.OptionResultDTO;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
+import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
+import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.constant.CustomerGridConstant;
+import com.epmet.dao.CustomerGridDao;
+import com.epmet.dao.IcBuildingDao;
import com.epmet.dao.IcNeighborHoodDao;
-import com.epmet.dto.IcNeighborHoodDTO;
-import com.epmet.entity.IcNeighborHoodEntity;
-import com.epmet.service.IcNeighborHoodService;
+import com.epmet.dao.IcPropertyManagementDao;
+import com.epmet.dto.*;
+import com.epmet.dto.form.ImportInfoFormDTO;
+import com.epmet.dto.result.ImportResultDTO;
+import com.epmet.dto.result.InfoByNamesResultDTO;
+import com.epmet.entity.*;
+import com.epmet.excel.IcNeighborHoodExcel;
+import com.epmet.model.ImportNeighborHoodInfoListener;
+import com.epmet.model.NeighborHoodInfoModel;
+import com.epmet.redis.IcHouseRedis;
+import com.epmet.service.*;
+import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.ListUtils;
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.web.multipart.MultipartFile;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -53,6 +79,22 @@ import java.util.stream.Collectors;
@Service
public class IcNeighborHoodServiceImpl extends BaseServiceImpl implements IcNeighborHoodService {
+ @Autowired
+ private CustomerGridDao customerGridDao;
+ @Autowired
+ private IcPropertyManagementDao propertyManagementDao;
+ @Autowired
+ private IcPropertyManagementService propertyManagementService;
+ @Autowired
+ private IcNeighborHoodPropertyService neighborHoodPropertyService;
+ @Resource
+ private IcBuildingService icBuildingService;
+ @Resource
+ private IcBuildingUnitService icBuildingUnitService;
+ @Autowired
+ private IcHouseRedis icHouseRedis;
+ @Autowired
+ private IcBuildingDao icBuildingDao;
@Override
public PageData page(Map params) {
@@ -160,4 +202,411 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl importResult = ExcelPoiUtils.importExcelMore(file, 0, 1, IcNeighborHoodExcel.class);
+ List failList = importResult.getFailList();
+ //存放错误数据行号
+ List numList = new ArrayList<>();
+ if(CollectionUtils.isNotEmpty(failList)){
+ for ( IcNeighborHoodExcel entity : failList) {
+ //打印失败的行 和失败的信息
+ log.error("第{}行,{}",entity.getRowNum(),entity.getErrorMsg());
+ numList.add(entity.getRowNum());
+ }
+ }
+ List result =importResult.getList();
+ return disposeImportNeighborhood(formDTO,result);*/
+ return importNeighbor(formDTO,file);
+ }
+
+ /**
+ * @Description 根据左侧树选中的层级,可导入对应数据:
+ * 1. 选中社区可导入该社区下所有小区信息、楼宇信息、房屋信息(没有匹配的小区、楼宇均新增,网格没有对应的不新增);
+ * 2. 选中网格可导入该网格下所有小区信息、楼宇信息、房屋信息(没有匹配的小区、楼宇均新增);
+ * 3. 选中小区可导入该小区下所有楼宇信息、房屋信息(没有匹配的楼宇均新增);
+ * 4. 选中楼宇可导入该楼宇下所有房屋信息。
+ * @param formDTO
+ * @param result
+ * @author zxc
+ * @date 2022/2/12 2:02 下午
+ */
+ public Result disposeImportNeighborhood(ImportInfoFormDTO formDTO, List result){
+ if (CollectionUtils.isEmpty(result)){
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"excel表格内没有数据");
+ }
+ List nums = new ArrayList<>();
+ List gridNames = result.stream().map(IcNeighborHoodExcel::getGridName).distinct().collect(Collectors.toList());
+ // 1. 查询数据网格是否存在
+ List gridInfos = customerGridDao.selectGridInfoByNames(gridNames, formDTO.getCustomerId());
+ if (CollectionUtils.isEmpty(gridInfos)){
+ // 网格没有对应的不新增
+ for (int i = NumConstant.ONE; i <= result.size(); i++) {
+ nums.add(i);
+ }
+ String str = String.format("共%s条,成功导入%s条。",result.size(),0);
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
+ }
+ result.forEach(r -> {
+ for (InfoByNamesResultDTO g : gridInfos) {
+ if (r.getGridName().equals(g.getGridName())){
+ // 能查询出网格,变为true
+ r.setStatus(true);
+ break;
+ }
+ }
+ });
+ Map> groupStatus = result.stream().collect(Collectors.groupingBy(IcNeighborHoodExcel::getStatus));
+ // 只获取能查询到的网格
+ List neighborHoods = groupStatus.get(true);
+ // 2. 查询组织选中组织下存在的小区
+ List existNames = baseDao.selectNeighborhoodNameByNames(neighborHoods.stream().map(IcNeighborHoodExcel::getNeighborHoodName).distinct().collect(Collectors.toList()), formDTO.getCustomerId());
+ // 为了显示多少行插入成功,未成功
+ result.forEach(r -> {
+ for (String s : existNames) {
+ if (r.getNeighborHoodName().equals(s)){
+ // 数据库已存在此小区名变为true
+ r.setExistNameStatus(true);
+ break;
+ }
+ }
+ });
+ Map> groupByExistName = neighborHoods.stream().collect(Collectors.groupingBy(IcNeighborHoodExcel::getExistNameStatus));
+ // 获取需要插入的数据
+ List needInsert = groupByExistName.get(false);
+ if (CollectionUtils.isEmpty(needInsert)){
+ for (int i = NumConstant.ONE; i <= result.size(); i++) {
+ nums.add(i);
+ }
+ String str = String.format("共%s条,成功导入%s条。",result.size(),0);
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
+ }
+ if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
+ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getOrgId());
+ if (null == agencyInfo){
+ throw new EpmetException("未查询到组织信息...");
+ }
+ needInsert.forEach(n -> {
+ if (agencyInfo.getOrganizationName().equals(n.getAgencyName())){
+ // 所属组织名一样变为true
+ n.setAgencyNameStatus(true);
+ }
+ });
+ }else {
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
+ if (null == gridInfo){
+ throw new EpmetException("未查询到网格信息...");
+ }
+ needInsert.forEach(n -> {
+ if (gridInfo.getGridName().equals(n.getGridName())){
+ //网格名一样变为true
+ n.setAgencyNameStatus(true);
+ }
+ });
+ }
+ Map> groupByAgencyNameStatus = needInsert.stream().collect(Collectors.groupingBy(IcNeighborHoodExcel::getAgencyNameStatus));
+ List finalNeedInsert = groupByAgencyNameStatus.get(true);
+ if (CollectionUtils.isEmpty(finalNeedInsert)){
+ for (int i = NumConstant.ONE; i <= result.size(); i++) {
+ nums.add(i);
+ }
+ String str = String.format("共%s条,成功导入%s条。",result.size(),0);
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str +"第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
+ }
+ Map collect = finalNeedInsert.stream().collect(Collectors.groupingBy(o -> o.getGridName() + "_" + o.getNeighborHoodName(), Collectors.counting()));
+ collect.forEach((k,v) -> {
+ if (Integer.valueOf(v.toString()).compareTo(1) > 0){
+ for (IcNeighborHoodExcel r : result) {
+ if (k.equals(r.getGridName()+"_"+r.getNeighborHoodName())){
+ r.setReStatus(true);
+ }
+ }
+ }
+ });
+ List realFinalResult = new ArrayList<>();
+ for (int i = NumConstant.ZERO; i < result.size(); i++) {
+ if (result.get(i).getStatus() == true && result.get(i).getExistNameStatus() == false &&
+ result.get(i).getAgencyNameStatus() == true && result.get(i).getReStatus() == false){
+ realFinalResult.add(result.get(i));
+ }
+ }
+ List entities = ConvertUtils.sourceToTarget(realFinalResult, IcNeighborHoodEntity.class);
+ entities.forEach(e -> {
+ for (InfoByNamesResultDTO g : gridInfos) {
+ if (e.getGridName().equals(g.getGridName())){
+ e.setAgencyId(g.getAgencyId());
+ e.setAgencyPids(g.getAgencyPids());
+ e.setCustomerId(formDTO.getCustomerId());
+ e.setGridId(g.getGridId());
+ e.setParentAgencyId(g.getParentAgencyId());
+ break;
+ }
+ }
+ });
+ // 物业表插入
+ List propertyNames = finalNeedInsert.stream().map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
+ List disposePropertyNames = finalNeedInsert.stream().map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
+ List existPropertyNames = propertyManagementDao.selectExistNames(propertyNames);
+ disposePropertyNames.removeAll(existPropertyNames);
+ List propertyManagementEntities = new ArrayList<>();
+ if (CollectionUtils.isNotEmpty(disposePropertyNames)){
+ disposePropertyNames.forEach(name -> {
+ IcPropertyManagementEntity e = new IcPropertyManagementEntity();
+ e.setName(name);
+ propertyManagementEntities.add(e);
+ });
+ }
+ importInsert(entities,propertyManagementEntities);
+ // 小区物业关系表插入
+ List neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(entities, NeighborHoodAndManagementDTO.class);
+ List propertyManagementInfos = propertyManagementDao.selectIdByName(propertyNames);
+ neighborHoodAndManagementDTOS.forEach(n -> propertyManagementInfos.stream().filter(p -> p.getName().equals(n.getPropertyName()))
+ .forEach(p -> {
+ n.setPropertyId(p.getId());
+ n.setNeighborHoodId(n.getId());
+ }));
+ List icNeighborHoodPropertyEntities = ConvertUtils.sourceToTarget(neighborHoodAndManagementDTOS, IcNeighborHoodPropertyEntity.class);
+ neighborHoodPropertyInsert(icNeighborHoodPropertyEntities);
+
+ for (int i = NumConstant.ZERO; i < result.size(); i++) {
+ if (result.get(i).getStatus() == false || result.get(i).getExistNameStatus() == true || result.get(i).getAgencyNameStatus() == false || result.get(i).getReStatus() == true){
+ nums.add(i + NumConstant.ONE);
+ }
+ }
+ String str = String.format("共%s条,成功导入%s条。",result.size(),entities.size());
+ if (CollectionUtils.isNotEmpty(nums)){
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
+ }
+ return new Result().ok(str);
+ }
+
+ public Result importNeighbor(ImportInfoFormDTO formDTO, MultipartFile file){
+ ExcelReader excelReader = null;
+ try {
+ InputStream inputStream = null;
+ try {
+ inputStream = file.getInputStream();
+ } catch (IOException e) {
+ return new Result().error("读取文件失败");
+ }
+ excelReader = EasyExcel.read(inputStream).build();
+ // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
+ ReadSheet readSheet = EasyExcel.readSheet(0).head(NeighborHoodInfoModel.class)
+ .registerReadListener(new ImportNeighborHoodInfoListener(formDTO,icHouseRedis,icBuildingDao,this,propertyManagementDao))
+ .build();
+ excelReader.read(readSheet);
+ } finally {
+ if (excelReader != null) {
+ excelReader.finish();
+ }
+ }
+ ImportResultDTO dto = icHouseRedis.getImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId());
+ if (null == dto){
+ return new Result<>();
+ }
+ List nums = dto.getNums();
+ Integer num = dto.getNum();
+ String s = "共%s条数据,导入成功%s条。";
+ if (nums.size() > NumConstant.ZERO){
+ Collections.sort(nums);
+ s = s + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"条导入失败";
+ return new Result<>().error(9999,String.format(s,num,num - nums.size()));
+ }
+ return new Result<>().error(9999,String.format(s,num,num));
+ }
+
+ /**
+ * @Description 小区插入,物业插入
+ * @param entities
+ * @param propertyManagementEntities
+ * @author zxc
+ * @date 2022/2/13 10:09 上午
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void importInsert(List entities,List propertyManagementEntities){
+ List> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED);
+ partition.forEach(p -> {
+ insertBatch(p);
+ });
+ List> partition1 = ListUtils.partition(propertyManagementEntities, NumConstant.ONE_HUNDRED);
+ partition1.forEach(p -> {
+ propertyManagementService.insertBatch(p);
+ });
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void insertPropertyManagement(List propertyManagementEntities){
+ if (CollectionUtils.isEmpty(propertyManagementEntities)){
+ return;
+ }
+ List> partition1 = ListUtils.partition(propertyManagementEntities, NumConstant.ONE_HUNDRED);
+ partition1.forEach(p -> {
+ propertyManagementService.insertBatch(p);
+ });
+ }
+
+ /**
+ * @Description 小区物业关系表插入
+ * @param entities
+ * @author zxc
+ * @date 2022/2/13 10:09 上午
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void neighborHoodPropertyInsert(List entities){
+ List> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED);
+ partition.forEach(p -> {
+ neighborHoodPropertyService.insertBatch(p);
+ });
+ }
+
+ /**
+ * 获取导入小区,楼栋,单元ID
+ *
+ * @param formDTO
+ * @param list
+ * @Param formDTO
+ * @Param list
+ * @Return {@link List< ImportGeneralDTO >}
+ * @Author zhaoqifeng
+ * @Date 2022/2/14 9:40
+ */
+ @Override
+ public List getImportInfo(ImportInfoFormDTO formDTO, List list) {
+ list.forEach(item -> {
+ if (StringUtils.isEmpty(item.getNeighborHoodId())) {
+ //1.获取小区ID,判断小区是否存在,不存在则添加小区,存在则直接获取小区ID
+ String neighborHoodId = getNeighborHoodId(formDTO.getCustomerId(), item);
+ item.setNeighborHoodId(neighborHoodId);
+ //2.获取楼栋ID,判断楼栋是否存在,不存在则添加楼栋,存在则直接获取楼栋ID
+ if (StringUtils.isEmpty(item.getBuildingId()) && StringUtils.isNotEmpty(item.getBuildingName())) {
+ String buildingId = getBuildingId(formDTO.getCustomerId(), item);
+ item.setBuildingId(buildingId);
+ }
+ //3.获取单元ID,判断单元是否存在,不存在则添加单元,存在则直接获取单元ID
+ if (null != item.getBuildingUnit()) {
+ String unitId = getUnitId(formDTO.getCustomerId(), item);
+ item.setBuildingUnitId(unitId);
+ }
+ } else if (StringUtils.isNotEmpty(item.getNeighborHoodId()) && StringUtils.isEmpty(item.getBuildingId())) {
+ //获取楼栋ID,判断楼栋是否存在,不存在则添加楼栋,存在则直接获取楼栋ID
+ String buildingId = getBuildingId(formDTO.getCustomerId(), item);
+ item.setBuildingId(buildingId);
+ //获取单元ID,判断单元是否存在,不存在则添加单元,存在则直接获取单元ID
+ if (null != item.getBuildingUnit()) {
+ String unitId = getUnitId(formDTO.getCustomerId(), item);
+ item.setBuildingUnitId(unitId);
+ }
+ }
+ });
+
+ return list;
+ }
+
+ /**
+ * 根据小区名获取小区ID,如果没有,先新增小区
+ * @Param gridId
+ * @Param name
+ * @Return {@link String}
+ * @Author zhaoqifeng
+ * @Date 2022/2/14 9:50
+ */
+ @Transactional(rollbackFor = Exception.class)
+ private String getNeighborHoodId(String customerId, ImportGeneralDTO info) {
+ //根据网格ID和小区名获取小区信息
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(IcNeighborHoodEntity::getGridId, info.getGridId());
+ wrapper.eq(IcNeighborHoodEntity::getNeighborHoodName, info.getNeighborHoodName());
+ IcNeighborHoodEntity entity = baseDao.selectOne(wrapper);
+ if (null != entity) {
+ info.setNeighborHoodExistStatus(true);
+ return entity.getId();
+ }
+ entity = new IcNeighborHoodEntity();
+ entity.setCustomerId(customerId);
+ entity.setAgencyId(info.getAgencyId());
+ entity.setParentAgencyId(info.getPid());
+ entity.setAgencyPids(info.getPids());
+ entity.setGridId(info.getGridId());
+ entity.setNeighborHoodName(info.getNeighborHoodName());
+ entity.setAddress(info.getAddress());
+ entity.setRemark(info.getRemark());
+ baseDao.insert(entity);
+ return entity.getId();
+ }
+
+ /**
+ * 获取楼栋ID
+ * @Param customerId
+ * @Param info
+ * @Return {@link String}
+ * @Author zhaoqifeng
+ * @Date 2022/2/14 15:36
+ */
+ private String getBuildingId(String customerId, ImportGeneralDTO info) {
+ //根据小区ID和楼栋名获取楼栋信息
+ IcBuildingDTO building = icBuildingService.getBuildingInfo(info.getNeighborHoodId(), info.getBuildingName());
+ if (null != building) {
+ info.setBuildingExistStatus(true);
+ return building.getId();
+ }
+ IcBuildingEntity buildingEntity = new IcBuildingEntity();
+ buildingEntity.setCustomerId(customerId);
+ buildingEntity.setNeighborHoodId(info.getNeighborHoodId());
+ buildingEntity.setBuildingName(info.getBuildingName());
+ buildingEntity.setType(null == info.getType()?NumConstant.ONE_STR:info.getType());
+ buildingEntity.setSort(NumConstant.ZERO);
+ buildingEntity.setTotalUnitNum(info.getTotalUnitNum());
+ buildingEntity.setTotalFloorNum(info.getTotalFloorNum());
+ buildingEntity.setTotalHouseNum(info.getTotalHouseNum());
+ icBuildingService.insert(buildingEntity);
+ if (null != info.getTotalUnitNum() && info.getTotalUnitNum() > NumConstant.ZERO) {
+ //设置楼宇单元
+ List unitList = new ArrayList<>();
+ for (int i =0 ; i
+
+
+
diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
index d4f3847235..ee64e59aca 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
+++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
@@ -221,4 +221,112 @@
order by gridName,neighborHoodName,buildingName
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml
index 73c23350d7..36daaf0d27 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml
+++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml
@@ -214,4 +214,18 @@
and a.id !=#{neighborId}
+
+
+
diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPropertyManagementDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPropertyManagementDao.xml
index 725fdf969f..5a5cf172a3 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPropertyManagementDao.xml
+++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPropertyManagementDao.xml
@@ -23,4 +23,29 @@
m.DEL_FLAG = '0'
AND m.`NAME` = #{name}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/GovProjectApplication.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/GovProjectApplication.java
index 37c767c4b3..47fa0b89ac 100644
--- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/GovProjectApplication.java
+++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/GovProjectApplication.java
@@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableAsync;
/**
*
@@ -14,6 +15,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
+@EnableAsync
@ServletComponentScan
public class GovProjectApplication {
public static void main(String[] args) {
diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
index e6e70e2c73..6a591d9e8d 100644
--- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
+++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
@@ -453,10 +453,12 @@ public class ProjectServiceImpl extends BaseServiceImpl implements ProjectTraceS
private ResiEventReportOrgDao resiEventReportOrgDao;
@Autowired
private BlockChainUploadService blockChainUploadService;
+ @Autowired
+ private YuShanSysApiService yuShanSysApiService;
+
@Override
public List getPendProjectList(TokenDto tokenDto, ProjectListFromDTO fromDTO) {
@@ -555,6 +560,12 @@ public class ProjectTraceServiceImpl implements ProjectTraceS
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【项目流转】上链失败,错误信息:{}", errorMsg);
}
+ //项目立项如果是榆山街道的工作人员,需要调用【更新用户积分(双实信息更新 网格巡查)】/api/points/behavior/updateUserPoints
+ UpdateUserPointsFormDTO updateUserPointsFormDTO=new UpdateUserPointsFormDTO();
+ updateUserPointsFormDTO.setCustomerId(projectEntity.getCustomerId());
+ updateUserPointsFormDTO.setStaffId(projectEntity.getCreatedBy());
+ updateUserPointsFormDTO.setBehaviorType(BehaviorTypeYuShanEnum.GRID_REPORT_EVENT.getCode());
+ yuShanSysApiService.updateUserPoints(projectEntity.getCustomerId(),Arrays.asList(updateUserPointsFormDTO));
}
/**
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleCategoryDictDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleCategoryDictDTO.java
new file mode 100644
index 0000000000..a93b2ec63b
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleCategoryDictDTO.java
@@ -0,0 +1,99 @@
+package com.epmet.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 党员风采分类字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2022-02-12
+ */
+@Data
+public class IcPartymemberStyleCategoryDictDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 楼栋主键
+ */
+ private String id;
+
+ /**
+ * 客户id
+ */
+ private String customerId;
+
+ /**
+ * 上级分类ID 顶级此列存储0
+ */
+ private String pid;
+
+ /**
+ * 所有上级分类ID英文顿号隔开,顶级此列存储0
+ */
+ private String pids;
+
+ /**
+ * 分类编码,分类编码+customer_id唯一;从1000开始
+ */
+ private String categoryCode;
+
+ /**
+ * 上级分类编码
+ */
+ private String parentCategoryCode;
+
+ /**
+ * 分类名称
+ */
+ private String categoryName;
+
+ /**
+ * 分类级别1,2,3,4.... 目前只有一级
+ */
+ private Integer level;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 0:可用;1:被禁用。默认0
+ */
+ private Boolean beDisabled;
+
+ /**
+ * 删除标识 0未删除、1已删除
+ */
+ private String delFlag;
+
+ /**
+ * 乐观锁
+ */
+ private Integer revision;
+
+ /**
+ * 创建人
+ */
+ private String createdBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createdTime;
+
+ /**
+ * 更新人
+ */
+ private String updatedBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleDTO.java
index 1bfdc10d0b..a2cda91a24 100644
--- a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleDTO.java
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleDTO.java
@@ -55,6 +55,11 @@ public class IcPartymemberStyleDTO implements Serializable {
*/
private String gridId;
+ /**
+ * 网格的所有上级
+ */
+ private String gridPids;
+
private String gridName;
/**
@@ -98,5 +103,9 @@ public class IcPartymemberStyleDTO implements Serializable {
private Date updatedTime;
private List imageList;
-
+ /**
+ * 分类名称
+ */
+ private String categoryName;
+ private String categoryId;
}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/AddStyleCategoryFormDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/AddStyleCategoryFormDTO.java
new file mode 100644
index 0000000000..729b9fb731
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/AddStyleCategoryFormDTO.java
@@ -0,0 +1,36 @@
+package com.epmet.resi.partymember.dto.partymember.form;
+
+import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * 【党员风采分类】添加或修改分类
+ */
+@Data
+public class AddStyleCategoryFormDTO implements Serializable {
+ public interface AddUserInternalGroup {
+ }
+
+ public interface AddUserShowGroup extends CustomerClientShowGroup {
+ }
+
+ @NotBlank(message = "customerId不能为空", groups = AddUserInternalGroup.class)
+ private String customerId;
+
+ /**
+ * 分类名称
+ */
+ @NotBlank(message = "分类名称不能为空", groups = AddUserShowGroup.class)
+ @Length(max = 10, groups = AddUserShowGroup.class)
+ private String categoryName;
+
+ /**
+ * 主键
+ */
+ private String categoryId;
+
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/PartyMemberStyleFormDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/PartyMemberStyleFormDTO.java
index 6cedb15c89..40edfb678a 100644
--- a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/PartyMemberStyleFormDTO.java
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/PartyMemberStyleFormDTO.java
@@ -22,4 +22,5 @@ public class PartyMemberStyleFormDTO implements Serializable {
private String mainDeed;
private Integer pageNo;
private Integer pageSize;
+ private String categoryId;
}
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleCategoryCommonFormDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleCategoryCommonFormDTO.java
new file mode 100644
index 0000000000..a575b8a6dc
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleCategoryCommonFormDTO.java
@@ -0,0 +1,15 @@
+package com.epmet.resi.partymember.dto.partymember.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+
+@Data
+public class StyleCategoryCommonFormDTO implements Serializable {
+ private static final long serialVersionUID = -291713921309878763L;
+ public interface AddUserInternalGroup {}
+ @NotBlank(message = "customerId不能为空",groups = AddUserInternalGroup.class)
+ private String customerId;
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleSelectListFormDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleSelectListFormDTO.java
new file mode 100644
index 0000000000..ee39dcbf74
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleSelectListFormDTO.java
@@ -0,0 +1,21 @@
+package com.epmet.resi.partymember.dto.partymember.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+
+@Data
+public class StyleSelectListFormDTO implements Serializable {
+
+ public interface AddUserInternalGroup {}
+ @NotBlank(message = "customerId不能为空",groups = AddUserInternalGroup.class)
+ private String customerId;
+
+ /**
+ * query:查询条件用;新增或者编辑:addorupdate
+ */
+ @NotBlank(message = "type不能为空",groups = AddUserInternalGroup.class)
+ private String type;
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleShowListFormDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleShowListFormDTO.java
new file mode 100644
index 0000000000..20b188919a
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleShowListFormDTO.java
@@ -0,0 +1,23 @@
+package com.epmet.resi.partymember.dto.partymember.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class StyleShowListFormDTO implements Serializable {
+ public interface AddUserInternalGroup {
+ }
+
+ @NotBlank(message = "userId不能为空", groups = AddUserInternalGroup.class)
+ private String userId;
+ @NotBlank(message = "customerId不能为空", groups = AddUserInternalGroup.class)
+ private String customerId;
+
+ @NotNull(message = "pageNo不能为空", groups = AddUserInternalGroup.class)
+ private Integer pageNo;
+ @NotNull(message = "pageSize不能为空", groups = AddUserInternalGroup.class)
+ private Integer pageSize;
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/UpdateStyleCategoryFormDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/UpdateStyleCategoryFormDTO.java
new file mode 100644
index 0000000000..0eae2aa4af
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/UpdateStyleCategoryFormDTO.java
@@ -0,0 +1,30 @@
+package com.epmet.resi.partymember.dto.partymember.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+
+@Data
+public class UpdateStyleCategoryFormDTO implements Serializable {
+ public interface DeleteInternalGroup {
+ }
+ public interface UpdateStatusInternalGroup {
+ }
+ /**
+ * 主键
+ */
+ @NotBlank(message = "categoryId不能为空", groups = {DeleteInternalGroup.class,UpdateStatusInternalGroup.class})
+ private String categoryId;
+
+ /**
+ * 0:可用;1:被禁用。默认0
+ */
+ @NotNull(message = "beDisabled不能为空", groups = {UpdateStatusInternalGroup.class})
+ private Boolean beDisabled;
+
+
+ private String userId;
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/result/StyleCategoryDictResDTO.java b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/result/StyleCategoryDictResDTO.java
new file mode 100644
index 0000000000..3c8767503d
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/result/StyleCategoryDictResDTO.java
@@ -0,0 +1,27 @@
+package com.epmet.resi.partymember.dto.partymember.result;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 【党员风采分类】列表查询
+ */
+@Data
+public class StyleCategoryDictResDTO implements Serializable {
+ /**
+ * 主键
+ */
+ private String categoryId;
+
+ /**
+ * 分类名称
+ */
+ private String categoryName;
+
+ /**
+ * 0:可用;1:被禁用。默认0
+ */
+ private Boolean beDisabled;
+
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleCategoryDictController.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleCategoryDictController.java
new file mode 100644
index 0000000000..e1212d5e56
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleCategoryDictController.java
@@ -0,0 +1,101 @@
+package com.epmet.modules.partymember.controller;
+
+import com.epmet.commons.tools.annotation.LoginUser;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.modules.partymember.service.IcPartymemberStyleCategoryDictService;
+import com.epmet.resi.partymember.dto.partymember.form.AddStyleCategoryFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.StyleCategoryCommonFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.StyleSelectListFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.UpdateStyleCategoryFormDTO;
+import com.epmet.resi.partymember.dto.partymember.result.StyleCategoryDictResDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * 党员风采分类字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2022-02-12
+ */
+@RestController
+@RequestMapping("stylecategorydict")
+public class IcPartymemberStyleCategoryDictController {
+
+ @Autowired
+ private IcPartymemberStyleCategoryDictService icPartymemberStyleCategoryDictService;
+
+ /**
+ * 【党员风采分类】列表查询
+ * @param formDTO
+ * @return
+ */
+ @PostMapping("list")
+ public Result> list(@RequestBody StyleCategoryCommonFormDTO formDTO){
+ ValidatorUtils.validateEntity(formDTO,StyleCategoryCommonFormDTO.AddUserInternalGroup.class);
+ return new Result>().ok(icPartymemberStyleCategoryDictService.queryList(formDTO.getCustomerId()));
+ }
+
+ /**
+ * 【党员风采分类】添加或修改分类
+ * @param formDTO
+ * @return
+ */
+ @PostMapping("addorupdate")
+ public Result addOrUpdate(@RequestBody AddStyleCategoryFormDTO formDTO){
+ ValidatorUtils.validateEntity(formDTO, AddStyleCategoryFormDTO.AddUserInternalGroup.class,AddStyleCategoryFormDTO.AddUserShowGroup.class);
+ icPartymemberStyleCategoryDictService.addOrUpdate(formDTO);
+ return new Result();
+ }
+
+ /**
+ * 【党员风采分类】删除分类:删除的分类如果已经使用过,清空已经使用的记录,修改时需要重新选择,
+ * @param formDTO
+ * @return
+ */
+ @PostMapping("delete")
+ public Result delete(@LoginUser TokenDto tokenDto, @RequestBody UpdateStyleCategoryFormDTO formDTO){
+ formDTO.setUserId(tokenDto.getUserId());
+ ValidatorUtils.validateEntity(formDTO,UpdateStyleCategoryFormDTO.DeleteInternalGroup.class);
+ icPartymemberStyleCategoryDictService.delete(formDTO);
+ return new Result();
+ }
+
+ /**
+ * 【党员风采分类】启用或禁用
+ * @param tokenDto
+ * @param formDTO
+ * @return
+ */
+ @PostMapping("updatestatus")
+ public Result updateStatus(@LoginUser TokenDto tokenDto, @RequestBody UpdateStyleCategoryFormDTO formDTO){
+ formDTO.setUserId(tokenDto.getUserId());
+ ValidatorUtils.validateEntity(formDTO,UpdateStyleCategoryFormDTO.UpdateStatusInternalGroup.class);
+ icPartymemberStyleCategoryDictService.updateStatus(formDTO);
+ return new Result();
+ }
+
+ /**
+ * 党员风采-分类下拉框
+ * 查询条件中:展示所有未删除的
+ * 新增活修改党员风采:展示可用的
+ *
+ * @param formDTO
+ * @return
+ */
+ @PostMapping("select-list")
+ public Result> list(@RequestBody StyleSelectListFormDTO formDTO) {
+ ValidatorUtils.validateEntity(formDTO, StyleSelectListFormDTO.AddUserInternalGroup.class);
+ return new Result>().ok(icPartymemberStyleCategoryDictService.selectList(formDTO));
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java
index cadf703b2c..ee3a025d13 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java
@@ -31,6 +31,7 @@ import com.epmet.modules.partymember.excel.IcPartymemberStyleExcel;
import com.epmet.modules.partymember.service.IcPartymemberStyleService;
import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import com.epmet.resi.partymember.dto.partymember.form.PartyMemberStyleFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.StyleShowListFormDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -100,6 +101,8 @@ public class IcPartymemberStyleController {
excel.setGridName(item.getGridName());
excel.setName(item.getName());
excel.setMainDeed(item.getMainDeed());
+ //导出时新增分类名称
+ excel.setCategoryName(item.getCategoryName());
return excel;
}).collect(Collectors.toList());
}
@@ -117,4 +120,16 @@ public class IcPartymemberStyleController {
return icPartymemberStyleService.importData(tokenDto, response, file);
}
+ /**
+ * 数据分析-党员风采列表查询
+ * @param tokenDto
+ * @return
+ */
+ @PostMapping("showlist")
+ public Result> showList(@LoginUser TokenDto tokenDto, @RequestBody StyleShowListFormDTO formDTO){
+ formDTO.setCustomerId(tokenDto.getCustomerId());
+ formDTO.setUserId(tokenDto.getUserId());
+ ValidatorUtils.validateEntity(formDTO,StyleShowListFormDTO.AddUserInternalGroup.class);
+ return new Result>().ok(icPartymemberStyleService.showList(formDTO));
+ }
}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleCategoryDictDao.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleCategoryDictDao.java
new file mode 100644
index 0000000000..cc768ad36c
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleCategoryDictDao.java
@@ -0,0 +1,20 @@
+package com.epmet.modules.partymember.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 党员风采分类字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2022-02-12
+ */
+@Mapper
+public interface IcPartymemberStyleCategoryDictDao extends BaseDao {
+
+ Integer getMaxCategoryCode(String customerId);
+
+ int updateToDel(@Param("categoryId") String categoryId,@Param("userId") String userId);
+}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleDao.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleDao.java
index de5966a068..cd78d48284 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleDao.java
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleDao.java
@@ -19,7 +19,11 @@ package com.epmet.modules.partymember.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.modules.partymember.entity.IcPartymemberStyleEntity;
+import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* 党员风采
@@ -29,5 +33,8 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface IcPartymemberStyleDao extends BaseDao {
-
+
+ int clearCategry(@Param("categoryId") String categoryId, @Param("userId")String userId);
+
+ List selectShowList(@Param("agencyId")String agencyId, @Param("customerId")String customerId);
}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleCategoryDictEntity.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleCategoryDictEntity.java
new file mode 100644
index 0000000000..73c469dc82
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleCategoryDictEntity.java
@@ -0,0 +1,66 @@
+package com.epmet.modules.partymember.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 党员风采分类字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2022-02-12
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("ic_partymember_style_category_dict")
+public class IcPartymemberStyleCategoryDictEntity extends BaseEpmetEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户id
+ */
+ private String customerId;
+
+ /**
+ * 上级分类ID 顶级此列存储0
+ */
+ private String pid;
+
+ /**
+ * 所有上级分类ID英文顿号隔开,顶级此列存储0
+ */
+ private String pids;
+
+ /**
+ * 分类编码,分类编码+customer_id唯一;从1000开始
+ */
+ private String categoryCode;
+
+ /**
+ * 上级分类编码
+ */
+ private String parentCategoryCode;
+
+ /**
+ * 分类名称
+ */
+ private String categoryName;
+
+ /**
+ * 分类级别1,2,3,4.... 目前只有一级
+ */
+ private Integer level;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 0:可用;1:被禁用。默认0
+ */
+ private Boolean beDisabled;
+
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleEntity.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleEntity.java
index ad3e4afe9e..fea632569a 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleEntity.java
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleEntity.java
@@ -50,6 +50,11 @@ public class IcPartymemberStyleEntity extends BaseEpmetEntity {
*/
private String gridId;
+ /**
+ * 网格的所有上级
+ */
+ private String gridPids;
+
/**
* 党员姓名
*/
@@ -59,5 +64,6 @@ public class IcPartymemberStyleEntity extends BaseEpmetEntity {
* 主要事迹
*/
private String mainDeed;
-
+ private String categoryId;
+ private String categoryCode;
}
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleExcel.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleExcel.java
index a64decdd9c..108a49b1cf 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleExcel.java
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleExcel.java
@@ -40,4 +40,7 @@ public class IcPartymemberStyleExcel {
@Excel(name = "主要事迹")
private String mainDeed;
+
+ @Excel(name="所属分类")
+ private String categoryName;
}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleImportExcel.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleImportExcel.java
index fa48ae5b34..38da34f534 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleImportExcel.java
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleImportExcel.java
@@ -21,8 +21,10 @@ import cn.afterturn.easypoi.excel.annotation.Excel;
import com.epmet.commons.tools.utils.ExcelVerifyInfo;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+
/**
- * 党员风采
+ * 党员风采导入
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-11-18
@@ -31,14 +33,18 @@ import lombok.Data;
public class IcPartymemberStyleImportExcel extends ExcelVerifyInfo {
@Excel(name = "所属网格")
+ @NotBlank(message = "此列不能为空")
private String gridName;
@Excel(name = "党员姓名")
+ @NotBlank(message = "此列不能为空")
private String name;
@Excel(name = "主要事迹")
+ @NotBlank(message = "此列不能为空")
private String mainDeed;
- @Excel(name = "照片")
- private String imageUrl;
+ @Excel(name="所属分类")
+ @NotBlank(message = "此列不能为空")
+ private String categoryName;
}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleCategoryDictService.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleCategoryDictService.java
new file mode 100644
index 0000000000..1cbad15a09
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleCategoryDictService.java
@@ -0,0 +1,57 @@
+package com.epmet.modules.partymember.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
+import com.epmet.resi.partymember.dto.partymember.form.AddStyleCategoryFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.StyleSelectListFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.UpdateStyleCategoryFormDTO;
+import com.epmet.resi.partymember.dto.partymember.result.StyleCategoryDictResDTO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 党员风采分类字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2022-02-12
+ */
+public interface IcPartymemberStyleCategoryDictService extends BaseService {
+
+ /**
+ * 【党员风采分类】列表查询
+ * @param customerId
+ * @return
+ */
+ List queryList(String customerId);
+
+ /**
+ * 党员风采分类】添加或修改分类
+ * @param formDTO
+ */
+ void addOrUpdate(AddStyleCategoryFormDTO formDTO);
+
+ /**
+ * 删除的分类如果已经使用过,清空已经使用的记录,修改时需要重新选择,
+ * @param formDTO
+ */
+ void delete(UpdateStyleCategoryFormDTO formDTO);
+
+ /**
+ * 【党员风采分类】启用或禁用
+ * 新增党员风采时不显示已经禁用的分类,已经使用了禁用的分类正常显示,
+ * @param formDTO
+ */
+ void updateStatus(UpdateStyleCategoryFormDTO formDTO);
+
+ /**
+ * 党员风采-分类下拉框
+ * @param formDTO
+ * @return
+ */
+ List selectList(StyleSelectListFormDTO formDTO);
+
+ IcPartymemberStyleCategoryDictEntity get(String categoryId);
+
+ Map getCategoryDictMap(String customerId);
+}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleService.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleService.java
index fb4c6e1800..1baf248479 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleService.java
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleService.java
@@ -24,6 +24,7 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.modules.partymember.entity.IcPartymemberStyleEntity;
import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import com.epmet.resi.partymember.dto.partymember.form.PartyMemberStyleFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.StyleShowListFormDTO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
@@ -109,4 +110,10 @@ public interface IcPartymemberStyleService extends BaseService showList(StyleShowListFormDTO formDTO);
}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleCategoryDictServiceImpl.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleCategoryDictServiceImpl.java
new file mode 100644
index 0000000000..39e34e4c61
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleCategoryDictServiceImpl.java
@@ -0,0 +1,183 @@
+package com.epmet.modules.partymember.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.EpmetException;
+import com.epmet.modules.partymember.dao.IcPartymemberStyleCategoryDictDao;
+import com.epmet.modules.partymember.dao.IcPartymemberStyleDao;
+import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
+import com.epmet.modules.partymember.service.IcPartymemberStyleCategoryDictService;
+import com.epmet.resi.partymember.dto.partymember.form.AddStyleCategoryFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.StyleSelectListFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.UpdateStyleCategoryFormDTO;
+import com.epmet.resi.partymember.dto.partymember.result.StyleCategoryDictResDTO;
+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.*;
+import java.util.stream.Collectors;
+
+/**
+ * 党员风采分类字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2022-02-12
+ */
+@Service
+public class IcPartymemberStyleCategoryDictServiceImpl extends BaseServiceImpl implements IcPartymemberStyleCategoryDictService {
+
+ @Autowired
+ private IcPartymemberStyleDao icPartymemberStyleDao;
+
+ /**
+ * 【党员风采分类】列表查询
+ *
+ * @param customerId
+ * @return
+ */
+ @Override
+ public List queryList(String customerId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, customerId);
+ queryWrapper.orderByDesc(IcPartymemberStyleCategoryDictEntity::getSort);
+ List list = baseDao.selectList(queryWrapper);
+ List resultList = new ArrayList<>();
+ for (IcPartymemberStyleCategoryDictEntity entity : list) {
+ StyleCategoryDictResDTO resDTO = new StyleCategoryDictResDTO();
+ resDTO.setCategoryId(entity.getId());
+ resDTO.setCategoryName(entity.getCategoryName());
+ resDTO.setBeDisabled(entity.getBeDisabled());
+ resultList.add(resDTO);
+ }
+ return resultList;
+ }
+
+ /**
+ * 党员风采分类】添加或修改分类
+ *
+ * @param formDTO
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void addOrUpdate(AddStyleCategoryFormDTO formDTO) {
+ //校验分类名称是否唯一
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, formDTO.getCustomerId())
+ .eq(IcPartymemberStyleCategoryDictEntity::getCategoryName, formDTO.getCategoryName())
+ .ne(StringUtils.isNotBlank(formDTO.getCategoryId()), IcPartymemberStyleCategoryDictEntity::getId, formDTO.getCategoryId());
+ Integer cout = baseDao.selectCount(queryWrapper);
+ if (cout > NumConstant.ZERO) {
+ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "分类名称已存在", "分类名称已存在");
+ }
+ if (StringUtils.isNotBlank(formDTO.getCategoryId())) {
+ //更新分类名称
+ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.set(IcPartymemberStyleCategoryDictEntity::getCategoryName, formDTO.getCategoryName());
+ updateWrapper.eq(IcPartymemberStyleCategoryDictEntity::getId, formDTO.getCategoryId());
+ baseDao.update(null, updateWrapper);
+ return;
+ }
+ IcPartymemberStyleCategoryDictEntity insert = new IcPartymemberStyleCategoryDictEntity();
+ insert.setCategoryName(formDTO.getCategoryName());
+ insert.setCustomerId(formDTO.getCustomerId());
+ insert.setPid(NumConstant.ZERO_STR);
+ insert.setPids(NumConstant.ZERO_STR);
+ // 查询 当前客户下最大的一级分类数。
+ Integer maxCategoryCode = baseDao.getMaxCategoryCode(formDTO.getCustomerId());
+ if (NumConstant.ZERO == maxCategoryCode) {
+ maxCategoryCode = 1001;
+ } else {
+ maxCategoryCode++;
+ }
+ insert.setCategoryCode(String.valueOf(maxCategoryCode));
+ insert.setParentCategoryCode(NumConstant.ZERO_STR);
+ insert.setLevel(NumConstant.ONE);
+
+ LambdaQueryWrapper maxSortWrapper = new LambdaQueryWrapper<>();
+ maxSortWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, formDTO.getCustomerId())
+ .orderByDesc(IcPartymemberStyleCategoryDictEntity::getSort).last("limit 1");
+ IcPartymemberStyleCategoryDictEntity max = baseDao.selectOne(maxSortWrapper);
+ insert.setSort(null == max ? NumConstant.ONE : max.getSort() + NumConstant.ONE);
+ insert.setBeDisabled(false);
+ baseDao.insert(insert);
+ }
+
+ /**
+ * 删除的分类如果已经使用过,清空已经使用的记录,修改时需要重新选择,
+ *
+ * @param formDTO
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void delete(UpdateStyleCategoryFormDTO formDTO) {
+ baseDao.updateToDel(formDTO.getCategoryId(),formDTO.getUserId());
+ icPartymemberStyleDao.clearCategry(formDTO.getCategoryId(),formDTO.getUserId());
+ }
+
+ /**
+ * 【党员风采分类】启用或禁用
+ * 新增党员风采时不显示已经禁用的分类,已经使用了禁用的分类正常显示,
+ *
+ * @param formDTO
+ */
+ @Override
+ public void updateStatus(UpdateStyleCategoryFormDTO formDTO) {
+ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.set(IcPartymemberStyleCategoryDictEntity::getBeDisabled, formDTO.getBeDisabled())
+ .set(IcPartymemberStyleCategoryDictEntity::getUpdatedBy, formDTO.getUserId())
+ .set(IcPartymemberStyleCategoryDictEntity::getUpdatedTime, new Date());
+ updateWrapper.eq(IcPartymemberStyleCategoryDictEntity::getId, formDTO.getCategoryId());
+ baseDao.update(null, updateWrapper);
+ }
+
+ /**
+ * 党员风采-分类下拉框
+ *
+ * @param formDTO
+ * @return
+ */
+ @Override
+ public List selectList(StyleSelectListFormDTO formDTO) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, formDTO.getCustomerId());
+ if("addorupdate".equals(formDTO.getType())){
+ //查询可用的
+ queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getBeDisabled,false);
+ }
+ queryWrapper.orderByAsc(IcPartymemberStyleCategoryDictEntity::getSort);
+ List list = baseDao.selectList(queryWrapper);
+ List resultList = new ArrayList<>();
+ for (IcPartymemberStyleCategoryDictEntity entity : list) {
+ StyleCategoryDictResDTO resDTO = new StyleCategoryDictResDTO();
+ resDTO.setCategoryId(entity.getId());
+ resDTO.setCategoryName(entity.getCategoryName());
+ resDTO.setBeDisabled(entity.getBeDisabled());
+ resultList.add(resDTO);
+ }
+ return resultList;
+ }
+
+ @Override
+ public IcPartymemberStyleCategoryDictEntity get(String categoryId) {
+ return baseDao.selectById(categoryId);
+ }
+
+ @Override
+ public Map getCategoryDictMap(String customerId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, customerId);
+ List list=baseDao.selectList(queryWrapper);
+ Map map=new HashMap<>();
+ if(!CollectionUtils.isEmpty(list)){
+ map=list.stream().collect(Collectors.toMap(IcPartymemberStyleCategoryDictEntity::getCategoryName, m -> m, (k1, k2) -> k1));
+ }
+ return map;
+ }
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java
index f02233a520..1c214acd60 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java
@@ -26,6 +26,7 @@ import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
@@ -39,13 +40,16 @@ import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.form.GridOptionFormDTO;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.modules.partymember.dao.IcPartymemberStyleDao;
+import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
import com.epmet.modules.partymember.entity.IcPartymemberStyleEntity;
import com.epmet.modules.partymember.entity.IcPartymemberStyleImageEntity;
import com.epmet.modules.partymember.excel.IcPartymemberStyleImportExcel;
+import com.epmet.modules.partymember.service.IcPartymemberStyleCategoryDictService;
import com.epmet.modules.partymember.service.IcPartymemberStyleImageService;
import com.epmet.modules.partymember.service.IcPartymemberStyleService;
import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import com.epmet.resi.partymember.dto.partymember.form.PartyMemberStyleFormDTO;
+import com.epmet.resi.partymember.dto.partymember.form.StyleShowListFormDTO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
@@ -76,6 +80,8 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl page(Map params) {
@@ -105,6 +111,9 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl list = baseDao.selectList(wrapper);
PageInfo pageInfo = new PageInfo<>(list);
List dtoList = ConvertUtils.sourceToTarget(list, IcPartymemberStyleDTO.class);
@@ -200,6 +214,8 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl(dtoList, pageInfo.getTotal());
@@ -219,6 +235,7 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl importResult = ExcelPoiUtils.importExcelMore(file, 0, 1, IcPartymemberStyleImportExcel.class);
+
List failList = importResult.getFailList();
//存放错误数据行号
List numList = new ArrayList<>();
@@ -240,8 +257,10 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl gridMap = gridOptionResult.getData().stream().collect(Collectors.toMap(CustomerGridDTO::getGridName, CustomerGridDTO::getId));
+ //获取党员风采所有分类:key:分类名称;
+ Map categoryDictMap=icPartymemberStyleCategoryDictService.getCategoryDictMap(tokenDto.getCustomerId());
//1.数据校验 只允许导入当前组织下的网格的数据
- //网格名称不一样的数据舍弃
+ //网格名称不一样的数据舍弃或者分类名称不存在也舍弃
Iterator iterator = result.iterator();
while (iterator.hasNext()) {
IcPartymemberStyleImportExcel obj = iterator.next();
@@ -249,12 +268,18 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl%s,行号->%s", obj.getGridName(), obj.getRowNum()));
iterator.remove();
+ continue;
+ }
+ if (null == categoryDictMap.get(obj.getCategoryName().trim())) {
+ numList.add(obj.getRowNum());
+ log.warn(String.format("分类名称【%s】不存在,不可导入,行号->%s", obj.getCategoryName(), obj.getRowNum()));
+ iterator.remove();
}
}
if (CollectionUtils.isEmpty(result)) {
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
- return new Result().error(9999, "第" + subList + "行未成功!");
+ return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "第" + subList + "行未成功!");
}
List imageList = new ArrayList<>();
List list = result.stream().map(item -> {
@@ -263,25 +288,16 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl {
- IcPartymemberStyleImageEntity urlEntity = new IcPartymemberStyleImageEntity();
- urlEntity.setImageUrl(url);
- urlEntity.setCustomerId(tokenDto.getCustomerId());
- urlEntity.setStyleId(entity.getId());
- urlEntity.setSort(i.getAndIncrement());
- urlEntity.setRevision(NumConstant.ZERO);
- urlEntity.setDelFlag(NumConstant.ZERO_STR);
- urlEntity.setCreatedBy(tokenDto.getUserId());
- urlEntity.setUpdatedBy(tokenDto.getUserId());
- urlEntity.setCreatedTime(new Date());
- urlEntity.setUpdatedTime(new Date());
- imageList.add(urlEntity);
- });
- }
return entity;
}).collect(Collectors.toList());
@@ -293,9 +309,35 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl showList(StyleShowListFormDTO formDTO) {
+ CustomerStaffInfoCacheResult staff = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId());
+ if (null == staff || StringUtils.isBlank(staff.getAgencyId())) {
+ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "查询当前工作人员缓存信息失败", "查询用户信息异常");
+ }
+ PageInfo pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectShowList(staff.getAgencyId(), formDTO.getCustomerId()));
+ if (CollectionUtils.isNotEmpty(pageInfo.getList())) {
+ //赋值网格名称
+ for (IcPartymemberStyleDTO dto : pageInfo.getList()) {
+ dto.setImageList(icPartymemberStyleImageService.getByStyleId(dto.getId()));
+ GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(dto.getGridId());
+ if (null != gridInfo) {
+ dto.setGridName(gridInfo.getGridName());
+ }
+ }
+ }
+ return new PageData<>(pageInfo.getList(), pageInfo.getTotal());
+ }
+
+}
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.2__style_dict.sql b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.2__style_dict.sql
new file mode 100644
index 0000000000..1881277a69
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.2__style_dict.sql
@@ -0,0 +1,23 @@
+CREATE TABLE `ic_partymember_style_category_dict` (
+ `ID` varchar(64) NOT NULL COMMENT '楼栋主键',
+ `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id',
+ `PID` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '上级分类ID 顶级此列存储0',
+ `PIDS` varchar(512) CHARACTER SET utf8 NOT NULL COMMENT '所有上级分类ID英文顿号隔开,顶级此列存储0',
+ `CATEGORY_CODE` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '分类编码,分类编码+customer_id唯一;从1000开始',
+ `PARENT_CATEGORY_CODE` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '上级分类编码',
+ `CATEGORY_NAME` varchar(128) CHARACTER SET utf8 NOT NULL COMMENT '分类名称',
+ `LEVEL` int(10) NOT NULL COMMENT '分类级别1,2,3,4.... 目前只有一级',
+ `SORT` int(10) unsigned NOT NULL COMMENT '排序',
+ `BE_DISABLED` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:可用;1:被禁用。默认0',
+ `DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0未删除、1已删除',
+ `REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁',
+ `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
+ `CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
+ `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
+ `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
+ PRIMARY KEY (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='党员风采分类字典表';
+
+
+alter table ic_partymember_style add COLUMN CATEGORY_ID VARCHAR(64) comment '分类主键' AFTER MAIN_DEED;
+alter table ic_partymember_style add COLUMN CATEGORY_CODE VARCHAR(64) comment '分类编码' after CATEGORY_ID;
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.3__style_gridpids.sql b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.3__style_gridpids.sql
new file mode 100644
index 0000000000..aa3c561c66
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.3__style_gridpids.sql
@@ -0,0 +1 @@
+alter table ic_partymember_style add COLUMN GRID_PIDS VARCHAR(255) comment '网格的所有上级' after GRID_ID;
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleCategoryDictDao.xml b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleCategoryDictDao.xml
new file mode 100644
index 0000000000..27d838e556
--- /dev/null
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleCategoryDictDao.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ update ic_partymember_style_category_dict set del_flag='1',UPDATED_BY=#{userId},UPDATED_TIME=now()
+ where id=#{categoryId}
+
+
\ No newline at end of file
diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleDao.xml b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleDao.xml
index a8375fe173..e68586a288 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleDao.xml
+++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleDao.xml
@@ -18,5 +18,29 @@
+
+ update ic_partymember_style
+ set CATEGORY_ID='',CATEGORY_CODE='',UPDATED_BY=#{userId},UPDATED_TIME=now()
+ where del_flag='0'
+ and CATEGORY_ID=#{categoryId}
+
+
\ No newline at end of file
diff --git a/epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/interceptor/ScanApiAuthInterceptor.java b/epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/interceptor/ScanApiAuthInterceptor.java
index 6ce851a45e..868c6e0185 100644
--- a/epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/interceptor/ScanApiAuthInterceptor.java
+++ b/epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/interceptor/ScanApiAuthInterceptor.java
@@ -33,7 +33,7 @@ public class ScanApiAuthInterceptor implements HandlerInterceptor {
String ip = IpUtils.getIpAddr(request);
SetOperations setOperations = redisTemplate.opsForSet();
if (!setOperations.isMember(RedisKeys.getWhiteList(), ip)) {
- log.warn("preHandle ip:{} is not in whitelist", ip);
+ log.error("preHandle ip:{} 不在白名单内", ip);
String result = JSON.toJSONString(new Result<>().error(EpmetErrorCode.ERR401.getCode(), EpmetErrorCode.ERR401.getMsg()));
responseJson(response, result);
return false;
diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/constant/ImportTaskConstants.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/constant/ImportTaskConstants.java
new file mode 100644
index 0000000000..685e80a39a
--- /dev/null
+++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/constant/ImportTaskConstants.java
@@ -0,0 +1,26 @@
+package com.epmet.constant;
+
+/**
+ * 导入任务的业务类型常量
+ */
+public interface ImportTaskConstants {
+ /**
+ * 居民
+ */
+ String BIZ_TYPE_RESI = "resi";
+
+ /**
+ * 处理状态:处理中
+ */
+ String PROCESS_STATUS_PROCESSING = "processing";
+
+ /**
+ * 处理状态:成功
+ */
+ String PROCESS_STATUS_FINISHED_SUCCESS = "finished_success";
+
+ /**
+ * 处理状态:完成,但未完全成功
+ */
+ String PROCESS_STATUS_FINISHED_FAIL = "finished_fail";
+}
diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/patrol/GridMemberRoutineWorkFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/patrol/GridMemberRoutineWorkFormDTO.java
new file mode 100644
index 0000000000..d1c26b624b
--- /dev/null
+++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/patrol/GridMemberRoutineWorkFormDTO.java
@@ -0,0 +1,47 @@
+package com.epmet.dto.form.patrol;
+
+import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Description 网格员例行工作
+ * @Author sun
+ */
+@Data
+public class GridMemberRoutineWorkFormDTO implements Serializable {
+
+ private static final long serialVersionUID = -3522636529743412120L;
+ public interface RoutineWork extends CustomerClientShowGroup {}
+ public interface RoutineWorkDetail extends CustomerClientShowGroup {}
+
+ /**
+ * 网格Id
+ */
+ @NotBlank(message = "网格Id不能为空", groups = RoutineWork.class)
+ private String gridId;
+
+ /**
+ * 例行工作Id
+ */
+ @NotBlank(message = "例行工作Id不能为空", groups = RoutineWorkDetail.class)
+ private String routineWorkId;
+
+ /**
+ * 当前页
+ */
+ private Integer pageNo = 1;
+
+ /**
+ * 每页记录数
+ */
+ private Integer pageSize = 20;
+
+ //token中客户Id
+ private String customerId;
+ //token中用户Id
+ private String staffId;
+
+}
diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/BasicInfoResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/BasicInfoResultDTO.java
index 2877fc47ed..e57abaf6a4 100644
--- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/BasicInfoResultDTO.java
+++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/BasicInfoResultDTO.java
@@ -1,7 +1,6 @@
package com.epmet.dto.result;
import lombok.Data;
-import lombok.NoArgsConstructor;
import java.io.Serializable;
diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RoutineWorkDetailResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RoutineWorkDetailResultDTO.java
new file mode 100644
index 0000000000..94335fda2b
--- /dev/null
+++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RoutineWorkDetailResultDTO.java
@@ -0,0 +1,84 @@
+package com.epmet.dto.result;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description 网格员例行工作详情
+ * @Author sun
+ */
+@Data
+public class RoutineWorkDetailResultDTO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 例行工作Id
+ */
+ private String routineWorkId;
+ /**
+ * 网格Id
+ */
+ private String gridId;
+ /**
+ * 网格名称
+ */
+ private String gridName;
+ /**
+ * 网格员Id
+ */
+ private String staffId;
+ /**
+ * 网格员姓名
+ */
+ private String staffName;
+ /**
+ * 提交日期
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date submitTime;
+ /**
+ * 事项类型名称,一类-二类
+ */
+ private String workTypeName;
+ /**
+ * 重点人员是否在当地
+ */
+ private String isKeyPeopleLocateName;
+ /**
+ * 重点人员现状
+ */
+ private String keyPeopleStatus;
+ /**
+ * 事项名称
+ */
+ private String title;
+ /**
+ * 是否异常
+ */
+ private String isNormalName;
+ /**
+ * 发生日期
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date happenTime;
+ /**
+ * 发生地点
+ */
+ private String address;
+ /**
+ * 事项简述
+ */
+ private String workContent;
+
+ //例行工作一类编码
+ @JsonIgnore
+ private String allPCode;
+ //例行工作二类编码
+ @JsonIgnore
+ private String workTypeCode;
+
+}
diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RoutineWorkListResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RoutineWorkListResultDTO.java
new file mode 100644
index 0000000000..f37dedcfbb
--- /dev/null
+++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RoutineWorkListResultDTO.java
@@ -0,0 +1,63 @@
+package com.epmet.dto.result;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description 网格员例行工作列表
+ * @Author sun
+ */
+@Data
+public class RoutineWorkListResultDTO implements Serializable {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 总条数
+ */
+ private Integer total = 0;
+
+ /**
+ * 集合对象
+ */
+ private List list;
+
+ @Data
+ public static class RoutineWorkList {
+ /**
+ * 例行工作Id
+ */
+ private String routineWorkId;
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 提交日期
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date submitTime;
+
+ /**
+ * 工作类型[一类-二类名称]
+ */
+ private String workTypeName;
+
+ /**
+ * 是否异常
+ */
+ private String isNormalName;
+ //例行工作一类编码
+ @JsonIgnore
+ private String allPCode;
+ //例行工作二类编码
+ @JsonIgnore
+ private String workTypeCode;
+ }
+
+}
diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/StaffBasicInfoResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/StaffBasicInfoResultDTO.java
index f981a68f8b..52c432f810 100644
--- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/StaffBasicInfoResultDTO.java
+++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/StaffBasicInfoResultDTO.java
@@ -16,7 +16,7 @@ public class StaffBasicInfoResultDTO implements Serializable {
* 客户Id
*/
private String customerId;
-
+ private String customerName;
/**
* 用户Id
*/
diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/StatsdataResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/StatsdataResultDTO.java
new file mode 100644
index 0000000000..307309f01c
--- /dev/null
+++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/StatsdataResultDTO.java
@@ -0,0 +1,35 @@
+package com.epmet.dto.result;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description 网格员例行工作数据统计
+ * @Author sun
+ */
+@Data
+public class StatsdataResultDTO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 巡查总次数
+ */
+ private Integer patrolTotal;
+
+ /**
+ * 巡查时长(xx小时xx分钟)
+ */
+ private String totalTime;
+ @JsonIgnore
+ private Integer totalNum;
+
+ /**
+ * 例行工作总次数
+ */
+ private Integer routineWorkCount;
+
+}
diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/UserApplication.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/UserApplication.java
index 106c49d028..caf839f79a 100644
--- a/epmet-user/epmet-user-server/src/main/java/com/epmet/UserApplication.java
+++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/UserApplication.java
@@ -13,6 +13,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableAsync;
/**
* 管理后台
@@ -24,6 +25,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
+@EnableAsync
@ServletComponentScan
public class UserApplication {
diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiExportBaseInfoData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiExportBaseInfoData.java
new file mode 100644
index 0000000000..5dc0d0b7c5
--- /dev/null
+++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiExportBaseInfoData.java
@@ -0,0 +1,27 @@
+package com.epmet.bean;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * desc:导出居民信息 基础信息 给其他sheet使用
+ */
+@Data
+public class ResiExportBaseInfoData implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private String GRID_ID;
+ private String VILLAGE_ID;
+ private String BUILD_ID;
+ private String UNIT_ID;
+ private String HOME_ID;
+ private String IS_BDHJ;
+ private String NAME;
+ private String MOBILE;
+ private String GENDER;
+ private String ID_CARD;
+ private String BIRTHDAY;
+ private String CONTACTS;
+ private String CONTACTS_MOBILE;
+}
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
index 436be52b29..1526038d21 100644
--- 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
@@ -14,6 +14,7 @@ import java.util.Map;
@Data
public class ResiImportCategoryData {
+ private String resiId;
private String agencyId;
private String gridId;
private String villageId;
@@ -30,7 +31,8 @@ public class ResiImportCategoryData {
public ResiImportCategoryData() {
}
- public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map categories) {
+ public ResiImportCategoryData(String resiId, String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map categories) {
+ this.resiId = resiId;
this.agencyId = agencyId;
this.gridId = gridId;
this.villageId = villageId;
@@ -39,13 +41,4 @@ public class ResiImportCategoryData {
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/ResiImportResiCategoryChangedCache.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java
index 6203c917a9..29470e875c 100644
--- 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
@@ -11,11 +11,16 @@ import java.util.Map;
@Data
public class ResiImportResiCategoryChangedCache {
+ /**
+ * 导入的tag,用来标记唯一一次导入操作。
+ */
+ private String importTag;
+
/**
* 新增居民
* Map>
*/
- private Map newResis = new HashMap<>();
+// private Map newResis = new HashMap<>();
/**
* 调动的居民
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 1350ce159f..67c1aabd7e 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
@@ -24,6 +24,7 @@ import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.epmet.commons.rocketmq.messages.IcResiUserAddMQMsg;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
+import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
@@ -38,11 +39,13 @@ import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.utils.IpUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.constant.ImportTaskConstants;
import com.epmet.constant.SystemMessageType;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.form.*;
@@ -54,6 +57,7 @@ import com.epmet.feign.OperCustomizeOpenFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.service.IcResiUserImportService;
import com.epmet.service.IcResiUserService;
+import com.epmet.service.ImportTaskService;
import jodd.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
@@ -118,6 +122,11 @@ public class IcResiUserController {
private RedisUtils redisUtils;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
+ @Autowired
+ private LoginUserUtil loginUserUtil;
+ @Autowired
+ private ImportTaskService importTaskService;
+
/**
* 模板枚举
@@ -293,6 +302,7 @@ public class IcResiUserController {
@RequestMapping(value = "/exportExcel")
public void exportExcelByEasyExcel(@RequestHeader String customerId,@LoginUser TokenDto tokenDto, @RequestBody IcResiUserPageFormDTO pageFormDTO, HttpServletResponse response) throws Exception {
//tokenDto.setUserId("9e37adcce6472152e6508a19d3683e02");
+ long startM = System.currentTimeMillis();
CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(customerId, tokenDto.getUserId());
String staffOrgPath = null;
if (StringUtils.isNotBlank(staffInfoCacheResult.getAgencyPIds()) && !NumConstant.ZERO_STR.equals(staffInfoCacheResult.getAgencyPIds())) {
@@ -322,7 +332,7 @@ public class IcResiUserController {
map.putIfAbsent(tableName,exportItem);
String columnName = item.getColumnName().concat(item.getColumnNum() == NumConstant.ZERO ? StrConstant.EPMETY_STR : item.getColumnNum().toString());
exportItem.getItemMap().put(columnName,item);
- if (item.getOptionSourceType().equals("remote")&&item.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){
+ if (Constant.OPITON_SOURCE_REMOTE.equals(item.getOptionSourceType())&&item.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){
//多个参数
String[] paramArr = item.getOptionSourceValue().split(StrConstant.QUESTION_MARK_TRANSFER)[NumConstant.ONE].split(StrConstant.AND_MARK);
Arrays.stream(paramArr).forEach(o->{
@@ -346,7 +356,7 @@ public class IcResiUserController {
.collect(Collectors.toList());
List