diff --git a/epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.15__add_item_typequery.sql b/epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.15__add_item_typequery.sql new file mode 100644 index 0000000000..bfd6d0dc3a --- /dev/null +++ b/epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.15__add_item_typequery.sql @@ -0,0 +1,9 @@ +INSERT INTO `epmet_admin`.`sys_dict_type` (`id`, `dict_type`, `dict_name`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518396655261097986', 'item_type_query', '居民信息组件查询方式', '', 18, 0, 0, '1', '2022-04-25 09:09:08', '1', '2022-04-25 09:09:45'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518420223504064513', 1518396655261097986, 'equal', 'cascader', '0', '级联组件', 8, 0, 0, '1', '2022-04-25 10:42:47', '1', '2022-04-25 10:42:47'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518398370672713730', 1518396655261097986, 'list_equal', 'checkbox', '0', '多选框', 6, 0, 0, '1', '2022-04-25 09:15:57', '1', '2022-04-25 09:15:57'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518397686728531969', 1518396655261097986, 'daterange', 'datepicker', '0', '日期', 3, 0, 0, '1', '2022-04-25 09:13:14', '1', '2022-04-25 09:13:14'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518398756393492482', 1518396655261097986, 'daterange', 'daterange', '0', '时间范围组件eg:参战时间', 7, 0, 0, '1', '2022-04-25 09:17:29', '1', '2022-04-25 09:17:29'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518397589986910209', 1518396655261097986, 'like', 'input', '0', '文本输入框', 2, 0, 0, '1', '2022-04-25 09:12:51', '1', '2022-04-25 09:12:51'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518398274627346434', 1518396655261097986, 'equal', 'radio', '0', '单选框', 5, 0, 0, '1', '2022-04-25 09:15:34', '1', '2022-04-25 09:15:34'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518397514623655938', 1518396655261097986, 'equal', 'select', '0', '下拉框', 1, 0, 0, '1', '2022-04-25 09:12:33', '1', '2022-04-25 09:12:33'); +INSERT INTO `epmet_admin`.`sys_dict_data` (`id`, `dict_type_id`, `dict_label`, `dict_value`, `dict_p_value`, `remark`, `sort`, `DEL_FLAG`, `REVISION`, `CREATED_BY`, `CREATED_TIME`, `UPDATED_BY`, `UPDATED_TIME`) VALUES ('1518397787941281794', 1518396655261097986, 'like', 'textarea', '0', '文本域', 4, 0, 0, '1', '2022-04-25 09:13:38', '1', '2022-04-25 09:13:38'); \ No newline at end of file diff --git a/epmet-auth-client/pom.xml b/epmet-auth-client/pom.xml index cdb0519c0d..d84ead3ff5 100644 --- a/epmet-auth-client/pom.xml +++ b/epmet-auth-client/pom.xml @@ -10,13 +10,12 @@ 4.0.0 epmet-auth-client + com.epmet epmet-commons-tools 2.0.0 - compile - - + \ No newline at end of file diff --git a/epmet-auth-client/src/main/java/com/epmet/auth/dto/result/BlockChainStaffAuthResultDTO.java b/epmet-auth-client/src/main/java/com/epmet/auth/dto/result/BlockChainStaffAuthResultDTO.java new file mode 100644 index 0000000000..2a1ca0dfcc --- /dev/null +++ b/epmet-auth-client/src/main/java/com/epmet/auth/dto/result/BlockChainStaffAuthResultDTO.java @@ -0,0 +1,25 @@ +package com.epmet.auth.dto.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ClassName BlockChainStaffAuthResultDTO + * @Description 区块链用户认证结果 + * @Author wangxianzhang + * @Date 2022/1/20 10:41 上午 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class BlockChainStaffAuthResultDTO { + + private String userId; + private String realName; + private String phone; + private String headUrl; + private String agencyId; + private String agencyName; + +} diff --git a/epmet-auth/src/main/java/com/epmet/controller/GovLoginController.java b/epmet-auth/src/main/java/com/epmet/controller/GovLoginController.java index 386e162c02..8745418f90 100644 --- a/epmet-auth/src/main/java/com/epmet/controller/GovLoginController.java +++ b/epmet-auth/src/main/java/com/epmet/controller/GovLoginController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.HashMap; import java.util.List; /** diff --git a/epmet-auth/src/main/java/com/epmet/controller/GovWebController.java b/epmet-auth/src/main/java/com/epmet/controller/GovWebController.java index 2aefe95b79..89fb9b183c 100644 --- a/epmet-auth/src/main/java/com/epmet/controller/GovWebController.java +++ b/epmet-auth/src/main/java/com/epmet/controller/GovWebController.java @@ -1,15 +1,22 @@ package com.epmet.controller; +import com.epmet.auth.dto.result.BlockChainStaffAuthResultDTO; import com.epmet.commons.tools.utils.RSASignature; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.form.BcStaffAuthenticationFormDTO; import com.epmet.dto.form.GovWebLoginFormDTO; import com.epmet.dto.result.UserTokenResultDTO; import com.epmet.service.GovWebService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.*; +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.HashMap; /** @@ -28,8 +35,6 @@ public class GovWebController { @Value("${epmet.login.privateKey}") private String privateKey; - - /** * @param formDTO * @return @@ -65,24 +70,20 @@ public class GovWebController { } /** - * desc: 根据用户id - * - * @return com.epmet.commons.tools.utils.Result - * @author LiuJanJun - * @date 2021/3/8 5:07 下午 + * 区块链web 系统身份认证 + * @param input + * @return */ - @PostMapping("generateTokenBySSOKey/{uuid}/{userId}/{app}/{client}") - public Result generateTokenBySSOKey(@PathVariable(value = "uuid")String uuid,@PathVariable String userId, - @RequestParam String customerId, - @RequestParam String client, - @RequestParam String app) { - //判断是否非法登陆 - /*if (!redisUtils.hasKey(RedisKeys.getIcLoginAuthKey(customerId,uuid))){ - log.error("有人使用userid:{} 非法登陆",userId); - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode()); - }*/ - return new Result().ok(govWebService.generateTokenBySSOKey(customerId,userId,app,client)); - } + @PostMapping("/blockchain/authentication") + public Result blockChainGetStaffInfoByPwd(@RequestBody BcStaffAuthenticationFormDTO input) { + ValidatorUtils.validateEntity(input); + String customerId = input.getCustomerId(); + String mobile = input.getMobile(); + String password = input.getPassword(); + BlockChainStaffAuthResultDTO r = govWebService.blockChainStaffAuthenticationByPwd(customerId, mobile, password); + + return new Result().ok(r); + } } diff --git a/epmet-auth/src/main/java/com/epmet/dto/form/BcStaffAuthenticationFormDTO.java b/epmet-auth/src/main/java/com/epmet/dto/form/BcStaffAuthenticationFormDTO.java new file mode 100644 index 0000000000..202f8073c9 --- /dev/null +++ b/epmet-auth/src/main/java/com/epmet/dto/form/BcStaffAuthenticationFormDTO.java @@ -0,0 +1,24 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @ClassName BcAdminLoginFormDTO + * @Description 区块链管理系统staff身份认证 + * @Author wangxianzhang + * @Date 2022/1/17 10:11 下午 + */ +@Data +public class BcStaffAuthenticationFormDTO { + + @NotBlank(message = "客户ID必填") + private String customerId; + + @NotBlank(message = "手机号必填") + private String mobile; + + @NotBlank(message = "密码必填") + private String password; +} diff --git a/epmet-auth/src/main/java/com/epmet/service/GovWebService.java b/epmet-auth/src/main/java/com/epmet/service/GovWebService.java index 6075ca79bb..10d86c20b4 100644 --- a/epmet-auth/src/main/java/com/epmet/service/GovWebService.java +++ b/epmet-auth/src/main/java/com/epmet/service/GovWebService.java @@ -1,5 +1,6 @@ package com.epmet.service; +import com.epmet.auth.dto.result.BlockChainStaffAuthResultDTO; import com.epmet.dto.form.GovWebLoginFormDTO; import com.epmet.dto.result.UserTokenResultDTO; @@ -18,12 +19,10 @@ public interface GovWebService { UserTokenResultDTO login(GovWebLoginFormDTO formDTO); /** - * desc:根据用户Id 生成token + * 区块链系统通过用户密码认证身份 + * @param mobile + * @param password * @return - * @param customerId - * @param userId - * @param app - * @param client */ - String generateTokenBySSOKey(String customerId, String userId, String app, String client); + BlockChainStaffAuthResultDTO blockChainStaffAuthenticationByPwd(String customerId, String mobile, String password); } diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java index 86569434c2..8d78665550 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java @@ -5,8 +5,10 @@ import com.epmet.common.token.constant.LoginConstant; import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.security.dto.GovTokenDto; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.password.PasswordUtils; @@ -46,7 +48,7 @@ import java.util.stream.Collectors; * @Date 2020/4/20 10:56 */ @Service -public class GovLoginServiceImpl implements GovLoginService { +public class GovLoginServiceImpl implements GovLoginService, ResultDataResolver { private static final Logger logger = LoggerFactory.getLogger(GovLoginServiceImpl.class); private static final String SEND_SMS_CODE_ERROR = "发送短信验证码异常,手机号[%s],code[%s],msg[%s]"; @Autowired diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java index 2cfe6e3a14..d6edfb8657 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java @@ -1,26 +1,26 @@ package com.epmet.service.impl; +import com.epmet.auth.dto.result.BlockChainStaffAuthResultDTO; import com.epmet.common.token.constant.LoginConstant; +import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.security.dto.GovTokenDto; -import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.password.PasswordUtils; import com.epmet.commons.tools.utils.CpUserDetailRedis; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.Result; -import com.epmet.dto.UserDTO; -import com.epmet.dto.UserWechatDTO; +import com.epmet.dto.CustomerStaffDTO; +import com.epmet.dto.form.CustomerStaffFormDTO; import com.epmet.dto.form.GovWebLoginFormDTO; import com.epmet.dto.form.GovWebOperLoginFormDTO; -import com.epmet.dto.form.LoginCommonFormDTO; import com.epmet.dto.result.GovWebOperLoginResultDTO; import com.epmet.dto.result.UserTokenResultDTO; import com.epmet.feign.EpmetUserFeignClient; -import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.jwt.JwtTokenProperties; import com.epmet.jwt.JwtTokenUtils; import com.epmet.service.CaptchaService; @@ -40,7 +40,7 @@ import java.util.Map; */ @Slf4j @Service -public class GovWebServiceImpl implements GovWebService { +public class GovWebServiceImpl implements GovWebService, ResultDataResolver { private static final Logger logger = LoggerFactory.getLogger(GovWebServiceImpl.class); @Autowired @@ -55,8 +55,6 @@ public class GovWebServiceImpl implements GovWebService { private EpmetUserFeignClient epmetUserFeignClient; @Autowired private ThirdLoginServiceImpl thirdLoginService; - @Autowired - private EpmetUserOpenFeignClient epmetUserOpenFeignClient; /** * @param formDTO @@ -104,74 +102,6 @@ public class GovWebServiceImpl implements GovWebService { } - @Override - public String generateTokenBySSOKey(String customerId, String userId, String app, String client) { - // 生成token - Map map = new HashMap<>(); - map.put(LoginConstant.CLIENT_APP, app); - map.put("client", client); - map.put("userId", userId); - String token = jwtTokenUtils.createToken(map); - - if (LoginConstant.APP_RESI.equals(app)){ - Result userDTOResult = epmetUserOpenFeignClient.queryUserClient(userId); - if (!userDTOResult.success()&&userDTOResult.getData() != null){ - log.error("居民信息不存在,customerId:{},userId:{}", customerId, userId); - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode()); - } - LoginCommonFormDTO formDTO = new LoginCommonFormDTO(); - formDTO.setApp(app); - formDTO.setClient(client); - this.saveResiTokenDto(formDTO,userId, new UserWechatDTO(),token,customerId); - }else if (LoginConstant.APP_GOV.equals(app)){ - CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId); - if (staffInfo == null){ - log.error("工作人员信息不存在,customerId:{},userId:{}", customerId, userId); - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode()); - } - int expire = jwtTokenProperties.getExpire(); - GovTokenDto tokenDto = new GovTokenDto(); - tokenDto.setCustomerId(customerId); - tokenDto.setApp("gov"); - tokenDto.setClient("web"); - tokenDto.setUserId(userId); - tokenDto.setToken(token); - tokenDto.setUpdateTime(System.currentTimeMillis()); - tokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime()); - tokenDto.setAgencyId(staffInfo.getAgencyId()); - tokenDto.setRootAgencyId(staffInfo.getAgencyId()); - //tokenDto.setDeptIdList(thirdLoginService.getDeptartmentIdList(userId)); - //tokenDto.setGridIdList(thirdLoginService.getGridIdList(userId)); - //tokenDto.setRoleList(thirdLoginService.queryGovStaffRoles(userId, orgIdPathParts[orgIdPathParts.length - 1])); - //tokenDto.setOrgIdPath(orgIdPath); - cpUserDetailRedis.set(tokenDto, expire); - } - - logger.info("截止时间:" + DateUtils.format(jwtTokenUtils.getExpiration(token), "yyyy-MM-dd HH:mm:ss")); - return token; - } - - /** - * @Description 将token存入redis - **/ - private String saveResiTokenDto(LoginCommonFormDTO formDTO, String userId, UserWechatDTO userWechatDTO, String token, String customerId) { - int expire = jwtTokenProperties.getExpire(); - TokenDto tokenDto = new TokenDto(); - tokenDto.setCustomerId(customerId); - tokenDto.setApp(formDTO.getApp()); - tokenDto.setClient(formDTO.getClient()); - tokenDto.setUserId(userId); - //tokenDto.setOpenId(userWechatDTO.getWxOpenId()); - //tokenDto.setSessionKey(userWechatDTO.getSessionKey()); - //tokenDto.setUnionId(userWechatDTO.getUnionId()); - tokenDto.setToken(token); - tokenDto.setUpdateTime(System.currentTimeMillis()); - tokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime()); - cpUserDetailRedis.set(tokenDto, expire); - logger.info("截止时间:" + DateUtils.format(jwtTokenUtils.getExpiration(token), "yyyy-MM-dd HH:mm:ss")); - return token; - } - /** * 生成PC工作端token * @author sun @@ -209,5 +139,36 @@ public class GovWebServiceImpl implements GovWebService { return token; } + @Override + public BlockChainStaffAuthResultDTO blockChainStaffAuthenticationByPwd(String customerId, String mobile, String password) { + + GovWebOperLoginFormDTO form = new GovWebOperLoginFormDTO(); + form.setCustomerId(customerId); + form.setMobile(mobile); + + // 用户认证 + GovWebOperLoginResultDTO staff = getResultDataOrThrowsException(epmetUserFeignClient.getStaffIdAndPwd(form), ServiceConstant.EPMET_USER_SERVER, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + String.format("【区块链用户认证】根据手机号%s和指定客户ID:%s认证用户失败", mobile, customerId), + "认证失败"); + + if (staff == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + String.format("【区块链用户认证】根据手机号%s和指定客户ID:%s认证用户失败", mobile, customerId)); + } + + if (!PasswordUtils.matches(password, staff.getPassWord())) { + // 密码不匹配 + throw new EpmetException(EpmetErrorCode.ERR10004.getCode(), String.format("【区块链用户认证】密码不匹配,手机号:%s", mobile)); + } + + // 用户基础信息 + CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, staff.getUserId()); + + BlockChainStaffAuthResultDTO r = new BlockChainStaffAuthResultDTO(staff.getUserId(), staffInfo.getRealName(), + staffInfo.getMobile(), staffInfo.getHeadPhoto(), staffInfo.getAgencyId(), staffInfo.getAgencyName()); + + return r; + } } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java new file mode 100644 index 0000000000..1cbbd2a887 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java @@ -0,0 +1,44 @@ +package com.epmet.commons.tools.annotation; + +import com.epmet.commons.tools.enums.RequirePermissionEnum; +import javassist.runtime.Inner; + +import java.lang.annotation.*; +import java.util.function.Function; + +/** + * 标记一个接口,它的返回值中的某些字段需要打掩码 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface MaskResponse { + + /** + * 掩码类型 + */ + String MASK_TYPE_ID_CARD = "ID_CARD"; + String MASK_TYPE_MOBILE = "MOBILE"; + + ///** + // * 默认的一些字段,如果没有手动指定,就会使用默认的。如果手动指定了,就不再使用默认的 + // */ + //String[] defaultFieldnames = {"idCard","mobile","phone"}; + // + ///** + // * 默认字段对应的掩码类型 + // */ + //String[] defaultFieldsMaskType = { MASK_TYPE_ID_CARD, MASK_TYPE_MOBILE, MASK_TYPE_MOBILE }; + + /** + * 要打码的字段列表。会递归的着这些字段 + * @return + */ + String[] fieldNames() default {"idCard","mobile","phone"}; + + /** + * 要打码的类型 + * @return + */ + String[] fieldsMaskType() default { MASK_TYPE_ID_CARD, MASK_TYPE_MOBILE, MASK_TYPE_MOBILE }; +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/MaskResponseAspect.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/MaskResponseAspect.java new file mode 100644 index 0000000000..c3883c45b0 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/MaskResponseAspect.java @@ -0,0 +1,36 @@ +package com.epmet.commons.tools.aspect; + +import com.epmet.commons.tools.annotation.MaskResponse; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.processor.MaskProcessor; +import com.epmet.commons.tools.utils.Result; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Order(0) +public class MaskResponseAspect { + + @AfterReturning(pointcut = "@annotation(com.epmet.commons.tools.annotation.MaskResponse)", returning = "result") + public Object proceed(JoinPoint point, Result result) throws Throwable { + MethodSignature signature = (MethodSignature) point.getSignature(); + MaskResponse maskResponseAnno = signature.getMethod().getAnnotation(MaskResponse.class); + + String[] fieldNames = maskResponseAnno.fieldNames(); + String[] fieldsMaskType = maskResponseAnno.fieldsMaskType(); + + if (fieldNames.length != fieldsMaskType.length) { + String msg = "掩码配置错误"; + throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), msg, msg); + } + + new MaskProcessor(fieldNames, fieldsMaskType).mask(result); + return null; + } +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportItemListFormDTO.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportItemListFormDTO.java new file mode 100644 index 0000000000..47fd7777b4 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportItemListFormDTO.java @@ -0,0 +1,73 @@ +package com.epmet.commons.tools.dto.form; + +import com.epmet.commons.tools.validator.group.AddGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + + +/** + * 自定义表单导出模板 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-04-21 + */ +@Data +public class IcExportItemListFormDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotEmpty(message = "请至少添加一个导出项") + private List children; + + /** + * 父id + */ + private String pid; + + /** + * ic_form_item.id + */ + @NotBlank(message = "itemId不能为空",groups = AddGroup.class) + private String itemId; + + /** + * 表头宽度 + */ + private Integer width; + + /** + * 项标签 + */ + @NotBlank(message = "名称不能为空",groups = AddGroup.class) + private String label; + + /** + * 排序 + */ + private Integer sort; + + /** + * 表名 + */ + private String tableName; + + /** + * 列名 + */ + private String columnName; + + /** + * item选项 值 + */ + private String optionSourceValue; + /** + * item选项 值获取方式 + */ + private String optionSourceType; + + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportTemplateSaveFormDTO.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportTemplateSaveFormDTO.java new file mode 100644 index 0000000000..8c82c71473 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportTemplateSaveFormDTO.java @@ -0,0 +1,58 @@ +package com.epmet.commons.tools.dto.form; + +import com.epmet.commons.tools.validator.group.AddGroup; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + + +/** + * 自定义表单导出模板 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-04-21 + */ +@Data +public class IcExportTemplateSaveFormDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 是否保存为模板 是:true 否:false + */ + private Boolean isSaveTemp = false; + + /** + * 表单CODE,从字典获取 + */ + @NotBlank(message = "表单CODE不能为空",groups = AddGroup.class) + private String formCode; + + /** + * 模板名称 + */ + @Length(max = 20, message = "模板名称最多为20个字", groups = { AddGroup.class }) + private String name; + + /** + * 0:动态;1:文件 + */ + private Integer type; + + /** + * 排序 + */ + private Integer sort; + + + /** + * 父id + */ + @NotEmpty(message = "请至少添加一个导出项") + private List itemList; + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OptionResultDTO.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OptionResultDTO.java index 4226c2acac..739d44fc00 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OptionResultDTO.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OptionResultDTO.java @@ -1,9 +1,11 @@ package com.epmet.commons.tools.dto.result; import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; import java.io.Serializable; import java.util.List; +import java.util.Map; /** * @Description @@ -21,4 +23,22 @@ public class OptionResultDTO implements Serializable { private List children; private Boolean usableFlag; private String type; + + + /** + * desc:递归获取当前节点的 所有子节点 + * + * @param option + * @param resultMap + */ + public void getCurrenNodeAllChild(OptionResultDTO option, Map resultMap) { + resultMap.put(option.getValue(), option); + if (CollectionUtils.isNotEmpty(option.getChildren())) { + return; + } + option.getChildren().forEach(o -> { + resultMap.put(o.getValue(), o); + getCurrenNodeAllChild(o, resultMap); + }); + } } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/DictTypeEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/DictTypeEnum.java index 7afc85aab1..6375462f14 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/DictTypeEnum.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/DictTypeEnum.java @@ -22,6 +22,7 @@ public enum DictTypeEnum { AGE_GROUP("age_group", "年龄范围", 11), PATROL_WORK_TYPE("patrol_work_type", "例行工作分类", 13), GRID_TYPE("grid_type", "网格类型", 12), + ITEM_TYPE_QUERY("item_type_query","居民信息组件查询方式",14), ; private final String code; diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java index cb7146138d..abcc6fc90b 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java @@ -5,7 +5,6 @@ import com.epmet.commons.tools.feign.fallback.CommonAggFeignClientFallBackFactor import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache; import com.epmet.commons.tools.redis.common.bean.BuildingInfoCache; import com.epmet.commons.tools.redis.common.bean.CustomerStaffInfoCache; -import com.epmet.commons.tools.redis.common.bean.GridInfoCache; import com.epmet.commons.tools.utils.Result; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; @@ -39,15 +38,6 @@ public interface CommonAggFeignClient { @PostMapping("/data/aggregator/org/agency") Result getAgencyInfo(@RequestParam("agencyId")String agencyId); - /** - * @Description 查询网格信息 - * @param gridId - * @author zxc - * @date 2021/11/5 2:54 下午 - */ - @PostMapping("/data/aggregator/org/grid") - Result getGridInfo(@RequestParam("gridId")String gridId); - /** * 查询楼栋信息 * @param buildingId diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonAggFeignClientFallback.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonAggFeignClientFallback.java index 8d6f5f1260..4aff62f235 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonAggFeignClientFallback.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonAggFeignClientFallback.java @@ -5,7 +5,6 @@ import com.epmet.commons.tools.feign.CommonAggFeignClient; import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache; import com.epmet.commons.tools.redis.common.bean.BuildingInfoCache; import com.epmet.commons.tools.redis.common.bean.CustomerStaffInfoCache; -import com.epmet.commons.tools.redis.common.bean.GridInfoCache; import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.Result; import org.springframework.stereotype.Component; @@ -29,11 +28,6 @@ public class CommonAggFeignClientFallback implements CommonAggFeignClient { return ModuleUtils.feignConError(ServiceConstant.DATA_AGGREGATOR_SERVER, "getAgencyInfo", agencyId); } - @Override - public Result getGridInfo(String gridId) { - return ModuleUtils.feignConError(ServiceConstant.DATA_AGGREGATOR_SERVER, "getGridInfo", gridId); - } - /** * 查询楼栋信息 * diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java new file mode 100644 index 0000000000..353fb06a47 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java @@ -0,0 +1,183 @@ +package com.epmet.commons.tools.processor; + +import cn.hutool.core.util.StrUtil; +import com.epmet.commons.tools.annotation.MaskResponse; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.utils.Result; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +@Slf4j +public class MaskProcessor { + + + public static final String EPMET_PACKAGE_PREFIX = "com.epmet"; + + private List fieldNames; + private List fieldsMaskType; + + public MaskProcessor(String[] fields, String[] fieldsMaskType) { + if (fields != null && fields.length > 0) { + this.fieldNames = Arrays.asList(fields); + this.fieldsMaskType = Arrays.asList(fieldsMaskType); + } + } + + /** + * 为dto中的属性打掩码 + * @param object + */ + public void mask(Object object) { + if (object == null) { + return; + } + + if (object instanceof Result) { + mask(((Result) object).getData()); + return; + } else if (object instanceof PageData) { + mask(((PageData) object).getList()); + return; + } else if (object instanceof List) { + ((List)object).forEach(e -> mask(e)); + return; + } else if (object instanceof Map) { + maskMap((Map) object); + return; + } else if (object.getClass().getName().startsWith(EPMET_PACKAGE_PREFIX)) { + // 自定义bean,走反射 + maskEpmetBean(object); + return; + } + } + + /** + * 为map打码,只打value中的码 + * - 如果value是epmet的dto,那么去反射它 + * - 如果value是字符串,那么直接给他打码 + * - 如果value是其他类型,跳过 + * @param map + */ + private void maskMap(Map map) { + if (CollectionUtils.isEmpty(map)) { + return; + } + + for (Map.Entry entry : map.entrySet()) { + Object value = entry.getValue(); + Object key = entry.getKey(); + if (value != null && value.getClass().getName().startsWith(EPMET_PACKAGE_PREFIX)) { + // 是epmet的对象 + maskEpmetBean(value); + continue; + } else if (value instanceof String) { + int index = fieldNames.indexOf(key); + if (index != -1) { + String maskResult = maskString((String) value, fieldsMaskType.get(index)); + entry.setValue(maskResult); + } + continue; + } + } + } + + /** + * 反射 + * @param object + */ + private void maskEpmetBean(Object object) { + Field[] declaredFields = object.getClass().getDeclaredFields(); + for (Field currentField : declaredFields) { + currentField.setAccessible(true); + try { + String fieldName = currentField.getName(); + Object value = currentField.get(object); + // 是epmet的类,继续下钻 + if (currentField.getClass().getName().startsWith(EPMET_PACKAGE_PREFIX)) { + maskEpmetBean(value); + continue; + } + + // 是字符串 + String fieldValue; + if (value instanceof String && StringUtils.isNotBlank(fieldValue = (String) value)) { + int fieldIndexInAnnoAttrs = fieldNames.indexOf(fieldName); + if (fieldIndexInAnnoAttrs != -1) { + String product = maskString(fieldValue, fieldsMaskType.get(fieldIndexInAnnoAttrs)); + currentField.set(object, product); + } + continue; + } + + // 非字符串,非epmet类的其他类型 + mask(value); + } catch (IllegalAccessException e) { + log.error("【mask一些字段报错】{}", ExceptionUtils.getErrorStackTrace(e)); + } + } + } + + /** + * 把字符串变更为掩码 + * @param originString + * @return + */ + public String maskString(String originString, String maskType) { + if (MaskResponse.MASK_TYPE_ID_CARD.equals(maskType)) { + return maskIdCard(originString); + } else if (MaskResponse.MASK_TYPE_MOBILE.equals(maskType)) { + return maskMobile(originString); + } else { + return originString; + } + } + + /** + * 将明文字符串打码变为掩码。保留前6,后面打码 + * @param originString + * @return + */ + private String maskIdCard(String originString) { + // 仅将6位之后的全都打码 + int length = originString.length(); + if (length <= 6) { + return originString; + } + + String maskStr = StrUtil.repeatByLength("*", length - 6); + + return originString.replaceAll("^(\\d{6})[a-zA-Z0-9]*$", new StringBuilder("$1").append(maskStr).toString()); + } + + /** + * 将明文字符串打码变为掩码。保留前3后4,中间打码 + * 187****3461 + * @param originString + * @return + */ + private String maskMobile(String originString) { + int length = originString.length(); + if (length <= 7) { + return originString; + } + + String maskStr = StrUtil.repeatByLength("*", length - 7); + + return originString.replaceAll("^(1\\d{2})\\d*(\\d{4})$", new StringBuilder("$1").append(maskStr).append("$2").toString()); + } + + public static void main(String[] args) { + String[] idc = {"idCard"}; + String[] idct = {MaskResponse.MASK_TYPE_ID_CARD}; + String r = new MaskProcessor(idc, idct).maskString("333333333333333333", MaskResponse.MASK_TYPE_ID_CARD); + System.out.println(r); + } +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/AuthCodeUtil.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/AuthCodeUtil.java new file mode 100644 index 0000000000..53dfcd5411 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/AuthCodeUtil.java @@ -0,0 +1,389 @@ +package com.epmet.commons.tools.utils; + +import lombok.extern.slf4j.Slf4j; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.*; + +/** + * desc: 市北大数据局的工具 + * + * @return + * @author LiuJanJun + * @date 2022/4/22 5:19 下午 + */ +@Slf4j +public class AuthCodeUtil { + + public enum DiscuzAuthcodeMode { + Encode, Decode + } + + /** + * + * 从字符串的指定位置截取指定长度的子字符串￿ + * + * 原字符串 + * 子字符串的起始位置 + * 子字符串的长度 + * 子字符串 + */ + public static String CutString(String str, int startIndex, int length) { + if (startIndex >= 0) { + if (length < 0) { + length = length * -1; + if (startIndex - length < 0) { + length = startIndex; + startIndex = 0; + } else { + startIndex = startIndex - length; + } + } + + if (startIndex > str.length()) { + return ""; + } + + } else { + if (length < 0) { + return ""; + } else { + if (length + startIndex > 0) { + length = length + startIndex; + startIndex = 0; + } else { + return ""; + } + } + } + + if (str.length() - startIndex < length) { + + length = str.length() - startIndex; + } + + return str.substring(startIndex, startIndex + length); + } + + /** + * + * 从字符串的指定位置开始截取到字符串结尾的了符串 + * + * 原字符串 + * 子字符串的起始位置 + * 子字符串 + */ + public static String CutString(String str, int startIndex) { + return CutString(str, startIndex, str.length()); + } + + /** + * + * 返回文件是否存在 + * + * 文件名 + * 是否存在 + */ + public static boolean FileExists(String filename) { + File f = new File(filename); + return f.exists(); + } + + /** + * + * MD5函数 + * + * 原始字符串 + * MD5结果 + */ + public static String MD5(String str) { + StringBuffer sb = new StringBuffer(); + String part = null; + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] md5 = md.digest(str.getBytes()); + + for (int i = 0; i < md5.length; i++) { + part = Integer.toHexString(md5[i] & 0xFF); + if (part.length() == 1) { + part = "0" + part; + } + sb.append(part); + } + + } catch (NoSuchAlgorithmException ex) { + } + return sb.toString(); + } + + /** + * + * 字段串是否为Null或为""(空) + * + * + * + */ + public static boolean StrIsNullOrEmpty(String str) { + // if NET1 + if (str == null || str.trim().equals("")) { + return true; + } + + return false; + } + + /** + * + * 用于 RC4 处理密码 + * + * 密码字串 + * 密钥长度,一般为 256 + * + */ + static private byte[] GetKey(byte[] pass, int kLen) { + byte[] mBox = new byte[kLen]; + + for (int i = 0; i < kLen; i++) { + mBox[i] = (byte) i; + } + + int j = 0; + for (int i = 0; i < kLen; i++) { + + j = (j + (int) ((mBox[i] + 256) % 256) + pass[i % pass.length]) + % kLen; + + byte temp = mBox[i]; + mBox[i] = mBox[j]; + mBox[j] = temp; + } + + return mBox; + } + + /** + * + * 生成随机字符 + * + * 随机字符长度 + * 随机字符 + */ + public static String RandomString(int lens) { + char[] CharArray = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', + 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + int clens = CharArray.length; + String sCode = ""; + Random random = new Random(); + for (int i = 0; i < lens; i++) { + sCode += CharArray[Math.abs(random.nextInt(clens))]; + } + return sCode; + } + + /** + * + * 使用 Discuz authcode 方法对字符串加密 + * + * 原始字符串 + * 密钥 + * 加密字串有效时间,单位是秒 + * 加密结果 + */ + public static String authcodeEncode(String source, String key, int expiry) { + return authcode(source, key, DiscuzAuthcodeMode.Encode, expiry); + + } + + /** + * + * 使用 Discuz authcode 方法对字符串加密 + * + * 原始字符串 + * 密钥 + * 加密结果 + */ + public static String authcodeEncode(String source, String key) { + return authcode(source, key, DiscuzAuthcodeMode.Encode, 0); + + } + + /** + * + * 使用 Discuz authcode 方法对字符串解密 + * + * 原始字符串 + * 密钥 + * 解密结果 + */ + public static String authcodeDecode(String source, String key) { + return authcode(source, key, DiscuzAuthcodeMode.Decode, 0); + + } + + /** + * + * 使用 变形的 rc4 编码方法对字符串进行加密或者解密 + * + * 原始字符串 + * 密钥 + * 操作 加密还是解密 + * 加密字串过期时间 + * 加密或者解密后的字符串 + */ + private static String authcode(String source, String key, + DiscuzAuthcodeMode operation, int expiry) { + try { + if (source == null || key == null) { + return ""; + } + + int ckey_length = 4; + String keya, keyb, keyc, cryptkey, result; + + key = MD5(key); + + keya = MD5(CutString(key, 0, 16)); + + keyb = MD5(CutString(key, 16, 16)); + + keyc = ckey_length > 0 ? (operation == DiscuzAuthcodeMode.Decode ? CutString( + source, 0, ckey_length) : RandomString(ckey_length)) + : ""; + + cryptkey = keya + MD5(keya + keyc); + + if (operation == DiscuzAuthcodeMode.Decode) { + byte[] temp; + + temp = Base64.getDecoder().decode(CutString(source, ckey_length)); + result = new String(RC4(temp, cryptkey)); + if (CutString(result, 10, 16).equals( + CutString(MD5(CutString(result, 26) + keyb), 0, 16))) { + return CutString(result, 26); + } else { + temp = Base64.getDecoder().decode(CutString(source + "=", ckey_length)); + result = new String(RC4(temp, cryptkey)); + if (CutString(result, 10, 16) + .equals(CutString( + MD5(CutString(result, 26) + keyb), 0, 16))) { + return CutString(result, 26); + } else { + temp = Base64.getDecoder().decode(CutString(source + "==", + ckey_length)); + result = new String(RC4(temp, cryptkey)); + if (CutString(result, 10, 16).equals( + CutString(MD5(CutString(result, 26) + keyb), 0, + 16))) { + return CutString(result, 26); + } else { + return "2"; + } + } + } + } else { + source = "0000000000" + CutString(MD5(source + keyb), 0, 16) + + source; + + byte[] temp = RC4(source.getBytes("GBK"), cryptkey); + + return keyc + Base64.getEncoder().encode(temp); + + } + } catch (Exception e) { + return ""; + } + + } + + /** + * + * RC4 原始算法 + * + * 原始字串数组 + * 密钥 + * 处理后的字串数组 + */ + private static byte[] RC4(byte[] input, String pass) { + if (input == null || pass == null) + return null; + + byte[] output = new byte[input.length]; + byte[] mBox = GetKey(pass.getBytes(), 256); + + // 加密 + int i = 0; + int j = 0; + + for (int offset = 0; offset < input.length; offset++) { + i = (i + 1) % mBox.length; + j = (j + (int) ((mBox[i] + 256) % 256)) % mBox.length; + + byte temp = mBox[i]; + mBox[i] = mBox[j]; + mBox[j] = temp; + byte a = input[offset]; + + // byte b = mBox[(mBox[i] + mBox[j] % mBox.Length) % mBox.Length]; + // mBox[j] 一定比 mBox.Length 小,不需要在取模 + byte b = mBox[(toInt(mBox[i]) + toInt(mBox[j])) % mBox.length]; + + output[offset] = (byte) ((int) a ^ (int) toInt(b)); + } + + return output; + } + + public static int toInt(byte b) { + return (int) ((b + 256) % 256); + } + + public long getUnixTimestamp() { + Calendar cal = Calendar.getInstance(); + return cal.getTimeInMillis() / 1000; + } + + public static void main(String[] args) throws IOException { + getStr(); + //readFile02("/Users/liujianjun/Downloads/abc.txt"); + } + + + /** + * 读取一个文本 一行一行读取 + * + * @param path + * @return + * @throws IOException + */ + private static void readFile02(String path) throws IOException { + // 使用一个字符串集合来存储文本中的路径 ,也可用String []数组 + List list = new ArrayList(); + FileInputStream fis = new FileInputStream(path); + // 防止路径乱码 如果utf-8 乱码 改GBK eclipse里创建的txt 用UTF-8,在电脑上自己创建的txt 用GBK + InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); + BufferedReader br = new BufferedReader(isr); + String line = ""; + String result = null; + while ((line = br.readLine()) != null) { + String key = "TvFwHe6tGA"; + result = AuthCodeUtil.authcodeDecode(line, key); + System.out.println(result); + } + br.close(); + isr.close(); + fis.close(); + System.out.println("==========end"); + } + + private static void getStr(){ + String tel = "4fb1lYySlVqMUaf/LnlBEM1nDZgCKnX+Q52azUGgSLCV0hioBvLFFZoJS1Vu"; + tel = "a1孙1增勤"; + String result = AuthCodeUtil.authcodeDecode(tel, "TvFwHe6tGA"); + System.out.println(result); + } + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java new file mode 100644 index 0000000000..bff1f1a999 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java @@ -0,0 +1,122 @@ +package com.epmet.commons.tools.utils.poi.excel.handler; + +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.write.handler.CellWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; + +import java.util.List; + +/** + * desc:单元格合并策略 + * + * @author liujianjun + */ +public class ExcelFillCellMergeStrategy implements CellWriteHandler { + + /** + * 需要合并的列 下标 + */ + private int[] mergeColumnIndex; + /** + * 从下标n行开始合并 + */ + private int mergeRowIndex; + + public ExcelFillCellMergeStrategy() { + } + + public ExcelFillCellMergeStrategy(int mergeRowIndex, int[] mergeColumnIndex) { + this.mergeRowIndex = mergeRowIndex; + this.mergeColumnIndex = mergeColumnIndex; + } + + @Override + public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) { + + } + + @Override + public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + // 隐藏id列 + writeSheetHolder.getSheet().setColumnHidden(0, true); + } + + @Override + public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> list, Cell cell, Head head, Integer integer, Boolean aBoolean) { + int curRowIndex = cell.getRowIndex(); + int curColIndex = cell.getColumnIndex(); + if (curRowIndex <= mergeRowIndex) { + return; + } + //如果不指定 合并的列则全部列进行 合并判断 + if (mergeColumnIndex == null) { + mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); + } else { + //合并指定的列号 + for (int columnIndex : mergeColumnIndex) { + if (curColIndex == columnIndex) { + mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); + break; + } + } + } + } + + /** + * 当前单元格向上合并 + * + * @param writeSheetHolder + * @param cell 当前单元格 + * @param curRowIndex 当前行 + * @param curColIndex 当前列 + */ + private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) { + // 当前行的第一个Cell + Cell curFirstCell = cell.getSheet().getRow(curRowIndex).getCell(0); + Object curFirstData = curFirstCell.getCellType() == CellType.STRING ? curFirstCell.getStringCellValue() : curFirstCell.getNumericCellValue(); + // 上一行的第一个Cell + Cell preFirstCell = cell.getSheet().getRow(curRowIndex - 1).getCell(0); + Object preFirstData = preFirstCell.getCellType() == CellType.STRING ? preFirstCell.getStringCellValue() : preFirstCell.getNumericCellValue(); + + if (curFirstData.equals(preFirstData)) { + Object curData = cell.getCellType() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue(); + Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex); + Object preData = preCell.getCellType() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue(); + // 将当前单元格数据与上一个单元格数据比较 + Boolean dataBool = preData.equals(curData); + //此处需要注意:因为我是按照序号确定是否需要合并的,所以获取每一行第一列数据和上一行第一列数据进行比较,如果相等合并 + Boolean bool = cell.getRow().getCell(0).getStringCellValue().equals(cell.getSheet().getRow(curRowIndex - 1).getCell(0).getStringCellValue()); + + if (!dataBool || !bool) { + return; + } + Sheet sheet = writeSheetHolder.getSheet(); + List mergeRegions = sheet.getMergedRegions(); + boolean isMerged = false; + for (int i = 0; i < mergeRegions.size() && !isMerged; i++) { + CellRangeAddress cellRangeAddr = mergeRegions.get(i); + // 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元 + if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) { + sheet.removeMergedRegion(i); + cellRangeAddr.setLastRow(curRowIndex); + sheet.addMergedRegion(cellRangeAddr); + isMerged = true; + } + } + // 若上一个单元格未被合并,则新增合并单元 + if (!isMerged) { + CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex); + sheet.addMergedRegion(cellRangeAddress); + } + + } + } + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/FreezeAndFilter.java similarity index 95% rename from epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java rename to epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/FreezeAndFilter.java index 6b5d5e55c5..13ef447219 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/FreezeAndFilter.java @@ -1,4 +1,4 @@ -package com.epmet.commons.tools.utils.poi.excel; +package com.epmet.commons.tools.utils.poi.excel.handler; /** * desc:easyExcel 冻结标题 diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/group/ExportGroup.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/group/ExportGroup.java new file mode 100644 index 0000000000..4b6f21b833 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/group/ExportGroup.java @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.epmet.commons.tools.validator.group; + +/** + * 导出 Group + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +public interface ExportGroup { + +} diff --git a/epmet-gateway/pom.xml b/epmet-gateway/pom.xml index ae5f0932ab..4bb82920bc 100644 --- a/epmet-gateway/pom.xml +++ b/epmet-gateway/pom.xml @@ -239,6 +239,8 @@ lb://tduck-api + + lb://pli-power-base-server https://oapi.dingtalk.com/robot/send?access_token=e894e5690f9d6a527722974c71548ff6c0fe29bd956589a09e21b16442a35ed4 SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd @@ -293,6 +295,7 @@ lb://epmet-demo-server lb://oper-customize-server + lb://oper-crm-server @@ -377,6 +380,8 @@ lb://epmet-openapi-adv-server + + lb://pli-power-base-server lb://tduck-api @@ -487,6 +492,8 @@ lb://epmet-openapi-adv-server + + lb://pli-power-base-server https://oapi.dingtalk.com/robot/send?access_token=e894e5690f9d6a527722974c71548ff6c0fe29bd956589a09e21b16442a35ed4 SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd @@ -590,6 +597,8 @@ lb://epmet-openapi-adv-server + + lb://pli-power-base-server lb://tduck-api diff --git a/epmet-gateway/src/main/resources/bootstrap.yml b/epmet-gateway/src/main/resources/bootstrap.yml index aeebe0f583..e61438de52 100644 --- a/epmet-gateway/src/main/resources/bootstrap.yml +++ b/epmet-gateway/src/main/resources/bootstrap.yml @@ -360,6 +360,15 @@ spring: filters: - StripPrefix=1 - CpAuth=true + #数字底座动力主轴 + - id: pli-power-base-server + uri: @gateway.routes.plugin.power-base-server.url@ + order: 39 + predicates: + - Path=${server.servlet.context-path}/pli/power/** + filters: + - StripPrefix=1 + - CpAuth=true nacos: discovery: diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java index 992ac08201..5dc796e562 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java @@ -98,10 +98,10 @@ public class GovOrgServiceImpl implements GovOrgService { @Autowired private OssFeignClient ossFeignClient; @Autowired - private EvaluationIndexService evaluationIndexService; - @Autowired private IcBuildingDao icBuildingDao; @Autowired + private EvaluationIndexService evaluationIndexService; + @Autowired private RedisUtils redisUtils; @Autowired private ExecutorService executorService; diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java index 8aa052b52e..4f395d2574 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java @@ -11,6 +11,7 @@ import com.epmet.commons.tools.exception.RenException; 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.AgencyInfoCache; import com.epmet.commons.tools.redis.common.bean.GridInfoCache; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.user.LoginUserUtil; diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactGridMemberStatisticsDailyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactGridMemberStatisticsDailyServiceImpl.java index 08a2528e8e..1be162db2d 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactGridMemberStatisticsDailyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactGridMemberStatisticsDailyServiceImpl.java @@ -82,7 +82,7 @@ public class FactGridMemberStatisticsDailyServiceImpl extends BaseServiceImpl staffMap = staffInfoList.stream().collect(Collectors.toMap(StaffRoleInfoDTO :: getStaffId, - Function.identity())); + Function.identity(), (key1, key2) -> key2)); List list = staffGridList.stream().filter(p -> null != staffMap.get(p.getStaffId())).map(item -> { StaffRoleInfoDTO staffInfo = staffMap.get(item.getStaffId()); return initEntity(customerId, dateId, item, staffInfo); diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java index 5c71e7bcf1..133cb6200c 100644 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java @@ -1,6 +1,7 @@ package com.epmet.feign; import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.dto.result.OptionResultDTO; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.ActInfoDTO; import com.epmet.dto.VolunteerInfoDTO; @@ -103,4 +104,7 @@ public interface EpmetHeartOpenFeignClient { */ @GetMapping("/heart/serviceitem/initCustomer/{customerId}") Result customerInit(@PathVariable(value = "customerId") String customerId); + + @PostMapping("/heart/icresidemanddict/demandoption") + Result> getDemandOptions(); } diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java index 28e1fc50b8..a0af921435 100644 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java @@ -1,6 +1,7 @@ package com.epmet.feign.fallback; import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.dto.result.OptionResultDTO; import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.ActInfoDTO; @@ -102,4 +103,9 @@ public class EpmetHeartOpenFeignClientFallback implements EpmetHeartOpenFeignCli public Result customerInit(String customerId) { return ModuleUtils.feignConError(ServiceConstant.EPMET_HEART_SERVER, "customerInit", customerId); } + + @Override + public Result> getDemandOptions() { + return ModuleUtils.feignConError(ServiceConstant.EPMET_HEART_SERVER, "getDemandOptions", null); + } } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java index 846e342657..0b5ee36509 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java @@ -67,6 +67,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.Optional; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java index 4d6dfb09d0..0b2e2749cb 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java @@ -13,6 +13,12 @@ import java.util.List; public class BlockChainProcessProjectFormDTO implements Serializable { private static final long serialVersionUID = -7316616101790749793L; + + /** + * 项目基础信息 + */ + private BlockChainProjectFormDTO project; + @NotNull(message = "处理进展信息不能为空") private BlockChainProjectProcessFormDTO process; diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java index 36db95499d..c648097ab2 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java @@ -182,15 +182,20 @@ public class BlockChainProjectServiceImpl implements BlockChainProjectService, R @Override public void blockChainProcessProject(BlockChainProcessProjectFormDTO input) { + BlockChainProjectFormDTO project = input.getProject(); BlockChainProjectProcessFormDTO process = input.getProcess(); List assignedStaffs = input.getAssignedStaffs(); BlockChainProjectProcessAssignedStaffFormDTO handledStaff = input.getHandledStaff(); - fill(null, process, assignedStaffs, handledStaff); + fill(project, process, assignedStaffs, handledStaff); String processString = JSON.toJSONString(process); blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_PROCESS, processString); - + + if (project != null) { + blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_PROJECT, JSON.toJSONString(project)); + } + if (assignedStaffs != null && assignedStaffs.size() > 0) { String assignedStaffsString = JSON.toJSONString(assignedStaffs); blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_ASSIGNED_STAFFS, assignedStaffsString); diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcBuildingDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcBuildingDTO.java index 4d9aa11d17..2bb91a53ec 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcBuildingDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcBuildingDTO.java @@ -85,6 +85,16 @@ public class IcBuildingDTO implements Serializable { */ private Integer totalHouseNum; + /** + * 楼长姓名 + */ + private String buildingLeaderName; + + /** + * 楼长电话 + */ + private String buildingLeaderMobile; + /** * 中心点位:经度 */ diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcHouseDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcHouseDTO.java index 2bec463b9b..2b48157889 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcHouseDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcHouseDTO.java @@ -17,9 +17,10 @@ package com.epmet.dto; +import lombok.Data; + import java.io.Serializable; import java.util.Date; -import lombok.Data; /** @@ -47,6 +48,7 @@ public class IcHouseDTO implements Serializable { * 小区id */ private String neighborHoodId; + private String neighborHoodName; /** * 片区id,neighbor_hood_part.id,可为空。 @@ -57,12 +59,12 @@ public class IcHouseDTO implements Serializable { * 所属楼栋id */ private String buildingId; - + private String buildingName; /** * 所属单元id */ private String buildingUnitId; - + private String unitName; /** * 房屋名字后台插入时生成 */ @@ -77,17 +79,17 @@ public class IcHouseDTO implements Serializable { * 房屋类型,这里存储字典value就可以 */ private String houseType; - + private String houseTypeName; /** * 存储字典value */ private String purpose; - + private String purposeName; /** * 1出租;0未出租 */ private Integer rentFlag; - + private String rentName; /** * 房主姓名 */ 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 index c18766b89e..82f276ebaf 100644 --- 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 @@ -45,6 +45,16 @@ public class ImportGeneralDTO implements Serializable { private String buildingName; private String buildingId; + /** + * 楼长姓名 + */ + private String buildingLeaderName; + + /** + * 楼长电话 + */ + private String buildingLeaderMobile; + /** * 房屋类型 */ @@ -148,8 +158,18 @@ public class ImportGeneralDTO implements Serializable { */ private Boolean buildingExistStatus = false; + /** + * 楼栋单元数小于当前值时为true + */ + private Boolean buildingUnitNumStatus = false; + /** * 小区重复状态 */ private Boolean neighborHoodExistStatus = false; + + /** + * 排序 + */ + private Integer sort; } diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseChartFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseChartFormDTO.java new file mode 100644 index 0000000000..6d3d8f433a --- /dev/null +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseChartFormDTO.java @@ -0,0 +1,29 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author sun + * @dscription 【人房】房屋总数饼图-接口入参 + */ +@Data +public class HouseChartFormDTO implements Serializable { + + private static final long serialVersionUID = 405799151478155056L; + + /** + * 组织、网格、小区Id + */ + private String orgId; + /** + * 组织、网格、小区类型 agency grid village + */ + private String orgType; + + //token这信息 + private String customerId; + private String userId; + +} diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcBulidingAddFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcBulidingAddFormDTO.java index e476297ec6..0039390e15 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcBulidingAddFormDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcBulidingAddFormDTO.java @@ -123,6 +123,16 @@ public class IcBulidingAddFormDTO implements Serializable { private String latitude; + /** + * 楼长姓名 + */ + private String buildingLeaderName; + + /** + * 楼长电话 + */ + private String buildingLeaderMobile; + diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java new file mode 100644 index 0000000000..7a4e974162 --- /dev/null +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java @@ -0,0 +1,57 @@ +package com.epmet.dto.result; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author sun + * @dscription 【人房】房屋总数饼图-接口返参 + */ +@Data +public class HouseChartResultDTO implements Serializable { + /** + * 组织、网格、小区Id + */ + private String orgId; + /** + * 组织、网格、小区类型 agency grid village + */ + private String orgType; + /** + * 房屋总数 + */ + private Integer houseTotal = 0; + /** + * 房屋自住总数 + */ + private Integer zzHouseTotal = 0; + /** + * 房屋自住总数占比(保留两位小数,带百分号的) + */ + private Double zzHouseRatio = 0.0; + /** + * 房屋常住总数 + */ + private Integer czHouseTotal = 0; + /** + * 房屋常住总数占比(保留两位小数,带百分号的) + */ + private Double czHouseRatio = 0.0; + /** + * 房屋闲置总数 + */ + private Integer xzHouseTotal = 0; + /** + * 房屋闲置总数占比(保留两位小数,带百分号的) + */ + private Double xzHouseRatio = 0.0; + + @JsonIgnore + private Integer num; + //1:出租 0:自住 2:闲置 + @JsonIgnore + private Integer rentFlag; + +} diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseListResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseListResultDTO.java index a63f415e94..c3ae6f07e1 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseListResultDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseListResultDTO.java @@ -18,6 +18,7 @@ public class HouseListResultDTO implements Serializable { private static final long serialVersionUID = 2063032844842070847L; private String houseId; private String houseName; + private String rentFlag; private List categoryList; @NoArgsConstructor diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/IcBuildingListResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/IcBuildingListResultDTO.java index ebaf6ca58e..550938c23e 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/IcBuildingListResultDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/IcBuildingListResultDTO.java @@ -17,7 +17,16 @@ public class IcBuildingListResultDTO extends PageFormDTO { private static final long serialVersionUID = -8277921228438123299L; private String gridName; + + /** + * 设计的房屋总数,就是这个楼上实际有几个 + */ private Integer totalHouseNum; + + /** + * 实际录入房屋总数 + */ + private Integer realTotalHouseNum; private String latitude; private String agencyId; private Integer sort; @@ -32,4 +41,14 @@ public class IcBuildingListResultDTO extends PageFormDTO { private Integer totalUnitNum; private String longitude; private String buildingType; + + /** + * 楼长姓名 + */ + private String buildingLeaderName; + + /** + * 楼长电话 + */ + private String buildingLeaderMobile; } diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java new file mode 100644 index 0000000000..905dca051f --- /dev/null +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java @@ -0,0 +1,74 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author sun + * @dscription 【人房】下级人房概览列表-接口返参 + */ +@Data +public class SubUserHouseListResultDTO implements Serializable { + /** + * 组织、网格、小区Id + */ + private String orgId; + /** + * 组织、网格、小区名称 + */ + private String orgName; + /** + * 组织、网格、小区类型 agency grid village + */ + private String orgType; + /** + * 房屋总数 + */ + private Integer houseTotal = 0; + /** + * 房屋自住总数 + */ + private Integer zzHouseTotal = 0; + /** + * 房屋自住总数占比(保留两位小数,带百分号的) + */ + private Double zzHouseRatio = 0.0; + /** + * 房屋常住总数 + */ + private Integer czHouseTotal = 0; + /** + * 房屋常住总数占比(保留两位小数,带百分号的) + */ + private Double czHouseRatio = 0.0; + /** + * 房屋闲置总数 + */ + private Integer xzHouseTotal = 0; + /** + * 房屋闲置总数占比(保留两位小数,带百分号的) + */ + private Double xzHouseRatio = 0.0; + /** + * 居民总数 + */ + private Integer userTotal = 0; + /** + * 常住人口总数 + */ + private Integer czUserTotal = 0; + /** + * 常住人口占比(保留两位小数,带百分号的) + */ + private Double czUserRatio = 0.0; + /** + * 流动人口总数 + */ + private Integer ldUserTotal = 0; + /** + * 流动人口占比(保留两位小数,带百分号的) + */ + private Double ldUserRatio = 0.0; + +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/aspect/RequestLogAspect.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/aspect/RequestLogAspect.java index 49581cf63c..f9be4267e8 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/aspect/RequestLogAspect.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/aspect/RequestLogAspect.java @@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest; */ @Aspect @Component -@Order(0) +@Order(1) public class RequestLogAspect extends BaseRequestLogAspect { @Override diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java index 2c764b63db..0156f0e042 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java @@ -8,6 +8,7 @@ package com.epmet.constant; public interface ImportErrorMsgConstants { String EXIST_ERROR = "数据已存在"; + String UNIT_ERROR = "暂不支持单元数减小"; String DOCUMENT_EXIST_ERROR = "文件中存在重复数据"; 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 7be2f59dac..e1cb16c102 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,7 @@ package com.epmet.controller; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import com.epmet.commons.tools.annotation.LoginUser; +import com.epmet.commons.tools.annotation.MaskResponse; import com.epmet.commons.tools.aop.NoRepeatSubmit; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.ServiceConstant; @@ -31,10 +32,7 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.constants.ImportTaskConstants; import com.epmet.dto.form.*; -import com.epmet.dto.result.HouseInfoDTO; -import com.epmet.dto.result.IcHouseListResultDTO; -import com.epmet.dto.result.ImportTaskCommonResultDTO; -import com.epmet.dto.result.LoginUserDetailsResultDTO; +import com.epmet.dto.result.*; import com.epmet.feign.EpmetCommonServiceOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.service.HouseService; @@ -47,7 +45,10 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; /** @@ -69,8 +70,9 @@ public class HouseController implements ResultDataResolver { @Autowired private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient; - @PostMapping("houselist") + @MaskResponse(fieldNames = {"ownerIdCard", "ownerPhone"}, + fieldsMaskType = { MaskResponse.MASK_TYPE_ID_CARD, MaskResponse.MASK_TYPE_MOBILE }) public Result> houseList(@LoginUser TokenDto loginUser, @RequestBody IcHouseListFormDTO formDTO) { //效验数据 LoginUserDetailsResultDTO loginUserDetail = getLoginUserDetailsResultDTO(loginUser, "【查询房屋】查询当前staff所在组织信息失败"); @@ -269,4 +271,27 @@ public class HouseController implements ResultDataResolver { } return new Result().ok(houseService.getHouseInfoDTO(tokenDto.getCustomerId(), houseId)); } + + /** + * @Author sun + * @Description 【人房】房屋总数饼图 + **/ + @PostMapping("housechart") + public Result houseChart(@LoginUser TokenDto tokenDto, @RequestBody HouseChartFormDTO formDTO) { + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + return new Result().ok(houseService.houseChart(formDTO)); + } + + /** + * @Author sun + * @Description 【人房】下级人房概览列表 + **/ + @PostMapping("subuserhouselist") + public Result> subUserHouseList(@LoginUser TokenDto tokenDto, @RequestBody HouseChartFormDTO formDTO) { + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + return new Result>().ok(houseService.subUserHouseList(formDTO)); + } + } 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 627b5a5d8b..5100759cc6 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 @@ -45,6 +45,7 @@ import com.epmet.service.IcNeighborHoodService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; 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 5c87d4ec46..3fd205a48d 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 @@ -180,4 +180,20 @@ public interface IcBuildingDao extends BaseDao { */ void allUpdateHouseNum(@Param("nums") List nums); + /** + * Desc: 更新楼栋信息 + * @param info + * @author zxc + * @date 2022/4/27 13:29 + */ + void updateBuilding(ImportGeneralDTO info); + + /** + * Desc: 查询楼栋下单元数 + * @param buildingId + * @author zxc + * @date 2022/4/27 14:41 + */ + Integer selectUnitCount(@Param("buildingId")String buildingId); + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java index 8c17130cd9..05d4c86990 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java @@ -3,10 +3,7 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.dto.ImportGeneralDTO; import com.epmet.dto.form.IcHouseListFormDTO; -import com.epmet.dto.result.HouseInfoDTO; -import com.epmet.dto.result.HousesNameResultDTO; -import com.epmet.dto.result.IcHouseListResultDTO; -import com.epmet.dto.result.NeighborHoodManageDelResultDTO; +import com.epmet.dto.result.*; import com.epmet.entity.IcHouseEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -91,4 +88,9 @@ public interface IcHouseDao extends BaseDao { */ void houseUpdateHouseName(@Param("buildingId")String buildingId); + /** + * @Author sun + * @Description 【人房】房屋总数饼图 + **/ + List houseChart(@Param("orgId") String orgId, @Param("orgType") String orgType); } 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 d2adb6c87f..6238d0f303 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 @@ -18,6 +18,9 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.ImportGeneralDTO; +import com.epmet.dto.NeighborHoodAndManagementDTO; +import com.epmet.dto.IcNeighborHoodDTO; import com.epmet.dto.form.IcNeighborHoodListFormDTO; import com.epmet.dto.result.IcNeighborHoodResultDTO; import com.epmet.entity.IcHouseEntity; @@ -59,4 +62,29 @@ public interface IcNeighborHoodDao extends BaseDao { */ List selectNeighborhoodNameByNames(@Param("names")List names,@Param("customerId") String customerId); + /** + * Desc: 更新小区详细地址和备注 + * @param needUpdateList + * @author zxc + * @date 2022/4/27 09:59 + */ + void updateNeighborHood(@Param("list") List needUpdateList); + + /** + * Desc: 更新小区关系表 + * @param updateNeighborHoodAndManagement + * @author zxc + * @date 2022/4/27 10:33 + */ + void neighborHoodPropertyUpdate(@Param("list")List updateNeighborHoodAndManagement); + + List selectNeighborList(@Param("gridId")String gridId); + + /** + * Desc: 删除物业关系 + * @param neighborHoodIds + * @author zxc + * @date 2022/4/28 09:10 + */ + void delProperty(@Param("neighborHoodIds")List neighborHoodIds); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcBuildingEntity.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcBuildingEntity.java index b4d4811caa..98b4d54012 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcBuildingEntity.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcBuildingEntity.java @@ -80,6 +80,16 @@ public class IcBuildingEntity extends BaseEpmetEntity { */ private Integer totalHouseNum; + /** + * 楼长姓名 + */ + private String buildingLeaderName; + + /** + * 楼长电话 + */ + private String buildingLeaderMobile; + /** * 中心点位:经度 */ 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 index dac7c09015..81495c3da6 100644 --- 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 @@ -36,6 +36,12 @@ public class BuildingInfoModel { @ExcelProperty(value = "户数") private Integer totalHouseNum; + @ExcelProperty(value = "楼长姓名") + private String buildingLeaderName; + + @ExcelProperty(value = "楼长电话") + private String buildingLeaderMobile; + @ExcelIgnore private Integer num; 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 index cc0bc625ca..6fea4df3ff 100644 --- 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 @@ -165,14 +165,16 @@ public class ImportBuildingInfoListener extends AnalysisEventListener 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 -> { + /*Map> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getBuildingExistStatus)); + List existList = groupByBuildingExistStatus.get(true);*/ + Map> collect = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getBuildingUnitNumStatus)); + List unitNumList = collect.get(true); + if (!CollectionUtils.isEmpty(unitNumList)){ + unitNumList.forEach(e -> { if (!e.getAddStatus()){ nums.add(e.getNum()); BuildingInfoModel buildingInfoModel = ConvertUtils.sourceToTarget(e, BuildingInfoModel.class); - disposeErrorMsg(buildingInfoModel,ImportErrorMsgConstants.EXIST_ERROR); + disposeErrorMsg(buildingInfoModel,ImportErrorMsgConstants.UNIT_ERROR); e.setAddStatus(true); } }); 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 index 08eb31a9cc..31471fb3ed 100644 --- 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 @@ -34,6 +34,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.epmet.constant.ImportErrorMsgConstants.*; 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 index a75f0dc15f..a2581e8c48 100644 --- 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 @@ -51,6 +51,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener needDisposeList = new ArrayList<>(); List needInsertList = new ArrayList<>(); + List needUpdateList = new ArrayList<>(); String gridName = null; String agencyName = null; @@ -128,7 +129,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener groupByAllName = needDisposeList.stream().collect(Collectors.groupingBy( @@ -151,8 +152,11 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener> groupByStatus = needDisposeList.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getExistStatus)); List importGeneralDTOS = groupByStatus.get(false); - if (!CollectionUtils.isEmpty(importGeneralDTOS)){ - List importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS); + if (!CollectionUtils.isEmpty(importGeneralDTOS) || !CollectionUtils.isEmpty(needUpdateList)){ + List importInfo = new ArrayList<>(); + if (!CollectionUtils.isEmpty(importGeneralDTOS)){ + importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS); + } Map> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getNeighborHoodExistStatus)); List existList = groupByBuildingExistStatus.get(true); if (!CollectionUtils.isEmpty(existList)){ @@ -165,7 +169,16 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener notExistList = groupByBuildingExistStatus.get(false); + List notExistList = new ArrayList<>(); + List notExistListFalse = groupByBuildingExistStatus.get(false); + if (!CollectionUtils.isEmpty(notExistListFalse)){ + notExistList.addAll(notExistListFalse); + } + if (!CollectionUtils.isEmpty(needUpdateList)){ + notExistList.addAll(needUpdateList); + // 更新详细地址和备注 + neighborHoodService.updateNeighborHood(needUpdateList); + } if (!CollectionUtils.isEmpty(notExistList)){ // 物业表插入 List propertyNames = notExistList.stream().filter(n -> StringUtils.isNotBlank(n.getPropertyName())).map(m -> m.getPropertyName()).distinct().collect(Collectors.toList()); @@ -184,15 +197,26 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(notExistList, NeighborHoodAndManagementDTO.class); + List neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(notExistListFalse, NeighborHoodAndManagementDTO.class); + List updateNeighborHoodAndManagement = ConvertUtils.sourceToTarget(needUpdateList, 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()); - })); + if (!CollectionUtils.isEmpty(neighborHoodAndManagementDTOS)){ + neighborHoodAndManagementDTOS.forEach(n -> propertyManagementInfos.stream().filter(p -> p.getName().equals(n.getPropertyName())) + .forEach(p -> { + n.setPropertyId(p.getId()); + n.setNeighborHoodId(n.getNeighborHoodId()); + })); + } + if (!CollectionUtils.isEmpty(updateNeighborHoodAndManagement)){ + updateNeighborHoodAndManagement.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); + neighborHoodService.neighborHoodPropertyUpdate(updateNeighborHoodAndManagement); } } } @@ -200,6 +224,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener(); needInsertList = new ArrayList<>(); + needUpdateList = new ArrayList<>(); gridName = null; agencyName = null; gridInfos = null; @@ -297,9 +322,13 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener subUserHouseList(HouseChartFormDTO formDTO); } 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 b7279e59ad..0822d4805b 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 @@ -21,6 +21,7 @@ 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.dto.IcBuildingDTO; +import com.epmet.dto.ImportGeneralDTO; import com.epmet.entity.IcBuildingEntity; import java.util.List; @@ -113,4 +114,12 @@ public interface IcBuildingService extends BaseService { * @Date 2022/2/14 15:19 */ IcBuildingDTO getBuildingInfo(String neighborHoodId, String buildingName); + + /** + * Desc: 更新楼栋信息 + * @param info + * @author zxc + * @date 2022/4/27 13:29 + */ + void updateBuilding(ImportGeneralDTO info); } \ 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 fb97d3add3..087ab03441 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 @@ -23,6 +23,7 @@ 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.NeighborHoodAndManagementDTO; import com.epmet.dto.form.IcNeighborHoodAddFormDTO; import com.epmet.dto.form.ImportInfoFormDTO; import com.epmet.dto.result.ImportTaskCommonResultDTO; @@ -155,4 +156,20 @@ public interface IcNeighborHoodService extends BaseService * @return */ PageData openPage(IcNeighborHoodAddFormDTO params); + + /** + * Desc: 更新小区 + * @param needUpdateList + * @author zxc + * @date 2022/4/27 09:59 + */ + void updateNeighborHood(List needUpdateList); + + /** + * Desc: 更新小区关系表 + * @param updateNeighborHoodAndManagement + * @author zxc + * @date 2022/4/27 10:33 + */ + void neighborHoodPropertyUpdate(List updateNeighborHoodAndManagement); } 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 3866a9c6ad..4e8ccd0e93 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 @@ -430,14 +430,11 @@ public class BuildingServiceImpl implements BuildingService { if (null != count && count > 0) { throw new RenException(EpmetErrorCode.BUILDING_NAME_EXITED.getCode(), EpmetErrorCode.BUILDING_NAME_EXITED.getMsg()); } - IcBuildingDTO icBuilding = icBuildingService.get(formDTO.getBuildingId()); - if (!icBuilding.getNeighborHoodId().equals(formDTO.getNeighborHoodId())) { //更新对应房屋小区id List icHouseEntities = icHouseDao.selectList(new QueryWrapper().lambda().eq(IcHouseEntity::getBuildingId, formDTO.getBuildingId())); if (!CollectionUtils.isEmpty(icHouseEntities)) { - // throw new RenException(EpmetErrorCode.ORG_EDIT_FAILED.getCode(), "楼栋单元下存在房屋,无法更新"); } } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java index 75efdc6e38..82df952253 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java @@ -6,6 +6,7 @@ import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; 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.enums.OrgTypeEnum; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetException; @@ -13,24 +14,16 @@ import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.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.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.CustomerGridConstant; import com.epmet.constants.ImportTaskConstants; -import com.epmet.dao.IcBuildingDao; -import com.epmet.dao.IcBuildingUnitDao; -import com.epmet.dao.IcHouseDao; -import com.epmet.dao.IcNeighborHoodDao; -import com.epmet.dto.CustomerAgencyDTO; -import com.epmet.dto.IcBuildingDTO; -import com.epmet.dto.IcBuildingUnitDTO; -import com.epmet.dto.IcHouseDTO; +import com.epmet.dao.*; +import com.epmet.dto.*; import com.epmet.dto.form.*; -import com.epmet.dto.result.HouseInfoDTO; -import com.epmet.dto.result.IcHouseListResultDTO; -import com.epmet.dto.result.ImportTaskCommonResultDTO; -import com.epmet.dto.result.NeighborHoodManageDelResultDTO; +import com.epmet.dto.result.*; import com.epmet.entity.IcHouseEntity; import com.epmet.enums.HousePurposeEnums; import com.epmet.enums.HouseTypeEnums; @@ -54,8 +47,10 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; +import java.text.NumberFormat; import java.util.*; import java.util.concurrent.ExecutorService; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @Slf4j @@ -90,9 +85,12 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient; @Autowired private ExecutorService executorService; - @Autowired private EpmetUserOpenFeignClient epmetUserOpenFeignClient; + @Autowired + private CustomerAgencyDao customerAgencyDao; + @Autowired + private CustomerGridDao customerGridDao; @Override @@ -356,4 +354,159 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { } return houseInfo; } + + /** + * @Author sun + * @Description 【人房】房屋总数饼图 + **/ + @Override + public HouseChartResultDTO houseChart(HouseChartFormDTO formDTO) { + HouseChartResultDTO resultDTO = new HouseChartResultDTO(); + //计算百分比使用,保留小数点后两位 + NumberFormat numberFormat = NumberFormat.getInstance(); + numberFormat.setMaximumFractionDigits(NumConstant.TWO); + //1.判断入参是否有值,没有值则赋值当前工作人员缓存中所属组织信息 + if (StringUtils.isEmpty(formDTO.getOrgId())) { + //2.获取工作人员缓存信息 + CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId()); + if (null == staffInfo) { + throw new EpmetException(String.format("查询工作人员%s缓存信息失败...", formDTO.getUserId())); + } + formDTO.setOrgId(staffInfo.getAgencyId()); + formDTO.setOrgType("agency"); + } + //2.根据入参值查询对应的房屋统计数据 + List list = icHouseDao.houseChart(formDTO.getOrgId(), formDTO.getOrgType()); + //3.汇总数据 + AtomicInteger houseTotal = new AtomicInteger(); + list.forEach(l -> { + houseTotal.addAndGet(l.getNum()); + if (l.getRentFlag() == 0) { + resultDTO.setZzHouseTotal(l.getNum()); + } else if (l.getRentFlag() == 1) { + resultDTO.setCzHouseTotal(l.getNum()); + } else { + resultDTO.setXzHouseTotal(l.getNum()); + } + }); + resultDTO.setHouseTotal(houseTotal.get()); + resultDTO.setZzHouseRatio(Double.valueOf((resultDTO.getHouseTotal() == 0 || resultDTO.getZzHouseTotal() > resultDTO.getHouseTotal()) ? "0" : numberFormat.format(((float) resultDTO.getZzHouseTotal() / (float) resultDTO.getHouseTotal()) * 100))); + resultDTO.setCzHouseRatio(Double.valueOf((resultDTO.getHouseTotal() == 0 || resultDTO.getCzHouseTotal() > resultDTO.getHouseTotal()) ? "0" : numberFormat.format(((float) resultDTO.getCzHouseTotal() / (float) resultDTO.getHouseTotal()) * 100))); + resultDTO.setXzHouseRatio(Double.valueOf((resultDTO.getHouseTotal() == 0 || resultDTO.getXzHouseTotal() > resultDTO.getHouseTotal()) ? "0" : numberFormat.format(((float) resultDTO.getXzHouseTotal() / (float) resultDTO.getHouseTotal()) * 100))); + resultDTO.setOrgId(formDTO.getOrgId()); + resultDTO.setOrgType(formDTO.getOrgType()); + return resultDTO; + } + + /** + * @Author sun + * @Description 【人房】下级人房概览列表 + **/ + @Override + public List subUserHouseList(HouseChartFormDTO formDTO) { + List resultList = new ArrayList<>(); + //1.判断入参没值的赋值当前工作人员缓存所属组织信息 + if (StringUtils.isEmpty(formDTO.getOrgId())) { + //获取工作人员缓存信息 + CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId()); + if (null == staffInfo) { + throw new EpmetException(String.format("查询工作人员%s缓存信息失败...", formDTO.getUserId())); + } + formDTO.setOrgId(staffInfo.getAgencyId()); + formDTO.setOrgType("agency"); + } + if ("village".equals(formDTO.getOrgType())) { + return new ArrayList<>(); + } + //2.根据入参值查询直属下级列表(组织、网格、小区列表) + List idList = new ArrayList<>(); + Map map = new HashMap<>(); + String orgType = ""; + if ("agency".equals(formDTO.getOrgType())) { + //获取组织缓存,判断组织级别 + AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getOrgId()); + if (null == agencyInfo) { + throw new RenException(String.format("查询组织信息失败%s", formDTO.getOrgId())); + } + //直属下级网格列表 + if ("community".equals(agencyInfo.getLevel())) { + orgType = "grid"; + List list = customerGridDao.selectGridList(formDTO.getOrgId()); + idList = list.stream().map(GridListResultDTO::getGridId).collect(Collectors.toList()); + map = list.stream().collect(Collectors.toMap(GridListResultDTO::getGridId, GridListResultDTO::getGridName, (k1, k2) -> k1)); + } else { + //直属下级组织列表 + orgType = "agency"; + List list = customerAgencyDao.selectAgencyList(formDTO.getOrgId()); + idList = list.stream().map(AgencyListResultDTO::getAgencyId).collect(Collectors.toList()); + map = list.stream().collect(Collectors.toMap(AgencyListResultDTO::getAgencyId, AgencyListResultDTO::getAgencyName, (k1, k2) -> k1)); + } + } else if ("grid".equals(formDTO.getOrgType())) { + //网格直属小区列表 + orgType = "village"; + List list = icNeighborHoodDao.selectNeighborList(formDTO.getOrgId()); + idList = list.stream().map(IcNeighborHoodDTO::getId).collect(Collectors.toList()); + map = list.stream().collect(Collectors.toMap(IcNeighborHoodDTO::getId, IcNeighborHoodDTO::getNeighborHoodName, (k1, k2) -> k1)); + } + + //3.分别查询直属下级列表的房屋、居民统计数据 + resultList = houseUserChartList(idList, map, orgType); + + return resultList; + } + + /** + * @Author sun + * @Description 【人房】房屋、居民统计列表数据 + **/ + private List houseUserChartList(List idList, Map map, String orgType) { + List list = new ArrayList<>(); + //1.直属下级列表的房屋数据 + List houseList = new ArrayList<>(); + HouseChartFormDTO houseDTO = new HouseChartFormDTO(); + houseDTO.setOrgType(orgType); + for (String id : idList) { + houseDTO.setOrgId(id); + houseList.add(houseChart(houseDTO)); + } + //2.直属下级列表的居民数据 + UserChartFormDTO userDTO = new UserChartFormDTO(); + userDTO.setOrgType(orgType); + userDTO.setIdList(idList); + Result> userResult = epmetUserOpenFeignClient.userChartList(userDTO); + if (!userResult.success()) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取居民人房统计数据失败" + userResult.getInternalMsg(), userResult.getMsg()); + } + //3.汇总封装数据 + SubUserHouseListResultDTO dto = null; + for (String id : idList) { + dto = new SubUserHouseListResultDTO(); + dto.setOrgId(id); + dto.setOrgName(map.get(id)); + dto.setOrgType(orgType); + for (HouseChartResultDTO h : houseList) { + if (h.getOrgId().equals(id)) { + dto.setHouseTotal(h.getHouseTotal()); + dto.setZzHouseTotal(h.getZzHouseTotal()); + dto.setZzHouseRatio(h.getZzHouseRatio()); + dto.setCzHouseTotal(h.getCzHouseTotal()); + dto.setCzHouseRatio(h.getCzHouseRatio()); + dto.setXzHouseTotal(h.getXzHouseTotal()); + dto.setXzHouseRatio(h.getXzHouseRatio()); + } + } + for (UserChartResultDTO u : userResult.getData()) { + if (u.getOrgId().equals(id)) { + dto.setUserTotal(u.getUserTotal()); + dto.setCzUserTotal(u.getCzUserTotal()); + dto.setCzUserRatio(u.getCzUserRatio()); + dto.setLdUserTotal(u.getLdUserTotal()); + dto.setLdUserRatio(u.getLdUserRatio()); + } + } + list.add(dto); + } + return list; + } + } 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 122e9755a0..351fc95306 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 @@ -27,6 +27,7 @@ import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.dao.IcBuildingDao; import com.epmet.dto.IcBuildingDTO; +import com.epmet.dto.ImportGeneralDTO; import com.epmet.entity.IcBuildingEntity; import com.epmet.service.IcBuildingService; import lombok.extern.slf4j.Slf4j; @@ -153,4 +154,16 @@ public class IcBuildingServiceImpl extends BaseServiceImpl categories = new ArrayList<>(); if (null != countMap && CollectionUtils.isNotEmpty(categoryList)) { for (IcResiCategoryStatsConfigDTO category : categoryList) { 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 67a21aca56..d0f1bc4832 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 @@ -26,6 +26,7 @@ import com.alibaba.fastjson.JSON; 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.baomidou.mybatisplus.core.toolkit.IdWorker; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.NumConstant; @@ -74,6 +75,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.http.entity.ContentType; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -234,8 +236,9 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl importTask) { - executorService.submit(() -> { +// executorService.submit(() -> { // importNeighbor(formDTO,file,importTask); log.info("neighborhoodImport thread start====="); ExcelReader excelReader = null; @@ -260,7 +263,7 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl(); } @@ -496,10 +499,12 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl entities){ - List> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED); - partition.forEach(p -> { - neighborHoodPropertyService.insertBatch(p); - }); + if (CollectionUtils.isNotEmpty(entities)){ + List> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED); + partition.forEach(p -> { + neighborHoodPropertyService.insertBatch(p); + }); + } } /** @@ -521,7 +526,7 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl units = icBuildingUnitService.getUnitOptions(building.getId()); + Map unitMap = units.stream().collect(Collectors.toMap(OptionResultDTO::getCode, OptionResultDTO::getLabel)); + List unitList = new ArrayList<>(); + for (int i = 1; i <= info.getTotalUnitNum(); i++) { + String unitNum = String.valueOf(i); + if (!unitMap.containsKey(unitNum)) { + IcBuildingUnitEntity icBuildingUnit = new IcBuildingUnitEntity(); + icBuildingUnit.setId(IdWorker.getIdStr()); + icBuildingUnit.setBuildingId(building.getId()); + icBuildingUnit.setCustomerId(customerId); + icBuildingUnit.setUnitName(unitNum + "单元"); + icBuildingUnit.setUnitNum(unitNum); + unitList.add(icBuildingUnit); + } + } + icBuildingUnitService.insertBatch(unitList, NumConstant.ONE_HUNDRED); + } return building.getId(); } IcBuildingEntity buildingEntity = new IcBuildingEntity(); @@ -601,6 +629,8 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl NumConstant.ZERO) { //设置楼宇单元 @@ -708,4 +738,37 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl needUpdateList) { + if (CollectionUtils.isNotEmpty(needUpdateList)){ + baseDao.updateNeighborHood(needUpdateList); + } + } + + /** + * Desc: 更新小区关系表 + * @param updateNeighborHoodAndManagement + * @author zxc + * @date 2022/4/27 10:33 + */ + @Override + @Transactional + public void neighborHoodPropertyUpdate(List updateNeighborHoodAndManagement) { + if (CollectionUtils.isNotEmpty(updateNeighborHoodAndManagement)){ + baseDao.delProperty(updateNeighborHoodAndManagement.stream().map(m -> m.getNeighborHoodId()).collect(Collectors.toList())); + List entities = ConvertUtils.sourceToTarget(updateNeighborHoodAndManagement, IcNeighborHoodPropertyEntity.class); + List collect = entities.stream().filter(e -> StringUtils.isNotBlank(e.getPropertyId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(collect)){ + neighborHoodPropertyService.insertBatch(collect); + } + } + } + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.17__edit_building_and_house.sql b/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.17__edit_building_and_house.sql new file mode 100644 index 0000000000..1117c368b7 --- /dev/null +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.17__edit_building_and_house.sql @@ -0,0 +1,2 @@ +alter table ic_building add COLUMN BUILDING_LEADER_NAME VARCHAR(11) comment '楼长姓名' AFTER TOTAL_HOUSE_NUM; +alter table ic_building add COLUMN BUILDING_LEADER_MOBILE VARCHAR(11) comment '楼长电话' AFTER BUILDING_LEADER_NAME; diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/excel/building_template.xlsx b/epmet-module/gov-org/gov-org-server/src/main/resources/excel/building_template.xlsx index cffd4abd69..1a9b2d2d25 100644 Binary files a/epmet-module/gov-org/gov-org-server/src/main/resources/excel/building_template.xlsx and b/epmet-module/gov-org/gov-org-server/src/main/resources/excel/building_template.xlsx differ diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/excel/house_template.xlsx b/epmet-module/gov-org/gov-org-server/src/main/resources/excel/house_template.xlsx index cf5681e1f4..31d9ea9120 100644 Binary files a/epmet-module/gov-org/gov-org-server/src/main/resources/excel/house_template.xlsx and b/epmet-module/gov-org/gov-org-server/src/main/resources/excel/house_template.xlsx differ diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml index 1e8792cab6..d8314ee8b5 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml @@ -709,15 +709,6 @@ agency.DEL_FLAG = '0' AND agency.ID = #{agencyId} - + + SELECT COUNT(ID) FROM ic_building_unit WHERE BUILDING_ID = #{buildingId} AND DEL_FLAG = '0' + + diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml index 9b475f8444..cb0bbd299d 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml @@ -300,4 +300,38 @@ ) GROUP BY h.OWNER_ID_CARD + + + 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 2f3d335708..b8c3a2c51d 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 @@ -25,6 +25,59 @@ + + + update ic_neighbor_hood + + + + when id = #{l.neighborHoodId} then #{l.address} + + + + + when id = #{l.neighborHoodId} then #{l.remark} + + + UPDATED_TIME = NOW() + + WHERE DEL_FLAG = '0' + AND ID IN ( + + #{l.neighborHoodId} + + ) + + + + + update ic_neighbor_hood_property + + + + when NEIGHBOR_HOOD_ID = #{l.neighborHoodId} then #{l.propertyId} + + + UPDATED_TIME = NOW() + + WHERE DEL_FLAG = '0' + AND NEIGHBOR_HOOD_ID IN ( + + #{l.neighborHoodId} + + ) + + + + + DELETE FROM ic_neighbor_hood_property + WHERE NEIGHBOR_HOOD_ID IN ( + + #{n} + + ) + + - SELECT + SELECT a.id, a.`NAME`, a.MOBILE, a.ID_CARD, @@ -144,4 +144,16 @@ ) + + + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index 054839bf02..34974ddfef 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -73,6 +73,23 @@ and ${subCondition.tableName}.${subCondition.columnName} between #{subCondition.columnValue[0]} and #{subCondition.columnValue[1]} + + + + and ${subCondition.tableName}.${subCondition.columnName} is not null + and ${subCondition.tableName}.${subCondition.columnName} !='' + + + and (${subCondition.tableName}.${subCondition.columnName} is null + or ${subCondition.tableName}.${subCondition.columnName} ='') + + + + + + ${subCondition.tableName}.${subCondition.columnName} like concat('%',#{colValue},'%') + + @@ -101,6 +118,17 @@ and ${subCondition.tableName}.${subCondition.columnName} between #{subCondition.columnValue[0]} and #{subCondition.columnValue[1]} + + + + and ${subCondition.tableName}.${subCondition.columnName} is not null + and ${subCondition.tableName}.${subCondition.columnName} !='' + + + and (${subCondition.tableName}.${subCondition.columnName} is null + or ${subCondition.tableName}.${subCondition.columnName} ='') + + @@ -132,6 +160,11 @@ group by IC_RESI_USER.id + + + ${groupTableName}.ID + + order by ic_resi_user.CREATED_TIME desc @@ -143,9 +176,16 @@ update ${subTalbeName} set del_flag='1' where IC_RESI_USER=#{icResiUserId} - select - ${resultTableName}.* + + + + ${column.tableName}.${column.columnName} + + + ${resultTableName}.* + FROM ic_resi_user @@ -158,6 +198,11 @@ group by IC_RESI_USER.id + + + ${groupTableName}.ID + + order by ic_resi_user.CREATED_TIME desc @@ -208,7 +253,20 @@ IFNULL(REMARKS,'') AS REMARKS FROM ic_resi_user WHERE DEL_FLAG = '0' - AND (AGENCY_ID = #{agencyId} OR PIDS LIKE CONCAT('%',#{agencyId},'%')) + + + AND (AGENCY_ID = #{id} OR PIDS LIKE CONCAT('%',#{id},'%')) + + + AND GRID_ID = #{id} + + + AND VILLAGE_ID = #{id} + + + AND BUILD_ID = #{id} + + AND `NAME` LIKE CONCAT('%',#{name},'%') @@ -317,7 +375,6 @@ ic_resi_user WHERE del_flag = '0' - AND customer_id = #{customerId} AND id_card = #{idCard} @@ -832,4 +889,27 @@ + + + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcStatsResiWarnDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcStatsResiWarnDao.xml index 4e2dae8afa..24e607f3c7 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcStatsResiWarnDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcStatsResiWarnDao.xml @@ -153,11 +153,16 @@