Browse Source

Merge branch 'release' of http://git.elinkit.com.cn:7070/r/ShibeiWorkPlatform; branch 'develop' of http://git.elinkit.com.cn:7070/r/epmet-cloud into 市北测试

 Conflicts:
	epmet-auth-client/pom.xml
	epmet-auth/src/main/java/com/epmet/controller/GovWebController.java
	epmet-auth/src/main/java/com/epmet/service/GovWebService.java
	epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java
	epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
release
jianjun 3 years ago
parent
commit
88b24e942f
  1. 9
      epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.15__add_item_typequery.sql
  2. 5
      epmet-auth-client/pom.xml
  3. 25
      epmet-auth-client/src/main/java/com/epmet/auth/dto/result/BlockChainStaffAuthResultDTO.java
  4. 1
      epmet-auth/src/main/java/com/epmet/controller/GovLoginController.java
  5. 41
      epmet-auth/src/main/java/com/epmet/controller/GovWebController.java
  6. 24
      epmet-auth/src/main/java/com/epmet/dto/form/BcStaffAuthenticationFormDTO.java
  7. 11
      epmet-auth/src/main/java/com/epmet/service/GovWebService.java
  8. 4
      epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java
  9. 113
      epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java
  10. 44
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java
  11. 36
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/MaskResponseAspect.java
  12. 73
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportItemListFormDTO.java
  13. 58
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/IcExportTemplateSaveFormDTO.java
  14. 20
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OptionResultDTO.java
  15. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/DictTypeEnum.java
  16. 10
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java
  17. 6
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonAggFeignClientFallback.java
  18. 183
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java
  19. 389
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/AuthCodeUtil.java
  20. 122
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java
  21. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/FreezeAndFilter.java
  22. 19
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/group/ExportGroup.java
  23. 9
      epmet-gateway/pom.xml
  24. 9
      epmet-gateway/src/main/resources/bootstrap.yml
  25. 4
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java
  26. 1
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java
  27. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactGridMemberStatisticsDailyServiceImpl.java
  28. 4
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java
  29. 6
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java
  30. 6
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java
  31. 6
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java
  32. 9
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java
  33. 10
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcBuildingDTO.java
  34. 14
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcHouseDTO.java
  35. 20
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java
  36. 29
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseChartFormDTO.java
  37. 10
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcBulidingAddFormDTO.java
  38. 57
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java
  39. 1
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseListResultDTO.java
  40. 19
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/IcBuildingListResultDTO.java
  41. 74
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java
  42. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/aspect/RequestLogAspect.java
  43. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java
  44. 37
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  45. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
  46. 16
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
  47. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java
  48. 28
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcNeighborHoodDao.java
  49. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcBuildingEntity.java
  50. 6
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingInfoModel.java
  51. 12
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
  52. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
  53. 53
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java
  54. 17
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java
  55. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java
  56. 17
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java
  57. 3
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
  58. 179
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java
  59. 13
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java
  60. 42
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcHouseServiceImpl.java
  61. 79
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
  62. 2
      epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.17__edit_building_and_house.sql
  63. BIN
      epmet-module/gov-org/gov-org-server/src/main/resources/excel/building_template.xlsx
  64. BIN
      epmet-module/gov-org/gov-org-server/src/main/resources/excel/house_template.xlsx
  65. 18
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml
  66. 26
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
  67. 34
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml
  68. 73
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml
  69. 5
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/BlockChainUploadServiceImpl.java
  70. 4
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  71. 60
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcExportTemplateDTO.java
  72. 33
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcFormItemGroupDTO.java
  73. 39
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/EditIFormItemFormDTO.java
  74. 38
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/IcExportTemplateQueryFormDTO.java
  75. 84
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/IcFormItemGroupLisFormDTO.java
  76. 23
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ConditionResDTO.java
  77. 9
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ConditionResultDTO.java
  78. 59
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItemBaseResult.java
  79. 2
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItemResult.java
  80. 69
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcCustomExportResultDTO.java
  81. 67
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcExportTemplateForExportResultDTO.java
  82. 4
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/SubTableJoinDTO.java
  83. 19
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/TemplateDetailResultDTO.java
  84. 11
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java
  85. 6
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java
  86. 6
      epmet-module/oper-customize/oper-customize-server/pom.xml
  87. 96
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcExportTemplateController.java
  88. 13
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java
  89. 39
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java
  90. 28
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemGroupController.java
  91. 16
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcExportTemplateConfigDao.java
  92. 38
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcExportTemplateDao.java
  93. 2
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormDao.java
  94. 42
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormItemDao.java
  95. 1
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormItemOptionsDao.java
  96. 8
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormQueryBuilderDao.java
  97. 56
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcExportTemplateConfigEntity.java
  98. 51
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcExportTemplateEntity.java
  99. 20
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcFormQueryBuilderEntity.java
  100. 21
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcExportTemplateConfigService.java

9
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');

5
epmet-auth-client/pom.xml

@ -10,13 +10,12 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>epmet-auth-client</artifactId>
<dependencies>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-tools</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
</project>

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

1
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;
/**

41
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<String> 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);
}
}

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

11
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);
}

4
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

113
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<String, Object> 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<UserDTO> 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;
}
}

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

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

73
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<IcExportItemListFormDTO> 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;
}

58
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<IcExportItemListFormDTO> itemList;
}

20
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<OptionResultDTO> children;
private Boolean usableFlag;
private String type;
/**
* desc:递归获取当前节点的 所有子节点
*
* @param option
* @param resultMap
*/
public void getCurrenNodeAllChild(OptionResultDTO option, Map<String, OptionResultDTO> resultMap) {
resultMap.put(option.getValue(), option);
if (CollectionUtils.isNotEmpty(option.getChildren())) {
return;
}
option.getChildren().forEach(o -> {
resultMap.put(o.getValue(), o);
getCurrenNodeAllChild(o, resultMap);
});
}
}

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

10
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<AgencyInfoCache> getAgencyInfo(@RequestParam("agencyId")String agencyId);
/**
* @Description 查询网格信息
* @param gridId
* @author zxc
* @date 2021/11/5 2:54 下午
*/
@PostMapping("/data/aggregator/org/grid")
Result<GridInfoCache> getGridInfo(@RequestParam("gridId")String gridId);
/**
* 查询楼栋信息
* @param buildingId

6
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<GridInfoCache> getGridInfo(String gridId) {
return ModuleUtils.feignConError(ServiceConstant.DATA_AGGREGATOR_SERVER, "getGridInfo", gridId);
}
/**
* 查询楼栋信息
*

183
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<String> fieldNames;
private List<String> 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<Object, Object> map) {
if (CollectionUtils.isEmpty(map)) {
return;
}
for (Map.Entry<Object, Object> 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);
}
}

389
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
}
/**
* <summary>
* 从字符串的指定位置截取指定长度的子字符串￿
* </summary>
* <param name="str">原字符串</param>
* <param name="startIndex">子字符串的起始位置</param>
* <param name="length">子字符串的长度</param>
* <returns>子字符串</returns>
*/
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);
}
/**
* <summary>
* 从字符串的指定位置开始截取到字符串结尾的了符串
* </summary>
* <param name="str">原字符串</param>
* <param name="startIndex">子字符串的起始位置</param>
* <returns>子字符串</returns>
*/
public static String CutString(String str, int startIndex) {
return CutString(str, startIndex, str.length());
}
/**
* <summary>
* 返回文件是否存在
* </summary>
* <param name="filename">文件名</param>
* <returns>是否存在</returns>
*/
public static boolean FileExists(String filename) {
File f = new File(filename);
return f.exists();
}
/**
* <summary>
* MD5函数
* </summary>
* <param name="str">原始字符串</param>
* <returns>MD5结果</returns>
*/
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();
}
/**
* <summary>
* 字段串是否为Null或为""()
* </summary>
* <param name="str"></param>
* <returns></returns>
*/
public static boolean StrIsNullOrEmpty(String str) {
// if NET1
if (str == null || str.trim().equals("")) {
return true;
}
return false;
}
/**
* <summary>
* 用于 RC4 处理密码
* </summary>
* <param name="pass">密码字串</param>
* <param name="kLen">密钥长度一般为 256</param>
* <returns></returns>
*/
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;
}
/**
* <summary>
* 生成随机字符
* </summary>
* <param name="lens">随机字符长度</param>
* <returns>随机字符</returns>
*/
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;
}
/**
* <summary>
* 使用 Discuz authcode 方法对字符串加密
* </summary>
* <param name="source">原始字符串</param>
* <param name="key">密钥</param>
* <param name="expiry">加密字串有效时间单位是秒</param>
* <returns>加密结果</returns>
*/
public static String authcodeEncode(String source, String key, int expiry) {
return authcode(source, key, DiscuzAuthcodeMode.Encode, expiry);
}
/**
* <summary>
* 使用 Discuz authcode 方法对字符串加密
* </summary>
* <param name="source">原始字符串</param>
* <param name="key">密钥</param>
* <returns>加密结果</returns>
*/
public static String authcodeEncode(String source, String key) {
return authcode(source, key, DiscuzAuthcodeMode.Encode, 0);
}
/**
* <summary>
* 使用 Discuz authcode 方法对字符串解密
* </summary>
* <param name="source">原始字符串</param>
* <param name="key">密钥</param>
* <returns>解密结果</returns>
*/
public static String authcodeDecode(String source, String key) {
return authcode(source, key, DiscuzAuthcodeMode.Decode, 0);
}
/**
* <summary>
* 使用 变形的 rc4 编码方法对字符串进行加密或者解密
* </summary>
* <param name="source">原始字符串</param>
* <param name="key">密钥</param>
* <param name="operation">操作 加密还是解密</param>
* <param name="expiry">加密字串过期时间</param>
* <returns>加密或者解密后的字符串</returns>
*/
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 "";
}
}
/**
* <summary>
* RC4 原始算法
* </summary>
* <param name="input">原始字串数组</param>
* <param name="pass">密钥</param>
* <returns>处理后的字串数组</returns>
*/
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<String> list = new ArrayList<String>();
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);
}
}

122
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<WriteCellData<?>> 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<CellRangeAddress> 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);
}
}
}
}

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java → 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 冻结标题

19
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 {
}

9
epmet-gateway/pom.xml

@ -239,6 +239,8 @@
<!--问卷服务-->
<gateway.routes.tduck-api.url>lb://tduck-api</gateway.routes.tduck-api.url>
<!--<gateway.routes.tduck-api.url>http://localhost:8116</gateway.routes.tduck-api.url>-->
<!-- 插件:数字底座动力主轴 -->
<gateway.routes.plugin.power-base-server.url>lb://pli-power-base-server</gateway.routes.plugin.power-base-server.url>
<!--钉钉 机器人地址-->
<dingTalk.robot.webHook>https://oapi.dingtalk.com/robot/send?access_token=e894e5690f9d6a527722974c71548ff6c0fe29bd956589a09e21b16442a35ed4</dingTalk.robot.webHook>
<dingTalk.robot.secret>SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd</dingTalk.robot.secret>
@ -293,6 +295,7 @@
<gateway.routes.epmet-demo-server.uri>lb://epmet-demo-server</gateway.routes.epmet-demo-server.uri>
<!-- 10、运营端客户定制化服务 -->
<gateway.routes.oper-customize-server.uri>lb://oper-customize-server</gateway.routes.oper-customize-server.uri>
<!-- <gateway.routes.oper-customize-server.uri>http://localhost:8089</gateway.routes.oper-customize-server.uri>-->
<!-- 11、运营端客户定制化服务 -->
<gateway.routes.oper-crm-server.uri>lb://oper-crm-server</gateway.routes.oper-crm-server.uri>
<!--<gateway.routes.oper-crm-server.uri>http://localhost:8090</gateway.routes.oper-crm-server.uri>-->
@ -377,6 +380,8 @@
<!--宣传服务-->
<gateway.routes.epmet-openapi-adv-server.url>lb://epmet-openapi-adv-server</gateway.routes.epmet-openapi-adv-server.url>
<!--<gateway.routes.epmet-openapi-adv-server.url>http://localhost:8115</gateway.routes.epmet-openapi-adv-server.url>-->
<!-- 插件:数字底座动力主轴 -->
<gateway.routes.plugin.power-base-server.url>lb://pli-power-base-server</gateway.routes.plugin.power-base-server.url>
<!--问卷服务-->
<gateway.routes.tduck-api.url>lb://tduck-api</gateway.routes.tduck-api.url>
<!--<gateway.routes.tduck-api.url>http://localhost:8116</gateway.routes.tduck-api.url>-->
@ -487,6 +492,8 @@
<!--宣传服务-->
<gateway.routes.epmet-openapi-adv-server.url>lb://epmet-openapi-adv-server</gateway.routes.epmet-openapi-adv-server.url>
<!-- 插件:数字底座动力主轴 -->
<gateway.routes.plugin.power-base-server.url>lb://pli-power-base-server</gateway.routes.plugin.power-base-server.url>
<!--钉钉 机器人地址-->
<dingTalk.robot.webHook>https://oapi.dingtalk.com/robot/send?access_token=e894e5690f9d6a527722974c71548ff6c0fe29bd956589a09e21b16442a35ed4</dingTalk.robot.webHook>
<dingTalk.robot.secret>SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd</dingTalk.robot.secret>
@ -590,6 +597,8 @@
<!--宣传服务-->
<gateway.routes.epmet-openapi-adv-server.url>lb://epmet-openapi-adv-server</gateway.routes.epmet-openapi-adv-server.url>
<!-- 插件:数字底座动力主轴 -->
<gateway.routes.plugin.power-base-server.url>lb://pli-power-base-server</gateway.routes.plugin.power-base-server.url>
<!--问卷服务-->
<gateway.routes.tduck-api.url>lb://tduck-api</gateway.routes.tduck-api.url>
<!--生产钉钉 机器人地址-->

9
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:

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

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

2
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<Fa
return;
}
Map<String, StaffRoleInfoDTO> staffMap = staffInfoList.stream().collect(Collectors.toMap(StaffRoleInfoDTO :: getStaffId,
Function.identity()));
Function.identity(), (key1, key2) -> key2));
List<FactGridMemberStatisticsDailyEntity> list = staffGridList.stream().filter(p -> null != staffMap.get(p.getStaffId())).map(item -> {
StaffRoleInfoDTO staffInfo = staffMap.get(item.getStaffId());
return initEntity(customerId, dateId, item, staffInfo);

4
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<List<OptionResultDTO>> getDemandOptions();
}

6
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<List<OptionResultDTO>> getDemandOptions() {
return ModuleUtils.feignConError(ServiceConstant.EPMET_HEART_SERVER, "getDemandOptions", null);
}
}

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

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

9
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<BlockChainProjectProcessAssignedStaffFormDTO> 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);

10
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;
/**
* 中心点位经度
*/

14
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;
/**
* 片区idneighbor_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;
/**
* 房主姓名
*/

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

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

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

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

1
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<CategoryListBean> categoryList;
@NoArgsConstructor

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

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

2
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

1
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 = "文件中存在重复数据";

37
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<PageData<IcHouseListResultDTO>> houseList(@LoginUser TokenDto loginUser, @RequestBody IcHouseListFormDTO formDTO) {
//效验数据
LoginUserDetailsResultDTO loginUserDetail = getLoginUserDetailsResultDTO(loginUser, "【查询房屋】查询当前staff所在组织信息失败");
@ -269,4 +271,27 @@ public class HouseController implements ResultDataResolver {
}
return new Result<HouseInfoDTO>().ok(houseService.getHouseInfoDTO(tokenDto.getCustomerId(), houseId));
}
/**
* @Author sun
* @Description 人房房屋总数饼图
**/
@PostMapping("housechart")
public Result<HouseChartResultDTO> houseChart(@LoginUser TokenDto tokenDto, @RequestBody HouseChartFormDTO formDTO) {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
return new Result<HouseChartResultDTO>().ok(houseService.houseChart(formDTO));
}
/**
* @Author sun
* @Description 人房下级人房概览列表
**/
@PostMapping("subuserhouselist")
public Result<List<SubUserHouseListResultDTO>> subUserHouseList(@LoginUser TokenDto tokenDto, @RequestBody HouseChartFormDTO formDTO) {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
return new Result<List<SubUserHouseListResultDTO>>().ok(houseService.subUserHouseList(formDTO));
}
}

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

16
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java

@ -180,4 +180,20 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
*/
void allUpdateHouseNum(@Param("nums") List<UpdateBuildingHouseNumResultDTO> 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);
}

10
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<IcHouseEntity> {
*/
void houseUpdateHouseName(@Param("buildingId")String buildingId);
/**
* @Author sun
* @Description 人房房屋总数饼图
**/
List<HouseChartResultDTO> houseChart(@Param("orgId") String orgId, @Param("orgType") String orgType);
}

28
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<IcNeighborHoodEntity> {
*/
List<String> selectNeighborhoodNameByNames(@Param("names")List<String> names,@Param("customerId") String customerId);
/**
* Desc: 更新小区详细地址和备注
* @param needUpdateList
* @author zxc
* @date 2022/4/27 09:59
*/
void updateNeighborHood(@Param("list") List<ImportGeneralDTO> needUpdateList);
/**
* Desc: 更新小区关系表
* @param updateNeighborHoodAndManagement
* @author zxc
* @date 2022/4/27 10:33
*/
void neighborHoodPropertyUpdate(@Param("list")List<NeighborHoodAndManagementDTO> updateNeighborHoodAndManagement);
List<IcNeighborHoodDTO> selectNeighborList(@Param("gridId")String gridId);
/**
* Desc: 删除物业关系
* @param neighborHoodIds
* @author zxc
* @date 2022/4/28 09:10
*/
void delProperty(@Param("neighborHoodIds")List<String> neighborHoodIds);
}

10
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;
/**
* 中心点位经度
*/

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

12
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java

@ -165,14 +165,16 @@ public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingIn
List<ImportGeneralDTO> importGeneralDTOS = groupByStatus.get(false);
if (!CollectionUtils.isEmpty(importGeneralDTOS)){
List<ImportGeneralDTO> importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS);
Map<Boolean, List<ImportGeneralDTO>> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getBuildingExistStatus));
List<ImportGeneralDTO> existList = groupByBuildingExistStatus.get(true);
if (!CollectionUtils.isEmpty(existList)){
existList.forEach(e -> {
/*Map<Boolean, List<ImportGeneralDTO>> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getBuildingExistStatus));
List<ImportGeneralDTO> existList = groupByBuildingExistStatus.get(true);*/
Map<Boolean, List<ImportGeneralDTO>> collect = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getBuildingUnitNumStatus));
List<ImportGeneralDTO> 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);
}
});

2
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.*;

53
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java

@ -51,6 +51,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
List<ImportGeneralDTO> needDisposeList = new ArrayList<>();
List<ImportGeneralDTO> needInsertList = new ArrayList<>();
List<ImportGeneralDTO> needUpdateList = new ArrayList<>();
String gridName = null;
String agencyName = null;
@ -128,7 +129,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
}
public void finalDispose(){
if (CollectionUtils.isEmpty(needDisposeList)){
if (CollectionUtils.isEmpty(needDisposeList) && CollectionUtils.isEmpty(needUpdateList)){
return;
}
Map<String, Long> groupByAllName = needDisposeList.stream().collect(Collectors.groupingBy(
@ -151,8 +152,11 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
});
Map<Boolean, List<ImportGeneralDTO>> groupByStatus = needDisposeList.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getExistStatus));
List<ImportGeneralDTO> importGeneralDTOS = groupByStatus.get(false);
if (!CollectionUtils.isEmpty(importGeneralDTOS)){
List<ImportGeneralDTO> importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS);
if (!CollectionUtils.isEmpty(importGeneralDTOS) || !CollectionUtils.isEmpty(needUpdateList)){
List<ImportGeneralDTO> importInfo = new ArrayList<>();
if (!CollectionUtils.isEmpty(importGeneralDTOS)){
importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS);
}
Map<Boolean, List<ImportGeneralDTO>> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getNeighborHoodExistStatus));
List<ImportGeneralDTO> existList = groupByBuildingExistStatus.get(true);
if (!CollectionUtils.isEmpty(existList)){
@ -165,7 +169,16 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
}
});
}
List<ImportGeneralDTO> notExistList = groupByBuildingExistStatus.get(false);
List<ImportGeneralDTO> notExistList = new ArrayList<>();
List<ImportGeneralDTO> 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<String> 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<Neighb
neighborHoodService.insertPropertyManagement(propertyManagementEntities);
// 小区物业关系表插入
List<NeighborHoodAndManagementDTO> neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(notExistList, NeighborHoodAndManagementDTO.class);
List<NeighborHoodAndManagementDTO> neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(notExistListFalse, NeighborHoodAndManagementDTO.class);
List<NeighborHoodAndManagementDTO> updateNeighborHoodAndManagement = ConvertUtils.sourceToTarget(needUpdateList, NeighborHoodAndManagementDTO.class);
List<IcPropertyManagementEntity> 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<IcNeighborHoodPropertyEntity> icNeighborHoodPropertyEntities = ConvertUtils.sourceToTarget(neighborHoodAndManagementDTOS, IcNeighborHoodPropertyEntity.class);
neighborHoodService.neighborHoodPropertyInsert(icNeighborHoodPropertyEntities);
neighborHoodService.neighborHoodPropertyUpdate(updateNeighborHoodAndManagement);
}
}
}
@ -200,6 +224,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
// 清除
needDisposeList = new ArrayList<>();
needInsertList = new ArrayList<>();
needUpdateList = new ArrayList<>();
gridName = null;
agencyName = null;
gridInfos = null;
@ -297,9 +322,13 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener<Neighb
// 赋值小区ID
dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
if (StringUtils.isNotBlank(dto.getNeighborHoodId())){
/**
* 2022-04-27 新增需求存在小区进行更改 更新物业详细地址备注信息
*/
// 小区已存在
nums.add(dto.getNum());
disposeErrorMsg(info,ImportErrorMsgConstants.EXIST_ERROR);
/*nums.add(dto.getNum());
disposeErrorMsg(info,ImportErrorMsgConstants.EXIST_ERROR);*/
needUpdateList.add(dto);
}else {
needDisposeList.add(dto);
}

17
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java

@ -20,9 +20,7 @@ package com.epmet.service;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
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.*;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
@ -74,5 +72,18 @@ public interface HouseService {
*/
void allDelete(NeighborHoodManageDelFormDTO formDTO);
HouseInfoDTO getHouseInfoDTO(String customerId,String houseId);
/**
* @Author sun
* @Description 人房房屋总数饼图
**/
HouseChartResultDTO houseChart(HouseChartFormDTO formDTO);
/**
* @Author sun
* @Description 人房下级人房概览列表
**/
List<SubUserHouseListResultDTO> subUserHouseList(HouseChartFormDTO formDTO);
}

9
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<IcBuildingEntity> {
* @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);
}

17
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<IcNeighborHoodEntity>
* @return
*/
PageData<IcNeighborHoodDTO> openPage(IcNeighborHoodAddFormDTO params);
/**
* Desc: 更新小区
* @param needUpdateList
* @author zxc
* @date 2022/4/27 09:59
*/
void updateNeighborHood(List<ImportGeneralDTO> needUpdateList);
/**
* Desc: 更新小区关系表
* @param updateNeighborHoodAndManagement
* @author zxc
* @date 2022/4/27 10:33
*/
void neighborHoodPropertyUpdate(List<NeighborHoodAndManagementDTO> updateNeighborHoodAndManagement);
}

3
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<IcHouseEntity> icHouseEntities = icHouseDao.selectList(new QueryWrapper<IcHouseEntity>().lambda().eq(IcHouseEntity::getBuildingId, formDTO.getBuildingId()));
if (!CollectionUtils.isEmpty(icHouseEntities)) {
//
throw new RenException(EpmetErrorCode.ORG_EDIT_FAILED.getCode(), "楼栋单元下存在房屋,无法更新");
}
}

179
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<HouseChartResultDTO> 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<SubUserHouseListResultDTO> subUserHouseList(HouseChartFormDTO formDTO) {
List<SubUserHouseListResultDTO> 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<String> idList = new ArrayList<>();
Map<String, String> 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<GridListResultDTO> 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<AgencyListResultDTO> 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<IcNeighborHoodDTO> 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<SubUserHouseListResultDTO> houseUserChartList(List<String> idList, Map<String, String> map, String orgType) {
List<SubUserHouseListResultDTO> list = new ArrayList<>();
//1.直属下级列表的房屋数据
List<HouseChartResultDTO> 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<List<UserChartResultDTO>> 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;
}
}

13
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<IcBuildingDao, IcBuil
return ConvertUtils.sourceToTarget(entity, IcBuildingDTO.class);
}
/**
* Desc: 更新楼栋信息
* @param info
* @author zxc
* @date 2022/4/27 13:29
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateBuilding(ImportGeneralDTO info) {
baseDao.updateBuilding(info);
}
}

42
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcHouseServiceImpl.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
@ -18,11 +19,17 @@ import com.epmet.dto.IcResiCategoryStatsConfigDTO;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.form.HouseFormDTO;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.HouseListResultDTO;
import com.epmet.dto.result.HousesNameResultDTO;
import com.epmet.entity.IcHouseEntity;
import com.epmet.enums.HousePurposeEnums;
import com.epmet.enums.HouseRentFlagEnums;
import com.epmet.enums.HouseTypeEnums;
import com.epmet.feign.EpmetAdminOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.OperCustomizeOpenFeignClient;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.IcHouseService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@ -47,6 +54,10 @@ public class IcHouseServiceImpl extends BaseServiceImpl<IcHouseDao, IcHouseEntit
private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient;
@Resource
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
@Resource
private EpmetAdminOpenFeignClient epmetAdminOpenFeignClient;
@Resource
private IcHouseRedis icHouseRedis;
@Override
@ -77,7 +88,23 @@ public class IcHouseServiceImpl extends BaseServiceImpl<IcHouseDao, IcHouseEntit
@Override
public IcHouseDTO get(String id) {
IcHouseEntity entity = baseDao.selectById(id);
return ConvertUtils.sourceToTarget(entity, IcHouseDTO.class);
IcHouseDTO dto = ConvertUtils.sourceToTarget(entity, IcHouseDTO.class);
dto.setHouseTypeName(HouseTypeEnums.getTypeValue(dto.getHouseType()));
dto.setRentName(HouseRentFlagEnums.getTypeValue(dto.getRentFlag()));
dto.setPurposeName(HousePurposeEnums.getTypeValue(dto.getPurpose()));
HouseInfoDTO houseInfo = icHouseRedis.getHouseInfo(id, dto.getCustomerId());
if (null != houseInfo) {
dto.setNeighborHoodName(houseInfo.getNeighborHoodName());
dto.setBuildingName(houseInfo.getBuildingName());
dto.setUnitName(houseInfo.getUnitName());
} else {
dto.setNeighborHoodName(StrConstant.EPMETY_STR);
dto.setBuildingName(StrConstant.EPMETY_STR);
dto.setUnitName(StrConstant.EPMETY_STR);
}
return dto;
}
@Override
@ -188,6 +215,19 @@ public class IcHouseServiceImpl extends BaseServiceImpl<IcHouseDao, IcHouseEntit
HouseListResultDTO dto = new HouseListResultDTO();
dto.setHouseId(item.getId());
dto.setHouseName(item.getHouseName());
switch (item.getRentFlag()){
case NumConstant.ZERO:
dto.setRentFlag("自住");
break;
case NumConstant.ONE:
dto.setRentFlag("出租");
break;
case NumConstant.TWO:
dto.setRentFlag("闲置");
break;
default:
break;
}
List<HouseListResultDTO.CategoryListBean> categories = new ArrayList<>();
if (null != countMap && CollectionUtils.isNotEmpty(categoryList)) {
for (IcResiCategoryStatsConfigDTO category : categoryList) {

79
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<IcNeighborHoodDao
* @date 2022/2/12 11:11 上午
*/
@Override
@Async
public Result neighborhoodImport(ImportInfoFormDTO formDTO, InputStream inputStream,Result<ImportTaskCommonResultDTO> 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<IcNeighborHoodDao
}
}
log.info("neighborhoodImport thread end=====");
});
// });
return new Result<>();
}
@ -496,10 +499,12 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
@Override
@Transactional(rollbackFor = Exception.class)
public void neighborHoodPropertyInsert(List<IcNeighborHoodPropertyEntity> entities){
List<List<IcNeighborHoodPropertyEntity>> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
neighborHoodPropertyService.insertBatch(p);
});
if (CollectionUtils.isNotEmpty(entities)){
List<List<IcNeighborHoodPropertyEntity>> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
neighborHoodPropertyService.insertBatch(p);
});
}
}
/**
@ -521,7 +526,7 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
String neighborHoodId = getNeighborHoodId(formDTO.getCustomerId(), item);
item.setNeighborHoodId(neighborHoodId);
//2.获取楼栋ID,判断楼栋是否存在,不存在则添加楼栋,存在则直接获取楼栋ID
if (StringUtils.isEmpty(item.getBuildingId()) && StringUtils.isNotEmpty(item.getBuildingName())) {
if (StringUtils.isNotEmpty(item.getBuildingName())) {
String buildingId = getBuildingId(formDTO.getCustomerId(), item);
item.setBuildingId(buildingId);
}
@ -530,7 +535,7 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
String unitId = getUnitId(formDTO.getCustomerId(), item);
item.setBuildingUnitId(unitId);
}
} else if (StringUtils.isNotEmpty(item.getNeighborHoodId()) && StringUtils.isEmpty(item.getBuildingId())) {
} else if (StringUtils.isNotEmpty(item.getNeighborHoodId())) {
//获取楼栋ID,判断楼栋是否存在,不存在则添加楼栋,存在则直接获取楼栋ID
String buildingId = getBuildingId(formDTO.getCustomerId(), item);
item.setBuildingId(buildingId);
@ -590,6 +595,29 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
IcBuildingDTO building = icBuildingService.getBuildingInfo(info.getNeighborHoodId(), info.getBuildingName());
if (null != building) {
info.setBuildingExistStatus(true);
if (info.getTotalUnitNum() < building.getTotalUnitNum()){
info.setBuildingUnitNumStatus(true);
}else {
info.setBuildingId(building.getId());
icBuildingService.updateBuilding(info);
//新增单元
List<OptionResultDTO> units = icBuildingUnitService.getUnitOptions(building.getId());
Map<String, String> unitMap = units.stream().collect(Collectors.toMap(OptionResultDTO::getCode, OptionResultDTO::getLabel));
List<IcBuildingUnitEntity> 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<IcNeighborHoodDao
buildingEntity.setTotalUnitNum(info.getTotalUnitNum());
buildingEntity.setTotalFloorNum(info.getTotalFloorNum());
buildingEntity.setTotalHouseNum(info.getTotalHouseNum());
buildingEntity.setBuildingLeaderName(info.getBuildingLeaderName());
buildingEntity.setBuildingLeaderMobile(info.getBuildingLeaderMobile());
icBuildingService.insert(buildingEntity);
if (null != info.getTotalUnitNum() && info.getTotalUnitNum() > NumConstant.ZERO) {
//设置楼宇单元
@ -708,4 +738,37 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
return result;
}
/**
* Desc: 更新小区
* @param needUpdateList
* @author zxc
* @date 2022/4/27 09:59
*/
@Override
@Transactional
public void updateNeighborHood(List<ImportGeneralDTO> 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<NeighborHoodAndManagementDTO> updateNeighborHoodAndManagement) {
if (CollectionUtils.isNotEmpty(updateNeighborHoodAndManagement)){
baseDao.delProperty(updateNeighborHoodAndManagement.stream().map(m -> m.getNeighborHoodId()).collect(Collectors.toList()));
List<IcNeighborHoodPropertyEntity> entities = ConvertUtils.sourceToTarget(updateNeighborHoodAndManagement, IcNeighborHoodPropertyEntity.class);
List<IcNeighborHoodPropertyEntity> collect = entities.stream().filter(e -> StringUtils.isNotBlank(e.getPropertyId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)){
neighborHoodPropertyService.insertBatch(collect);
}
}
}
}

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

BIN
epmet-module/gov-org/gov-org-server/src/main/resources/excel/building_template.xlsx

Binary file not shown.

BIN
epmet-module/gov-org/gov-org-server/src/main/resources/excel/house_template.xlsx

Binary file not shown.

18
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>
<select id="getSonGridId" resultType="com.epmet.dto.result.SonOrgResultDTO">
SELECT
ID AS orgId,
pids
FROM customer_grid
WHERE
DEL_FLAG = '0'
AND PID = #{orgId}
</select>
<select id="getAgencyMobile" resultType="com.epmet.dto.result.OrgMobileResultDTO">
SELECT
@ -732,6 +723,15 @@
AND ca.del_flag = '0'
AND cg.id = #{gridId}
</select>
<select id="getSonGridId" resultType="com.epmet.dto.result.SonOrgResultDTO">
SELECT
ID AS orgId,
pids
FROM customer_grid
WHERE
DEL_FLAG = '0'
AND PID = #{orgId}
</select>
<!-- 查询组织下的社区 -->
<select id="getCommunityList" resultType="com.epmet.dto.result.CommunityListResultDTO">

26
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml

@ -42,6 +42,18 @@
)
</update>
<!-- 更新楼栋信息 -->
<update id="updateBuilding">
UPDATE ic_building
SET TOTAL_UNIT_NUM = #{totalUnitNum},
TOTAL_FLOOR_NUM = #{totalFloorNum},
TOTAL_HOUSE_NUM = #{totalHouseNum},
BUILDING_LEADER_NAME = #{buildingLeaderName},
BUILDING_LEADER_MOBILE = #{buildingLeaderMobile},
UPDATED_TIME = NOW()
WHERE ID = #{buildingId}
</update>
<!--<select id="searchBuildingByPage" resultType="map">
select
a.ID as buildingId,
@ -81,9 +93,11 @@
a.SORT as sort,
a.LONGITUDE as longitude,
a.LATITUDE as latitude,
a.TYPE as buildingTypeKey
a.TYPE as buildingTypeKey,
(SELECT COUNT(1) FROM ic_house WHERE DEL_FLAG = '0' AND BUILDING_ID = a.ID) AS realTotalHouseNum,
a.BUILDING_LEADER_NAME,
a.BUILDING_LEADER_MOBILE
from ic_building a
LEFT JOIN ic_neighbor_hood b on a.NEIGHBOR_HOOD_ID = b.ID and b.DEL_FLAG='0'
left join customer_agency c on b.AGENCY_ID = c.ID and c.DEL_FLAG='0'
left join customer_grid d on b.GRID_ID = d.ID and d.DEL_FLAG='0'
@ -106,7 +120,8 @@
</if>
AND a.DEL_FLAG = '0'
</where>
order by a.CREATED_TIME, a.BUILDING_NAME
ORDER BY CAST(b.NEIGHBOR_HOOD_NAME AS SIGNED),CONVERT(b.NEIGHBOR_HOOD_NAME using gbk),
CAST(a.BUILDING_NAME AS SIGNED),CONVERT(a.BUILDING_NAME USING gbk)
</select>
<select id="searchAllBuilding" resultType="com.epmet.excel.IcBuildingExcel">
select
@ -365,4 +380,9 @@
BUILDING_ID
</select>
<!-- 查询楼栋下单元数 -->
<select id="selectUnitCount" resultType="java.lang.Integer">
SELECT COUNT(ID) FROM ic_building_unit WHERE BUILDING_ID = #{buildingId} AND DEL_FLAG = '0'
</select>
</mapper>

34
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml

@ -300,4 +300,38 @@
)
GROUP BY h.OWNER_ID_CARD
</select>
<select id="houseChart" resultType="com.epmet.dto.result.HouseChartResultDTO">
SELECT
COUNT(id) num,
rent_flag rentFlag
FROM
ic_house
WHERE del_flag = '0'
<choose>
<when test='orgType == "agency"'>
AND neighbor_hood_id IN (
select id from ic_neighbor_hood
where del_flag = '0'
and (agency_id = #{orgId} OR agency_pids LIKE CONCAT('%', #{orgId}, '%'))
)
</when>
<when test='orgType == "grid"'>
AND neighbor_hood_id IN (
select id from ic_neighbor_hood
where del_flag = '0'
and grid_id = #{orgId}
)
</when>
<otherwise>
AND neighbor_hood_id IN (
select id from ic_neighbor_hood
where del_flag = '0'
and id = #{orgId}
)
</otherwise>
</choose>
GROUP BY rent_flag
</select>
</mapper>

73
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml

@ -25,6 +25,59 @@
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<!-- 更新小区详细地址和备注 -->
<update id="updateNeighborHood">
update ic_neighbor_hood
<trim prefix="set" suffixOverrides=",">
<trim prefix="ADDRESS =(case" suffix="end),">
<foreach collection="list" item="l">
when id = #{l.neighborHoodId} then #{l.address}
</foreach>
</trim>
<trim prefix="REMARK =(case" suffix="end),">
<foreach collection="list" item="l">
when id = #{l.neighborHoodId} then #{l.remark}
</foreach>
</trim>
UPDATED_TIME = NOW()
</trim>
WHERE DEL_FLAG = '0'
AND ID IN (
<foreach collection="list" item="l" separator=",">
#{l.neighborHoodId}
</foreach>
)
</update>
<!-- 更新小区关系表 -->
<update id="neighborHoodPropertyUpdate">
update ic_neighbor_hood_property
<trim prefix="set" suffixOverrides=",">
<trim prefix="PROPERTY_ID =(case" suffix="end),">
<foreach collection="list" item="l">
when NEIGHBOR_HOOD_ID = #{l.neighborHoodId} then #{l.propertyId}
</foreach>
</trim>
UPDATED_TIME = NOW()
</trim>
WHERE DEL_FLAG = '0'
AND NEIGHBOR_HOOD_ID IN (
<foreach collection="list" item="l" separator=",">
#{l.neighborHoodId}
</foreach>
)
</update>
<!-- 删除物业关系 -->
<delete id="delProperty">
DELETE FROM ic_neighbor_hood_property
WHERE NEIGHBOR_HOOD_ID IN (
<foreach collection="neighborHoodIds" item="n" separator=",">
#{n}
</foreach>
)
</delete>
<!--<select id="searchNeighborhoodByPage" resultType="map">
select
a.id as neighborHoodId,
@ -100,7 +153,7 @@
AND a.DEL_FLAG = '0'
</where>
ORDER BY a.CREATED_TIME
ORDER BY CAST(a.NEIGHBOR_HOOD_NAME AS SIGNED),CONVERT(a.NEIGHBOR_HOOD_NAME using gbk)
</select>
<select id="searchAllNeighborhood" resultType="com.epmet.excel.IcNeighborHoodExcel">
select
@ -223,4 +276,22 @@
</foreach>
)
</select>
<select id="selectNeighborList" resultType="com.epmet.dto.IcNeighborHoodDTO">
SELECT
id,
customer_id,
neighbor_hood_name,
agency_id,
parent_agency_id,
agency_pids,
grid_id,
address,
remark
FROM
ic_neighbor_hood
WHERE
del_flag = '0'
AND grid_id = #{gridId}
</select>
</mapper>

5
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/BlockChainUploadServiceImpl.java

@ -134,9 +134,10 @@ public class BlockChainUploadServiceImpl implements BlockChainUploadService {
}
Result result;
if (project == null) {
// 处理
if (!"created".equals(processEntity.getOperation())) {
// 处理。如果是结案,则会有project对象,因为要传递结案状态给区块链,其他状态则project==null
BlockChainProcessProjectFormDTO processForm = new BlockChainProcessProjectFormDTO();
processForm.setProject(project);
processForm.setProcess(process);
processForm.setAssignedStaffs(assignedStaffs);
processForm.setHandledStaff(handledStaff);

4
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java

@ -613,7 +613,7 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
// 数据上链
try {
blockChainUploadService.send2BlockChain(null, projectProcessEntity, null, fromDTO.getProjectStaffId());
blockChainUploadService.send2BlockChain(projectEntity, projectProcessEntity, null, fromDTO.getProjectStaffId());
} catch (Exception e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【项目流转】上链失败,错误信息:{}", errorMsg);
@ -841,7 +841,7 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
// 数据上链
try {
blockChainUploadService.send2BlockChain(null, projectProcessEntity, null, fromDTO.getProjectStaffId());
blockChainUploadService.send2BlockChain(projectEntity, projectProcessEntity, null, fromDTO.getProjectStaffId());
} catch (Exception e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【项目流转】上链失败,错误信息:{}", errorMsg);

60
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcExportTemplateDTO.java

@ -0,0 +1,60 @@
package com.epmet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 自定义表单导出模板
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Data
public class IcExportTemplateDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 所属机关IDcustomer_agency.id
*/
private String agencyId;
/**
* 所有上级组织机构ID(以英文:隔开)包含本身id
*/
private String pids;
/**
* 表单CODE从字典获取
*/
private String formCode;
/**
* 模板名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
private Integer isSelf;
private String createdBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private Date createdTime;
}

33
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcFormItemGroupDTO.java

@ -20,7 +20,6 @@ package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
@ -79,34 +78,4 @@ public class IcFormItemGroupDTO implements Serializable {
*/
private Boolean display;
/**
* 0未删除1已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}
}

39
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/EditIFormItemFormDTO.java

@ -0,0 +1,39 @@
package com.epmet.dto.form;
import com.epmet.dto.result.OptionDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
@Data
public class EditIFormItemFormDTO implements Serializable {
/**
* 客户id
* 可空为空时修改所有客户符合条件的记录
*/
private String customerId;
/**
* ic_form_item.id
*/
private String formItemId;
/**
* 组件名称对应的是ic_form_item.label
*/
@NotBlank(message = "label不能为空")
private String label;
/**
* 组件类型
*/
private String itemType;
/**
* ic_form_item_options
*/
private List<OptionDTO> options;
}

38
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/IcExportTemplateQueryFormDTO.java

@ -0,0 +1,38 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.dto.form.IcExportTemplateSaveFormDTO;
import com.epmet.commons.tools.validator.group.ExportGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 自定义表单导出模板
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Data
public class IcExportTemplateQueryFormDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 模板主键
*/
private String tempId;
/**
* 客户id
*/
@NotBlank(message = "客户Id不能为空",groups = ExportGroup.class)
private String customerId;
/**
* 页面上的导出配置参数
*/
private IcExportTemplateSaveFormDTO exportConfig;
}

84
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/IcFormItemGroupLisFormDTO.java

@ -0,0 +1,84 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto.form;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import com.epmet.commons.tools.validator.group.QueryGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 表单项分组查询条件
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-10-26
*/
@Data
public class IcFormItemGroupLisFormDTO extends PageFormDTO {
private static final long serialVersionUID = 1L;
/**
* 分组id
*/
private String id;
/**
* 客户ID
*/
@NotBlank(message = "客户Id不能为空", groups = QueryGroup.class)
private String customerId;
/**
* 表单ID
*/
private String formId;
/**
* 表单编码
*/
@NotBlank(message = "表单编码不能为空", groups = QueryGroup.class)
private String formCode;
/**
* 对应的子表名称
*/
private String tableName;
/**
* 是否支持添加一行1支持默认0不支持
*/
private Boolean supportAdd;
/**
* 名称
*/
private String label;
/**
* 排序
*/
private Integer sort;
/**
* 1展示0不展示默认1
*/
private Boolean display;
}

23
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ConditionResDTO.java

@ -0,0 +1,23 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class ConditionResDTO implements Serializable {
/**
* 分组ID,'默认NONE'
*/
private String itemGroupId;
/**
* 分组名称
* 基础信息教育信息....
*/
private String groupName;
private List<ConditionResultDTO> queryItemList;
}

9
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ConditionResultDTO.java

@ -14,7 +14,7 @@ import java.util.List;
public class ConditionResultDTO implements Serializable {
private static final long serialVersionUID = -2021200288758478252L;
/**
* 父项ID
* ID
*/
private String itemId;
@ -88,6 +88,13 @@ public class ConditionResultDTO implements Serializable {
*/
private String queryType;
private String funType;
private List<OptionDTO> options;
/**
* 这个表 是否支持添加 即是否是多对一 eg:居民需求是多个对一个
*/
private boolean supportAdd;
}

59
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItemBaseResult.java

@ -0,0 +1,59 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 基础表单项
* @Author yinzuomei
* @Date 2021/10/26 2:15 下午
*/
@Data
public class FormItemBaseResult implements Serializable {
private static final long serialVersionUID = 5946318248252730101L;
/**
* ID
*/
private String itemId;
/**
* 项标签
*/
private String label;
/**
* 分组ID,'默认NONE'
*/
private String itemGroupId;
/**
* 排序
*/
private Integer sort;
/**
* 默认ic_resi_user
*/
private String tableName;
/**
* 拼好的列名
*/
private String columnName;
/**
* 选项来源,REMOTE;LOCAL;如果是动态加载的下拉框或者CHECKBOX等的情况下使用URL:接口获取(LABEL,VALUE)JSON:直接从JSON中取
*/
private String optionSourceType;
/**
* 来源地址,REMOTE才有固定格式;如果OPTIONS_SOURCE是URL则此处填写要调用的接口的URL相对路径例如/API/GOV/ORG/XXXX此处不应设置参数若需要参数应当完全由后端通过TOKEN信息来获取
*/
private String optionSourceValue;
}

2
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormItemResult.java

@ -16,7 +16,7 @@ public class FormItemResult implements Serializable {
private static final long serialVersionUID = 7443085469505238040L;
/**
* 父项ID
* ID
*/
private String itemId;

69
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcCustomExportResultDTO.java

@ -0,0 +1,69 @@
package com.epmet.dto.result;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义表单导出模板配置项 for 导出时使用
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Data
public class IcCustomExportResultDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 表头
*/
private List<List<String>> headers = new ArrayList<>();
private Integer headerRow;
/**
* sql中要返回的 列名 顺序跟表头顺序一致
*/
private List<SqlColumn> showSqlColumns;
/**
* sql中要返回的关联的列 (与显示的要去重)
*/
private List<SqlColumn> hiddenSqlColumns;
@NoArgsConstructor
@AllArgsConstructor
@Data
public static class SqlColumn {
private String itemId;
private String tableName;
private Boolean manyToOne;
private String columnName;
private String optionSourceType;
}
/**
* desc:获取有几行头
* @return
*/
public Integer getHeaderRow() {
if (CollectionUtils.isEmpty(headers)){
return NumConstant.ZERO;
}
return headers.stream().mapToInt(List::size).max().orElse(0);
}
}

67
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcExportTemplateForExportResultDTO.java

@ -0,0 +1,67 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 自定义表单导出模板配置项 for 导出时使用
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Data
public class IcExportTemplateForExportResultDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 父id
*/
private String pid;
/**
* 表头宽度
*/
private Integer width;
/**
* 项标签
*/
private String label;
/**
* 排序
*/
private Integer sort;
/**
* itemId
*/
private String itemId;
/**
* 表名
*/
private String tableName;
/**
* 列名
*/
private String columnName;
private String optionSourceValue;
private String optionSourceType;
/**
* 是否支持添加 即是否是多对一 eg:居民需求是多个对一个
*/
private boolean supportAdd;
}

4
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/SubTableJoinDTO.java

@ -10,4 +10,8 @@ public class SubTableJoinDTO implements Serializable {
private static final long serialVersionUID = 8243764437194993736L;
private String tableName;
private String joinTableSql;
/**
* 是否支持添加一行1支持默认0不支持
*/
private Boolean supportAdd;
}

19
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/TemplateDetailResultDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/4/25 16:25
*/
@Data
public class TemplateDetailResultDTO implements Serializable {
private static final long serialVersionUID = 8954669603105326916L;
private String id;
private String label;
private List<TemplateDetailResultDTO> children;
}

11
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/OperCustomizeOpenFeignClient.java

@ -25,7 +25,7 @@ import java.util.Set;
* @author yinzuomei@elink-cn.com
* @date 2020/6/4 13:16
*/
// @FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallbackFactory = OperCustomizeOpenFeignClientFallbackFactory.class,url = "http://localhost:8089")
// @FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallbackFactory = OperCustomizeOpenFeignClientFallbackFactory.class,url = "http://localhost:8089")
@FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallbackFactory = OperCustomizeOpenFeignClientFallbackFactory.class)
public interface OperCustomizeOpenFeignClient {
@ -161,4 +161,13 @@ public interface OperCustomizeOpenFeignClient {
*/
@PostMapping("/oper/customize/icformitem/resi-category-items/list")
Result<List<ResiCategoryItemResultDTO>> listResiCategoryItems(@RequestParam("customer-id") String customerId);
/**
* 查询要导出的表头和sql返回结果的列的 用于导出
* @param param
* @return
*/
@PostMapping("/oper/customize/icExportTemplate/getExcelHeaderAndSqlColumnForExport")
Result<IcCustomExportResultDTO> getExcelHeaderAndSqlColumnForExport(@RequestBody IcExportTemplateQueryFormDTO param);
}

6
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java

@ -124,4 +124,10 @@ public class OperCustomizeOpenFeignClientFallback implements OperCustomizeOpenFe
public Result<List<ResiCategoryItemResultDTO>> listResiCategoryItems(String customerId) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "listResiCategoryItems", customerId);
}
@Override
public Result<IcCustomExportResultDTO> getExcelHeaderAndSqlColumnForExport(IcExportTemplateQueryFormDTO param) {
return ModuleUtils.feignConError(ServiceConstant.OPER_CUSTOMIZE_SERVER, "getExcelHeaderAndSqlColumnForExport", param);
}
}

6
epmet-module/oper-customize/oper-customize-server/pom.xml

@ -89,6 +89,12 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-admin-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

96
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcExportTemplateController.java

@ -0,0 +1,96 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.dto.form.IcExportTemplateSaveFormDTO;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.ExportGroup;
import com.epmet.dto.IcExportTemplateDTO;
import com.epmet.dto.form.IcExportTemplateQueryFormDTO;
import com.epmet.dto.result.IcCustomExportResultDTO;
import com.epmet.dto.result.IcExportTemplateForExportResultDTO;
import com.epmet.dto.result.TemplateDetailResultDTO;
import com.epmet.service.IcExportTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 自定义表单导出模板
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@RestController
@RequestMapping("icExportTemplate")
public class IcExportTemplateController {
@Autowired
private IcExportTemplateService icExportTemplateService;
@RequestMapping("page")
public Result<PageData<IcExportTemplateDTO>> page(@RequestParam Map<String, Object> params) {
PageData<IcExportTemplateDTO> page = icExportTemplateService.page(params);
return new Result<PageData<IcExportTemplateDTO>>().ok(page);
}
@RequestMapping(value = "{id}", method = {RequestMethod.POST, RequestMethod.GET})
public Result<IcExportTemplateDTO> get(@PathVariable("id") String id) {
IcExportTemplateDTO data = icExportTemplateService.get(id);
return new Result<IcExportTemplateDTO>().ok(data);
}
@NoRepeatSubmit
@PostMapping("save")
public Result<List<IcExportTemplateForExportResultDTO>> save(@RequestBody IcExportTemplateSaveFormDTO formDTO) {
return new Result<List<IcExportTemplateForExportResultDTO>>().ok(icExportTemplateService.save(formDTO));
}
@PostMapping("delete")
public Result delete(@LoginUser TokenDto tokenDto, @RequestBody String[] ids) {
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
icExportTemplateService.delete(tokenDto.getUserId(), ids);
return new Result();
}
/**
* desc:查询要导出的表头和sql返回结果的列的 用于导出
*
* @param param
* @return
*/
@PostMapping("getExcelHeaderAndSqlColumnForExport")
public Result<IcCustomExportResultDTO> getExcelHeaderAndSqlColumnForExport(@RequestBody IcExportTemplateQueryFormDTO param) {
ValidatorUtils.validateEntity(param, ExportGroup.class);
return new Result().ok(icExportTemplateService.getTemplateConfigForExport(param));
}
/**
* 获取模板列表
*
* @Param tokenDto
* @Return {@link Result< List< IcExportTemplateDTO>>}
* @Author zhaoqifeng
* @Date 2022/4/25 14:28
*/
@PostMapping("templateList")
public Result<List<IcExportTemplateDTO>> getTemplateList(@LoginUser TokenDto tokenDto, @RequestBody IcExportTemplateDTO formDTO) {
return new Result<List<IcExportTemplateDTO>>().ok(icExportTemplateService.getTemplateList(tokenDto, formDTO));
}
@PostMapping("templateDetail")
public Result<List<TemplateDetailResultDTO>> getTemplateDetail(@RequestBody IcExportTemplateDTO formDTO) {
return new Result<List<TemplateDetailResultDTO>>().ok(icExportTemplateService.getTemplateDetail(formDTO));
}
}

13
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java

@ -102,6 +102,19 @@ public class IcFormController {
return new Result<List<ConditionResultDTO>>().ok(icFormItemService.queryConditionList(formDto));
}
/**
* 查询条件 分组显示
* @param tokenDto
* @param formDto
* @return
*/
@PostMapping("conditionlist-bygroup")
public Result<List<ConditionResDTO>> queryConditionListByGroup(@LoginUser TokenDto tokenDto, @RequestBody CustomerFormQueryDTO formDto){
formDto.setCustomerId(tokenDto.getCustomerId());
ValidatorUtils.validateEntity(formDto,CustomerFormQueryDTO.AddUserInternalGroup.class);
return new Result<List<ConditionResDTO>>().ok(icFormItemService.queryConditionListByGroup(formDto));
}
/**
* 居民信息列表_表头
* @param tokenDto

39
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemController.java

@ -18,7 +18,10 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.EditIFormItemFormDTO;
import com.epmet.dto.result.ColumnTableNameResultDTO;
import com.epmet.dto.result.FormItemBaseResult;
import com.epmet.dto.result.ResiCategoryItemResultDTO;
import com.epmet.service.IcFormItemService;
import org.springframework.beans.factory.annotation.Autowired;
@ -60,4 +63,40 @@ public class IcFormItemController {
return new Result().ok(r);
}
/**
* 修改组件的类型
* 来源于需求
* 16所患大病所患慢病更改为下拉框选择慢病类型高血压类风湿心脏病肝硬化糖尿病其他大病类别恶性肿瘤肾功能衰竭肝硬化或急性肝坏死脑中风急性心机梗塞急性坏死性胰腺炎器官移植系统性红斑狼疮再生障碍性贫血其他
* 17人户状况更改为下拉框选择类别人户一致人在户不在户在人不在
* 18居住情况类别缺少针对夫妻两人居住的类别增加其他分类类别与子女同住空巢独居其他
* @param formDTO
* @return
*/
@PostMapping("edit-item-type")
public Result editItemType(@RequestBody EditIFormItemFormDTO formDTO ){
ValidatorUtils.validateEntity(formDTO);
icFormItemService.editItemType(formDTO);
return new Result();
}
/**
* 初始化默认的查询组件ic_form_item.SEARCH_DISPLAY='1'
* @return
*/
@PostMapping("init-query-builder")
public Result initQueryBuilder(@RequestParam("customerId")String customerId){
icFormItemService.initQueryBuilder(customerId);
return new Result();
}
/**
* 根据分组id 获取分组下的item
* @return
*/
@PostMapping("getItemList/{groupId}")
public Result<List<FormItemBaseResult>> getItemListByGroupId(@RequestHeader String customerId, @PathVariable("groupId") String groupId){
List<FormItemBaseResult> list = icFormItemService.getItemListByGroupId(customerId,groupId);
return new Result().ok(list);
}
}

28
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormItemGroupController.java

@ -17,23 +17,20 @@
package com.epmet.controller;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.QueryGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IcFormItemGroupDTO;
import com.epmet.excel.IcFormItemGroupExcel;
import com.epmet.dto.form.IcFormItemGroupLisFormDTO;
import com.epmet.service.IcFormItemGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
@ -45,14 +42,16 @@ import java.util.Map;
@RestController
@RequestMapping("icformitemgroup")
public class IcFormItemGroupController {
@Autowired
private IcFormItemGroupService icFormItemGroupService;
@GetMapping("page")
public Result<PageData<IcFormItemGroupDTO>> page(@RequestParam Map<String, Object> params){
PageData<IcFormItemGroupDTO> page = icFormItemGroupService.page(params);
return new Result<PageData<IcFormItemGroupDTO>>().ok(page);
@PostMapping("list")
public Result<List<IcFormItemGroupDTO>> page(@RequestHeader String customerId, @RequestBody IcFormItemGroupLisFormDTO param){
param.setCustomerId(customerId);
ValidatorUtils.validateEntity(param, QueryGroup.class);
List<IcFormItemGroupDTO> page = icFormItemGroupService.list(param);
return new Result<List<IcFormItemGroupDTO>>().ok(page);
}
@GetMapping("{id}")
@ -85,10 +84,5 @@ public class IcFormItemGroupController {
return new Result();
}
@GetMapping("export")
public void export(@RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<IcFormItemGroupDTO> list = icFormItemGroupService.list(params);
ExcelUtils.exportExcelToTarget(response, null, list, IcFormItemGroupExcel.class);
}
}
}

16
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcExportTemplateConfigDao.java

@ -0,0 +1,16 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.IcExportTemplateConfigEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 自定义表单导出模板配置项
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Mapper
public interface IcExportTemplateConfigDao extends BaseDao<IcExportTemplateConfigEntity> {
}

38
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcExportTemplateDao.java

@ -0,0 +1,38 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IcExportTemplateDTO;
import com.epmet.dto.form.IcExportTemplateQueryFormDTO;
import com.epmet.dto.result.IcExportTemplateForExportResultDTO;
import com.epmet.dto.result.TemplateDetailResultDTO;
import com.epmet.entity.IcExportTemplateEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 自定义表单导出模板
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Mapper
public interface IcExportTemplateDao extends BaseDao<IcExportTemplateEntity> {
List<IcExportTemplateForExportResultDTO> getTemplateConfigForExport(IcExportTemplateQueryFormDTO param);
List<IcExportTemplateDTO> selectByAgencyId(@Param("agencyId") String agencyId);
/**
* 获取模板详情
*
* @Param tempId
* @Return {@link List< TemplateDetailResultDTO>}
* @Author zhaoqifeng
* @Date 2022/4/25 16:33
*/
List<TemplateDetailResultDTO> getTemplateDetail(@Param("tempId") String tempId);
List<TemplateDetailResultDTO> getChildrenTemplateDetail(@Param("pid") String pid);
}

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

@ -47,7 +47,7 @@ public interface IcFormDao extends BaseDao<IcFormEntity> {
*/
CustomerFormResultDTO selectByCode(@Param("customerId") String customerId, @Param("formCode") String formCode);
List<FormItemResult> selectItemList(@Param("formId") String formId, @Param("dynamic") Boolean dynamic);
List<FormItemResult> selectItemList(@Param("itemGroupId")String itemGroupId,@Param("formId") String formId, @Param("dynamic") Boolean dynamic);
List<FormItemResult> selectItemListByGroupId(String groupId);
List<OptionDTO> selectListOption(String itemId);

42
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormItemDao.java

@ -37,6 +37,17 @@ public interface IcFormItemDao extends BaseDao<IcFormItemEntity> {
List<ConditionResultDTO> selectConditionList(@Param("customerId") String customerId, @Param("formCode") String formCode);
List<ConditionResultDTO> selectConditionListByGroupId(String groupId);
/**
* 查询组件列表
*
* @param customerId
* @param formCode
* @return
*/
List<ConditionResDTO> selectConditionListGroup(@Param("customerId") String customerId, @Param("formCode") String formCode, @Param("itemIdList") List<String> itemIdList);
List<TableHeaderResultDTO> queryTableHeaderList(@Param("customerId") String customerId, @Param("formCode") String formCode);
/**
@ -44,28 +55,45 @@ public interface IcFormItemDao extends BaseDao<IcFormItemEntity> {
*
* @param customerId
* @param formCode
* @return java.util.List<com.epmet.dto.result.IcFormResColumnDTO>
* @return java.util.List<com.epmet.dto.result.IcFormResColumnDTO>
* @author yinzuomei
* @date 2021/11/1 12:58 下午
*/
List<IcFormResColumnDTO> queryConditions(@Param("customerId") String customerId, @Param("formCode")String formCode);
List<IcFormResColumnDTO> queryConditions(@Param("customerId") String customerId, @Param("formCode") String formCode);
/**
* 构造出所有子表关联语句
*
* @param customerId
* @param formCode
* @return java.util.List<java.lang.String>
* @return java.util.List<java.lang.String>
* @author yinzuomei
* @date 2021/11/1 1:25 下午
*/
List<SubTableJoinDTO> querySubTables(@Param("customerId") String customerId, @Param("formCode")String formCode);
List<SubTableJoinDTO> querySubTables(@Param("customerId") String customerId, @Param("formCode") String formCode);
Set<String> queryIcResiSubTables(@Param("customerId") String customerId, @Param("formCode")String formCode);
Set<String> queryIcResiSubTables(@Param("customerId") String customerId, @Param("formCode") String formCode);
/**
* @Author sun
* @Description 居民信息新增查询各表必填字段
**/
List<ColumnTableNameResultDTO> getMustColumn(@Param("customerId")String customerId);
}
List<ColumnTableNameResultDTO> getMustColumn(@Param("customerId") String customerId);
/**
* desc:根据Id获取item对应的表名和item属性
*
* @param itemId
* @return
*/
ConditionResultDTO getConditionItem(@Param("itemId") String itemId);
/**
* desc:根据客户Id 和groupId 获取item配置项
*
* @param customerId
* @param groupId
* @return
*/
List<FormItemBaseResult> getItemListByGroupId(@Param("customerId") String customerId, @Param("groupId") String groupId);
}

1
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormItemOptionsDao.java

@ -41,4 +41,5 @@ public interface IcFormItemOptionsDao extends BaseDao<IcFormItemOptionsEntity> {
*/
List<String> volunteerLabelByValues(@Param("volunteers") List<String> volunteers,@Param("customerId")String customerId);
int deleteByItemId(@Param("itemId") String itemId, @Param("customerId") String customerId);
}

8
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/dao/IcFormQueryBuilderDao.java

@ -20,6 +20,9 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.IcFormQueryBuilderEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 表单查询项
@ -29,5 +32,8 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface IcFormQueryBuilderDao extends BaseDao<IcFormQueryBuilderEntity> {
IcFormQueryBuilderEntity selectDefaultQueryItem(@Param("itemId") String itemId,@Param("itemType") String itemType, @Param("queryType")String queryType);
List<String> selectItemId(@Param("customerId") String customerId, @Param("formCode") String formCode);
}

56
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcExportTemplateConfigEntity.java

@ -0,0 +1,56 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 自定义表单导出模板配置项
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_export_template_config")
public class IcExportTemplateConfigEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 模板主键id
*/
private String tempId;
/**
* 项标签
*/
private String label;
/**
* 父id
*/
private String pid;
/**
* ic_form_item.id
*/
private String itemId;
/**
* 表头宽度
*/
private Integer width;
/**
* 排序
*/
private Integer sort;
}

51
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcExportTemplateEntity.java

@ -0,0 +1,51 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 自定义表单导出模板
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_export_template")
public class IcExportTemplateEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 所属机关IDcustomer_agency.id
*/
private String agencyId;
/**
* 所有上级组织机构ID(以英文:隔开)包含本身id
*/
private String pids;
/**
* 表单CODE从字典获取
*/
private String formCode;
/**
* 模板名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
}

20
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcFormQueryBuilderEntity.java

@ -45,6 +45,11 @@ public class IcFormQueryBuilderEntity extends BaseEpmetEntity {
*/
private String formItemId;
/**
* 项标签
*/
private String label;
/**
* ic_form.form_code举例resi_base_info
* @see com.epmet.commons.tools.enums.IcFormCodeEnum
@ -52,11 +57,26 @@ public class IcFormQueryBuilderEntity extends BaseEpmetEntity {
*/
private String formCode;
/**
* 组件类型
*/
private String itemType;
/**
* 查询类型: equal, like,daterange....
*/
private String queryType;
/**
* 值转换类型
*/
private String funType;
/**
* 手机号mobile; 身份证id_card只能输入数字:num
*/
private String validType;
/**
* 排序
*/

21
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcExportTemplateConfigService.java

@ -0,0 +1,21 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.entity.IcExportTemplateConfigEntity;
/**
* 自定义表单导出模板
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-04-21
*/
public interface IcExportTemplateConfigService extends BaseService<IcExportTemplateConfigEntity> {
/**
* 删除模板配置
* @Param tempId
* @Return
* @Author zhaoqifeng
* @Date 2022/4/26 9:56
*/
void deleteByTempId(String tempId);
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save