Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

tags/24080901
PoffyZhang pirms 2 gadiem
vecāks
revīzija
f6aa5be9db
100 mainītis faili ar 3115 papildinājumiem un 535 dzēšanām
  1. +1
    -1
      ningda-generator/src/main/java/com/ningdatech/generator/config/GeneratorCodeKingbaseConfig.java
  2. +35
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/CommonConst.java
  3. +0
    -36
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/CommonConstant.java
  4. +1
    -24
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/DefValConst.java
  5. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/DingConst.java
  6. +1
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/ProjectDeclareConst.java
  7. +43
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/RegionConst.java
  8. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/StateMachineConst.java
  9. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/common/enumeration/BoolDisplayEnum.java
  10. +92
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/RegionCacheHelper.java
  11. +59
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/RegionLimitHelper.java
  12. +2
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/UserInfoHelper.java
  13. +69
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/basic/AbstractRegionCacheHelper.java
  14. +44
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/basic/AbstractRegionLimitHelper.java
  15. +122
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/RegionLimitHelperImpl.java
  16. +173
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/RegionsCacheHelperImpl.java
  17. +7
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/UserInfoHelperImpl.java
  18. +22
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/model/CommonPageReq.java
  19. +53
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/model/RegionMapKey.java
  20. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/action/ProjectDeclareAction.java
  21. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/action/ProjectDeclareChoiceAction.java
  22. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/factory/ProjectDeclareGuardFactory.java
  23. +7
    -7
      pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/util/StateMachineUtils.java
  24. +26
    -17
      pmapi/src/main/java/com/ningdatech/pmapi/common/util/SendWorkNoticeUtil.java
  25. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/ExpertUserInfoAssembler.java
  26. +39
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/RegionWrapperAssembler.java
  27. +50
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/constant/ExpertApplyTypeQueryEnum.java
  28. +49
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/constant/QueryExpertAccountStatusEnum.java
  29. +11
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/controller/ExpertController.java
  30. +41
    -4
      pmapi/src/main/java/com/ningdatech/pmapi/expert/controller/ExpertMetaApplyController.java
  31. +142
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertAdminManage.java
  32. +533
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertMetaApplyManage.java
  33. +48
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/ExpertAdminExpertManageQuery.java
  34. +29
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/ExtraMaterialDO.java
  35. +62
    -61
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/cmd/ExpertAdminExpertManageQueryCmd.java
  36. +36
    -35
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/cmd/ExpertStorageDealCmd.java
  37. +46
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/cmd/MetaApplyListQuery.java
  38. +17
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/query/ExpertDictionaryQuery.java
  39. +17
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/query/ExpertTagQuery.java
  40. +59
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/query/ListExpertQuery.java
  41. +49
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/req/MetaApplyResultRequest.java
  42. +56
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/vo/ExpertAdminExpertManageListVO.java
  43. +76
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/vo/ExpertApplyMetaVO.java
  44. +70
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/vo/MetaApplyResultVo.java
  45. +13
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/service/ExpertInfoService.java
  46. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/expert/service/IExpertMetaApplyService.java
  47. +10
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/service/IExpertUserFullInfoService.java
  48. +104
    -4
      pmapi/src/main/java/com/ningdatech/pmapi/expert/service/impl/ExpertInfoServiceImpl.java
  49. +5
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/service/impl/ExpertUserFullInfoServiceImpl.java
  50. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingController.java
  51. +6
    -4
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/ExpertInviteAvoidRule.java
  52. +5
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/ExpertInviteRule.java
  53. +3
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/MeetingReviewProjectDTO.java
  54. +27
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/AppointRuleVO.java
  55. +33
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/AvoidInfoVO.java
  56. +6
    -7
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/ExpertInviteDetailVO.java
  57. +3
    -47
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteRuleDetailVO.java
  58. +17
    -28
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/MeetingDetailBasicVO.java
  59. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/helper/MeetingManageHelper.java
  60. +52
    -44
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java
  61. +11
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/IMeetingInnerProjectService.java
  62. +11
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/IMeetingOuterProjectService.java
  63. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/impl/ExpertInviteAvoidRuleServiceImpl.java
  64. +10
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/impl/MeetingInnerProjectServiceImpl.java
  65. +10
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/impl/MeetingOuterProjectServiceImpl.java
  66. +16
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meta/helper/ExpertUserInfoHelper.java
  67. +63
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meta/helper/ExpertUserInfoHelperImpl.java
  68. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/meta/manage/MetaManage.java
  69. +15
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meta/service/IExpertDictionaryService.java
  70. +17
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/meta/service/impl/ExpertDictionaryServiceImpl.java
  71. +1
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/PrequalificationDeclaredProjectManage.java
  72. +13
    -14
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/AnnualPlanHandle.java
  73. +7
    -7
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ArchivedHandle.java
  74. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ConstructionPlanReviewHandle.java
  75. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/DeptUnitedReviewHandle.java
  76. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/PreliminaryPreviewHandle.java
  77. +7
    -12
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectApprovalHandle.java
  78. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectDeclareHandle.java
  79. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectFinalInspectionHandle.java
  80. +7
    -9
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectPreliminaryInspectionHandle.java
  81. +7
    -14
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/TenderPurchaseHandle.java
  82. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/UnitInnerAuditHandle.java
  83. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java
  84. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java
  85. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectRenewalFundManage.java
  86. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/NdProjectStatusChangeMapper.java
  87. +0
    -95
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/NdProjectStatusChange.java
  88. +48
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/ProjectStatusChange.java
  89. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/INdProjectStatusChangeService.java
  90. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/impl/NdProjectStatusChangeServiceImpl.java
  91. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/InitProcessTask.java
  92. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/ProjectStatusFlowTask.java
  93. +87
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/WorkNoticeFlowTask.java
  94. +51
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/staging/enums/MsgTypeEnum.java
  95. +21
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/staging/mapper/NdWorkNoticeStagingMapper.java
  96. +12
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/staging/mapper/NdWorkNoticeStagingMapper.xml
  97. +71
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/staging/model/entity/WorkNoticeStaging.java
  98. +23
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/staging/service/INdWorkNoticeStagingService.java
  99. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/staging/service/IProjectStagingService.java
  100. +84
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/staging/service/impl/NdWorkNoticeStagingServiceImpl.java

+ 1
- 1
ningda-generator/src/main/java/com/ningdatech/generator/config/GeneratorCodeKingbaseConfig.java Parādīt failu

@@ -56,7 +56,7 @@ public class GeneratorCodeKingbaseConfig {
}

public static void main(String[] args) {
generate("Liuxinxin", "expert", PATH_LXX, "expert_meta_apply");
generate("Liuxinxin", "expert", PATH_LXX, "expert_avoid_company");
}

}

+ 35
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/constant/CommonConst.java Parādīt failu

@@ -0,0 +1,35 @@
package com.ningdatech.pmapi.common.constant;

/**
* @description: 常量
* @author: LiuXinXin
* @date: 2022/5/5 17:31
*/
public interface CommonConst {

String COOKIE_KEY = "ND_JSESSION";

Integer EXPORT_PAGE_NUMBER = 1;
Integer EXPORT_PAGE_SIZE = 100000;
String CALL_STATUS = "status";
String CALL_STATUS_OK_VALUE = "ok";

Integer COMMENT_MAX_SIZE = 163;
Integer SUB_COMMENT_SIZE_MIN = 0;
Integer SUB_COMMENT_SIZE_MAX = 160;

String PROJECT_DECLARE = "项目申报";
String UNIT_INNER_AUDIT = "单位内部审核";
String PRELIMINARY_PREVIEW = "项目预审";
String DEPT_UNITED_REVIEW = "部门联审";
String ANNUAL_PLAN = "年度计划";
String CONSTRUCTION_PLAN_REVIEW = "建设方案评审";
String PROJECT_APPROVAL = "立项批复";
String TENDER_PURCHASE = "招标采购";
String PROJECT_PRELIMINARY_INSPECTION = "项目初验";
String PROJECT_FINAL_INSPECTION = "项目终验";

String ARCHIVED = "归档";


}

+ 0
- 36
pmapi/src/main/java/com/ningdatech/pmapi/common/constant/CommonConstant.java Parādīt failu

@@ -1,36 +0,0 @@
package com.ningdatech.pmapi.common.constant;

/**
* @description: 常量
* @author: LiuXinXin
* @date: 2022/5/5 17:31
*/
public class CommonConstant {

public static final String COOKIE_KEY = "ND_JSESSION";

public static final Integer EXPORT_PAGE_NUMBER = 1;
public static final Integer EXPORT_PAGE_SIZE = 100000;
public static final String CALL_STATUS = "status";
public static final String CALL_STATUS_OK_VALUE = "ok";

public static final Integer COMMENT_MAX_SIZE = 163;
public static final Integer SUB_COMMENT_SIZE_MIN = 0;
public static final Integer SUB_COMMENT_SIZE_MAX = 160;

public static final String PROJECT_DECLARE = "项目申报";
public static final String UNIT_INNER_AUDIT = "单位内部审核";
public static final String PRELIMINARY_PREVIEW = "项目预审";
public static final String DEPT_UNITED_REVIEW = "部门联审";
public static final String ANNUAL_PLAN = "年度计划";
public static final String CONSTRUCTION_PLAN_REVIEW = "建设方案评审";
public static final String PROJECT_APPROVAL = "立项批复";
public static final String TENDER_PURCHASE = "招标采购";
public static final String PROJECT_PRELIMINARY_INSPECTION = "项目初验";
public static final String PROJECT_FINAL_INSPECTION = "项目终验";

public static final String ARCHIVED = "归档";



}

pmapi/src/main/java/com/ningdatech/pmapi/common/constant/DefValConstants.java → pmapi/src/main/java/com/ningdatech/pmapi/common/constant/DefValConst.java Parādīt failu

@@ -8,7 +8,7 @@ import com.ningdatech.basic.util.StrPool;
*
* @author PoffyZhang
*/
public interface DefValConstants {
public interface DefValConst {

/**
* 默认的根节点path
@@ -30,28 +30,5 @@ public interface DefValConstants {
* 字典占位符
*/
String DICT_PLACEHOLDER = "###";
/**
* 浙江省的region_id
*/
Long ZJREGION_ID = 116L;

/**
* 城市 level
*/
Integer CITY_REGION_LEVEL = 2;

/**
* 区的 level
*/
Integer QU_REGION_LEVEL = 3;

/**
* 驾驶员异常数据GPS字符串起始偏移量
*/
Integer GPS_START_OFFSET = 5;

/**
* 驾驶员异常数据GPS字符串结尾偏移量
*/
Integer GPS_END_OFFSET = 69;
}

pmapi/src/main/java/com/ningdatech/pmapi/common/constant/DingConstant.java → pmapi/src/main/java/com/ningdatech/pmapi/common/constant/DingConst.java Parādīt failu

@@ -6,7 +6,7 @@ package com.ningdatech.pmapi.common.constant;
* @author CMM
* @since 2023/02/01 14:49
*/
public interface DingConstant {
public interface DingConst {
/**
* 工作通知
*/

pmapi/src/main/java/com/ningdatech/pmapi/common/constant/ProjectDeclareConstants.java → pmapi/src/main/java/com/ningdatech/pmapi/common/constant/ProjectDeclareConst.java Parādīt failu

@@ -1,7 +1,5 @@
package com.ningdatech.pmapi.common.constant;

import io.swagger.models.auth.In;

import java.math.BigDecimal;

/**
@@ -10,7 +8,7 @@ import java.math.BigDecimal;
* @author CMM
* @since 2023/01/19 10:31
*/
public interface ProjectDeclareConstants {
public interface ProjectDeclareConst {

/**
* 基本信息

+ 43
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/constant/RegionConst.java Parādīt failu

@@ -0,0 +1,43 @@
package com.ningdatech.pmapi.common.constant;

/**
* <p>
* RegionConst
* </p>
*
* @author WendyYang
* @since 13:57 2023/3/1
*/
public interface RegionConst {

//---------------------------------------地区层级(缩写RL)-------------------------------------------------------------

int RL_PROVINCE = 1;

int RL_CITY = 2;

int RL_COUNTY = 3;

//---------------------------------------地区编码(缩写RC)-------------------------------------------------------------

/**
* 丽水行政区划编码
*/
String RC_LS = "331100";

/**
* 中国行政区划编码
*/
String RC_CHINA = "100000";


/**
* 浙江行政区划编码
*/
String RC_ZJ = "330000";

//----------------------------------------地区父级ID(缩写PID)---------------------------------------------------------

long PID_CHINA = 0;

}

pmapi/src/main/java/com/ningdatech/pmapi/common/constant/StateMachineConstants.java → pmapi/src/main/java/com/ningdatech/pmapi/common/constant/StateMachineConst.java Parādīt failu

@@ -5,7 +5,7 @@ package com.ningdatech.pmapi.common.constant;
* @since 2023/02/07 16:24
*/

public class StateMachineConstants {
public class StateMachineConst {

public static final String PROJECT_DECLARE = "projectDeclare";
public static final String LI_SHUI_CITY_AREA_CODE = "331100";

pmapi/src/main/java/com/ningdatech/pmapi/common/constant/BoolDisplayEnum.java → pmapi/src/main/java/com/ningdatech/pmapi/common/enumeration/BoolDisplayEnum.java Parādīt failu

@@ -1,4 +1,4 @@
package com.ningdatech.pmapi.common.constant;
package com.ningdatech.pmapi.common.enumeration;

import lombok.AllArgsConstructor;
import lombok.Getter;

+ 92
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/RegionCacheHelper.java Parādīt failu

@@ -0,0 +1,92 @@
package com.ningdatech.pmapi.common.helper;


import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import com.ningdatech.pmapi.sys.model.vo.RegionTreeVO;

import java.util.Collection;
import java.util.List;

/**
* <p>
* RegionCacheHelper -
* </p>
*
* @author WendyYang
* @since 13:50 2023/3/1
*/
public interface RegionCacheHelper {


/**
* 获取完整的区域树状结构
*
* @return /
*/
List<RegionDTO> all();

/**
* 根据区域code 区域层级获取 区域类
*
* @param code 区域编码
* @param level 区域层级
* @return {@link RegionDTO}
*/
RegionDTO getByCodeAndLevel(String code, int level);

/**
* 获取区域名称
*
* @param code 区域编码
* @param level 区域层级
* @return 名称
*/
String getRegionName(String code, int level);

/**
* 根据传入的地区code与level获取所有上层地区集合
* 按照level升序排列
*
* @param code 地区编码
* @param level 地区层级
* @return /
*/
List<RegionDTO> listParents(String code, int level);

/**
* 获取当前区域所有的子区域(包括自己)
*
* @param code 区域编码
* @param level 级别
* @return /
*/
Collection<String> listChildRegionCodeList(String code, int level);

/**
* 获取当前节点开始的区域树
*
* @param regionCode 区域编码
* @param regionLevel 区域层级
* @return 区域树
*/
RegionTreeVO getRegionTree(String regionCode, Integer regionLevel);

/**
* 获取展示名称(浙江省/杭州市/滨江区)
*
* @param regionCode 区域编码
* @param regionLevel 区域层级
* @return java.lang.String
**/
String getFullDisplayName(String regionCode, Integer regionLevel);

/**
* 获取展示名称(杭州市/滨江区)
*
* @param regionCode 区域编码
* @param regionLevel 区域层级
* @return java.lang.String
**/
String getDisplayName(String regionCode, Integer regionLevel);

}

+ 59
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/RegionLimitHelper.java Parādīt failu

@@ -0,0 +1,59 @@
package com.ningdatech.pmapi.common.helper;

import com.ningdatech.pmapi.meta.model.bo.RegionContainsBO;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/12/21 下午5:37
* 区域限制帮助类
*/

public interface RegionLimitHelper {

/**
* 管理员 是否包含 专家层级校验
*
* @param expertUserId /
* @param expertAdminUserId /
* @return /
*/
Boolean regionContainsCheck(Long expertUserId, Long expertAdminUserId);

/**
* 校验层级包含关系
*
* @param regionContainsBOList /
* @param regionCode /
* @param regionLevel /
* @return /
*/
Boolean regionContains(List<RegionContainsBO> regionContainsBOList, String regionCode, Integer regionLevel);

/**
* 查询操作 包含区域包含列表装配
*
* @param queryRegionContainBo 查询区域范围列表
* @param expertAdminContainsRegionList 专家管理员可管理的区域范围列表
* @return /
*/
List<RegionContainsBO> queryContainsRegionAssembler(RegionContainsBO queryRegionContainBo, List<RegionContainsBO> expertAdminContainsRegionList);

/**
* 根据 区域层级-区域编码 获取区域包含列表
*
* @param regionLevel 区域层级
* @param regionCode 区域编码
* @return /
*/
RegionContainsBO getContainsRegionBo(Integer regionLevel, String regionCode);

/**
* 根据专家管理员用户id 获取专家管理员管辖区域列表
*
* @param expertAdminUserId 专家管理员用户id
* @return /
*/
List<RegionContainsBO> getExpertAdminContainsRegion(Long expertAdminUserId);
}

+ 2
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/UserInfoHelper.java Parādīt failu

@@ -22,4 +22,6 @@ public interface UserInfoHelper {

UserFullInfoDTO getUserFullInfo(Long userId);

String getUserName(Long userId);

}

+ 69
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/basic/AbstractRegionCacheHelper.java Parādīt failu

@@ -0,0 +1,69 @@
package com.ningdatech.pmapi.common.helper.basic;

import cn.hutool.core.lang.Assert;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import com.ningdatech.pmapi.common.model.RegionMapKey;
import com.ningdatech.pmapi.sys.convert.RegionConverter;
import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import com.ningdatech.pmapi.sys.model.entity.Region;
import com.ningdatech.pmapi.sys.service.IRegionService;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Lists;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* <p>
* AbstractRegionCache
* </p>
*
* @author WendyYang
* @since 14:41 2023/3/1
*/
@Slf4j
public abstract class AbstractRegionCacheHelper implements InitializingBean {

@Autowired
private IRegionService regionService;

private LoadingCache<RegionMapKey, RegionDTO> regionsCache;

private void initRegionCache() {
List<RegionDTO> allRegions = regionService.all();
if (allRegions.isEmpty()) {
log.warn("区域元数据未初始化");
return;
}
allRegions.forEach(w -> {
RegionMapKey key = RegionMapKey.of(w.getRegionCode(), w.getRegionLevel());
regionsCache.put(key, w);
});
}

protected RegionDTO get(RegionMapKey key) {
return regionsCache.get(key);
}

protected List<RegionDTO> all() {
return Lists.newArrayList(regionsCache.asMap().values());
}

@Override
public void afterPropertiesSet() {
regionsCache = Caffeine.newBuilder()
.refreshAfterWrite(7, TimeUnit.DAYS)
.maximumSize(512)
.build(key -> {
Region region = regionService.getOne(key.getRegionCode(), key.getRegionLevel());
Assert.notNull(region, "区域不存在:%s", key);
return RegionConverter.toRegionDTO(region);
});
// 初始化所有区域数据到缓存
initRegionCache();
}

}

+ 44
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/basic/AbstractRegionLimitHelper.java Parādīt failu

@@ -0,0 +1,44 @@
package com.ningdatech.pmapi.common.helper.basic;

import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.common.helper.RegionLimitHelper;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import lombok.AllArgsConstructor;

import java.util.Objects;

/**
* <p>
* AbstractRegionLimitHelper
* </p>
*
* @author WendyYang
* @since 14:35 2023/3/1
*/
@AllArgsConstructor
public abstract class AbstractRegionLimitHelper implements RegionLimitHelper {

protected final RegionCacheHelper regionCache;
protected final IExpertUserFullInfoService expertUserFullInfoService;


/**
* 根据 专家用户id 获取专家层级
*
* @param expertUserId /
* @return /
*/
protected ExpertRegionInfo getExpertRegionInfo(Long expertUserId) {
ExpertUserFullInfo userFullInfo = expertUserFullInfoService.getByUserId(expertUserId);
if (Objects.isNull(userFullInfo)) {
return new ExpertRegionInfo();
}
ExpertRegionInfo regionInfo = new ExpertRegionInfo();
regionInfo.setRegionCode(userFullInfo.getRegionCode());
regionInfo.setRegionLevel(userFullInfo.getRegionLevel());
return regionInfo;
}

}

+ 122
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/RegionLimitHelperImpl.java Parādīt failu

@@ -0,0 +1,122 @@
package com.ningdatech.pmapi.common.helper.impl;

import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.common.helper.basic.AbstractRegionLimitHelper;
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import com.ningdatech.pmapi.meta.model.bo.RegionContainsBO;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2022/8/1 下午2:27
*/
@Component
public class RegionLimitHelperImpl extends AbstractRegionLimitHelper {

private static final Logger logger = LoggerFactory.getLogger(RegionLimitHelperImpl.class);

public RegionLimitHelperImpl(RegionCacheHelper regionCache, IExpertUserFullInfoService expertUserFullInfoService) {
super(regionCache, expertUserFullInfoService);
}

public static Boolean contains(Integer adminRegionLevel, List<String> adminAllContainsRegionCodes
, Integer expertRegionLevel, String expertRegionCode) {
for (String adminAllContainsRegionCode : adminAllContainsRegionCodes) {
if (adminAllContainsRegionCode.equals(expertRegionCode) && adminRegionLevel >= expertRegionLevel) {
return true;
}
}
return false;
}

@Override
public Boolean regionContainsCheck(Long expertUserId, Long expertAdminUserId) {
List<RegionContainsBO> expertAdminContainsRegion = getExpertAdminContainsRegion(expertAdminUserId);
ExpertRegionInfo expertRegionInfo = getExpertRegionInfo(expertUserId);
return regionContains(expertAdminContainsRegion, expertRegionInfo.getRegionCode(), expertRegionInfo.getRegionLevel());
}

@Override
public Boolean regionContains(List<RegionContainsBO> regionContainsBOList, String regionCode, Integer regionLevel) {
for (RegionContainsBO regionContainsBO : regionContainsBOList) {
Integer parentRegionTreeLevel = regionContainsBO.getParentRegionTreeLevel();
List<String> containsRegionCodeList = regionContainsBO.getContainsRegionCodeList();
for (String containsRegionCode : containsRegionCodeList) {
if (containsRegionCode.equals(regionCode) && parentRegionTreeLevel <= regionLevel) {
return true;
}
}
}
return false;
}


@Override
public List<RegionContainsBO> queryContainsRegionAssembler(RegionContainsBO queryRegionContainBo, List<RegionContainsBO> expertAdminContainsRegionList) {
List<RegionContainsBO> resultBoList = new ArrayList<>();
if (Objects.nonNull(queryRegionContainBo)) {
resultBoList.add(queryRegionContainBo);
Integer parentRegionTreeLevel = queryRegionContainBo.getParentRegionTreeLevel();
List<String> containsRegionCodeList = queryRegionContainBo.getContainsRegionCodeList();

// 查询取并级
if (CollectionUtils.isNotEmpty(expertAdminContainsRegionList)) {
for (RegionContainsBO regionContainsBO : expertAdminContainsRegionList) {
regionContainsBO.setParentRegionTreeLevel(parentRegionTreeLevel);
List<String> regionCodeList = regionContainsBO.getContainsRegionCodeList();
regionCodeList = regionCodeList.stream().filter(containsRegionCodeList::contains).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(regionCodeList)) {
regionContainsBO.setContainsRegionCodeList(regionCodeList);
resultBoList.add(regionContainsBO);
}
}
}
return resultBoList;
} else {
return expertAdminContainsRegionList;
}
}

@Override
public RegionContainsBO getContainsRegionBo(Integer regionLevel, String regionCode) {
Collection<String> regionCodes = regionCache.listChildRegionCodeList(regionCode, regionLevel);
RegionContainsBO regionContains = new RegionContainsBO();
regionContains.setContainsRegionCodeList(new ArrayList<>(regionCodes));
regionContains.setParentRegionTreeLevel(regionLevel);
return regionContains;
}

@Override
public List<RegionContainsBO> getExpertAdminContainsRegion(Long expertAdminUserId) {
if (Objects.isNull(expertAdminUserId)) {
logger.error("getExpertAdminContainsRegion expertAdminUserId is null");
return new ArrayList<>();
}
// TODO
/*LambdaQueryWrapper<ExpertAdminRegion> expertAdminRegionEq = Wrappers.lambdaQuery(ExpertAdminRegion.class)
.eq(ExpertAdminRegion::getUserId, expertAdminUserId);
List<ExpertAdminRegion> expertAdminRegionList = iExpertAdminRegionService.list(expertAdminRegionEq);
List<RegionContainsBO> regionContainsBOList = new ArrayList<>();
for (ExpertAdminRegion expertAdminRegion : expertAdminRegionList) {
List<String> regionCodes = regionCacheHelper
.getAllChildrenRegionCodeList(expertAdminRegion.getRegionCode(), expertAdminRegion.getRegionLevel());
RegionContainsBO regionContainsBO = new RegionContainsBO();
regionContainsBO.setContainsRegionCodeList(regionCodes);
regionContainsBO.setParentRegionTreeLevel(expertAdminRegion.getRegionLevel());
regionContainsBOList.add(regionContainsBO);
}*/
return null;
}


}

+ 173
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/RegionsCacheHelperImpl.java Parādīt failu

@@ -0,0 +1,173 @@
package com.ningdatech.pmapi.common.helper.impl;

import cn.hutool.core.text.StrPool;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.constant.RegionConst;
import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.common.helper.basic.AbstractRegionCacheHelper;
import com.ningdatech.pmapi.common.model.RegionMapKey;
import com.ningdatech.pmapi.common.util.StrUtils;
import com.ningdatech.pmapi.sys.convert.RegionConverter;
import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import com.ningdatech.pmapi.sys.model.dto.RegionTreeDTO;
import com.ningdatech.pmapi.sys.model.vo.RegionTreeVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2022/7/22 上午8:58
* 构建地区码 地区树
*/
@Slf4j
@Component
public class RegionsCacheHelperImpl extends AbstractRegionCacheHelper implements RegionCacheHelper {

@Override
public RegionDTO getByCodeAndLevel(String code, int level) {
return super.get(RegionMapKey.of(code, level));
}

@Override
public String getRegionName(String code, int level) {
return getByCodeAndLevel(code, level).getRegionName();
}

@Override
public List<RegionDTO> all() {
return super.all();
}

@Override
public Collection<String> listChildRegionCodeList(String regionCode, int regionLevel) {
RegionDTO currRegion = getByCodeAndLevel(regionCode, regionLevel);
if (currRegion.getParentCode().equals(regionCode)) {
return Collections.singletonList(regionCode);
}
List<RegionDTO> allRegions = all();
return allRegions.stream().filter(w -> StrUtils.split(w.getRegionCodePath()).contains(regionCode))
.map(RegionDTO::getRegionCode).collect(Collectors.toSet());
}

@Override
public RegionTreeVO getRegionTree(String regionCode, Integer regionLevel) {
Map<Long, List<RegionDTO>> regions;
Long parentId;
if (regionCode == null || regionCode.equals(RegionConst.RC_CHINA)) {
regions = CollUtils.group(all(), RegionDTO::getParentId);
parentId = RegionConst.PID_CHINA;
} else {
RegionDTO currRegion = getByCodeAndLevel(regionCode, regionLevel);
if (currRegion.getParentCode().equals(regionCode)) {
return RegionConverter.toRegionTreeVO(currRegion);
}
regions = all().stream()
.filter(w -> StrUtils.split(w.getRegionCodePath()).contains(regionCode))
.collect(Collectors.groupingBy(RegionDTO::getParentId));
parentId = currRegion.getParentId();
}
regions.values().forEach(w -> w.sort(Comparator.comparing(x -> Long.parseLong(x.getRegionCode()))));
return RegionConverter.toRegionTree(parentId, regions, false).get(0);
}

@Override
public String getFullDisplayName(String regionCode, Integer regionLevel) {
RegionDTO regionCurr = getByCodeAndLevel(regionCode, regionLevel);
return getDisplayName(regionCurr, RegionConst.RL_PROVINCE);
}

@Override
public String getDisplayName(String regionCode, Integer regionLevel) {
RegionDTO regionCurr = getByCodeAndLevel(regionCode, regionLevel);
return getDisplayName(regionCurr, RegionConst.RL_CITY);
}

//------------------------------------------------------------------------------------------------------------------

/**
* 获取指定层级的展示名称
*
* @param region 当前区域
* @param sLevel 开始层级
* @return 展示名称
*/
private String getDisplayName(RegionDTO region, int sLevel) {
Integer level = region.getRegionLevel();
if (RegionConst.RL_PROVINCE > sLevel || sLevel > level) {
throw BizException.wrap("区域层级无效");
}
if (sLevel == level) {
return region.getRegionName();
}
StringBuilder builder = new StringBuilder();
List<String> regionCodes = StrUtils.split(region.getRegionCodePath());
for (int i = regionCodes.size() - 2; i > 0; i--) {
if (level <= sLevel) {
break;
}
RegionDTO tmp = getByCodeAndLevel(regionCodes.get(i), --level);
builder.insert(0, StrPool.SLASH);
builder.insert(0, tmp.getRegionName());
}
builder.append(region.getRegionName());
return builder.toString();
}

protected List<RegionTreeDTO> getCopyListByLevel(int level) {
List<RegionDTO> regions = all().stream()
.filter(w -> w.getRegionLevel() <= level)
.collect(Collectors.toList());
return RegionConverter.toRegionTreeDTOList(regions);
}

/**
* 获取某一个地区开始的层级树
*
* @param list 地区集合
* @param code 地区编码
* @param level 地区层级
* @return /
*/
private RegionTreeDTO getTreeByRegionAndCode(List<RegionTreeDTO> list, String code, int level) {
if (CollectionUtils.isEmpty(list)) {
list = getCopyListByLevel(3);
if (CollectionUtils.isEmpty(list)) {
return null;
}
}
Optional<RegionTreeDTO> first = list.stream()
.filter(w -> w.getRegionCode().equals(code) && w.getLevel() == level)
.findFirst();
if (first.isPresent()) {
return first.get();
}
for (RegionTreeDTO dto : list) {
if (CollectionUtils.isEmpty(dto.getChildren())) {
continue;
}
RegionTreeDTO temp = getTreeByRegionAndCode(dto.getChildren(), code, level);
if (temp != null) {
return temp;
}
}
return null;
}

@Override
public List<RegionDTO> listParents(String code, int level) {
List<RegionDTO> result = new ArrayList<>();
RegionDTO dto = getByCodeAndLevel(code, level);
result.add(0, dto);
if (RegionConst.RC_CHINA.equals(dto.getParentCode())) {
return result;
}
result.addAll(0, listParents(dto.getParentCode(), dto.getRegionLevel() - 1));
return result;
}

}

+ 7
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/UserInfoHelperImpl.java Parādīt failu

@@ -30,4 +30,11 @@ public class UserInfoHelperImpl implements UserInfoHelper {
UserFullInfoDTO userFullInfo = userAuthLoginManage.getUserFullInfo(userId);
return userFullInfo;
}

@Override
public String getUserName(Long userId) {
UserFullInfoDTO userFullInfo = userAuthLoginManage.getUserFullInfo(userId);
String realName = userFullInfo.getRealName();
return realName;
}
}

+ 22
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/model/CommonPageReq.java Parādīt failu

@@ -0,0 +1,22 @@
package com.ningdatech.pmapi.common.model;

import lombok.Data;

/**
* @author liuxinxin
* @date 2022/8/4 上午11:19
*/
@Data
public class CommonPageReq {
private static final long serialVersionUID = 1L;
private int pageSize;
private int pageNumber;

public int getOffset() {
return (this.getPageNumber() - 1) * this.getPageSize();
}

public int getLimit() {
return this.getPageSize();
}
}

+ 53
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/model/RegionMapKey.java Parādīt failu

@@ -0,0 +1,53 @@
package com.ningdatech.pmapi.common.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Tolerate;

import java.util.Objects;

/**
* <p>
* RegionMapKey
* </p>
*
* @author WendyYang
* @since 13:54 2023/3/1
*/
@Data
@AllArgsConstructor
public class RegionMapKey {

public static RegionMapKey of(String regionCode, int regionLevel) {
return new RegionMapKey(regionCode, regionLevel);
}

/**
* 区域码
*/
private String regionCode;

/**
* 地区级别
*/
private Integer regionLevel;

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
RegionMapKey regionMapKey = (RegionMapKey) o;
return regionCode.equals(regionMapKey.getRegionCode())
&& regionLevel.equals(regionMapKey.getRegionLevel());
}

@Override
public int hashCode() {
return Objects.hash(regionCode, regionLevel);
}
}

+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/action/ProjectDeclareAction.java Parādīt failu

@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.common.statemachine.action;

import com.ningdatech.pmapi.common.constant.StateMachineConstants;
import com.ningdatech.pmapi.common.constant.StateMachineConst;
import com.ningdatech.pmapi.common.statemachine.builder.ProjectDeclareStateMachineBuilder;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
@@ -23,7 +23,7 @@ import org.springframework.statemachine.annotation.WithStateMachine;
@WithStateMachine(id = ProjectDeclareStateMachineBuilder.MACHINEID_TO)
public class ProjectDeclareAction {

private static final String PROJECT_DECLARE = StateMachineConstants.PROJECT_DECLARE;
private static final String PROJECT_DECLARE = StateMachineConst.PROJECT_DECLARE;

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "PENDING_PREQUALIFICATION")
public void UNDER_INTERNAL_PASS(Message<ProjectStatusChangeEvent> message) {


+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/action/ProjectDeclareChoiceAction.java Parādīt failu

@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.common.statemachine.action;

import com.ningdatech.pmapi.common.constant.StateMachineConstants;
import com.ningdatech.pmapi.common.constant.StateMachineConst;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
@@ -18,7 +18,7 @@ import org.springframework.statemachine.action.Action;
@Slf4j
public class ProjectDeclareChoiceAction implements Action<ProjectStatusEnum, ProjectStatusChangeEvent> {

private static final String PROJECT_DECLARE = StateMachineConstants.PROJECT_DECLARE;
private static final String PROJECT_DECLARE = StateMachineConst.PROJECT_DECLARE;

@Override
public void execute(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> stateContext) {


+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/factory/ProjectDeclareGuardFactory.java Parādīt failu

@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.common.statemachine.factory;

import com.ningdatech.pmapi.common.constant.StateMachineConstants;
import com.ningdatech.pmapi.common.constant.StateMachineConst;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
@@ -16,7 +16,7 @@ import org.springframework.statemachine.guard.Guard;
*/

public class ProjectDeclareGuardFactory {
private static final String PROJECT_DECLARE = StateMachineConstants.PROJECT_DECLARE;
private static final String PROJECT_DECLARE = StateMachineConst.PROJECT_DECLARE;

public class PendingPreQualificationChoiceGuard implements Guard<ProjectStatusEnum, ProjectStatusChangeEvent> {
@Override


+ 7
- 7
pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/util/StateMachineUtils.java Parādīt failu

@@ -1,12 +1,12 @@
package com.ningdatech.pmapi.common.statemachine.util;

import com.ningdatech.basic.exception.BizException;
import com.ningdatech.pmapi.common.constant.ProjectDeclareConstants;
import com.ningdatech.pmapi.common.constant.StateMachineConstants;
import com.ningdatech.pmapi.common.constant.ProjectDeclareConst;
import com.ningdatech.pmapi.common.constant.StateMachineConst;
import com.ningdatech.pmapi.common.statemachine.builder.ProjectDeclareStateMachineBuilder;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService;
import lombok.RequiredArgsConstructor;
@@ -32,7 +32,7 @@ import java.util.Objects;
@RequiredArgsConstructor
public class StateMachineUtils {

private static final String PROJECT_DECLARE = StateMachineConstants.PROJECT_DECLARE;
private static final String PROJECT_DECLARE = StateMachineConst.PROJECT_DECLARE;

private final ProjectDeclareStateMachineBuilder projectDeclareStateMachineBuilder;

@@ -44,7 +44,7 @@ public class StateMachineUtils {
public void execute(Project project, ProjectStatusChangeEvent event) throws Exception {
log.info("调用状态机前的项目状态为>>>>>>>>>>{}" + project.getStatus());
// 将状态变更记录保存到项目状态变更表中
NdProjectStatusChange projectStatusChange = new NdProjectStatusChange();
ProjectStatusChange projectStatusChange = new ProjectStatusChange();
projectStatusChange.setBeforeStatus(project.getStatus());
//获取TO状态机
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = projectDeclareStateMachineBuilder.build();
@@ -70,7 +70,7 @@ public class StateMachineUtils {
* @since 2023/02/07 17:13
*/
public static boolean judgeDeclareAmount(Project project) {
int flag = project.getDeclareAmount().compareTo(ProjectDeclareConstants.Number.DECLARE_AMOUNT_JUDGEMENT);
int flag = project.getDeclareAmount().compareTo(ProjectDeclareConst.Number.DECLARE_AMOUNT_JUDGEMENT);
if (flag > 0 || flag == 0) {
return true;
}
@@ -87,7 +87,7 @@ public class StateMachineUtils {
*/
public static boolean isCityProject(Project project) {
String areaCode = project.getAreaCode();
if (areaCode.equals(StateMachineConstants.LI_SHUI_CITY_AREA_CODE)) {
if (areaCode.equals(StateMachineConst.LI_SHUI_CITY_AREA_CODE)) {
return true;
}
return false;


+ 26
- 17
pmapi/src/main/java/com/ningdatech/pmapi/common/util/SendWorkNoticeUtil.java Parādīt failu

@@ -4,8 +4,11 @@ import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.GenericResult;
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo;
import com.ningdatech.zwdd.client.ZwddClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.*;

/**
@@ -15,18 +18,22 @@ import java.util.concurrent.*;
* @since 2023/02/23 13:50
*/
@Slf4j
@RequiredArgsConstructor
@Component
public class SendWorkNoticeUtil {

private SendWorkNoticeUtil(){
private final ZwddClient zwddClient;

}
/**
* 初始化线程池
*/
public static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 10,
60, TimeUnit.SECONDS, new ArrayBlockingQueue(10), new ThreadPoolExecutor.AbortPolicy());

public static void sendWorkNotice(ZwddClient zwddClient, WorkNoticeInfo workNoticeInfo, String msg){
// 初始化线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20,
60, TimeUnit.SECONDS, new ArrayBlockingQueue(20), new ThreadPoolExecutor.AbortPolicy());
public Boolean sendWorkNotice(WorkNoticeInfo workNoticeInfo){

// 将发送工作通知交给异步任务Future
String msg = workNoticeInfo.getMsg();
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 调用浙政钉的接口发送工作通知
long startTime = System.currentTimeMillis();
@@ -41,17 +48,19 @@ public class SendWorkNoticeUtil {
return "发送工作通知失败!";
}
return "发送工作通知成功!";
}, threadPool);
String s;
try {
s = future.get();
} catch (Exception e) {
throw new BizException("获取异步线程处理结果失败!");
}
threadPool.shutdown();
while (threadPool.isTerminated()) {
}, threadPool);
String s;
try {
s = future.get();
} catch (Exception e) {
throw new BizException("获取异步线程处理结果失败!");
}
threadPool.shutdown();
while (!threadPool.isTerminated()) {
log.info(s);
return Boolean.FALSE;
}
log.info(s);
break;
}
return Boolean.TRUE;
}
}

+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/ExpertUserInfoAssembler.java Parādīt failu

@@ -20,7 +20,7 @@ package com.ningdatech.pmapi.expert.assembler;

import com.alibaba.fastjson.JSONObject;
import com.ningdatech.file.entity.vo.result.AttachFileVo;
import com.ningdatech.pmapi.common.constant.BoolDisplayEnum;
import com.ningdatech.pmapi.common.enumeration.BoolDisplayEnum;
import com.ningdatech.pmapi.expert.constant.ExpertApplyTypeEnum;
import com.ningdatech.pmapi.expert.entity.ExpertAvoidCompany;
import com.ningdatech.pmapi.expert.entity.ExpertIntentionWorkRegion;


+ 39
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/RegionWrapperAssembler.java Parādīt failu

@@ -0,0 +1,39 @@
package com.ningdatech.pmapi.expert.assembler;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.ningdatech.pmapi.expert.entity.ExpertMetaApply;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.meta.model.bo.RegionContainsBO;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/10 下午5:36
*/

public class RegionWrapperAssembler {

public static void expertUserFullInfoRegionContainsWrapperAssembler(LambdaQueryWrapper<ExpertUserFullInfo> wrapperQuery, List<RegionContainsBO> containsRegionList) {
for (RegionContainsBO regionContainsBO : containsRegionList) {
List<String> containsRegionCodeList = regionContainsBO.getContainsRegionCodeList();
Integer parentRegionTreeLevel = regionContainsBO.getParentRegionTreeLevel();
if (CollectionUtils.isNotEmpty(containsRegionCodeList)) {
wrapperQuery.and(wrapper -> wrapper.in(ExpertUserFullInfo::getRegionCode, containsRegionCodeList)
.ge(ExpertUserFullInfo::getRegionLevel, parentRegionTreeLevel));
}
}
}

public static void expertMetaApplyRegionContainsWrapperAssembler(LambdaQueryWrapper<ExpertMetaApply> wrapperQuery, List<RegionContainsBO> containsRegionList) {
for (RegionContainsBO regionContainsBO : containsRegionList) {
List<String> containsRegionCodeList = regionContainsBO.getContainsRegionCodeList();
Integer parentRegionTreeLevel = regionContainsBO.getParentRegionTreeLevel();
if (CollectionUtils.isNotEmpty(containsRegionCodeList)) {
wrapperQuery.and(wrapper -> wrapper.in(ExpertMetaApply::getRegionCode, containsRegionCodeList)
.ge(ExpertMetaApply::getRegionLevel, parentRegionTreeLevel));
}
}
}
}

+ 50
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/constant/ExpertApplyTypeQueryEnum.java Parādīt failu

@@ -0,0 +1,50 @@
package com.ningdatech.pmapi.expert.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

/**
* @author liuxinxin
* @date 2022/7/26 下午1:40
* 专家 申请类型用于前端筛选时入参展示
*/
@AllArgsConstructor
@Getter
public enum ExpertApplyTypeQueryEnum {

// 专家入库
EXPERT_STORAGE("expert_storage"),
// 专家出库
EXPERT_DELIVERY("expert_delivery"),
// 专家履职意变更
EXPERT_INTENTION_CHANGE("expert_intention_change"),
// 长期请假申请
LONG_TERM_LEAVE("long_term_leave"),
// 专家信息修改申请
EXPERT_INFO_MODIFY("expert_info_modify");

private final String key;

public static boolean contains(String key) {
if (StringUtils.isBlank(key)) {
return false;
}
for (ExpertApplyTypeQueryEnum typeEnum : ExpertApplyTypeQueryEnum.values()) {
if (typeEnum.key.equals(key)) {
return true;
}
}
return false;
}

public static ExpertApplyTypeQueryEnum of(String key) {
for (ExpertApplyTypeQueryEnum typeEnum : ExpertApplyTypeQueryEnum.values()) {
if (typeEnum.key.equals(key)) {
return typeEnum;
}
}
throw new IllegalArgumentException(String.format("ExpertApplyTypeQueryEnum = %s", key));
}

}

+ 49
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/constant/QueryExpertAccountStatusEnum.java Parādīt failu

@@ -0,0 +1,49 @@
package com.ningdatech.pmapi.expert.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

/**
* @author liuxinxin
* @date 2022/8/4 上午11:14
*/
@AllArgsConstructor
@Getter
public enum QueryExpertAccountStatusEnum {


/**
* 冻结中
*/
FREEZING("freezing"),

/**
* 正常
*/
NORMAL("normal");

private final String key;

public static boolean contains(String key) {
if (StringUtils.isBlank(key)) {
return false;
}
for (QueryExpertAccountStatusEnum statusEnum : QueryExpertAccountStatusEnum.values()) {
if (statusEnum.key.equals(key)) {
return true;
}
}
return false;
}


public static QueryExpertAccountStatusEnum of(String key) {
for (QueryExpertAccountStatusEnum statusEnum : QueryExpertAccountStatusEnum.values()) {
if (statusEnum.key.equals(key)) {
return statusEnum;
}
}
throw new IllegalArgumentException(String.format("Illegal QueryExpertAccountStatusEnum = %s", key));
}
}

+ 11
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/controller/ExpertController.java Parādīt failu

@@ -1,9 +1,13 @@
package com.ningdatech.pmapi.expert.controller;


import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.expert.manage.ExpertAdminManage;
import com.ningdatech.pmapi.expert.manage.ExpertManage;
import com.ningdatech.pmapi.expert.model.ExpertAdminExpertManageQuery;
import com.ningdatech.pmapi.expert.model.req.ExpertRecommendProofSubmitRequest;
import com.ningdatech.pmapi.expert.model.req.ExpertUserBasicInfoSubmitRequest;
import com.ningdatech.pmapi.expert.model.vo.ExpertAdminExpertManageListVO;
import com.ningdatech.pmapi.expert.model.vo.ExpertFullInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -27,6 +31,7 @@ import javax.validation.Valid;
public class ExpertController {

private final ExpertManage expertManage;
private final ExpertAdminManage expertAdminManage;

@PostMapping("/basic-info-submit")
@ApiOperation("填写基本信息接口(专家报名使用))")
@@ -47,5 +52,11 @@ public class ExpertController {
return expertManage.getExpertFullInfoDetail(null);
}

@PostMapping("/expert-library/list")
@ApiOperation("专家库列表查询接口")
public PageVo<ExpertAdminExpertManageListVO> getExpertLibraryList(
@RequestBody @Valid ExpertAdminExpertManageQuery expertAdminExpertManageQuery) {
return expertAdminManage.getExpertLibraryList(expertAdminExpertManageQuery);
}

}

+ 41
- 4
pmapi/src/main/java/com/ningdatech/pmapi/expert/controller/ExpertMetaApplyController.java Parādīt failu

@@ -1,10 +1,19 @@
package com.ningdatech.pmapi.expert.controller;


import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.expert.manage.ExpertMetaApplyManage;
import com.ningdatech.pmapi.expert.model.cmd.MetaApplyListQuery;
import com.ningdatech.pmapi.expert.model.req.MetaApplyResultRequest;
import com.ningdatech.pmapi.expert.model.vo.ExpertApplyMetaVO;
import com.ningdatech.pmapi.expert.model.vo.MetaApplyResultVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
* <p>
@@ -15,10 +24,38 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2023-03-01
*/
@RestController
@Api(tags = "专家相关审核")
@RequestMapping("/api/v1/expert-meta-apply")
@RequestMapping("/api/v1/apply/meta/")
@Validated
@RequiredArgsConstructor
@Api(value = "ExpertMetaApplyController", tags = "专家申请管理相关接口")
public class ExpertMetaApplyController {

private final ExpertMetaApplyManage expertMetaApplyManage;

@PostMapping("/list")
@ApiOperation(value = "审核列表筛选")
public PageVo<ExpertApplyMetaVO> metaApplyListQuery(@RequestBody @Valid MetaApplyListQuery metaApplyListQuery) {
// ExpertMetaApplyValidator.metaApplyListQueryValidate(metaApplyListQuery);
return expertMetaApplyManage.metaApplyListQuery(metaApplyListQuery);
}

@PostMapping("/result")
@ApiOperation(value = "审核结果处理")
public void metaApplyResult(@RequestBody @Valid MetaApplyResultRequest applyResultRequest) {
expertMetaApplyManage.metaApplyResult(applyResultRequest);
}

@PostMapping("/revoke/{applyId}")
@ApiOperation(value = "申请撤销")
public void metaApplyRevoke(@PathVariable Long applyId) {
expertMetaApplyManage.metaApplyRevoke(applyId);
}

@ApiOperation("申请审核详情")
@GetMapping("/detail/{applyId}")
public MetaApplyResultVo applyAuditDetail(@PathVariable Long applyId) {
return expertMetaApplyManage.metaApplyResult(applyId);
}


}

+ 142
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertAdminManage.java Parādīt failu

@@ -0,0 +1,142 @@
package com.ningdatech.pmapi.expert.manage;

import cn.hutool.core.collection.CollectionUtil;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.common.helper.RegionLimitHelper;
import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.constant.QueryExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.helper.PermissionCheckHelper;
import com.ningdatech.pmapi.expert.model.ExpertAdminExpertManageQuery;
import com.ningdatech.pmapi.expert.model.cmd.ExpertAdminExpertManageQueryCmd;
import com.ningdatech.pmapi.expert.model.query.ExpertDictionaryQuery;
import com.ningdatech.pmapi.expert.model.query.ExpertTagQuery;
import com.ningdatech.pmapi.expert.model.vo.ExpertAdminExpertManageListVO;
import com.ningdatech.pmapi.meta.constant.DictExpertInfoTypeEnum;
import com.ningdatech.pmapi.meta.constant.ExpertTagEnum;
import com.ningdatech.pmapi.meta.model.bo.RegionContainsBO;
import com.ningdatech.pmapi.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
* @author liuxinxin
* @date 2023/3/1 下午2:12
*/

@Component
@RequiredArgsConstructor
public class ExpertAdminManage {

private final PermissionCheckHelper permissionCheckHelper;
private final RegionLimitHelper regionLimitHelper;

/**
* 专家管理员使用 专家库列表查询
*
* @param query
* @return
*/
public PageVo<ExpertAdminExpertManageListVO> getExpertLibraryList(ExpertAdminExpertManageQuery query) {
Long userId = LoginUserUtil.getUserId();
ExpertAdminExpertManageQueryCmd expertAdminExpertManageQueryCmd = buildExpertAdminExpertManageQueryCmd(query, userId);
// CommonPage<ExpertAdminExpertManageListDTO> pageResult =
// expertAdminManageService.getExpertLibraryList(expertAdminExpertManageQueryCmd);
//
// PageVo<ExpertAdminExpertManageListVO> pageVo = new PageVo<>();
// pageVo.setTotal(pageResult.getItemsTotal());
// pageVo.setRecords(expertAdminExpertManageAssembler.toExpertAdminExpertManageListVOList(pageResult.getItems()));
// return pageVo;
return null;
}


private ExpertAdminExpertManageQueryCmd buildExpertAdminExpertManageQueryCmd(ExpertAdminExpertManageQuery query, Long userId) {
ExpertAdminExpertManageQueryCmd expertAdminExpertManageQueryCmd = new ExpertAdminExpertManageQueryCmd();
expertAdminExpertManageQueryCmd.setPageNumber(query.getPageNumber());
expertAdminExpertManageQueryCmd.setPageSize(query.getPageSize());
if (StringUtils.isNotBlank(query.getExpertName())) {
expertAdminExpertManageQueryCmd.setExpertName(query.getExpertName());
}
if (StringUtils.isNotBlank(query.getCompany())) {
expertAdminExpertManageQueryCmd.setCompany(query.getCompany());
}
List<ExpertDictionaryQuery> expertDictionaryQueryList = new ArrayList<>();
if (StringUtils.isNotBlank(query.getTitleLevelDictionaryCode())) {
ExpertDictionaryQuery expertDictionaryQuery = new ExpertDictionaryQuery();
expertDictionaryQuery.setExpertInfoField(DictExpertInfoTypeEnum.TITLE_LEVEL.getKey());
expertDictionaryQuery.setDictionaryCodeList(CollectionUtil.toList(query.getTitleLevelDictionaryCode()));
expertDictionaryQueryList.add(expertDictionaryQuery);
}
if (StringUtils.isNotBlank(query.getCompanyAttributeDictionaryCode())) {
ExpertDictionaryQuery expertDictionaryQuery = new ExpertDictionaryQuery();
expertDictionaryQuery.setExpertInfoField(DictExpertInfoTypeEnum.COMPANY_ATTRIBUTE.getKey());
expertDictionaryQuery.setDictionaryCodeList(CollectionUtil.toList(query.getCompanyAttributeDictionaryCode()));
expertDictionaryQueryList.add(expertDictionaryQuery);
}
if (StringUtils.isNotBlank(query.getExpertTypeDictionaryCode())) {
ExpertDictionaryQuery expertDictionaryQuery = new ExpertDictionaryQuery();
expertDictionaryQuery.setExpertInfoField(DictExpertInfoTypeEnum.EXPERT_TYPE.getKey());
expertDictionaryQuery.setDictionaryCodeList(CollectionUtil.toList(query.getExpertTypeDictionaryCode()));
expertDictionaryQueryList.add(expertDictionaryQuery);
}
List<ExpertTagQuery> expertTagQueryList = new ArrayList<>();
if (StringUtils.isNotBlank(query.getExpertSourceTagCode())) {
ExpertTagQuery expertTagQuery = new ExpertTagQuery();
expertTagQuery.setExpertInfoField(ExpertTagEnum.EXPERT_SOURCE.getKey());
expertTagQuery.setTagCodeList(CollectionUtil.toList(query.getExpertSourceTagCode()));
expertTagQueryList.add(expertTagQuery);
}
if (StringUtils.isNotBlank(query.getGoodAtTagCode())) {
ExpertTagQuery expertTagQuery = new ExpertTagQuery();
expertTagQuery.setExpertInfoField(ExpertTagEnum.GOOD_AT.getKey());
expertTagQuery.setTagCodeList(CollectionUtil.toList(query.getGoodAtTagCode()));
expertTagQueryList.add(expertTagQuery);
}
if (StringUtils.isNotBlank(query.getExpertAccountStatus())) {
QueryExpertAccountStatusEnum queryExpertAccountStatusEnum = QueryExpertAccountStatusEnum.of(query.getExpertAccountStatus());
switch (queryExpertAccountStatusEnum) {
case NORMAL:
expertAdminExpertManageQueryCmd
.setExpertAccountStatusList(CollectionUtil.toList(ExpertAccountStatusEnum.AVAILABLE));
break;
case FREEZING:
expertAdminExpertManageQueryCmd
.setExpertAccountStatusList(CollectionUtil.toList(ExpertAccountStatusEnum.FREEZE));
break;
default:
break;
}
} else {
expertAdminExpertManageQueryCmd
.setExpertAccountStatusList(CollectionUtil.toList(ExpertAccountStatusEnum.AVAILABLE, ExpertAccountStatusEnum.FREEZE));
}

List<RegionContainsBO> expertAdminContainsRegionList = new ArrayList<>();

// 如果为超级管理员,可以查看所有的专家,包括没有层级的专家
if (!permissionCheckHelper.isSuperAdmin()) {
expertAdminContainsRegionList = regionLimitHelper.getExpertAdminContainsRegion(userId);
}
List<RegionContainsBO> containsRegion = new ArrayList<>();
if (Objects.nonNull(query.getExpertRegionInfo())) {
RegionContainsBO containsRegionBo = regionLimitHelper.getContainsRegionBo(query.getExpertRegionInfo().getRegionLevel()
, query.getExpertRegionInfo().getRegionCode());
containsRegion = regionLimitHelper.queryContainsRegionAssembler(containsRegionBo, expertAdminContainsRegionList);
} else {
containsRegion = expertAdminContainsRegionList;
}
expertAdminExpertManageQueryCmd.setExpertDictionaryQueryList(expertDictionaryQueryList);
expertAdminExpertManageQueryCmd.setExpertTagQueryList(expertTagQueryList);
expertAdminExpertManageQueryCmd.setIsDingUser(query.getIsDingUser());
expertAdminExpertManageQueryCmd.setRegionContainsList(containsRegion);
expertAdminExpertManageQueryCmd.setPageSize(query.getPageSize());
expertAdminExpertManageQueryCmd.setPageNumber(query.getPageNumber());
return expertAdminExpertManageQueryCmd;
}

}

+ 533
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertMetaApplyManage.java Parādīt failu

@@ -0,0 +1,533 @@
package com.ningdatech.pmapi.expert.manage;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.enumeration.BoolDisplayEnum;
import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.common.helper.RegionLimitHelper;
import com.ningdatech.pmapi.common.helper.UserInfoHelper;
import com.ningdatech.pmapi.common.util.BizUtils;
import com.ningdatech.pmapi.expert.assembler.RegionWrapperAssembler;
import com.ningdatech.pmapi.expert.constant.ExpertApplyStatusEnum;
import com.ningdatech.pmapi.expert.constant.ExpertApplyTypeEnum;
import com.ningdatech.pmapi.expert.constant.ExpertApplyTypeQueryEnum;
import com.ningdatech.pmapi.expert.entity.ExpertMetaApply;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.expert.model.DictionaryFieldInfo;
import com.ningdatech.pmapi.expert.model.TagFieldInfo;
import com.ningdatech.pmapi.expert.model.cmd.ExpertAdminExpertManageQueryCmd;
import com.ningdatech.pmapi.expert.model.cmd.ExpertStorageDealCmd;
import com.ningdatech.pmapi.expert.model.cmd.MetaApplyListQuery;
import com.ningdatech.pmapi.expert.model.dto.ExpertDictionaryDTO;
import com.ningdatech.pmapi.expert.model.dto.ExpertTagDTO;
import com.ningdatech.pmapi.expert.model.query.ExpertDictionaryQuery;
import com.ningdatech.pmapi.expert.model.req.MetaApplyResultRequest;
import com.ningdatech.pmapi.expert.model.vo.ExpertApplyMetaVO;
import com.ningdatech.pmapi.expert.model.vo.MetaApplyResultVo;
import com.ningdatech.pmapi.expert.service.ExpertInfoService;
import com.ningdatech.pmapi.expert.service.IExpertMetaApplyService;
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
import com.ningdatech.pmapi.meta.constant.DictExpertInfoTypeEnum;
import com.ningdatech.pmapi.meta.helper.DictionaryCache;
import com.ningdatech.pmapi.meta.helper.ExpertUserInfoHelper;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import com.ningdatech.pmapi.meta.model.bo.RegionContainsBO;
import com.ningdatech.pmapi.meta.model.dto.DictionaryDTO;
import com.ningdatech.pmapi.meta.model.entity.ExpertDictionary;
import com.ningdatech.pmapi.meta.service.IExpertDictionaryService;
import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import com.ningdatech.pmapi.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2023/3/1 上午10:38
*/

@Component
@RequiredArgsConstructor
public class ExpertMetaApplyManage {

private final IExpertMetaApplyService iMetaApplyService;
private final IExpertDictionaryService expertDictionaryService;

// private final IExpertAdminManageService ExpertAdminManageService;
private final RegionCacheHelper regionCacheHelper;
private final IExpertUserFullInfoService userFullInfoService;
private final DictionaryCache dictionaryCache;

private final ExpertInfoService expertInfoService;

private final UserInfoHelper userInfoHelper;

private final RegionLimitHelper regionLimitHelper;

private final ExpertUserInfoHelper expertUserInfoHelper;


public PageVo<ExpertApplyMetaVO> metaApplyListQuery(MetaApplyListQuery req) {
Long expertAdminUserId = LoginUserUtil.getUserId();
// 查找符合专家条件的用户id
List<RegionContainsBO> viewRegions = regionLimitHelper.getExpertAdminContainsRegion(expertAdminUserId);
ExpertAdminExpertManageQueryCmd queryCmd = buildExpertAdminExpertManageQueryCmd(req, viewRegions);
// TODO
// List<Long> filterExpertUserIdList = expertAdminManageService.filterExpertUserIdList(queryCmd);
List<Long> filterExpertUserIdList = new ArrayList<>();
if (CollUtil.isEmpty(filterExpertUserIdList)) {
return PageVo.empty();
}

LambdaQueryWrapper<ExpertMetaApply> expertMetaApplyListQuery =
buildMetaApplyListQueryWrapper(req, filterExpertUserIdList, viewRegions);

RegionWrapperAssembler.expertMetaApplyRegionContainsWrapperAssembler(expertMetaApplyListQuery, viewRegions);
Page<ExpertMetaApply> pageResult = iMetaApplyService.page(req.page(), expertMetaApplyListQuery);
PageVo<ExpertApplyMetaVO> result = new PageVo<>();
result.setTotal(pageResult.getTotal());
BizUtils.notEmpty(pageResult.getRecords(), records -> {
List<Long> expertIds = CollUtils.fieldList(records, ExpertMetaApply::getUserId);
// 根据用户id 获取专家基本信息
List<ExpertUserFullInfo> expertList = userFullInfoService.listByUserIds(expertIds);
Map<Long, ExpertUserFullInfo> expertMap = CollUtils.listToMap(expertList, ExpertUserFullInfo::getUserId);
List<ExpertDictionary> expertDictList = expertDictionaryService.listByUserId(expertIds, DictExpertInfoTypeEnum.TITLE_LEVEL);
Map<Long, List<ExpertDictionary>> dictMap = CollUtils.group(expertDictList, ExpertDictionary::getUserId);
result.setRecords(buildExpertApplyMetaVOList(records, expertMap, dictMap));
});
return result;
}

@Transactional(rollbackFor = Exception.class)
public void metaApplyResult(MetaApplyResultRequest req) {
Long applyId = req.getApplyId();
ExpertMetaApply expertMetaApply = iMetaApplyService.getById(applyId);
Long userId = LoginUserUtil.getUserId();

// 校验专家管理员区域权限,是否可以审核当前专家申请
// permissionCheckHelper.operationPermissionsCheck(userId, expertMetaApply.getUserId());
String applyStatus = expertMetaApply.getApplyStatus();
if (!ExpertApplyStatusEnum.PENDING_REVIEW.getKey().equals(applyStatus)) {
throw BizException.wrap("apply is already processed");
}
ExpertApplyTypeEnum applyType = ExpertApplyTypeEnum.of(expertMetaApply.getApplyType());
boolean applyResult = req.getApplyResult();

switch (applyType) {
// 专家入库
case EXPERT_STORAGE: {
ExpertStorageDealCmd expertStorageDealCmd = buildExpertStorageDealCmd(req, expertMetaApply.getUserId(), expertMetaApply);
expertInfoService.expertStorageDeal(expertStorageDealCmd);
// 专家入库时,需要先审核专家入库,入库成功后,再履职意向审核,如果履职意向跟专家层级是同一层级的,就直接同意不需要审核
if (applyResult) {
Long expertUserId = expertMetaApply.getUserId();
ExpertRegionInfo expertRegionInfo = expertUserInfoHelper.getExpertRegionInfo(expertUserId);
Integer regionLevel = expertRegionInfo.getRegionLevel();
String regionCode = expertRegionInfo.getRegionCode();

List<ExpertMetaApply> expertJoinApplyList = iMetaApplyService.list(Wrappers.lambdaQuery(ExpertMetaApply.class)
.eq(ExpertMetaApply::getUserId, expertUserId)
.eq(ExpertMetaApply::getApplyStatus, ExpertApplyStatusEnum.PENDING_REVIEW.getKey())
.eq(ExpertMetaApply::getApplyType, ExpertApplyTypeEnum.EXPERT_INTENTION_JOIN.getKey())
.eq(ExpertMetaApply::getDisplayEnable, BoolDisplayEnum.Y.name())
.eq(ExpertMetaApply::getRegionLevel, regionLevel)
.eq(ExpertMetaApply::getRegionCode, regionCode));
BizUtils.notEmpty(expertJoinApplyList, list -> list.forEach(r -> {
MetaApplyResultRequest resultRequest = new MetaApplyResultRequest();
resultRequest.setApplyId(r.getId());
resultRequest.setApplyResult(true);
resultRequest.setAuditOpinion("同意");
metaApplyResult(resultRequest);
}));
}
}
break;
// 专家出库
case EXPERT_DELIVERY:
// ExpertDeliveryDealCmd expertDeliveryDealCmd = buildExpertDeliveryDealCmd(req, expertMetaApply.getUserId());
// expertInfoService.expertDeliveryDeal(expertDeliveryDealCmd);
break;
// 长期请假
case LONG_TERM_LEAVE:
// leaveManage.leaveAuditCallback(req.getApplyResult(), applyId);
break;
// 专家信息审核
case EXPERT_INFO_MODIFY:
// ExpertInfoModifyApplyDealCmd applyDealCmd = buildExpertInfoModifyApplyDealCmd(req, expertMetaApply.getUserId(), applyId);
// expertInfoService.expertInfoModifyDeal(applyDealCmd);
break;
// 专家履职意向加入/离开
case EXPERT_INTENTION_JOIN:
case EXPERT_INTENTION_LEAVE:
// ExpertIntentionApplyDealCmd expertIntentionApplyDealCmd = buildExpertIntentionApplyDealCmd(req, expertMetaApply);
// expertInfoService.expertIntentionApplyDeal(expertIntentionApplyDealCmd);
break;
default:
break;
}

Long expertUserId = expertMetaApply.getUserId();
String auditOpinion = req.getAuditOpinion();
// 发送审核结果短信
// sendApplyResultNotify(applyType, applyResult, auditOpinion, expertUserId);
// 更新申请结果
expertMetaApply.setApproverUserId(userId);
String adminUserName = userInfoHelper.getUserName(userId);
expertMetaApply.setApprover(adminUserName);
expertMetaApply.setAuditOpinion(auditOpinion);
expertMetaApply.setApplyStatus(applyResult ? ExpertApplyStatusEnum.PASSED.getKey() : ExpertApplyStatusEnum.REFUSED.getKey());
expertMetaApply.setReviewTime(LocalDateTime.now());
expertMetaApply.setUpdateOn(LocalDateTime.now());
iMetaApplyService.saveOrUpdate(expertMetaApply);
}

public MetaApplyResultVo metaApplyResult(Long applyId) {
ExpertMetaApply metaApply = iMetaApplyService.getById(applyId);
if (Objects.isNull(metaApply)) {
throw BizException.wrap("当前审核不存在");
}
MetaApplyResultVo metaApplyResultVo = MetaApplyResultVo.builder()
.applyTime(metaApply.getCreateOn())
.auditor(metaApply.getApprover())
.expertUserId(metaApply.getUserId())
.auditOption(metaApply.getAuditOpinion())
.auditStatus(metaApply.getApplyStatus())
.auditTime(metaApply.getReviewTime())
.build();
String extraMaterialStr = metaApply.getExtraMaterial();
// if (StringUtils.isNotBlank(extraMaterialStr)) {
// ExtraMaterialDO extraMaterialDO = JSONObject.parseObject(extraMaterialStr, ExtraMaterialDO.class);
// ModifyApplyExtraInfo modifyApplyExtraInfo = new ModifyApplyExtraInfo();
// BizUtils.notEmpty(extraMaterialDO.getEvidenceList(), list -> {
// List<Long> fileIdList = CollUtils.fieldList(list, FileBasicInfo::getFileId);
// List<AttachFileVo> attachFiles = fileService.getByIds(fileIdList);
// List<FileBasicInfo> tempList = attachFiles.stream().map(r -> {
// FileBasicInfo fileBasicInfo = new FileBasicInfo();
// fileBasicInfo.setFileId(r.getFileId());
// fileBasicInfo.setFileName(r.getOriginalFileName());
// return fileBasicInfo;
// }).collect(Collectors.toList());
// modifyApplyExtraInfo.setEvidenceList(tempList);
// });
// modifyApplyExtraInfo.setFactSheet(extraMaterialDO.getFactSheet());
// metaApplyResultVo.setModifyApplyExtraInfo(modifyApplyExtraInfo);
// }
String applyType = metaApply.getApplyType();
ExpertApplyTypeEnum applyTypeEnum = ExpertApplyTypeEnum.of(applyType);
switch (applyTypeEnum) {
// case EXPERT_INFO_MODIFY:
// buildInfoModifyApplyDisplayVO(metaApplyResultVo, metaApply);
// break;
case EXPERT_INTENTION_JOIN:
case EXPERT_INTENTION_LEAVE:
buildIntentionApplyDisplayVO(metaApplyResultVo, metaApply, applyTypeEnum);
break;
case EXPERT_DELIVERY:
case LONG_TERM_LEAVE:
case EXPERT_STORAGE:
default:
break;
}
metaApplyResultVo.setApplyType(applyTypeTrans(applyTypeEnum));
return metaApplyResultVo;
}


public void metaApplyRevoke(Long applyId) {
Long userId = LoginUserUtil.getUserId();
ExpertMetaApply expertMetaApply = iMetaApplyService.getById(applyId);
if (Objects.isNull(expertMetaApply)) {
throw new BizException("apply not exist");
}
if (!expertMetaApply.getUserId().equals(userId)) {
throw new BizException("has not right to operate");
}
String applyStatus = expertMetaApply.getApplyStatus();
ExpertApplyStatusEnum expertApplyStatusEnum = ExpertApplyStatusEnum.of(applyStatus);
if (!ExpertApplyStatusEnum.PENDING_REVIEW.equals(expertApplyStatusEnum)) {
throw new BizException("apply is already deal");
}
expertMetaApply.setApplyStatus(ExpertApplyStatusEnum.REVOKED.getKey());
expertMetaApply.setUpdateOn(LocalDateTime.now());
iMetaApplyService.updateById(expertMetaApply);
}


private void buildIntentionApplyDisplayVO(MetaApplyResultVo metaApplyResultVo, ExpertMetaApply metaApply, ExpertApplyTypeEnum applyTypeEnum) {
String regionCode = metaApply.getRegionCode();
Integer regionLevel = metaApply.getRegionLevel();
// String unionPathStr = regionCache.getUnionPathStr(regionCode, regionLevel);
MetaApplyResultVo.IntentionApplyDisplayVO intentionApplyDisplayVO = new MetaApplyResultVo.IntentionApplyDisplayVO();
intentionApplyDisplayVO.setExpertApplyId(metaApply.getId());
ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo();
expertRegionInfo.setRegionCode(regionCode);
expertRegionInfo.setRegionLevel(regionLevel);
// expertRegionInfo.setRegionName(unionPathStr);
switch (applyTypeEnum) {
case EXPERT_INTENTION_LEAVE: {
intentionApplyDisplayVO.setReduceExpertRegion(expertRegionInfo);
}
break;
case EXPERT_INTENTION_JOIN: {
intentionApplyDisplayVO.setAddExpertRegion(expertRegionInfo);
}
break;
default:
break;
}
metaApplyResultVo.setIntentionApplyDisplayVo(intentionApplyDisplayVO);
}

// private void buildInfoModifyApplyDisplayVO(MetaApplyResultVo metaApplyResultVo, ExpertMetaApply infoModifyApply) {
// InfoModifyApplyDisplayVO infoModifyApplyDisplayVo = new InfoModifyApplyDisplayVO();
// if (Objects.nonNull(infoModifyApply)) {
// Long metaApplyId = infoModifyApply.getId();
// LambdaQueryWrapper<ExpertSensitiveInfoModifyDetailRecord> eq = Wrappers.lambdaQuery(ExpertSensitiveInfoModifyDetailRecord.class)
// .eq(ExpertSensitiveInfoModifyDetailRecord::getMetaApplyId, metaApplyId);
// ExpertSensitiveInfoModifyDetailRecord one = iExpertSensitiveInfoModifyDetailRecordService.getOne(eq);
// String originalJson = null;
// if (StringUtils.isNotBlank(one.getOriginalJson())) {
// originalJson = GzipUtils.uncompress(one.getOriginalJson());
// }
// List<SensitiveModifySegment> sensitiveModifySegments = JSONUtils.parseArray(originalJson, SensitiveModifySegment.class);
//
// infoModifyApplyDisplayVo.setExpertApplyId(metaApplyId);
// List<InfoModifyApplyDisplayVO.InfoModifyApplyDisplayValue> displayValueList = new ArrayList<>();
// for (SensitiveModifySegment segment : sensitiveModifySegments) {
// InfoModifyApplyDisplayVO.InfoModifyApplyDisplayValue displayValue = sensitiveModifySegmentParser.getDisplayValue(segment);
// displayValueList.add(displayValue);
// }
// infoModifyApplyDisplayVo.setInfoModifyApplyDisplayValueList(displayValueList);
// metaApplyResultVo.setInfoModifyApplyDisplayVo(infoModifyApplyDisplayVo);
// }
// }

private String applyTypeTrans(ExpertApplyTypeEnum applyTypeEnum) {
switch (applyTypeEnum) {
case EXPERT_INTENTION_JOIN:
case EXPERT_INTENTION_LEAVE: {
return ExpertApplyTypeQueryEnum.EXPERT_INTENTION_CHANGE.getKey();
}
case EXPERT_INFO_MODIFY: {
return ExpertApplyTypeQueryEnum.EXPERT_INFO_MODIFY.getKey();
}
case LONG_TERM_LEAVE: {
return ExpertApplyTypeQueryEnum.LONG_TERM_LEAVE.getKey();
}
case EXPERT_DELIVERY: {
return ExpertApplyTypeQueryEnum.EXPERT_DELIVERY.getKey();
}
case EXPERT_STORAGE: {
return ExpertApplyTypeQueryEnum.EXPERT_STORAGE.getKey();
}
default:
return null;
}
}

private List<String> applyTypeTrans(ExpertApplyTypeQueryEnum applyTypeQueryEnum) {
List<String> applyTypeList = new ArrayList<>();
switch (applyTypeQueryEnum) {
case EXPERT_INTENTION_CHANGE: {
applyTypeList.add(ExpertApplyTypeEnum.EXPERT_INTENTION_JOIN.getKey());
applyTypeList.add(ExpertApplyTypeEnum.EXPERT_INTENTION_LEAVE.getKey());
}
break;
case EXPERT_INFO_MODIFY: {
applyTypeList.add(ExpertApplyTypeEnum.EXPERT_INFO_MODIFY.getKey());
}
break;
case LONG_TERM_LEAVE: {
applyTypeList.add(ExpertApplyTypeEnum.LONG_TERM_LEAVE.getKey());
}
break;
case EXPERT_DELIVERY: {
applyTypeList.add(ExpertApplyTypeEnum.EXPERT_DELIVERY.getKey());
}
break;
case EXPERT_STORAGE: {
applyTypeList.add(ExpertApplyTypeEnum.EXPERT_STORAGE.getKey());
}
break;
default:
break;
}
return applyTypeList;
}

private ExpertAdminExpertManageQueryCmd buildExpertAdminExpertManageQueryCmd(MetaApplyListQuery query, List<RegionContainsBO> expertAdminContainsRegionList) {
ExpertAdminExpertManageQueryCmd expertAdminExpertManageQueryCmd = new ExpertAdminExpertManageQueryCmd();
expertAdminExpertManageQueryCmd.setPageNumber(query.getPageNumber());
expertAdminExpertManageQueryCmd.setPageSize(query.getPageSize());
if (StringUtils.isNotBlank(query.getExpertName())) {
expertAdminExpertManageQueryCmd.setExpertName(query.getExpertName());
}
if (StringUtils.isNotBlank(query.getCompanyName())) {
expertAdminExpertManageQueryCmd.setCompany(query.getCompanyName());
}
List<ExpertDictionaryQuery> expertDictionaryQueryList = new ArrayList<>();
if (StringUtils.isNotBlank(query.getTitleLevelDictionaryCode())) {
ExpertDictionaryQuery expertDictionaryQuery = new ExpertDictionaryQuery();
expertDictionaryQuery.setExpertInfoField(DictExpertInfoTypeEnum.TITLE_LEVEL.getKey());
expertDictionaryQuery.setDictionaryCodeList(CollectionUtil.toList(query.getTitleLevelDictionaryCode()));
expertDictionaryQueryList.add(expertDictionaryQuery);
}

List<RegionContainsBO> containsRegion;
if (Objects.nonNull(query.getExpertRegion())) {
RegionContainsBO containsRegionBo = regionLimitHelper.getContainsRegionBo(query.getExpertRegion().getRegionLevel()
, query.getExpertRegion().getRegionCode());
containsRegion = regionLimitHelper.queryContainsRegionAssembler(containsRegionBo, expertAdminContainsRegionList);
} else {
containsRegion = expertAdminContainsRegionList;
}

expertAdminExpertManageQueryCmd.setExpertDictionaryQueryList(expertDictionaryQueryList);
expertAdminExpertManageQueryCmd.setRegionContainsList(containsRegion);
expertAdminExpertManageQueryCmd.setPageSize(query.getPageSize());
expertAdminExpertManageQueryCmd.setPageNumber(query.getPageNumber());
return expertAdminExpertManageQueryCmd;
}


/**
* 装配 专家审核列表筛选返回VO
*
* @param expertMetaApplyList /
* @param expertUserFullInfoMap /
* @param expertDictionaryListMap /
* @return /
*/
private List<ExpertApplyMetaVO> buildExpertApplyMetaVOList(List<ExpertMetaApply> expertMetaApplyList
, Map<Long, ExpertUserFullInfo> expertUserFullInfoMap
, Map<Long, List<ExpertDictionary>> expertDictionaryListMap) {
List<ExpertApplyMetaVO> expertApplyMetaVOList = new ArrayList<>();
for (ExpertMetaApply expertMetaApply : expertMetaApplyList) {
ExpertApplyMetaVO expertApplyMetaVO = new ExpertApplyMetaVO();
Long userId = expertMetaApply.getUserId();
ExpertUserFullInfo expertUserFullInfo = expertUserFullInfoMap.get(userId);
expertApplyMetaVO.setId(expertMetaApply.getId());
expertApplyMetaVO.setUserId(userId);
expertApplyMetaVO.setApplyStatus(expertMetaApply.getApplyStatus());

String applyType = expertMetaApply.getApplyType();
if (Objects.nonNull(applyType)) {
expertApplyMetaVO.setApplyType(applyTypeTrans(ExpertApplyTypeEnum.of(applyType)));
}
expertApplyMetaVO.setName(expertUserFullInfo.getExpertName());

RegionDTO regionDTO = regionCacheHelper.getByCodeAndLevel(expertUserFullInfo.getRegionCode(), expertUserFullInfo.getRegionLevel());
ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo();
expertRegionInfo.setRegionCode(expertUserFullInfo.getRegionCode());
expertRegionInfo.setRegionLevel(expertUserFullInfo.getRegionLevel());
expertRegionInfo.setRegionName(regionDTO.getRegionName());
expertApplyMetaVO.setExpertRegionInfo(expertRegionInfo);

List<ExpertDictionary> expertDictionaryList = expertDictionaryListMap.get(userId);
if (CollectionUtils.isNotEmpty(expertDictionaryList)) {
expertApplyMetaVO.setTitleLevel(expertDictionaryList.stream().map(r -> {
DictionaryDTO dictionaryDTO = dictionaryCache.getByCode(r.getDictionaryCode());
DictionaryFieldInfo dictionaryFieldInfo = new DictionaryFieldInfo();
dictionaryFieldInfo.setDictionaryCode(r.getDictionaryCode());
dictionaryFieldInfo.setDictionaryFieldName(r.getExpertInfoField());
if (Objects.nonNull(dictionaryDTO)) {
dictionaryFieldInfo.setDictionaryName(dictionaryDTO.getName());
}
return dictionaryFieldInfo;
}).collect(Collectors.toList()));
}

expertApplyMetaVO.setCompany(expertUserFullInfo.getCompany());
expertApplyMetaVO.setPhoneNo(expertUserFullInfo.getPhoneNo());
expertApplyMetaVO.setApplyTime(expertMetaApply.getCreateOn());
expertApplyMetaVOList.add(expertApplyMetaVO);
}
return expertApplyMetaVOList;
}

private LambdaQueryWrapper<ExpertMetaApply> buildMetaApplyListQueryWrapper(MetaApplyListQuery applyListReq,
List<Long> expertIdList,
List<RegionContainsBO> viewRegions) {
// 审核类型
List<String> applyTypeList = new ArrayList<>();
if (CollUtil.isNotEmpty(applyListReq.getApplyTypeList())) {
List<ExpertApplyTypeQueryEnum> applyTypeQueryEnumList = applyListReq.getApplyTypeList();
for (ExpertApplyTypeQueryEnum applyTypeQueryEnum : applyTypeQueryEnumList) {
applyTypeList.addAll(applyTypeTrans(applyTypeQueryEnum));
}
}
// 审核结果
List<String> applyStatusList = new ArrayList<>();
if (CollUtil.isNotEmpty(applyListReq.getApplyStatusList())) {
applyStatusList = CollUtils.fieldList(applyListReq.getApplyStatusList(), ExpertApplyStatusEnum::getKey);
;
}

LocalDateTime applyStartTime = applyListReq.getApplyStartTime();
LocalDateTime applyEndTime = applyListReq.getApplyEndTime();

// 不展示撤回的申请记录
LambdaQueryWrapper<ExpertMetaApply> expertMetaApplyListQuery = Wrappers.lambdaQuery(ExpertMetaApply.class)
.in(CollectionUtils.isNotEmpty(applyTypeList), ExpertMetaApply::getApplyType, applyTypeList)
.in(CollectionUtils.isNotEmpty(applyStatusList), ExpertMetaApply::getApplyStatus, applyStatusList)
.in(ExpertMetaApply::getDisplayEnable, BoolDisplayEnum.Y.name())
.in(CollectionUtils.isNotEmpty(expertIdList), ExpertMetaApply::getUserId, expertIdList)
.gt(Objects.nonNull(applyStartTime), ExpertMetaApply::getCreateOn, applyStartTime)
.lt(Objects.nonNull(applyEndTime), ExpertMetaApply::getCreateOn, applyEndTime)
.ne(ExpertMetaApply::getApplyStatus, ExpertApplyStatusEnum.REVOKED.getKey())
.orderByDesc(ExpertMetaApply::getCreateOn);

RegionWrapperAssembler.expertMetaApplyRegionContainsWrapperAssembler(expertMetaApplyListQuery, viewRegions);
return expertMetaApplyListQuery;
}

private ExpertStorageDealCmd buildExpertStorageDealCmd(
MetaApplyResultRequest applyResultRequest, Long expertUserId, ExpertMetaApply expertMetaApply) {
MetaApplyResultRequest.StorageApplyResultExtraInfo extraInfo = applyResultRequest.getStorageApplyResultExtraInfo();
ExpertStorageDealCmd expertStorageDealCmd = new ExpertStorageDealCmd();
Boolean applyResult = applyResultRequest.getApplyResult();
expertStorageDealCmd.setApplyResult(applyResult);

if (Objects.nonNull(extraInfo)) {
List<DictionaryFieldInfo> expertType = extraInfo.getExpertType();
if (CollectionUtils.isNotEmpty(expertType)) {
expertStorageDealCmd.setExpertType(extraInfo.getExpertType().stream().map(r -> {
ExpertDictionaryDTO expertDictionaryDTO = new ExpertDictionaryDTO();
expertDictionaryDTO.setExpertInfoField(r.getDictionaryFieldName());
expertDictionaryDTO.setDictionaryCode(r.getDictionaryCode());
return expertDictionaryDTO;
}).collect(Collectors.toList()));
}
List<TagFieldInfo> other = extraInfo.getOther();
if (CollectionUtils.isNotEmpty(other)) {
expertStorageDealCmd.setOther(extraInfo.getOther().stream().map(r -> {
ExpertTagDTO expertTagDTO = new ExpertTagDTO();
expertTagDTO.setExpertInfoField(r.getTagFieldName());
expertTagDTO.setTagCode(r.getTagCode());
return expertTagDTO;
}).collect(Collectors.toList()));
}
expertStorageDealCmd.setRemark(extraInfo.getRemark());
}
expertStorageDealCmd.setExpertUserId(expertUserId);
expertStorageDealCmd.setJoinRegionCode(expertMetaApply.getRegionCode());
expertStorageDealCmd.setJoinRegionLevel(expertMetaApply.getRegionLevel());
return expertStorageDealCmd;
}

}

+ 48
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/ExpertAdminExpertManageQuery.java Parādīt failu

@@ -0,0 +1,48 @@
package com.ningdatech.pmapi.expert.model;


import com.ningdatech.basic.model.PagePo;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
* @author liuxinxin
* @date 2022/8/4 上午10:18
*/
@Data
@ApiModel("专家库筛选接口")
public class ExpertAdminExpertManageQuery extends PagePo {

@ApiModelProperty("专家姓名(精准匹配)")
private String expertName;

@ApiModelProperty("工作单位(模糊匹配)")
private String company;

@ApiModelProperty("职称级别字典编码")
private String titleLevelDictionaryCode;

@ApiModelProperty("单位属性字典编码")
private String companyAttributeDictionaryCode;

@ApiModelProperty(value = "专家账号状态", allowableValues = "冻结:freezing,正常:normal")
private String expertAccountStatus;

@ApiModelProperty("区域信息")
private ExpertRegionInfo expertRegionInfo;

@ApiModelProperty(value = "是否浙政钉用户")
private Boolean isDingUser;

@ApiModelProperty("内外围字典编码")
private String expertTypeDictionaryCode;

@ApiModelProperty("专家来源标签编码")
private String expertSourceTagCode;

@ApiModelProperty("擅长方向标签编码")
private String goodAtTagCode;

}

+ 29
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/ExtraMaterialDO.java Parādīt failu

@@ -0,0 +1,29 @@
package com.ningdatech.pmapi.expert.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/7/27 下午4:18
* 提交修改申请额外信息
*/
@Data
@ApiModel("提交修改申请额外信息,保存于expert_meta_apply表的 extra_material 字段")
public class ExtraMaterialDO {

/**
* 情况说明
*/
@ApiModelProperty("申请说明")
private String factSheet;

/**
* 证明材料
*/
@ApiModelProperty("证明材料")
private List<FileBasicInfo> evidenceList;
}

+ 62
- 61
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/cmd/ExpertAdminExpertManageQueryCmd.java Parādīt failu

@@ -1,61 +1,62 @@
//package com.ningdatech.pmapi.expert.model.cmd;
//
//import com.ningdatech.emapi.common.model.CommonPageReq;
//import com.ningdatech.emapi.expert.constants.ExpertAccountStatusEnum;
//import com.ningdatech.emapi.expert.entity.bo.RegionContainsBO;
//import com.ningdatech.emapi.expert.entity.query.ExpertDictionaryQuery;
//import com.ningdatech.emapi.expert.entity.query.ExpertTagQuery;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.Data;
//
//import java.util.List;
//
///**
// * @author liuxinxin
// * @date 2022/8/4 上午11:11
// */
//@Data
//public class ExpertAdminExpertManageQueryCmd extends CommonPageReq {
//
// @ApiModelProperty("专家姓名(精准匹配)")
// private String expertName;
//
// @ApiModelProperty("工作单位(模糊匹配)")
// private String company;
//
// @ApiModelProperty("专家账号状态")
// private List<ExpertAccountStatusEnum> expertAccountStatusList;
//
// /**
// * 区域编码
// */
// @ApiModelProperty("区域编码")
// private String regionCode;
//
// /**
// * 区域级别
// */
// @ApiModelProperty("区域级别")
// private Integer regionLevel;
//
// /**
// * 专家管理区域范围
// */
// List<RegionContainsBO> regionContainsList;
//
// /**
// * 专家字典信息
// */
// private List<ExpertDictionaryQuery> expertDictionaryQueryList;
//
// /**
// * 专家标签信息
// */
// private List<ExpertTagQuery> expertTagQueryList;
//
// /**
// * 是否为钉用户
// */
// private Boolean isDingUser;
//
//}
package com.ningdatech.pmapi.expert.model.cmd;


import com.ningdatech.pmapi.common.model.CommonPageReq;
import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.model.query.ExpertDictionaryQuery;
import com.ningdatech.pmapi.expert.model.query.ExpertTagQuery;
import com.ningdatech.pmapi.meta.model.bo.RegionContainsBO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/4 上午11:11
*/
@Data
public class ExpertAdminExpertManageQueryCmd extends CommonPageReq {

@ApiModelProperty("专家姓名(精准匹配)")
private String expertName;

@ApiModelProperty("工作单位(模糊匹配)")
private String company;

@ApiModelProperty("专家账号状态")
private List<ExpertAccountStatusEnum> expertAccountStatusList;

/**
* 区域编码
*/
@ApiModelProperty("区域编码")
private String regionCode;

/**
* 区域级别
*/
@ApiModelProperty("区域级别")
private Integer regionLevel;

/**
* 专家管理区域范围
*/
List<RegionContainsBO> regionContainsList;

/**
* 专家字典信息
*/
private List<ExpertDictionaryQuery> expertDictionaryQueryList;

/**
* 专家标签信息
*/
private List<ExpertTagQuery> expertTagQueryList;

/**
* 是否为钉用户
*/
private Boolean isDingUser;

}

+ 36
- 35
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/cmd/ExpertStorageDealCmd.java Parādīt failu

@@ -1,35 +1,36 @@
//package com.ningdatech.pmapi.expert.model.cmd;
//
//import com.ningdatech.emapi.expert.entity.dto.ExpertDictionaryDTO;
//import com.ningdatech.emapi.expert.entity.dto.ExpertTagDTO;
//import lombok.Data;
//
//import java.util.List;
//
///**
// * @author liuxinxin
// * @date 2022/7/26 下午5:40
// */
//@Data
//public class ExpertStorageDealCmd {
//
// private Long expertUserId;
//
// private Boolean applyResult;
//
// private String joinRegionCode;
//
// private Integer joinRegionLevel;
//
// /**
// * 专家类型(内外围)
// */
// private List<ExpertDictionaryDTO> expertType;
//
// /**
// * 其他标签(标签code)
// */
// private List<ExpertTagDTO> other;
//
// private String remark;
//}
package com.ningdatech.pmapi.expert.model.cmd;


import com.ningdatech.pmapi.expert.model.dto.ExpertDictionaryDTO;
import com.ningdatech.pmapi.expert.model.dto.ExpertTagDTO;
import lombok.Data;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/7/26 下午5:40
*/
@Data
public class ExpertStorageDealCmd {

private Long expertUserId;

private Boolean applyResult;

private String joinRegionCode;

private Integer joinRegionLevel;

/**
* 专家类型(内外围)
*/
private List<ExpertDictionaryDTO> expertType;

/**
* 其他标签(标签code)
*/
private List<ExpertTagDTO> other;

private String remark;
}

+ 46
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/cmd/MetaApplyListQuery.java Parādīt failu

@@ -0,0 +1,46 @@
package com.ningdatech.pmapi.expert.model.cmd;

import com.ningdatech.basic.model.PagePo;
import com.ningdatech.pmapi.expert.constant.ExpertApplyStatusEnum;
import com.ningdatech.pmapi.expert.constant.ExpertApplyTypeQueryEnum;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
* @author liuxinxin
* @date 2022/7/26 下午2:35
*/
@Data
@ApiModel("申请列表查询请求")
public class MetaApplyListQuery extends PagePo {

@ApiModelProperty("审核类型")
private List<ExpertApplyTypeQueryEnum> applyTypeList;

@ApiModelProperty("审核结果")
private List<ExpertApplyStatusEnum> applyStatusList;

@ApiModelProperty("工作单位")
private String companyName;

@ApiModelProperty("专家姓名")
private String expertName;

@ApiModelProperty("职称级别字典编码")
private String titleLevelDictionaryCode;

@ApiModelProperty("专家层级")
private ExpertRegionInfo expertRegion;

@ApiModelProperty("筛选开始时间")
private LocalDateTime applyStartTime;

@ApiModelProperty("筛选结束时间")
private LocalDateTime applyEndTime;

}

+ 17
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/query/ExpertDictionaryQuery.java Parādīt failu

@@ -0,0 +1,17 @@
package com.ningdatech.pmapi.expert.model.query;

import lombok.Data;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/5 上午11:16
*/
@Data
public class ExpertDictionaryQuery {

private String expertInfoField;

private List<String> dictionaryCodeList;
}

+ 17
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/query/ExpertTagQuery.java Parādīt failu

@@ -0,0 +1,17 @@
package com.ningdatech.pmapi.expert.model.query;

import lombok.Data;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/5 上午11:16
*/
@Data
public class ExpertTagQuery {

private String expertInfoField;

private List<String> tagCodeList;
}

+ 59
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/query/ListExpertQuery.java Parādīt failu

@@ -0,0 +1,59 @@
package com.ningdatech.pmapi.expert.model.query;

import com.ningdatech.pmapi.meta.model.bo.RegionContainsBO;
import lombok.Data;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/5 上午10:52
*/
@Data
public class ListExpertQuery {

private Integer limit;
private Integer offset;

/**
* 专家姓名(精准匹配)
*/
private String expertName;

/**
* 工作单位(模糊匹配)
*/
private String company;

/**
* 专家账号状态
*/
private List<String> expertAccountStatusList;

/**
* 区域编码
*/
private String regionCode;

/**
* 区域级别
*/
private Integer regionLevel;

/**
* 专家管理区域范围
*/
List<RegionContainsBO> regionContainsList;

/**
* 专家字典信息
*/
private List<ExpertDictionaryQuery> expertDictionaryQueryList;

/**
* 专家标签信息
*/
private List<ExpertTagQuery> expertTagQueryList;

private Boolean isDingUser;
}

+ 49
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/req/MetaApplyResultRequest.java Parādīt failu

@@ -0,0 +1,49 @@
package com.ningdatech.pmapi.expert.model.req;

import com.ningdatech.pmapi.expert.model.DictionaryFieldInfo;
import com.ningdatech.pmapi.expert.model.TagFieldInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
* @author liuxinxin
* @date 2022/7/26 下午4:20
* 申请结果请求基类
*/
@Data
@Validated
public class MetaApplyResultRequest {

@NotNull
@ApiModelProperty("申请id")
private Long applyId;

@NotNull
@ApiModelProperty("审核结果")
private Boolean applyResult;

@ApiModelProperty("审核意见")
private String auditOpinion;

@ApiModelProperty("入库审核额外参数,只有入库审核结果审批才需要填写")
private StorageApplyResultExtraInfo storageApplyResultExtraInfo;


@Data
@ApiModel("入库审核额外参数")
public static class StorageApplyResultExtraInfo {
@ApiModelProperty("专家类型-内外围")
private List<DictionaryFieldInfo> expertType;

@ApiModelProperty("其他标签(标签code)")
private List<TagFieldInfo> other;

@ApiModelProperty("备注")
private String remark;
}
}

+ 56
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/vo/ExpertAdminExpertManageListVO.java Parādīt failu

@@ -0,0 +1,56 @@
package com.ningdatech.pmapi.expert.model.vo;


import com.ningdatech.pmapi.expert.model.DictionaryFieldInfo;
import com.ningdatech.pmapi.expert.model.TagFieldInfo;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/4 上午11:04
*/
@Data
@ApiModel("专家库列表查询返回model")
public class ExpertAdminExpertManageListVO {

@ApiModelProperty(value = "用户id")
private Long userId;

@ApiModelProperty(value = "专家姓名")
private String expertName;

@ApiModelProperty(value = "职称级别")
private List<DictionaryFieldInfo> titleLevel;

@ApiModelProperty("工作单位")
private String company;

@ApiModelProperty(" 单位法人编号")
private String legalEntityCode;

@ApiModelProperty("单位类型(字典code)")
private List<DictionaryFieldInfo> companyAttribute;

@ApiModelProperty(value = "手机号")
private String phoneNo;

@ApiModelProperty(value = "专家类型(内外围)")
private List<DictionaryFieldInfo> expertType;

@ApiModelProperty(value = "专家层级")
private ExpertRegionInfo expertRegionInfo;

@ApiModelProperty(value = "是否浙政钉用户")
private Boolean isDingUser;

@ApiModelProperty(value = "专家账号状态", allowableValues = "冻结:freezing,正常:normal")
private String expertAccountStatus;

@ApiModelProperty(value = "专家来源")
private List<TagFieldInfo> expertSource;
}

+ 76
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/vo/ExpertApplyMetaVO.java Parādīt failu

@@ -0,0 +1,76 @@
package com.ningdatech.pmapi.expert.model.vo;

import com.ningdatech.pmapi.expert.model.DictionaryFieldInfo;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
* @author liuxinxin
* @date 2022/7/26 上午11:17
* 专家审核列表展示VO基础类
*/
@Data
@ApiModel("审核列表展示VO")
public class ExpertApplyMetaVO {

@ApiModelProperty("id")
private Long id;

@ApiModelProperty("用户id")
private Long userId;

/**
* 审核结果
*/
@ApiModelProperty("审核结果")
private String applyStatus;

/**
* 审核类型
*/
@ApiModelProperty("审核类型")
private String applyType;

/**
* 专家姓名
*/
@ApiModelProperty("专家姓名")
private String name;

/**
* 专家层级
*/
@ApiModelProperty("专家层级")
private ExpertRegionInfo expertRegionInfo;

/**
* 职称级别
*/
@ApiModelProperty("职称级别")
private List<DictionaryFieldInfo> titleLevel;

/**
* 工作单位
*/
@ApiModelProperty("工作单位")
private String company;

/**
* 手机号
*/
@ApiModelProperty("手机号")
private String phoneNo;

/**
* 申请时间
*/
@ApiModelProperty("申请时间")
private LocalDateTime applyTime;


}

+ 70
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/vo/MetaApplyResultVo.java Parādīt failu

@@ -0,0 +1,70 @@
package com.ningdatech.pmapi.expert.model.vo;

import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;

import java.time.LocalDateTime;

/**
* <p>
* LeaveAuditInfoVo
* </p>
*
* @author WendyYang
* @since 13:46 2022/8/12
*/
@Data
@Builder
@ApiModel("审核详情返回参数")
public class MetaApplyResultVo {

@ApiModelProperty("审核人")
private String auditor;

@ApiModelProperty("审核时间")
private LocalDateTime auditTime;

@ApiModelProperty("审核意见")
private String auditOption;

@ApiModelProperty("审核状态")
private String auditStatus;

@ApiModelProperty("申请时间")
private LocalDateTime applyTime;

@ApiModelProperty("申请类型")
private String applyType;

@ApiModelProperty("专家用户userId")
private Long expertUserId;

// @ApiModelProperty("额外的材料")
// private ModifyApplyExtraInfo modifyApplyExtraInfo;
//
// @ApiModelProperty("信息修改申请展示列表-只有审核类型为信息变更审核时才有值")
// private InfoModifyApplyDisplayVO infoModifyApplyDisplayVo;

@ApiModelProperty("履职意向修改申请展示列表-只有审核类型为履职意向变更时才会有值")
private IntentionApplyDisplayVO intentionApplyDisplayVo;


@Data
@ApiModel("履职意向修改申请展示列表")
public static class IntentionApplyDisplayVO {

@ApiModelProperty("审核申请id")
private Long expertApplyId;

@ApiModelProperty("履职意向增加")
private ExpertRegionInfo addExpertRegion;

@ApiModelProperty("履职意向减少")
private ExpertRegionInfo reduceExpertRegion;
}


}

+ 13
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/service/ExpertInfoService.java Parādīt failu

@@ -2,8 +2,11 @@ package com.ningdatech.pmapi.expert.service;

import com.ningdatech.pmapi.expert.model.cmd.ExpertFullInfoSaveCmd;
import com.ningdatech.pmapi.expert.model.cmd.ExpertRecommendProofSaveCmd;
import com.ningdatech.pmapi.expert.model.cmd.ExpertStorageDealCmd;
import com.ningdatech.pmapi.expert.model.dto.ExpertFullInfoAllDTO;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/7/22 下午4:39
@@ -27,4 +30,14 @@ public interface ExpertInfoService {
* @return
*/
ExpertFullInfoAllDTO getExpertUserFullInfoAll(Long userId);


void expertStorageDeal(ExpertStorageDealCmd cmd);


/**
* 批量获取用户全量信息
**/
List<ExpertFullInfoAllDTO> listExpertUserFullInfoAll(List<Long> userIds);
}


+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/expert/service/IExpertMetaApplyService.java Parādīt failu

@@ -1,11 +1,11 @@
package com.ningdatech.pmapi.expert.service;

import com.ningdatech.pmapi.expert.entity.ExpertMetaApply;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ningdatech.pmapi.expert.entity.ExpertMetaApply;

/**
* <p>
* 服务类
* 服务类
* </p>
*
* @author Liuxinxin


+ 10
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/service/IExpertUserFullInfoService.java Parādīt failu

@@ -32,4 +32,14 @@ public interface IExpertUserFullInfoService extends IService<ExpertUserFullInfo>
**/
List<ExpertUserFullInfo> listByUserId(List<Long> userId);



/**
* 批量查询专家用户信息
*
* @param userIds 用户ID
* @return /
*/
List<ExpertUserFullInfo> listByUserIds(List<Long> userIds);

}

+ 104
- 4
pmapi/src/main/java/com/ningdatech/pmapi/expert/service/impl/ExpertInfoServiceImpl.java Parādīt failu

@@ -2,8 +2,10 @@ package com.ningdatech.pmapi.expert.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.common.constant.BoolDisplayEnum;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.enumeration.BoolDisplayEnum;
import com.ningdatech.pmapi.expert.assembler.ExpertUserInfoAssembler;
import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.constant.ExpertApplyStatusEnum;
@@ -15,8 +17,10 @@ import com.ningdatech.pmapi.expert.entity.ExpertMetaApply;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.expert.model.cmd.ExpertFullInfoSaveCmd;
import com.ningdatech.pmapi.expert.model.cmd.ExpertRecommendProofSaveCmd;
import com.ningdatech.pmapi.expert.model.cmd.ExpertStorageDealCmd;
import com.ningdatech.pmapi.expert.model.dto.*;
import com.ningdatech.pmapi.expert.service.*;
import com.ningdatech.pmapi.meta.constant.DictExpertInfoTypeEnum;
import com.ningdatech.pmapi.meta.model.entity.ExpertDictionary;
import com.ningdatech.pmapi.meta.model.entity.ExpertTag;
import com.ningdatech.pmapi.meta.service.IExpertDictionaryService;
@@ -27,9 +31,7 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;

/**
@@ -304,4 +306,102 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
}


/**
* 专家入库审核
*
* @param cmd
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void expertStorageDeal(ExpertStorageDealCmd cmd) {
boolean applyResult = cmd.getApplyResult();
Long expertUserId = cmd.getExpertUserId();
ExpertUserFullInfo expertUserFullInfo = iExpertUserFullInfoService.getByUserId(expertUserId);

if (applyResult) {
// 修改专家状态为可用
expertUserFullInfo.setExpertAccountStatus(ExpertAccountStatusEnum.AVAILABLE.getKey());
expertUserFullInfo.setRemark(cmd.getRemark());
expertUserFullInfo.setRegionCode(cmd.getJoinRegionCode());
expertUserFullInfo.setRegionLevel(cmd.getJoinRegionLevel());

// 保存所有专家标签字段
List<ExpertTag> saveExpertTagList = buildSaveExpertTagList(expertUserId, cmd.getOther());
iExpertTagService.saveBatch(saveExpertTagList);
// 保存所有专家字典字段
List<ExpertDictionaryDTO> expertType = cmd.getExpertType();
if (CollectionUtils.isNotEmpty(expertType)) {
expertType = expertType.stream().peek(r -> r.setExpertInfoField(DictExpertInfoTypeEnum.EXPERT_TYPE.getKey())).collect(Collectors.toList());
List<ExpertDictionary> saveExpertDictionaryList = buildSaveExpertDictionaryList(expertUserId, expertType);
iExpertDictionaryService.saveBatch(saveExpertDictionaryList);
}

// 修改履职意向申请状态
LambdaUpdateWrapper<ExpertMetaApply> set = Wrappers.lambdaUpdate(ExpertMetaApply.class).eq(ExpertMetaApply::getUserId, expertUserId)
.eq(ExpertMetaApply::getApplyType, ExpertApplyTypeEnum.EXPERT_INTENTION_JOIN.getKey())
.eq(ExpertMetaApply::getApplyStatus, ExpertApplyStatusEnum.PENDING_REVIEW.getKey())
.eq(ExpertMetaApply::getDisplayEnable, BoolDisplayEnum.N.name())
.set(ExpertMetaApply::getDisplayEnable, BoolDisplayEnum.Y.name());
iExpertMetaApplyService.update(set);

} else {
expertUserFullInfo.setUserInfoStep(ExpertUserInfoStepEnum.INFORMATION_TO_BE_SUBMITTED.getKey());
}
if (applyResult) {
// 补充专家 专家角色 TODO
// SysRole sysRole = roleService.getOne(Wrappers.lambdaQuery(SysRole.class)
// .eq(SysRole::getCode, SysRoleEnum.EXPERT.getKey()));
// if (Objects.nonNull(sysRole)) {
// Long roleId = sysRole.getRoleId();
// LambdaQueryWrapper<SysUsersRoles> eq = Wrappers.lambdaQuery(SysUsersRoles.class)
// .eq(SysUsersRoles::getUserId, expertUserFullInfo.getUserId())
// .eq(SysUsersRoles::getRoleId, sysRole.getRoleId());
// SysUsersRoles one = userRoleService.getOne(eq);
// if (Objects.isNull(one)) {
// SysUsersRoles sysUsersRolesSaveRecord = new SysUsersRoles();
// sysUsersRolesSaveRecord.setUserId(expertUserFullInfo.getUserId());
// sysUsersRolesSaveRecord.setRoleId(roleId);
// userRoleService.saveAndReloadRoleListForToken(Collections.singletonList(sysUsersRolesSaveRecord), false);
// }
// }
}
iExpertUserFullInfoService.saveOrUpdate(expertUserFullInfo);
}


@Override
public List<ExpertFullInfoAllDTO> listExpertUserFullInfoAll(List<Long> userIds) {
List<ExpertUserFullInfo> expertUserFullInfos = iExpertUserFullInfoService.listByUserIds(userIds);
// 所有专家标签字段
List<ExpertTag> expertTagList = iExpertTagService.list(Wrappers.lambdaQuery(ExpertTag.class)
.in(ExpertTag::getUserId, userIds));
Map<Long, List<ExpertTag>> expertTagListMap = CollUtils.group(expertTagList, ExpertTag::getUserId);
// 所有专家字典字段
List<ExpertDictionary> expertDictionaryList = iExpertDictionaryService.list(Wrappers.lambdaQuery(ExpertDictionary.class)
.in(ExpertDictionary::getUserId, userIds));
Map<Long, List<ExpertDictionary>> expertDictMap = CollUtils.group(expertDictionaryList, ExpertDictionary::getUserId);
// 专家履职意向列表
List<ExpertIntentionWorkRegion> expertIntentionWorkRegionList = iExpertIntentionWorkRegionService
.list(Wrappers.lambdaQuery(ExpertIntentionWorkRegion.class)
.in(ExpertIntentionWorkRegion::getUserId, userIds));
Map<Long, List<ExpertIntentionWorkRegion>> intentionRegionMap = CollUtils.group(expertIntentionWorkRegionList, ExpertIntentionWorkRegion::getUserId);
// 专家履职意向申请列表
List<ExpertMetaApply> expertMetaApplyList = iExpertMetaApplyService.list(Wrappers.lambdaQuery(ExpertMetaApply.class)
.in(ExpertMetaApply::getUserId, userIds)
.eq(ExpertMetaApply::getApplyStatus, ExpertApplyStatusEnum.PENDING_REVIEW.getKey())
.in(ExpertMetaApply::getApplyType, ExpertApplyTypeEnum.EXPERT_INTENTION_JOIN.getKey(), ExpertApplyTypeEnum.EXPERT_INTENTION_LEAVE.getKey()));
Map<Long, List<ExpertMetaApply>> metaApplyMap = CollUtils.group(expertMetaApplyList, ExpertMetaApply::getUserId);
// 所有专家回避单位
List<ExpertAvoidCompany> expertAvoidCompanyList = iExpertAvoidCompanyService.list(Wrappers.lambdaQuery(ExpertAvoidCompany.class)
.in(ExpertAvoidCompany::getUserId, userIds));
Map<Long, List<ExpertAvoidCompany>> avoidInfoMap = CollUtils.group(expertAvoidCompanyList, ExpertAvoidCompany::getUserId);
return expertUserFullInfos.stream().map(w -> ExpertUserInfoAssembler.buildExpertFullInfoAllDTO(w,
expertTagListMap.getOrDefault(w.getUserId(), Collections.emptyList()),
expertDictMap.getOrDefault(w.getUserId(), Collections.emptyList()),
intentionRegionMap.getOrDefault(w.getUserId(), Collections.emptyList()),
metaApplyMap.getOrDefault(w.getUserId(), Collections.emptyList()),
avoidInfoMap.getOrDefault(w.getUserId(), Collections.emptyList())))
.collect(Collectors.toList());
}

}

+ 5
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/service/impl/ExpertUserFullInfoServiceImpl.java Parādīt failu

@@ -33,4 +33,9 @@ public class ExpertUserFullInfoServiceImpl extends ServiceImpl<NdExpertUserFullI
return list(Wrappers.<ExpertUserFullInfo>lambdaQuery().in(ExpertUserFullInfo::getUserId, userIds));
}

@Override
public List<ExpertUserFullInfo> listByUserIds(List<Long> userIds) {
return list(Wrappers.<ExpertUserFullInfo>lambdaQuery().in(ExpertUserFullInfo::getUserId, userIds));
}

}

+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingController.java Parādīt failu

@@ -70,7 +70,7 @@ public class MeetingController {
@GetMapping("detail/{meetingId}/basicInfo")
@WebLog(value = "会议详情-基本信息")
public MeetingDetailBasicVO meetingBasic(@PathVariable Long meetingId) {
return meetingManage.getMeetingBasicInfo(meetingId);
return meetingManage.getMeetingDetail(meetingId);
}

@ApiOperation("邀请情况详情")


+ 6
- 4
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/ExpertInviteAvoidRule.java Parādīt failu

@@ -1,8 +1,6 @@
package com.ningdatech.pmapi.meeting.entity.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -33,7 +31,7 @@ public class ExpertInviteAvoidRule implements Serializable {
private Long meetingId;

@ApiModelProperty("回避专家ID")
private String expertIds;
private String avoidExpertIds;

@ApiModelProperty("回避单位ID")
private String avoidUnitIds;
@@ -45,15 +43,19 @@ public class ExpertInviteAvoidRule implements Serializable {
private Integer weekInviteCount;

@ApiModelProperty("创建人ID")
@TableField(fill = FieldFill.INSERT)
private Long createBy;

@ApiModelProperty("创建时间")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createOn;

@ApiModelProperty("修改时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateOn;

@ApiModelProperty("修改人ID")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;

}

+ 5
- 3
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/ExpertInviteRule.java Parādīt failu

@@ -1,8 +1,6 @@
package com.ningdatech.pmapi.meeting.entity.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -35,15 +33,19 @@ public class ExpertInviteRule implements Serializable {
private String inviteRule;

@ApiModelProperty("创建人ID")
@TableField(fill = FieldFill.INSERT)
private Long createBy;

@ApiModelProperty("创建时间")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createOn;

@ApiModelProperty("修改时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateOn;

@ApiModelProperty("修改人ID")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;

@ApiModelProperty("抽取类型:1 自定义规则、2 指定邀请")


+ 3
- 1
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/MeetingReviewProjectDTO.java Parādīt failu

@@ -3,6 +3,8 @@ package com.ningdatech.pmapi.meeting.entity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;

/**
* <p>
* MeetingEvalProjectDTO
@@ -24,7 +26,7 @@ public class MeetingReviewProjectDTO {
private String projectType;

@ApiModelProperty("申报金额")
private String declareAmount;
private BigDecimal declareAmount;

@ApiModelProperty("申报单位")
private String buildOrg;


+ 27
- 0
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/AppointRuleVO.java Parādīt failu

@@ -0,0 +1,27 @@
package com.ningdatech.pmapi.meeting.entity.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
* <p>
* 指定邀请规则
* </p>
*
* @author WendyYang
* @since 11:26 2023/3/1
*/
@Data
@ApiModel("指定邀请规则")
public class AppointRuleVO {

@ApiModelProperty("邀请说明")
private String inviteDesc;

@ApiModelProperty("指定邀请专家")
private List<ExpertBasicInfoVO> experts;

}

+ 33
- 0
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/AvoidInfoVO.java Parādīt failu

@@ -0,0 +1,33 @@
package com.ningdatech.pmapi.meeting.entity.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
* <p>
* 回避信息
* </p>
*
* @author WendyYang
* @since 11:25 2023/3/1
*/
@Data
@ApiModel("回避信息")
public class AvoidInfoVO {

@ApiModelProperty("回避单位")
private List<String> avoidUnitIds;

@ApiModelProperty("回避条线")
private List<String> avoidOrgIds;

@ApiModelProperty("每周邀请次数")
private Integer weekInviteCount;

@ApiModelProperty("回避专家")
private List<ExpertBasicInfoVO> experts;

}

+ 6
- 7
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/ExpertInviteDetailVO.java Parādīt failu

@@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.ArrayList;
import java.util.List;

/**
@@ -57,25 +56,25 @@ public class ExpertInviteDetailVO {
}

@ApiModelProperty("参与数量总计")
private Integer attendTotal = 0;
private Integer attendTotal;

@ApiModelProperty("随机邀请参与数量")
private Integer randomAttend = 0;
private Integer randomAttend;

@ApiModelProperty("指定邀请参与数量")
private Integer appointAttend = 0;
private Integer appointAttend;

@ApiModelProperty("是否已停止邀请")
private Boolean invitedStopped;

@ApiModelProperty("最终参与名单")
private List<ExpertAttendListItemVO> attendList = new ArrayList<>();
private List<ExpertAttendListItemVO> attendList;

@ApiModelProperty("随机邀请名单")
private List<RandomInviteListItemVO> randomInviteList = new ArrayList<>();
private List<RandomInviteListItemVO> randomInviteList;

@ApiModelProperty("指定邀请名单")
private List<RandomInviteListItemVO> appointInviteList = new ArrayList<>();
private List<RandomInviteListItemVO> appointInviteList;

public void addAttendList(ExpertAttendListItemVO attend) {
this.attendList.add(attend);


+ 3
- 47
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteRuleDetailVO.java Parādīt failu

@@ -16,59 +16,15 @@ import java.util.List;
@Data
public class InviteRuleDetailVO {

@ApiModelProperty("是否创建邀请规则")
private Boolean invited;
private Integer inviteType;

@ApiModelProperty("随机邀请规则")
private List<RandomInviteRuleVO> randomRules;

@ApiModelProperty("是否有指定抽取规则")
private Boolean hasAppointRule;

@ApiModelProperty("指定抽取规则")
private AppointRuleVo appointRule;

@ApiModelProperty("是否有回避规则")
private Boolean hasAvoidInfo;
private AppointRuleVO appointRule;

@ApiModelProperty("回避信息")
private AvoidInfoVo avoidInfo;

@Data
public static class AvoidInfoVo {

private List<String> avoidUnitIds;

private List<String> avoidOrgIds;

private Integer weekInviteCount;

private List<ExpertBasicInfoVO> experts;

}

@Data
public static class AppointRuleVo {

private String inviteDesc;

private List<ExpertBasicInfoVO> experts;

}

public Boolean setAndGetHasAppointRule(Boolean hasAppointRule) {
this.hasAppointRule = hasAppointRule;
return this.hasAppointRule;
}

public Boolean setAndGetHasAvoidInfo(Boolean hasAvoidInfo) {
this.hasAvoidInfo = hasAvoidInfo;
return this.hasAvoidInfo;
}

public Boolean setAndGetInvited(Boolean invited) {
this.invited = invited;
return this.invited;
}
private AvoidInfoVO avoidInfo;

}

+ 17
- 28
pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/MeetingDetailBasicVO.java Parādīt failu

@@ -1,8 +1,7 @@
package com.ningdatech.pmapi.meeting.entity.vo;

import com.alibaba.fastjson.annotation.JSONField;
import com.ningdatech.file.entity.vo.result.AttachFileVo;
import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import com.ningdatech.pmapi.meeting.entity.dto.MeetingReviewProjectDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
@@ -29,35 +28,36 @@ public class MeetingDetailBasicVO {
public MeetingDetailBasicVO() {
}

private Long id;
private Long meetingId;

@ApiModelProperty("会议名称")
private String name;
private String meetingName;

@ApiModelProperty("会议类型名称")
private String typeName;

@ApiModelProperty("会议类型代码")
private String type;
private String meetingType;

@ApiModelProperty("开始时间")
@JSONField(format = "yyyy-MM-dd HH:mm")
private LocalDateTime startTime;

@ApiModelProperty("结束时间")
@ApiModelProperty("评委到场时间")
@JSONField(format = "yyyy-MM-dd HH:mm")
private LocalDateTime endTime;
private LocalDateTime judgesAttendanceTime;

@ApiModelProperty("会议耗时")
private Integer meetingUsageTime;

@ApiModelProperty("联系人")
private String connecter;

@ApiModelProperty("创建人")
private String author;

private List<RegionDTO> regions;
private String creator;

@ApiModelProperty("地点")
private String address;
@ApiModelProperty("评审地点")
private String meetingAddress;

@ApiModelProperty("联系方式")
private String contact;
@@ -65,33 +65,22 @@ public class MeetingDetailBasicVO {
@ApiModelProperty("创建时间")
private LocalDateTime createOn;

@ApiModelProperty("会议说明")
private String description;

@ApiModelProperty("相关材料")
private List<AttachFileVo> attachments;

@ApiModelProperty("备注")
private String remark;

@ApiModelProperty("会议状态")
private Integer status;

@ApiModelProperty("专家出席状态")
private Integer attendStatus;

@ApiModelProperty("取消说明")
private String cancelRemark;

@ApiModelProperty("创建人")
private String createBy;

private Boolean invited;

@ApiModelProperty("抽取单位")
private String holdOrg;

@ApiModelProperty("是否已确认下发会议通知名单")
private Boolean sendMeetingNotice;
@ApiModelProperty("抽取信息")
private InviteRuleDetailVO inviteRule;

@ApiModelProperty("评审项目信息")
private List<MeetingReviewProjectDTO> projects;

}

+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/meeting/helper/MeetingManageHelper.java Parādīt failu

@@ -143,7 +143,7 @@ public class MeetingManageHelper {
ExpertInviteAvoidRule avoidRule = inviteAvoidRuleService.getByMeetingId(meetingId);
AvoidInfoDTO result = new AvoidInfoDTO();
result.setAvoidOrgIdList(StrUtil.split(avoidRule.getAvoidOrgIds(), ","));
result.setExpertIds(BizUtils.splitToLong(avoidRule.getExpertIds()));
result.setExpertIds(BizUtils.splitToLong(avoidRule.getAvoidExpertIds()));
result.setAvoidUnitIdList(StrUtil.split(avoidRule.getAvoidUnitIds(), ","));
result.setWeekInviteCount(result.getWeekInviteCount());
return result;
@@ -151,7 +151,7 @@ public class MeetingManageHelper {

public void saveAvoidInfo(Long meetingId, List<Long> expertIds) {
ExpertInviteAvoidRule avoidRule = inviteAvoidRuleService.getByMeetingId(meetingId);
avoidRule.setExpertIds(CollUtils.joinByComma(expertIds));
avoidRule.setAvoidExpertIds(CollUtils.joinByComma(expertIds));
inviteAvoidRuleService.saveOrUpdate(avoidRule);
}



+ 52
- 44
pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java Parādīt failu

@@ -17,6 +17,7 @@ import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.basic.util.ValidUtil;
import com.ningdatech.cache.lock.DistributedLock;
import com.ningdatech.file.service.FileService;
import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.expert.helper.PermissionCheckHelper;
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
@@ -37,6 +38,9 @@ import com.ningdatech.pmapi.meeting.service.*;
import com.ningdatech.pmapi.meeting.task.ExpertInviteTask;
import com.ningdatech.pmapi.meta.helper.DictionaryCache;
import com.ningdatech.pmapi.meta.helper.TagCache;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails;
import com.ningdatech.pmapi.user.service.IUserInfoService;
import com.ningdatech.pmapi.user.util.LoginUserUtil;
@@ -64,6 +68,7 @@ import static com.ningdatech.pmapi.meeting.helper.ExpertInviteHelper.getExpertIn
@RequiredArgsConstructor
public class MeetingManage {

private final RegionCacheHelper regionCache;
private final IMeetingService meetingService;
private final IExpertInviteAvoidRuleService inviteAvoidRuleService;
private final IExpertInviteRuleService inviteRuleService;
@@ -79,6 +84,7 @@ public class MeetingManage {
private final DistributedLock distributedLock;
private final PermissionCheckHelper permissionCheckHelper;
private final IUserInfoService userInfoService;
private final IProjectService projectService;
private final IMeetingInnerProjectService meetingInnerProjectService;
private final IMeetingOuterProjectService meetingOuterProjectService;

@@ -174,7 +180,7 @@ public class MeetingManage {
avoidRule.setWeekInviteCount(ObjectUtil.defaultIfNull(avoidRule.getWeekInviteCount(), 0));
avoidRule.setAvoidOrgIds(CollUtils.joinByComma(avoidInfo.getAvoidOrgIdList()));
avoidRule.setAvoidUnitIds(CollUtils.joinByComma(avoidInfo.getAvoidUnitIdList()));
avoidRule.setExpertIds(CollUtils.joinByComma(avoidInfo.getExpertIds()));
avoidRule.setAvoidExpertIds(CollUtils.joinByComma(avoidInfo.getExpertIds()));
inviteAvoidRuleService.save(avoidRule);
}
} else {
@@ -304,35 +310,45 @@ public class MeetingManage {
return result;
}

public MeetingDetailBasicVO getMeetingBasicInfo(Long meetingId) {
public MeetingDetailBasicVO getMeetingDetail(Long meetingId) {
Meeting meeting = meetingService.getById(meetingId);
if (Objects.isNull(meeting)) {
throw new BizException("该会议信息不存在");
}
Integer attendStatus = null;
if (LoginUserUtil.isExpert()) {
List<Long> meIds = Collections.singletonList(meetingId);
List<MeetingAndAttendStatusDTO> status = meetingExpertService.listByExpertIdAndStatus(LoginUserUtil.getUserId(), null, meIds);
if (status.isEmpty()) {
throw BizException.wrap("您未被邀请参加次会议");
}
attendStatus = meetingManageHelper.getExpertAttendStatus(status.get(0));
}
return MeetingDetailBasicVO.builder()
.id(meeting.getId())
.name(meeting.getName())
.type(meeting.getType())
Assert.notNull(meeting, "会议不存在");
MeetingDetailBasicVO detail = MeetingDetailBasicVO.builder()
.meetingId(meeting.getId())
.meetingName(meeting.getName())
.meetingType(meeting.getType())
.meetingAddress(meeting.getMeetingAddress())
.typeName(dictionaryCache.getByCode(meeting.getType()).getName())
.author(meeting.getCreator())
.startTime(meeting.getStartTime())
.createOn(meeting.getCreateOn())
.judgesAttendanceTime(meeting.getJudgesAttendanceTime())
.meetingUsageTime(meeting.getMeetingUsageTime())
.contact(meeting.getContact())
.connecter(meeting.getConnecter())
.status(meeting.getStatus())
.attendStatus(attendStatus)
.createBy(meeting.getCreator())
.holdOrg(meeting.getHoldOrg())
.createOn(meeting.getCreateOn())
.creator(meeting.getCreator())
.createBy(meeting.getCreator())
.build();
if (meeting.getIsInnerProject()) {
List<MeetingInnerProject> innerProjects = meetingInnerProjectService.listByMeetingId(meetingId);
List<Project> projects = projectService.listByIds(CollUtils.fieldList(innerProjects, MeetingInnerProject::getProjectId));
List<MeetingReviewProjectDTO> convert = CollUtils.convert(projects, w -> {
MeetingReviewProjectDTO mrp = new MeetingReviewProjectDTO();
mrp.setBuildOrg(w.getBuildOrgName());
mrp.setProjectName(w.getProjectName());
mrp.setProjectType(w.getProjectType().toString());
mrp.setProjectYear(w.getProjectYear());
mrp.setDeclareAmount(w.getDeclareAmount());
return mrp;
});
detail.setProjects(convert);
} else {
List<MeetingOuterProject> outerProjects = meetingOuterProjectService.listByMeetingId(meetingId);
detail.setProjects(BeanUtil.copyToList(outerProjects, MeetingReviewProjectDTO.class));
}
detail.setInviteRule(inviteRuleDetail(meetingId));
return detail;
}

public ExpertInviteDetailVO inviteDetail(Long meetingId) {
@@ -441,9 +457,6 @@ public class MeetingManage {
public InviteRuleDetailVO inviteRuleDetail(Long meetingId) {
InviteRuleDetailVO result = new InviteRuleDetailVO();
List<ExpertInviteRule> inviteRules = inviteRuleService.listByMeetingId(meetingId);
if (!result.setAndGetInvited(inviteRules.size() > 0)) {
return result;
}
result.setRandomRules(new ArrayList<>());
Map<ExpertInviteTypeEnum, List<ExpertInviteRule>> groupByType = CollUtils.group(inviteRules, w -> ExpertInviteTypeEnum.getByCode(w.getInviteType()));
List<ExpertInviteRule> randoms = groupByType.get(ExpertInviteTypeEnum.RANDOM);
@@ -463,36 +476,31 @@ public class MeetingManage {
});
}
if (StrUtil.isNotEmpty(randomRule.getIntentionRegionCode())) {
// TODO 履职意向地
/*List<RegionDTO> intentionRegions = regionCache.listParents(randomRule.getIntentionRegionCode(), randomRule.getIntentionRegionLevel());
randomRule.setIntentionRegions(intentionRegions);*/
List<RegionDTO> intentionRegions = regionCache.listParents(randomRule.getIntentionRegionCode(), randomRule.getIntentionRegionLevel());
randomRule.setIntentionRegions(intentionRegions);
}
if (StrUtil.isNotEmpty(randomRule.getExpertRegionCode())) {
// TODO 专家层级
/*List<RegionDTO> expertRegions = regionCache.listParents(randomRule.getExpertRegionCode(), randomRule.getExpertRegionLevel());
randomRule.setExpertRegions(expertRegions);*/
List<RegionDTO> expertRegions = regionCache.listParents(randomRule.getExpertRegionCode(), randomRule.getExpertRegionLevel());
randomRule.setExpertRegions(expertRegions);
}
result.getRandomRules().add(randomRule);
});
}
List<ExpertInviteRule> appoints = groupByType.get(ExpertInviteTypeEnum.APPOINT);
if (result.setAndGetHasAppointRule(CollUtil.isNotEmpty(appoints))) {
ExpertInviteRule appoint = appoints.get(0);
AppointInviteRuleDTO appointRule = JSON.parseObject(appoint.getInviteRule(), AppointInviteRuleDTO.class);
InviteRuleDetailVO.AppointRuleVo vo = new InviteRuleDetailVO.AppointRuleVo();
vo.setInviteDesc(appointRule.getInviteDesc());
vo.setExperts(new ArrayList<>(meetingManageHelper.getExpertBasicInfo(appointRule.getExpertIds()).values()));
result.setAppointRule(vo);
}
AvoidInfoDTO avoidInfo = inviteAvoidRuleService.getAvoidInfoDto(meetingId);
if (result.setAndGetHasAvoidInfo(avoidInfo != null)) {
InviteRuleDetailVO.AvoidInfoVo vo = new InviteRuleDetailVO.AvoidInfoVo();
AvoidInfoDTO avoidInfo = inviteAvoidRuleService.getAvoidInfoDto(meetingId);
AvoidInfoVO vo = new AvoidInfoVO();
vo.setAvoidOrgIds(avoidInfo.getAvoidOrgIdList());
vo.setAvoidUnitIds(avoidInfo.getAvoidUnitIdList());
if (CollUtil.isNotEmpty(avoidInfo.getExpertIds())) {
vo.setExperts(new ArrayList<>(meetingManageHelper.getExpertBasicInfo(avoidInfo.getExpertIds()).values()));
}
result.setAvoidInfo(vo);
} else {
List<ExpertInviteRule> appoints = groupByType.get(ExpertInviteTypeEnum.APPOINT);
ExpertInviteRule appoint = appoints.get(0);
AppointInviteRuleDTO appointRule = JSON.parseObject(appoint.getInviteRule(), AppointInviteRuleDTO.class);
AppointRuleVO vo = new AppointRuleVO();
vo.setInviteDesc(appointRule.getInviteDesc());
vo.setExperts(new ArrayList<>(meetingManageHelper.getExpertBasicInfo(appointRule.getExpertIds()).values()));
result.setAppointRule(vo);
}
return result;
}


+ 11
- 0
pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/IMeetingInnerProjectService.java Parādīt failu

@@ -3,6 +3,8 @@ package com.ningdatech.pmapi.meeting.service;
import com.ningdatech.pmapi.meeting.entity.domain.MeetingInnerProject;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* <p>
* 会议评审内部项目表 服务类
@@ -13,4 +15,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IMeetingInnerProjectService extends IService<MeetingInnerProject> {

/**
* 查询会议评审的内部项目
*
* @param meetingId 会议ID
* @return 会议关联的系统内部项目
* @author WendyYang
**/
List<MeetingInnerProject> listByMeetingId(Long meetingId);

}

+ 11
- 0
pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/IMeetingOuterProjectService.java Parādīt failu

@@ -3,6 +3,8 @@ package com.ningdatech.pmapi.meeting.service;
import com.ningdatech.pmapi.meeting.entity.domain.MeetingOuterProject;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* <p>
* 会议评审外部项目 服务类
@@ -13,4 +15,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IMeetingOuterProjectService extends IService<MeetingOuterProject> {

/**
* 查询会议评审的外部项目
*
* @param meetingId 会议ID
* @return 评审的外部项目
* @author WendyYang
**/
List<MeetingOuterProject> listByMeetingId(Long meetingId);

}

+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/impl/ExpertInviteAvoidRuleServiceImpl.java Parādīt failu

@@ -38,7 +38,7 @@ public class ExpertInviteAvoidRuleServiceImpl extends ServiceImpl<ExpertInviteAv
AvoidInfoDTO avoidInfo = new AvoidInfoDTO();
avoidInfo.setAvoidOrgIdList(StrUtils.split(avoidRule.getAvoidOrgIds()));
avoidInfo.setAvoidUnitIdList(StrUtils.split(avoidRule.getAvoidUnitIds()));
avoidInfo.setExpertIds(BizUtils.splitToLong(avoidRule.getExpertIds()));
avoidInfo.setExpertIds(BizUtils.splitToLong(avoidRule.getAvoidExpertIds()));
avoidInfo.setWeekInviteCount(avoidInfo.getWeekInviteCount());
return avoidInfo;
}


+ 10
- 1
pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/impl/MeetingInnerProjectServiceImpl.java Parādīt failu

@@ -1,11 +1,14 @@
package com.ningdatech.pmapi.meeting.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ningdatech.pmapi.meeting.entity.domain.MeetingInnerProject;
import com.ningdatech.pmapi.meeting.mapper.MeetingInnerProjectMapper;
import com.ningdatech.pmapi.meeting.service.IMeetingInnerProjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* <p>
* 会议评审内部项目表 服务实现类
@@ -17,4 +20,10 @@ import org.springframework.stereotype.Service;
@Service
public class MeetingInnerProjectServiceImpl extends ServiceImpl<MeetingInnerProjectMapper, MeetingInnerProject> implements IMeetingInnerProjectService {

@Override
public List<MeetingInnerProject> listByMeetingId(Long meetingId) {
return list(Wrappers.lambdaQuery(MeetingInnerProject.class)
.eq(MeetingInnerProject::getMeetingId, meetingId));
}

}

+ 10
- 1
pmapi/src/main/java/com/ningdatech/pmapi/meeting/service/impl/MeetingOuterProjectServiceImpl.java Parādīt failu

@@ -1,11 +1,14 @@
package com.ningdatech.pmapi.meeting.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ningdatech.pmapi.meeting.entity.domain.MeetingOuterProject;
import com.ningdatech.pmapi.meeting.mapper.MeetingOuterProjectMapper;
import com.ningdatech.pmapi.meeting.service.IMeetingOuterProjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* <p>
* 会议评审外部项目 服务实现类
@@ -17,4 +20,10 @@ import org.springframework.stereotype.Service;
@Service
public class MeetingOuterProjectServiceImpl extends ServiceImpl<MeetingOuterProjectMapper, MeetingOuterProject> implements IMeetingOuterProjectService {

@Override
public List<MeetingOuterProject> listByMeetingId(Long meetingId) {
return list(Wrappers.lambdaQuery(MeetingOuterProject.class)
.eq(MeetingOuterProject::getMeetingId, meetingId));
}

}

+ 16
- 0
pmapi/src/main/java/com/ningdatech/pmapi/meta/helper/ExpertUserInfoHelper.java Parādīt failu

@@ -0,0 +1,16 @@
package com.ningdatech.pmapi.meta.helper;

import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;

/**
* @author liuxinxin
* @date 2023/3/2 上午11:02
*/

public interface ExpertUserInfoHelper {

ExpertUserFullInfo getExpertBasicFullInfo(Long expertUserId);

ExpertRegionInfo getExpertRegionInfo(Long expertUserId);
}

+ 63
- 0
pmapi/src/main/java/com/ningdatech/pmapi/meta/helper/ExpertUserInfoHelperImpl.java Parādīt failu

@@ -0,0 +1,63 @@
package com.ningdatech.pmapi.meta.helper;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

/**
* @author liuxinxin
* @date 2022/8/30 下午2:17
* 公共专家相关信息工具类 用于获取专家的一些基础信息
*/
@Component
@RequiredArgsConstructor
public class ExpertUserInfoHelperImpl implements ExpertUserInfoHelper {

private final IExpertUserFullInfoService iExpertUserFullInfoService;

/**
* 获取专家
*
* @param expertUserId
* @return
*/
@Override
public ExpertUserFullInfo getExpertBasicFullInfo(Long expertUserId) {
ExpertUserFullInfo one = iExpertUserFullInfoService
.getOne(Wrappers.lambdaQuery(ExpertUserFullInfo.class).eq(ExpertUserFullInfo::getUserId, expertUserId));
return one;
}

/**
* 获取专家层级
*
* @param expertUserId
* @return
*/
@Override
public ExpertRegionInfo getExpertRegionInfo(Long expertUserId) {
ExpertUserFullInfo one = getExpertBasicFullInfo(expertUserId);

Integer regionLevel = one.getRegionLevel();
String regionCode = one.getRegionCode();
ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo();
expertRegionInfo.setRegionCode(regionCode);
expertRegionInfo.setRegionLevel(regionLevel);
return expertRegionInfo;
}

// /**
// * 专家是否已经出库
// */
// public Boolean isDelivery(Long expertUserId) {
// ExpertUserFullInfo one = getExpertBasicFullInfo(expertUserId);
// if (Objects.isNull(one)) {
// return true;
// }
// return ExpertAccountStatusEnum.DELIVERY.getKey().equals(one.getExpertAccountStatus());
// }

}

+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/meta/manage/MetaManage.java Parādīt failu

@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.constant.BoolDisplayEnum;
import com.ningdatech.pmapi.common.enumeration.BoolDisplayEnum;
import com.ningdatech.pmapi.common.util.BizUtils;
import com.ningdatech.pmapi.meta.assembler.MetaDictionaryAssembler;
import com.ningdatech.pmapi.meta.assembler.MetaTagAssembler;


+ 15
- 0
pmapi/src/main/java/com/ningdatech/pmapi/meta/service/IExpertDictionaryService.java Parādīt failu

@@ -1,8 +1,12 @@
package com.ningdatech.pmapi.meta.service;

import com.ningdatech.pmapi.meta.constant.DictExpertInfoTypeEnum;
import com.ningdatech.pmapi.meta.model.entity.ExpertDictionary;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Collection;
import java.util.List;

/**
* <p>
* 服务类
@@ -13,4 +17,15 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IExpertDictionaryService extends IService<ExpertDictionary> {


/**
* 根据专家ID批量查询专家字典信息
*
* @param userIds 专家ID
* @param dictType 专家字典类型
* @return /
* @author WendyYang
**/
List<ExpertDictionary> listByUserId(Collection<Long> userIds, DictExpertInfoTypeEnum dictType);

}

+ 17
- 2
pmapi/src/main/java/com/ningdatech/pmapi/meta/service/impl/ExpertDictionaryServiceImpl.java Parādīt failu

@@ -1,11 +1,17 @@
package com.ningdatech.pmapi.meta.service.impl;

import com.ningdatech.pmapi.meta.model.entity.ExpertDictionary;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ningdatech.pmapi.meta.constant.DictExpertInfoTypeEnum;
import com.ningdatech.pmapi.meta.mapper.ExpertDictionaryMapper;
import com.ningdatech.pmapi.meta.model.entity.ExpertDictionary;
import com.ningdatech.pmapi.meta.service.IExpertDictionaryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.Collection;
import java.util.List;

/**
* <p>
* 服务实现类
@@ -17,4 +23,13 @@ import org.springframework.stereotype.Service;
@Service
public class ExpertDictionaryServiceImpl extends ServiceImpl<ExpertDictionaryMapper, ExpertDictionary> implements IExpertDictionaryService {

@Override
public List<ExpertDictionary> listByUserId(Collection<Long> userIds, DictExpertInfoTypeEnum dictType) {
// 获取专家职称
LambdaQueryWrapper<ExpertDictionary> query = Wrappers.lambdaQuery(ExpertDictionary.class)
.in(ExpertDictionary::getUserId, userIds)
.eq(ExpertDictionary::getExpertInfoField, dictType.getKey());
return list(query);
}

}

+ 1
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/PrequalificationDeclaredProjectManage.java Parādīt failu

@@ -8,7 +8,6 @@ import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.common.enumeration.ProjectProcessStageEnum;
import com.ningdatech.pmapi.common.helper.UserInfoHelper;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.projectdeclared.contants.DeclaredProjectContant;
import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO;
import com.ningdatech.pmapi.projectdeclared.model.dto.ProjectConditionDTO;
import com.ningdatech.pmapi.projectdeclared.model.req.PrequalificationDeclaredListReq;
@@ -21,7 +20,7 @@ import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq;
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO;
import com.ningdatech.pmapi.projectlib.service.IProjectInstService;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
import com.ningdatech.pmapi.staging.serivice.IProjectStagingService;
import com.ningdatech.pmapi.staging.service.IProjectStagingService;
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
import com.ningdatech.pmapi.user.util.LoginUserUtil;
import com.wflow.bean.entity.WflowModels;


+ 13
- 14
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/AnnualPlanHandle.java Parādīt failu

@@ -6,15 +6,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.manage.AnnualPlanLibManage;
import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;

@@ -63,7 +62,7 @@ public class AnnualPlanHandle extends AbstractProcessBusinessHandle {
// 项目状态为年度计划中之前的状态
if (fieldList.contains(status)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.ANNUAL_PLAN);
processDetailVO.setProcessName(CommonConst.ANNUAL_PLAN);
processSchedule.add(processDetailVO);
return;
}
@@ -71,31 +70,31 @@ public class AnnualPlanHandle extends AbstractProcessBusinessHandle {
// 项目状态为年度计划中
if (ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode().equals(status)){
// 根据部门联审通过的时间获取
NdProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(NdProjectStatusChange.class)
.eq(NdProjectStatusChange::getProjectId, projectId)
.eq(NdProjectStatusChange::getEvent, ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS.name())
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, projectId)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS.name())
.last("limit 1"));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setStepStatus(StepStatusEnum.ON_GOING);

} else if (ProjectStatusEnum.BE_SUSPENDED.getCode().equals(status)) {
// 根据年度计划暂缓的时间获取
NdProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(NdProjectStatusChange.class)
.eq(NdProjectStatusChange::getProjectId, projectId)
.eq(NdProjectStatusChange::getEvent, ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND.name())
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, projectId)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND.name())
.last("limit 1"));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setStepStatus(StepStatusEnum.REJECTED);
} else {
// 根据开启方案申报的时间获取
NdProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(NdProjectStatusChange.class)
.eq(NdProjectStatusChange::getProjectId, projectId)
.eq(NdProjectStatusChange::getEvent, ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE.name())
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, projectId)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE.name())
.last("limit 1"));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED);
}
processDetailVO.setProcessName(CommonConstant.ANNUAL_PLAN);
processDetailVO.setProcessName(CommonConst.ANNUAL_PLAN);
processSchedule.add(processDetailVO);
}
}

+ 7
- 7
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ArchivedHandle.java Parādīt failu

@@ -7,11 +7,11 @@ import com.ningdatech.pmapi.projectlib.service.IProjectService;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;
import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService;

@@ -41,19 +41,19 @@ public class ArchivedHandle extends AbstractProcessBusinessHandle {
// 项目阶段不为已归档
if (!ProjectStatusEnum.ARCHIVED.getCode().equals(status)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.ARCHIVED);
processDetailVO.setProcessName(CommonConst.ARCHIVED);
processSchedule.add(processDetailVO);
return;
}
// 项目阶段为已归档
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED);
// 根据项目终验获取归档时间
NdProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(NdProjectStatusChange.class)
.eq(NdProjectStatusChange::getProjectId, projectId)
.eq(NdProjectStatusChange::getEvent, ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS.name())
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, projectId)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS.name())
.last("limit 1"));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setProcessName(CommonConstant.ARCHIVED);
processDetailVO.setProcessName(CommonConst.ARCHIVED);
processSchedule.add(processDetailVO);
}
}

+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ConstructionPlanReviewHandle.java Parādīt failu

@@ -11,7 +11,7 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst;
@@ -51,7 +51,7 @@ public class ConstructionPlanReviewHandle extends AbstractProcessBusinessHandle

if (Objects.isNull(projectInst)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.CONSTRUCTION_PLAN_REVIEW);
processDetailVO.setProcessName(CommonConst.CONSTRUCTION_PLAN_REVIEW);
processSchedule.add(processDetailVO);
return;
}
@@ -76,7 +76,7 @@ public class ConstructionPlanReviewHandle extends AbstractProcessBusinessHandle
processDetailVO.setFinishTime(finishTime);
}
processDetailVO.setProcessProgressVo(instanceDetail);
processDetailVO.setProcessName(CommonConstant.CONSTRUCTION_PLAN_REVIEW);
processDetailVO.setProcessName(CommonConst.CONSTRUCTION_PLAN_REVIEW);
processSchedule.add(processDetailVO);
}
}

+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/DeptUnitedReviewHandle.java Parādīt failu

@@ -11,7 +11,7 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst;
@@ -50,7 +50,7 @@ public class DeptUnitedReviewHandle extends AbstractProcessBusinessHandle {
.last("limit 1"));
if (Objects.isNull(projectInst)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.DEPT_UNITED_REVIEW);
processDetailVO.setProcessName(CommonConst.DEPT_UNITED_REVIEW);
processSchedule.add(processDetailVO);
return;
}
@@ -74,7 +74,7 @@ public class DeptUnitedReviewHandle extends AbstractProcessBusinessHandle {
processDetailVO.setFinishTime(finishTime);
}
processDetailVO.setProcessProgressVo(instanceDetail);
processDetailVO.setProcessName(CommonConstant.DEPT_UNITED_REVIEW);
processDetailVO.setProcessName(CommonConst.DEPT_UNITED_REVIEW);
processSchedule.add(processDetailVO);
}
}

+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/PreliminaryPreviewHandle.java Parādīt failu

@@ -3,7 +3,7 @@ package com.ningdatech.pmapi.projectlib.handle;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.ningdatech.basic.util.NdDateUtils;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst;
@@ -49,7 +49,7 @@ public class PreliminaryPreviewHandle extends AbstractProcessBusinessHandle {
.last("limit 1"));
if (Objects.isNull(projectInst)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.PRELIMINARY_PREVIEW);
processDetailVO.setProcessName(CommonConst.PRELIMINARY_PREVIEW);
processSchedule.add(processDetailVO);
return;
}
@@ -73,7 +73,7 @@ public class PreliminaryPreviewHandle extends AbstractProcessBusinessHandle {
processDetailVO.setFinishTime(finishTime);
}
processDetailVO.setProcessProgressVo(instanceDetail);
processDetailVO.setProcessName(CommonConstant.PRELIMINARY_PREVIEW);
processDetailVO.setProcessName(CommonConst.PRELIMINARY_PREVIEW);
processSchedule.add(processDetailVO);
}
}

+ 7
- 12
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectApprovalHandle.java Parādīt failu

@@ -3,24 +3,19 @@ package com.ningdatech.pmapi.projectlib.handle;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.basic.util.NdDateUtils;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.manage.AnnualPlanLibManage;
import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq;
import com.ningdatech.pmapi.projectlib.model.vo.AnnualPlanListItemVO;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;
import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
@@ -78,7 +73,7 @@ public class ProjectApprovalHandle extends AbstractProcessBusinessHandle {
// 项目状态为待立项批复之前的状态
if (fieldList.contains(status)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.PROJECT_APPROVAL);
processDetailVO.setProcessName(CommonConst.PROJECT_APPROVAL);
processSchedule.add(processDetailVO);
return;
}
@@ -86,9 +81,9 @@ public class ProjectApprovalHandle extends AbstractProcessBusinessHandle {
// 当前项目状态为待立项批复
if (ProjectStatusEnum.TO_BE_APPROVED.getCode().equals(status)){
// 根据建设方案评审通过的时间获取
NdProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(NdProjectStatusChange.class)
.eq(NdProjectStatusChange::getProjectId, projectId)
.eq(NdProjectStatusChange::getEvent, ProjectStatusChangeEvent.PLAN_REVIEW_PASS.name())
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, projectId)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.PLAN_REVIEW_PASS.name())
.last("limit 1"));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setStepStatus(StepStatusEnum.ON_GOING);
@@ -101,7 +96,7 @@ public class ProjectApprovalHandle extends AbstractProcessBusinessHandle {
processDetailVO.setFinishTime(approvalDateTime);
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED);
}
processDetailVO.setProcessName(CommonConstant.PROJECT_APPROVAL);
processDetailVO.setProcessName(CommonConst.PROJECT_APPROVAL);
processSchedule.add(processDetailVO);
}
}

+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectDeclareHandle.java Parādīt failu

@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.projectlib.handle;

import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;
@@ -37,7 +37,7 @@ public class ProjectDeclareHandle extends AbstractProcessBusinessHandle {
Project project = projectService.getById(projectId);
LocalDateTime createOn = project.getCreateOn();
processDetailVO.setFinishTime(createOn);
processDetailVO.setProcessName(CommonConstant.PROJECT_DECLARE);
processDetailVO.setProcessName(CommonConst.PROJECT_DECLARE);
processSchedule.add(processDetailVO);
}
}

+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectFinalInspectionHandle.java Parādīt failu

@@ -15,7 +15,7 @@ import com.wflow.workflow.service.ProcessInstanceService;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;

@@ -50,7 +50,7 @@ public class ProjectFinalInspectionHandle extends AbstractProcessBusinessHandle

if (Objects.isNull(projectInst)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.PROJECT_FINAL_INSPECTION);
processDetailVO.setProcessName(CommonConst.PROJECT_FINAL_INSPECTION);
processSchedule.add(processDetailVO);
return;
}
@@ -76,7 +76,7 @@ public class ProjectFinalInspectionHandle extends AbstractProcessBusinessHandle
processDetailVO.setFinishTime(finishTime);
}
processDetailVO.setProcessProgressVo(instanceDetail);
processDetailVO.setProcessName(CommonConstant.PRELIMINARY_PREVIEW);
processDetailVO.setProcessName(CommonConst.PRELIMINARY_PREVIEW);
processSchedule.add(processDetailVO);
}
}

+ 7
- 9
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectPreliminaryInspectionHandle.java Parādīt failu

@@ -4,19 +4,17 @@ import static com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum.*;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.manage.AnnualPlanLibManage;
import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;
import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService;
@@ -60,7 +58,7 @@ public class ProjectPreliminaryInspectionHandle extends AbstractProcessBusinessH
// 项目状态不在建设中及之后的状态
if (!fieldList.contains(status)){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.PROJECT_PRELIMINARY_INSPECTION);
processDetailVO.setProcessName(CommonConst.PROJECT_PRELIMINARY_INSPECTION);
processSchedule.add(processDetailVO);
return;
}
@@ -70,13 +68,13 @@ public class ProjectPreliminaryInspectionHandle extends AbstractProcessBusinessH
}else {
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED);
// 根据初验备案的时间获取
NdProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(NdProjectStatusChange.class)
.eq(NdProjectStatusChange::getProjectId, projectId)
.eq(NdProjectStatusChange::getEvent, ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD.name())
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, projectId)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD.name())
.last("limit 1"));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
}
processDetailVO.setProcessName(CommonConstant.TENDER_PURCHASE);
processDetailVO.setProcessName(CommonConst.TENDER_PURCHASE);
processSchedule.add(processDetailVO);
}
}

+ 7
- 14
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/TenderPurchaseHandle.java Parādīt failu

@@ -2,26 +2,19 @@ package com.ningdatech.pmapi.projectlib.handle;

import static com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.manage.AnnualPlanLibManage;
import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq;
import com.ningdatech.pmapi.projectlib.model.vo.AnnualPlanListItemVO;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;
import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
@@ -63,7 +56,7 @@ public class TenderPurchaseHandle extends AbstractProcessBusinessHandle {
// 未进行立项批复
if (Objects.isNull(project.getApprovalDate())){
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConstant.TENDER_PURCHASE);
processDetailVO.setProcessName(CommonConst.TENDER_PURCHASE);
processSchedule.add(processDetailVO);
return;
}
@@ -74,13 +67,13 @@ public class TenderPurchaseHandle extends AbstractProcessBusinessHandle {
}else if (fieldList.contains(status)){
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED);
// 根据采购备案的时间获取
NdProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(NdProjectStatusChange.class)
.eq(NdProjectStatusChange::getProjectId, projectId)
.eq(NdProjectStatusChange::getEvent, ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD.name())
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, projectId)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD.name())
.last("limit 1"));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
}
processDetailVO.setProcessName(CommonConstant.TENDER_PURCHASE);
processDetailVO.setProcessName(CommonConst.TENDER_PURCHASE);
processSchedule.add(processDetailVO);
}
}

+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/UnitInnerAuditHandle.java Parādīt failu

@@ -10,7 +10,7 @@ import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst;
import com.ningdatech.pmapi.projectlib.service.IProjectInstService;

import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO;
import com.wflow.workflow.bean.process.ProgressNode;
@@ -69,7 +69,7 @@ public class UnitInnerAuditHandle extends AbstractProcessBusinessHandle {
processDetailVO.setFinishTime(finishTime);
}
processDetailVO.setProcessProgressVo(instanceDetail);
processDetailVO.setProcessName(CommonConstant.UNIT_INNER_AUDIT);
processDetailVO.setProcessName(CommonConst.UNIT_INNER_AUDIT);
processSchedule.add(processDetailVO);
}
}

+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java Parādīt failu

@@ -12,7 +12,7 @@ import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.basic.util.ValidUtil;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
@@ -217,8 +217,8 @@ public class AnnualPlanLibManage {
}

public void exportList(ProjectListReq param, HttpServletResponse response) {
param.setPageNumber(CommonConstant.EXPORT_PAGE_NUMBER);
param.setPageSize(CommonConstant.EXPORT_PAGE_SIZE);
param.setPageNumber(CommonConst.EXPORT_PAGE_NUMBER);
param.setPageSize(CommonConst.EXPORT_PAGE_SIZE);
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param);
Integer isTemporaryAugment = param.getIsTemporaryAugment();
if (Objects.isNull(isTemporaryAugment)){


+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java Parādīt failu

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter;
import com.ningdatech.pmapi.common.util.ExcelDownUtil;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
@@ -135,8 +135,8 @@ public class ProjectLibManage {
}

public void exportList(ProjectListReq param, HttpServletResponse response) {
param.setPageNumber(CommonConstant.EXPORT_PAGE_NUMBER);
param.setPageSize(CommonConstant.EXPORT_PAGE_SIZE);
param.setPageNumber(CommonConst.EXPORT_PAGE_NUMBER);
param.setPageSize(CommonConst.EXPORT_PAGE_SIZE);
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param);
List<Project> projects = projectService.list(query);



+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectRenewalFundManage.java Parādīt failu

@@ -8,7 +8,7 @@ import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.basic.util.NdDateUtils;
import com.ningdatech.pmapi.common.constant.CommonConstant;
import com.ningdatech.pmapi.common.constant.CommonConst;
import com.ningdatech.pmapi.common.util.ExcelDownUtil;
import com.ningdatech.pmapi.common.util.ExcelExportStyle;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectRenewalApprovalStatusEnum;
@@ -167,8 +167,8 @@ public class ProjectRenewalFundManage {

public void exportList(HttpServletResponse response, ProjectRenewalListReq param) {

param.setPageNumber(CommonConstant.EXPORT_PAGE_NUMBER);
param.setPageSize(CommonConstant.EXPORT_PAGE_SIZE);
param.setPageNumber(CommonConst.EXPORT_PAGE_NUMBER);
param.setPageSize(CommonConst.EXPORT_PAGE_SIZE);
Page<ProjectRenewalFundDeclarationPO> page = param.page();
projectRenewalFundDeclarationService.pageSql(page, param);
List<ProjectRenewalFundDeclarationPO> records = page.getRecords();


+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/NdProjectStatusChangeMapper.java Parādīt failu

@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.projectlib.mapper;

import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @author CMM
* @since 2023-02-27
*/
public interface NdProjectStatusChangeMapper extends BaseMapper<NdProjectStatusChange> {
public interface NdProjectStatusChangeMapper extends BaseMapper<ProjectStatusChange> {

}

+ 0
- 95
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/NdProjectStatusChange.java Parādīt failu

@@ -1,95 +0,0 @@
package com.ningdatech.pmapi.projectlib.model.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
* <p>
*
* </p>
*
* @author CMM
* @since 2023-02-27
*/
@TableName("nd_project_status_change")
@ApiModel(value = "NdProjectStatusChange对象", description = "")
public class NdProjectStatusChange implements Serializable {

private static final long serialVersionUID = 1L;

@ApiModelProperty("主键")
private Long id;

@ApiModelProperty("项目ID")
private Long projectId;

@ApiModelProperty("状态机执行前的项目状态")
private Integer beforeStatus;

@ApiModelProperty("状态机执行后的项目状态")
private Integer afterStatus;

@ApiModelProperty("状态变更对应的事件")
private String event;

@ApiModelProperty("状态变更发生的时间")
private LocalDateTime createOn;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}
public Long getProjectId() {
return projectId;
}

public void setProjectId(Long projectId) {
this.projectId = projectId;
}
public Integer getBeforeStatus() {
return beforeStatus;
}

public void setBeforeStatus(Integer beforeStatus) {
this.beforeStatus = beforeStatus;
}
public Integer getAfterStatus() {
return afterStatus;
}

public void setAfterStatus(Integer afterStatus) {
this.afterStatus = afterStatus;
}
public String getEvent() {
return event;
}

public void setEvent(String event) {
this.event = event;
}
public LocalDateTime getCreateOn() {
return createOn;
}

public void setCreateOn(LocalDateTime createOn) {
this.createOn = createOn;
}

@Override
public String toString() {
return "NdProjectStatusChange{" +
"id=" + id +
", projectId=" + projectId +
", beforeStatus=" + beforeStatus +
", afterStatus=" + afterStatus +
", event=" + event +
", createOn=" + createOn +
"}";
}
}

+ 48
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/ProjectStatusChange.java Parādīt failu

@@ -0,0 +1,48 @@
package com.ningdatech.pmapi.projectlib.model.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* <p>
*
* </p>
*
* @author CMM
* @since 2023-02-27
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("nd_project_status_change")
@ApiModel(value = "NdProjectStatusChange对象", description = "")
public class ProjectStatusChange implements Serializable {

private static final long serialVersionUID = 1L;

@ApiModelProperty("主键")
private Long id;

@ApiModelProperty("项目ID")
private Long projectId;

@ApiModelProperty("状态机执行前的项目状态")
private Integer beforeStatus;

@ApiModelProperty("状态机执行后的项目状态")
private Integer afterStatus;

@ApiModelProperty("状态变更对应的事件")
private String event;

@ApiModelProperty("状态变更发生的时间")
private LocalDateTime createOn;
}

+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/INdProjectStatusChangeService.java Parādīt failu

@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.projectlib.service;

import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.baomidou.mybatisplus.extension.service.IService;

/**
@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @author CMM
* @since 2023-02-27
*/
public interface INdProjectStatusChangeService extends IService<NdProjectStatusChange> {
public interface INdProjectStatusChangeService extends IService<ProjectStatusChange> {

}

+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/impl/NdProjectStatusChangeServiceImpl.java Parādīt failu

@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.projectlib.service.impl;

import com.ningdatech.pmapi.projectlib.model.entity.NdProjectStatusChange;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectStatusChange;
import com.ningdatech.pmapi.projectlib.mapper.NdProjectStatusChangeMapper;
import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,6 +15,6 @@ import org.springframework.stereotype.Service;
* @since 2023-02-27
*/
@Service
public class NdProjectStatusChangeServiceImpl extends ServiceImpl<NdProjectStatusChangeMapper, NdProjectStatusChange> implements INdProjectStatusChangeService {
public class NdProjectStatusChangeServiceImpl extends ServiceImpl<NdProjectStatusChangeMapper, ProjectStatusChange> implements INdProjectStatusChangeService {

}

+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/InitProcessTask.java Parādīt failu

@@ -6,9 +6,9 @@ import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Maps;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.pmapi.common.constant.RegionConst;
import com.ningdatech.pmapi.common.enumeration.ProjectProcessStageEnum;
import com.ningdatech.pmapi.scheduler.contants.TaskContant;
import com.ningdatech.pmapi.sys.contant.RegionConst;
import com.ningdatech.pmapi.sys.model.entity.Region;
import com.ningdatech.pmapi.sys.service.IRegionService;
import com.wflow.bean.dto.WflowModelHistorysDto;
@@ -53,7 +53,7 @@ public class InitProcessTask {
//1.查出丽水市下的 区县 分别去初始化 表单和流程配置数据
List<Region> regions = regionService.list(Wrappers.lambdaQuery(Region.class)
.eq(Region::getDeleted,Boolean.FALSE)
.eq(Region::getParentCode, RegionConst.LS_REGION_CODE));
.eq(Region::getParentCode, RegionConst.RC_LS));

if(CollUtil.isEmpty(regions)){
throw new BizException("丽水地区数据为空 任务结束!");


+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/ProjectStatusFlowTask.java Parādīt failu

@@ -8,7 +8,7 @@ import com.ningdatech.pmapi.projectlib.service.IProjectService;
import com.ningdatech.pmapi.scheduler.contants.TaskContant;
import com.ningdatech.pmapi.staging.contants.StagingContant;
import com.ningdatech.pmapi.staging.model.entity.ProjectStaging;
import com.ningdatech.pmapi.staging.serivice.IProjectStagingService;
import com.ningdatech.pmapi.staging.service.IProjectStagingService;
import com.ningdatech.pmapi.staging.utils.ProjectStatusFlowMapUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;


+ 87
- 0
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/WorkNoticeFlowTask.java Parādīt failu

@@ -0,0 +1,87 @@
package com.ningdatech.pmapi.scheduler.task;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;

import com.ningdatech.basic.model.GenericResult;
import com.ningdatech.pmapi.staging.model.entity.WorkNoticeStaging;
import com.ningdatech.pmapi.staging.service.INdWorkNoticeStagingService;
import com.ningdatech.pmapi.staging.utils.WorkNoticeFlowMapUtil;
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo;
import com.ningdatech.zwdd.client.ZwddClient;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
import com.ningdatech.pmapi.scheduler.contants.TaskContant;
import com.ningdatech.pmapi.staging.contants.StagingContant;
import com.ningdatech.pmapi.staging.model.entity.ProjectStaging;
import com.ningdatech.pmapi.staging.service.IProjectStagingService;
import com.ningdatech.pmapi.staging.utils.ProjectStatusFlowMapUtil;

import cn.hutool.core.collection.CollUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

/**
* 发送工作通知定时任务
* @return
* @author CMM
* @since 2023/02/28 21:23
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class WorkNoticeFlowTask {

private final INdWorkNoticeStagingService workNoticeStagingService;
private final ZwddClient zwddClient;

@Scheduled(cron = "0 */1 * * * ?")
public void statusFlow() throws UnknownHostException {
//测试暂时用自己电脑HOST
if (TaskContant.Host.HOST_CMM.equals(InetAddress.getLocalHost().getHostName())) {
//1. 定时取 工作通知暂存表的数据进行发送
List<WorkNoticeStaging> stagingList = workNoticeStagingService.list(Wrappers.lambdaQuery(WorkNoticeStaging.class)
.eq(WorkNoticeStaging::getDead, Boolean.FALSE)
.le(WorkNoticeStaging::getNextTime, LocalDateTime.now())
.le(WorkNoticeStaging::getRetryTimes, StagingContant.Retry.MAX_RETRY_TIMES)
.orderByAsc(WorkNoticeStaging::getId));

log.info("需要发送的工作通知 size:{} :{}",stagingList.size(), JSON.toJSONString(stagingList));
if(CollUtil.isEmpty(stagingList)){
log.info("没有需要发送的工作通知!");
return;
}
//遍历
for(WorkNoticeStaging workNoticeStaging : stagingList){
try{
WorkNoticeInfo workNoticeInfo = new WorkNoticeInfo();
BeanUtils.copyProperties(workNoticeStaging,workNoticeInfo);
String receiverUserId = workNoticeInfo.getReceiverUserId();
String bizMsgId = workNoticeInfo.getBizMsgId();
String msg = workNoticeInfo.getMsg();
GenericResult<Void> result = zwddClient.sendWorkNotice(receiverUserId, bizMsgId, msg);
if (result.isSuccess()){
//执行成功了 删除暂存的数据
workNoticeStagingService.removeById(workNoticeStaging);
}
}catch (Exception e){
log.error("发送工作通知 异常 bizMsgId:【" + workNoticeStaging.getBizMsgId() + "】 异常内容:" + e);
}finally {
//增加重试的次数 和下次扫描时间
workNoticeStagingService.addRetryTimes(workNoticeStaging);
}
}
}
}
}

+ 51
- 0
pmapi/src/main/java/com/ningdatech/pmapi/staging/enums/MsgTypeEnum.java Parādīt failu

@@ -0,0 +1,51 @@
package com.ningdatech.pmapi.staging.enums;

import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

import java.util.Objects;

/**
* 消息类型枚举
* @author CMM
* @since 2023/02/28 17:34
*/
@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum MsgTypeEnum {
/**
* 消息类型
*/
AUDIT(1, "项目审核(待审核)"),
PASS(2, "项目审核(通过)"),
REJECTED(3,"项目审核(被驳回)"),
BACKED(4,"项目审核(被退回)"),
WARING(5,"预警提醒"),
EXPORT_REVIEW(6,"专家评审"),
REVIEW_MEETING(7,"评审会议");

private Integer code;
private String desc;

public static String getDescByCode(Integer code) {
if (Objects.isNull(code)) {
return StringUtils.EMPTY;
}
for (MsgTypeEnum t : MsgTypeEnum.values()) {
if (code.equals(t.getCode())) {
return t.desc;
}
}
return StringUtils.EMPTY;
}

public boolean eq(String val) {
return this.name().equals(val);
}


}

+ 21
- 0
pmapi/src/main/java/com/ningdatech/pmapi/staging/mapper/NdWorkNoticeStagingMapper.java Parādīt failu

@@ -0,0 +1,21 @@
package com.ningdatech.pmapi.staging.mapper;

import com.ningdatech.pmapi.staging.model.entity.WorkNoticeStaging;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;

/**
* <p>
* Mapper 接口
* </p>
*
* @author CMM
* @since 2023-02-28
*/
public interface NdWorkNoticeStagingMapper extends BaseMapper<WorkNoticeStaging> {

Boolean addRetryTimes(@Param("id") Long id, @Param("retryTimes") Integer retryTimes,
@Param("nextRetryTime") LocalDateTime nextRetryTime, @Param("dead") Boolean dead);
}

+ 12
- 0
pmapi/src/main/java/com/ningdatech/pmapi/staging/mapper/NdWorkNoticeStagingMapper.xml Parādīt failu

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ningdatech.pmapi.staging.mapper.NdWorkNoticeStagingMapper">

<update id="addRetryTimes">
update nd_work_notice_staging
set retry_times = #{retryTimes},
next_time = #{nextRetryTime},
dead = #{dead}
where id = #{id} and retry_times = #{retryTimes - 1}
</update>
</mapper>

+ 71
- 0
pmapi/src/main/java/com/ningdatech/pmapi/staging/model/entity/WorkNoticeStaging.java Parādīt failu

@@ -0,0 +1,71 @@
package com.ningdatech.pmapi.staging.model.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;

import com.ningdatech.pmapi.staging.enums.MsgTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* <p>
*
* </p>
*
* @author CMM
* @since 2023-02-28
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("nd_work_notice_staging")
@ApiModel(value = "NdWorkNoticeStaging对象", description = "")
public class WorkNoticeStaging implements Serializable {

private static final long serialVersionUID = 1L;

@ApiModelProperty("主键")
private Long id;

@ApiModelProperty("浙政钉用户ID")
private Long accountId;

@ApiModelProperty("部门编号")
private String organizationCode;

@ApiModelProperty("部门名称")
private String organizationName;

@ApiModelProperty("工作通知唯一标识")
private String bizMsgId;

@ApiModelProperty("接收人浙政钉ID")
private String receiverUserId;

@ApiModelProperty("工作通知内容")
private String msg;

@ApiModelProperty("重试次数 最大10次")
private Integer retryTimes;

@ApiModelProperty("false 可继续扫描 true 死信")
private Boolean dead;

@ApiModelProperty("下次扫描时间")
private LocalDateTime nextTime;

@ApiModelProperty("消息类型")
private MsgTypeEnum msgType;

@ApiModelProperty("创建时间")
private LocalDateTime createOn;

@ApiModelProperty("更新时间")
private LocalDateTime updateOn;
}

+ 23
- 0
pmapi/src/main/java/com/ningdatech/pmapi/staging/service/INdWorkNoticeStagingService.java Parādīt failu

@@ -0,0 +1,23 @@
package com.ningdatech.pmapi.staging.service;

import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.staging.enums.MsgTypeEnum;
import com.ningdatech.pmapi.staging.model.entity.ProjectStaging;
import com.ningdatech.pmapi.staging.model.entity.WorkNoticeStaging;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo;

/**
* <p>
* 服务类
* </p>
*
* @author CMM
* @since 2023-02-28
*/
public interface INdWorkNoticeStagingService extends IService<WorkNoticeStaging> {

Boolean addRetryTimes(WorkNoticeStaging workNoticeStaging);

public Boolean addByWorkNotice(WorkNoticeInfo workNoticeInfo, MsgTypeEnum msgType) ;
}

pmapi/src/main/java/com/ningdatech/pmapi/staging/serivice/IProjectStagingService.java → pmapi/src/main/java/com/ningdatech/pmapi/staging/service/IProjectStagingService.java Parādīt failu

@@ -1,4 +1,4 @@
package com.ningdatech.pmapi.staging.serivice;
package com.ningdatech.pmapi.staging.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ningdatech.pmapi.projectlib.model.entity.Project;

+ 84
- 0
pmapi/src/main/java/com/ningdatech/pmapi/staging/service/impl/NdWorkNoticeStagingServiceImpl.java Parādīt failu

@@ -0,0 +1,84 @@
package com.ningdatech.pmapi.staging.service.impl;

import com.ningdatech.pmapi.staging.contants.StagingContant;
import com.ningdatech.pmapi.staging.enums.MsgTypeEnum;
import com.ningdatech.pmapi.staging.model.entity.ProjectStaging;
import com.ningdatech.pmapi.staging.model.entity.WorkNoticeStaging;
import com.ningdatech.pmapi.staging.mapper.NdWorkNoticeStagingMapper;
import com.ningdatech.pmapi.staging.service.INdWorkNoticeStagingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ningdatech.pmapi.staging.utils.WorkNoticeFlowMapUtil;
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
* <p>
* 服务实现类
* </p>
*
* @author CMM
* @since 2023-02-28
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class NdWorkNoticeStagingServiceImpl extends ServiceImpl<NdWorkNoticeStagingMapper, WorkNoticeStaging> implements INdWorkNoticeStagingService {

private final NdWorkNoticeStagingMapper mapper;

private final WorkNoticeFlowMapUtil workNoticeFlowMapUtil;

/**
* 增加 重试次数 和下次扫描时间
* @param workNoticeStaging
* @return java.lang.Boolean
* @author CMM
* @since 2023/02/28 18:02
*/
@Override
public Boolean addRetryTimes(WorkNoticeStaging workNoticeStaging) {
Integer retryTimes = workNoticeStaging.getRetryTimes() + 1;
if(!workNoticeFlowMapUtil.intervalTimeMap.containsKey(retryTimes)){
log.info("没有对应重试间隔时间 添加重试信息失败");
return Boolean.FALSE;
}
Integer addSeconds = workNoticeFlowMapUtil.intervalTimeMap.get(retryTimes);
Boolean dead = Boolean.FALSE;
//超过重试最大次数 dead置为 true
if(retryTimes.compareTo(StagingContant.Retry.MAX_RETRY_TIMES) > 0){
dead = Boolean.TRUE;
}
LocalDateTime nextRetryTime = LocalDateTime.now().plusSeconds(addSeconds);
return mapper.addRetryTimes(workNoticeStaging.getId(),retryTimes,nextRetryTime,dead);
}

/**
* 在对应的流程处理后,增加一个工作通知到暂存表中
* @param workNoticeInfo
* @param msgType
* @return java.lang.Boolean
* @author CMM
* @since 2023/02/28 20:02
*/
@Override
public Boolean addByWorkNotice(WorkNoticeInfo workNoticeInfo, MsgTypeEnum msgType) {
WorkNoticeStaging workNoticeStaging = WorkNoticeStaging.builder()
.accountId(workNoticeInfo.getAccountId())
.msg(workNoticeInfo.getMsg())
.bizMsgId(workNoticeInfo.getBizMsgId())
.organizationCode(workNoticeInfo.getOrganizationCode())
.organizationName(workNoticeInfo.getOrganizationName())
.receiverUserId(workNoticeInfo.getReceiverUserId())
.msgType(msgType)
.createOn(LocalDateTime.now())
.updateOn(LocalDateTime.now())
.nextTime(LocalDateTime.now())
.retryTimes(0)
.build();
return this.save(workNoticeStaging);
}
}

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels

Notiek ielāde…
Atcelt
Saglabāt