Bladeren bron

Merge remote-tracking branch 'origin/dev' into dev

tags/24082201
WendyYang 1 jaar geleden
bovenliggende
commit
dacf1d08d1
100 gewijzigde bestanden met toevoegingen van 1591 en 8045 verwijderingen
  1. +7
    -15
      hz-pm-api/pom.xml
  2. +0
    -10
      hz-pm-api/src/main/java/com/hz/pm/api/common/helper/RegionLimitHelper.java
  3. +15
    -19
      hz-pm-api/src/main/java/com/hz/pm/api/common/helper/UserInfoHelper.java
  4. +0
    -32
      hz-pm-api/src/main/java/com/hz/pm/api/common/helper/impl/RegionLimitHelperImpl.java
  5. +29
    -142
      hz-pm-api/src/main/java/com/hz/pm/api/common/helper/impl/UserInfoHelperImpl.java
  6. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/common/model/constant/BizConst.java
  7. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/common/model/constant/RegionConst.java
  8. +3
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/common/model/constant/StateMachineConst.java
  9. +3
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/HzProjectDeclareAction.java
  10. +0
    -273
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareAction.java
  11. +29
    -25
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareChoiceAction.java
  12. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareJNAction.java
  13. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareJYAction.java
  14. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareKFBAction.java
  15. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareLDAction.java
  16. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareLQAction.java
  17. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareQTAction.java
  18. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareQYAction.java
  19. +0
    -287
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareSCAction.java
  20. +0
    -279
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareSYAction.java
  21. +0
    -280
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareYHAction.java
  22. +3
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineBuilder.java
  23. +27
    -34
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineBuilderImpl.java
  24. +0
    -284
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineJNBuilder.java
  25. +0
    -285
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineJYBuilder.java
  26. +0
    -285
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineKFQBuilder.java
  27. +0
    -285
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineLDBuilder.java
  28. +0
    -286
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineLQBuilder.java
  29. +0
    -285
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineQTBuilder.java
  30. +0
    -285
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineQYBuilder.java
  31. +0
    -295
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineSCBuilder.java
  32. +0
    -285
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineSYBuilder.java
  33. +0
    -285
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineYHBuilder.java
  34. +0
    -34
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/contant/RegionContant.java
  35. +2
    -37
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/factory/ProjectDeclareGuardFactory.java
  36. +0
    -57
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/MachineBuilderFounder.java
  37. +10
    -23
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/StateMachineUtil.java
  38. +2
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/common/util/FreemarkerWordUtil.java
  39. +30
    -23
      hz-pm-api/src/main/java/com/hz/pm/api/common/util/SendWorkNoticeUtil.java
  40. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/constant/AnalysisBasicConstant.java
  41. +68
    -72
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/handle/CockpitStatsHandler.java
  42. +8
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/handle/ProjectStatusHandler.java
  43. +0
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/helper/DashboardHelper.java
  44. +54
    -70
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/DashboardProjectManage.java
  45. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/EarlyWarningStatisticsManage.java
  46. +16
    -19
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/MeetingStatisticsManage.java
  47. +38
    -33
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/ProjectCostStatisticsManage.java
  48. +1
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/dashboard/model/vo/ProjectStatisticsVO.java
  49. +1
    -7
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/model/DataScopeDTO.java
  50. +3
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/DataScopeContext.java
  51. +6
    -11
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/DashboardUserDataScopeProviderImpl.java
  52. +2
    -27
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/ExpertAdminDataScopeProviderImpl.java
  53. +2
    -17
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/ExpertDataScopeProviderImpl.java
  54. +0
    -27
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/HigherUserDataScopeProviderImpl.java
  55. +4
    -7
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/OrdinaryUserDataScopeProviderImpl.java
  56. +3
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/OrgAdminDataScopeProviderImpl.java
  57. +0
    -27
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/RegionAdminDataScopeProviderImpl.java
  58. +0
    -14
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/SuperAdminDataScopeProviderImpl.java
  59. +4
    -11
      hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/VisitorDataScopeProviderImpl.java
  60. +42
    -89
      hz-pm-api/src/main/java/com/hz/pm/api/ding/task/EmployeeBatchGetTask.java
  61. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/expert/manage/ExpertManage.java
  62. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/expert/model/SensitiveModifySegment.java
  63. +35
    -41
      hz-pm-api/src/main/java/com/hz/pm/api/expert/service/impl/ExpertInfoServiceImpl.java
  64. +8
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/external/MhApiClient.java
  65. +46
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/external/model/dto/MhProjectDTO.java
  66. +91
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/external/model/dto/MhProjectSchemeTargetDTO.java
  67. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/external/sms/SmsServiceClient.java
  68. +2
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/external/todo/TodoServiceClient.java
  69. +1
    -5
      hz-pm-api/src/main/java/com/hz/pm/api/external/todo/dto/AddSingleWkHandleDTO.java
  70. +6
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/DocumentationManage.java
  71. +71
    -87
      hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/ProjectFileManage.java
  72. +2
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/filemanage/model/entity/ProjectApplyBorrow.java
  73. +4
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/filemanage/model/vo/ProjectApplyBorrowVO.java
  74. +5
    -5
      hz-pm-api/src/main/java/com/hz/pm/api/fiscal/controller/CompanyFiscalCodeController.java
  75. +47
    -49
      hz-pm-api/src/main/java/com/hz/pm/api/fiscal/manage/CompanyFiscalCodeManage.java
  76. +1
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/fiscal/model/po/CompanyFiscalCodeAndSealSnReq.java
  77. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/fiscal/model/vo/CompanyFiscalCodeAndSealSnVO.java
  78. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/fiscal/service/ICompanyFiscalCodeService.java
  79. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/fiscal/service/impl/CompanyFiscalCodeServiceImpl.java
  80. +6
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/gov/controller/GovProjectCollectionController.java
  81. +71
    -124
      hz-pm-api/src/main/java/com/hz/pm/api/gov/manage/GovProjectCollectionManage.java
  82. +52
    -51
      hz-pm-api/src/main/java/com/hz/pm/api/gov/utils/ProjectConvertUtil.java
  83. +0
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/AppIrsManage.java
  84. +23
    -23
      hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/IrsProjectManage.java
  85. +3
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/leave/entity/po/LeaveCreateReq.java
  86. +7
    -7
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingCallOrMsgHelper.java
  87. +0
    -66
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingDataScopeHelper.java
  88. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/YxtClientHelper.java
  89. +2
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java
  90. +7
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/organization/controller/ProcDefController.java
  91. +5
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/performance/helper/impl/TemplateDetailBuildHelperImpl.java
  92. +70
    -82
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/AppAppraisalManage.java
  93. +90
    -84
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/IndicatorConfigManage.java
  94. +84
    -89
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/OrgSelfAppraisalManage.java
  95. +226
    -232
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/PerformanceAppraisalPlanManage.java
  96. +36
    -44
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/ReAppraisalManage.java
  97. +59
    -62
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/RectifyAuditManage.java
  98. +34
    -27
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/RectifyManage.java
  99. +73
    -69
      hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/VerifyManage.java
  100. +0
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/performance/model/dto/PerformanceIndicatorProjectTemplateSaveDTO.java

+ 7
- 15
hz-pm-api/pom.xml Bestand weergeven

@@ -9,9 +9,6 @@
</parent>
<artifactId>hz-pm-api</artifactId>
<version>1.0.0</version>
<properties>
<jjwt.version>0.11.5</jjwt.version>
</properties>

<dependencies>
<dependency>
@@ -108,12 +105,6 @@
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<!-- 阿里云oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@@ -128,12 +119,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--引入jwt-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
@@ -274,6 +259,13 @@
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<!--使用${environment}获取值-->
<environment>test</environment>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<environment>prod</environment>


+ 0
- 10
hz-pm-api/src/main/java/com/hz/pm/api/common/helper/RegionLimitHelper.java Bestand weergeven

@@ -39,14 +39,4 @@ public interface RegionLimitHelper {
*/
RegionContainsBO getContainsRegionBo(Integer regionLevel, String regionCode);



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

}

+ 15
- 19
hz-pm-api/src/main/java/com/hz/pm/api/common/helper/UserInfoHelper.java Bestand weergeven

@@ -1,7 +1,9 @@
package com.hz.pm.api.common.helper;

import com.hz.pm.api.user.entity.UserInfo;
import cn.hutool.core.util.NumberUtil;
import com.hz.pm.api.user.model.entity.UserInfo;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.ningdatech.basic.util.CollUtils;

import java.util.Collection;
import java.util.List;
@@ -14,18 +16,17 @@ import java.util.List;

public interface UserInfoHelper {

/**
* 根据用户id 获取 用户所属组织code organizationCode
*
* @param userId \
* @return \
*/
String getOrganizationCode(Long userId);

UserFullInfoDTO getUserFullInfoByMhUserIdOrOpenId(String mhUserId);

UserFullInfoDTO getUserFullInfo(Long userId);

default UserFullInfoDTO getUserFullInfo(String userId) {
if (NumberUtil.isLong(userId)) {
return getUserFullInfo(Long.parseLong(userId));
}
return null;
}

UserFullInfoDTO getUserFullInfo(UserInfo userInfo);

List<UserFullInfoDTO> getUserFullInfos(List<UserInfo> userInfos);
@@ -39,16 +40,11 @@ public interface UserInfoHelper {
*/
boolean isSuperOrRegionAdmin(Long userId);

UserFullInfoDTO getUserFullInfoByEmployeeCode(String employeeCode);
List<UserFullInfoDTO> listUserFullInfoByUserIds(Collection<Long> userIds);

List<UserFullInfoDTO> getUserFullInfoByEmployeeCodes(Collection<String> employeeCodes);

/**
* 获取用户任职所在单位code \
*
* @return \
*/
String getUserEmpPosUnitCode(Long userId);
default List<UserFullInfoDTO> listUserFullInfoByUserIds(List<String> userIds){
List<Long> userIdsLong = CollUtils.convert(userIds, Long::parseLong);
return listUserFullInfoByUserIds(userIdsLong);
}

String getMainOrgCode(String empPosUnitCode);
}

+ 0
- 32
hz-pm-api/src/main/java/com/hz/pm/api/common/helper/impl/RegionLimitHelperImpl.java Bestand weergeven

@@ -1,15 +1,10 @@
package com.hz.pm.api.common.helper.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.helper.basic.AbstractRegionLimitHelper;
import com.hz.pm.api.expert.service.IExpertUserFullInfoService;
import com.hz.pm.api.meta.model.bo.RegionContainsBO;
import com.hz.pm.api.sys.model.entity.Region;
import com.hz.pm.api.sys.service.IRegionService;
import com.hz.pm.api.user.entity.UserInfo;
import com.hz.pm.api.user.service.IUserInfoService;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
@@ -28,8 +23,6 @@ import java.util.Objects;
@Component
public class RegionLimitHelperImpl extends AbstractRegionLimitHelper {

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

public RegionLimitHelperImpl(RegionCacheHelper regionCache, IExpertUserFullInfoService expertUserFullInfoService
, IUserInfoService iUserInfoService, IRegionService regionService) {
super(regionCache, expertUserFullInfoService, iUserInfoService, regionService);
@@ -91,29 +84,4 @@ public class RegionLimitHelperImpl extends AbstractRegionLimitHelper {
return regionContains;
}


@Override
public List<RegionContainsBO> getExpertAdminContainsRegion(Long expertAdminUserId) {
if (Objects.isNull(expertAdminUserId)) {
logger.error("getExpertAdminContainsRegion expertAdminUserId is null");
return new ArrayList<>();
}
UserInfo userInfo = iUserInfoService.getById(expertAdminUserId);
if (Objects.isNull(userInfo) || StringUtils.isBlank(userInfo.getRegionCode())) {
logger.error("getExpertAdminContainsRegion userInfo is null Or regionCode is null");
return new ArrayList<>();
}
String regionCode = userInfo.getRegionCode();
List<Region> regionList = regionService.list(Wrappers.lambdaQuery(Region.class)
.eq(Region::getRegionCode, regionCode)
.orderByDesc(Region::getRegionLevel));
Region region = regionList.get(0);
Collection<String> regionCodes = regionCache
.listChildRegionCodeList(region.getRegionCode(), region.getRegionLevel());
RegionContainsBO regionContainsBO = new RegionContainsBO();
regionContainsBO.setContainsRegionCodeList(new ArrayList<>(regionCodes));
regionContainsBO.setParentRegionTreeLevel(region.getRegionLevel());
return CollectionUtil.toList(regionContainsBO);
}

}

+ 29
- 142
hz-pm-api/src/main/java/com/hz/pm/api/common/helper/impl/UserInfoHelperImpl.java Bestand weergeven

@@ -1,31 +1,28 @@
package com.hz.pm.api.common.helper.impl;

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.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.organization.model.entity.DingEmployeeInfo;
import com.hz.pm.api.organization.model.entity.DingOrganization;
import com.hz.pm.api.organization.service.IDingEmployeeInfoService;
import com.hz.pm.api.organization.service.IDingOrganizationService;
import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.sys.mapper.RoleMapper;
import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.sys.model.entity.UserRole;
import com.hz.pm.api.sys.service.IUserRoleService;
import com.hz.pm.api.user.model.enumeration.UserAvailableEnum;
import com.hz.pm.api.user.entity.UserInfo;
import com.hz.pm.api.user.model.entity.UserInfo;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.model.enumeration.UserAvailableEnum;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.hz.pm.api.user.service.IUserInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
* @author liuxinxin
@@ -37,22 +34,14 @@ public class UserInfoHelperImpl implements UserInfoHelper {


private final IUserInfoService userInfoService;
private final IDingEmployeeInfoService iDingEmployeeInfoService;
private final IDingOrganizationService iDingOrganizationService;
private final IUserRoleService iUserRoleService;
private final RoleMapper roleMapper;

@Override
public String getOrganizationCode(Long userId) {
UserFullInfoDTO userFullInfo = getUserFullInfo(userId);
return userFullInfo.getOrganizationCode();
}

@Override
public UserFullInfoDTO getUserFullInfoByMhUserIdOrOpenId(String mhUserId) {
LambdaQueryWrapper<UserInfo> query = Wrappers.lambdaQuery(UserInfo.class)
.eq(UserInfo::getMhUserId, mhUserId)
.or(q1 -> q1.eq(UserInfo::getWechatOpenId,mhUserId));
.or(q1 -> q1.eq(UserInfo::getWechatOpenId, mhUserId));
UserInfo userInfo = userInfoService.getOne(query);
if (Objects.isNull(userInfo)) {
return null;
@@ -74,65 +63,25 @@ public class UserInfoHelperImpl implements UserInfoHelper {
@Override
public UserFullInfoDTO getUserFullInfo(UserInfo userInfo) {
UserFullInfoDTO userFullInfo = new UserFullInfoDTO();
// 获取浙政钉雇员信息 组织信息
String employeeCode = userInfo.getEmployeeCode();
if (StringUtils.isNotBlank(employeeCode)) {
List<DingEmployeeInfo> dingEmployeeInfoList = iDingEmployeeInfoService
.list(Wrappers.lambdaQuery(DingEmployeeInfo.class)
.eq(DingEmployeeInfo::getEmployeeCode, employeeCode)
.eq(DingEmployeeInfo::getMainJob, "true"));
DingEmployeeInfo dingEmployeeInfo = dingEmployeeInfoList.get(0);


// 装配用户任职所在单位
String empPosUnitCode = dingEmployeeInfo.getEmpPosUnitCode();
if (StringUtils.isNotBlank(empPosUnitCode)) {
DingOrganization dingOrganization = iDingOrganizationService.getByOrgCode(empPosUnitCode);
if (Objects.nonNull(dingOrganization)) {
userFullInfo.setEmpPosUnitCode(empPosUnitCode);
userFullInfo.setEmpPosUnitName(dingOrganization.getOrganizationName());
userFullInfo.setRegionCode(dingOrganization.getDivisionCode());
}
}

// 装配用户所在orgCode
String organizationCode = dingEmployeeInfo.getOrganizationCode();
List<DingOrganization> dingOrganizationList = iDingOrganizationService.list(Wrappers
.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getOrganizationCode, organizationCode));
if (CollectionUtil.isNotEmpty(dingOrganizationList)) {
DingOrganization dingOrganization = dingOrganizationList.get(0);
userFullInfo.setOrganizationCode(dingOrganization.getOrganizationCode());
userFullInfo.setOrganizationName(dingOrganization.getOrganizationName());
// 测试使用
userFullInfo.setRegionLevel(3);
}
}

List<Role> roleList = new ArrayList<>();
// 获取用户角色列表信息
List<UserRole> userRoleList = iUserRoleService
.list(Wrappers.lambdaQuery(UserRole.class)
.eq(UserRole::getUserId, userInfo.getId()));
if (CollectionUtil.isNotEmpty(userRoleList)) {
List<UserRole> userRoleList = iUserRoleService.listByUserId(userInfo.getId());
if (CollUtil.isNotEmpty(userRoleList)) {
List<Long> roleIdList = userRoleList.stream()
.map(UserRole::getRoleId).distinct()
.collect(Collectors.toList());
roleList = roleMapper.selectBatchIds(roleIdList);
userFullInfo.setUserRoleList(roleMapper.selectBatchIds(roleIdList));
}
userFullInfo.setUserRoleList(roleList);

// 装配用户任职所在单位

// 装配返回
userFullInfo.setUserId(userInfo.getId());
userFullInfo.setMhUserId(userInfo.getMhUserId());
userFullInfo.setIdentifier(userInfo.getRealName());
userFullInfo.setRealName(userInfo.getRealName());
userFullInfo.setEmployeeCode(employeeCode);
userFullInfo.setMhUnitId(userInfo.getMhUnitId());
userFullInfo.setMhUnitName(userInfo.getMhUnitName());
userFullInfo.setUsername(userInfo.getRealName());
userFullInfo.setMobile(userInfo.getMobile());
userFullInfo.setAccountId(userInfo.getAccountId());

String available = userInfo.getAvailable();
if (StringUtils.isNotBlank(available)) {
userFullInfo.setAvailable(UserAvailableEnum.valueOf(available));
@@ -151,60 +100,20 @@ public class UserInfoHelperImpl implements UserInfoHelper {
if (CollUtil.isEmpty(userInfos)) {
return Collections.emptyList();
}
Map<String, UserInfo> userMap = userInfos.stream().collect(Collectors.toMap(UserInfo::getEmployeeCode, e -> e));
// 获取浙政钉雇员信息 组织信息
List<String> employeeCodes = userInfos.stream().map(UserInfo::getEmployeeCode).collect(Collectors.toList());
List<DingEmployeeInfo> dingEmployeeInfoList = iDingEmployeeInfoService
.list(Wrappers.lambdaQuery(DingEmployeeInfo.class)
.in(DingEmployeeInfo::getEmployeeCode, employeeCodes)
.eq(DingEmployeeInfo::getMainJob, "true"));

if (CollUtil.isEmpty(dingEmployeeInfoList)) {
return Collections.emptyList();
}

// 装配用户任职所在单位
List<String> empPosUnitCodes = dingEmployeeInfoList.stream().map(DingEmployeeInfo::getEmpPosUnitCode).collect(Collectors.toList());
List<String> orgCodes = dingEmployeeInfoList.stream().map(DingEmployeeInfo::getOrganizationCode).collect(Collectors.toList());
List<String> allOrgCodes = Stream.concat(empPosUnitCodes.stream(), orgCodes.stream()).collect(Collectors.toList());
if (CollUtil.isEmpty(allOrgCodes)) {
return Collections.emptyList();
}
List<DingOrganization> dingOrganizations = iDingOrganizationService.listByCodes(allOrgCodes);
if (CollUtil.isEmpty(dingOrganizations)) {
return Collections.emptyList();
}
Map<String, DingOrganization> orgMap = dingOrganizations.stream().collect(Collectors.toMap(DingOrganization::getOrganizationCode, d -> d));

return dingEmployeeInfoList.stream().map(e -> {
return userInfos.stream().map(userInfo -> {
UserFullInfoDTO userFullInfo = new UserFullInfoDTO();
if (orgMap.containsKey(e.getEmpPosUnitCode())) {
DingOrganization organization = orgMap.get(e.getEmpPosUnitCode());
userFullInfo.setEmpPosUnitCode(e.getEmpPosUnitCode());
userFullInfo.setEmpPosUnitName(organization.getOrganizationName());
userFullInfo.setRegionCode(organization.getDivisionCode());
}
if (orgMap.containsKey(e.getOrganizationCode())) {
DingOrganization organization = orgMap.get(e.getOrganizationCode());
userFullInfo.setOrganizationCode(organization.getOrganizationCode());
userFullInfo.setOrganizationName(organization.getOrganizationName());
// 测试使用
userFullInfo.setRegionLevel(3);
}
if (userMap.containsKey(e.getEmployeeCode())) {
UserInfo userInfo = userMap.get(e.getEmployeeCode());
// 装配返回
userFullInfo.setUserId(userInfo.getId());
userFullInfo.setIdentifier(userInfo.getRealName());
userFullInfo.setRealName(userInfo.getRealName());
userFullInfo.setEmployeeCode(e.getEmployeeCode());
userFullInfo.setUsername(userInfo.getRealName());
userFullInfo.setMobile(userInfo.getMobile());
userFullInfo.setAccountId(userInfo.getAccountId());
String available = userInfo.getAvailable();
if (StringUtils.isNotBlank(available)) {
userFullInfo.setAvailable(UserAvailableEnum.valueOf(available));
}
// 装配返回
userFullInfo.setMhUnitName(userInfo.getMhUnitName());
userFullInfo.setMhUnitId(userInfo.getMhUnitId());
userFullInfo.setUserId(userInfo.getId());
userFullInfo.setIdentifier(userInfo.getRealName());
userFullInfo.setRealName(userInfo.getRealName());
userFullInfo.setUsername(userInfo.getRealName());
userFullInfo.setMobile(userInfo.getMobile());
userFullInfo.setAccountId(userInfo.getAccountId());
String available = userInfo.getAvailable();
if (StrUtils.isNotBlank(available)) {
userFullInfo.setAvailable(UserAvailableEnum.valueOf(available));
}
return userFullInfo;
}).collect(Collectors.toList());
@@ -231,31 +140,9 @@ public class UserInfoHelperImpl implements UserInfoHelper {
}

@Override
public UserFullInfoDTO getUserFullInfoByEmployeeCode(String employeeCode) {
UserInfo userInfo = userInfoService.getUserInfoByEmployeeCode(employeeCode);
return getUserFullInfo(userInfo);
}

@Override
public List<UserFullInfoDTO> getUserFullInfoByEmployeeCodes(Collection<String> employeeCodes) {
List<UserInfo> userInfos = userInfoService.getUserInfoByEmployeeCodes(employeeCodes);
public List<UserFullInfoDTO> listUserFullInfoByUserIds(Collection<Long> userIds) {
List<UserInfo> userInfos = userInfoService.listByIds(userIds);
return getUserFullInfos(userInfos);
}

@Override
public String getUserEmpPosUnitCode(Long userId) {
UserFullInfoDTO userFullInfo = getUserFullInfo(userId);
return userFullInfo.getEmpPosUnitCode();
}

@Override
public String getMainOrgCode(String empPosUnitCode) {
DingOrganization org = iDingOrganizationService.getOne(Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getOrganizationCode, empPosUnitCode)
.last(BizConst.LIMIT_1));
if(Objects.isNull(org)){
return null;
}
return org.getParentCode();
}
}

+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/common/model/constant/BizConst.java Bestand weergeven

@@ -65,6 +65,7 @@ public class BizConst {
* 浙江省的region_id
*/
public static final long ZJ_REGION_CODE = 330000L;

public static final String NINE_AREA_CODE_LAST = "000";

/**


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/common/model/constant/RegionConst.java Bestand weergeven

@@ -25,7 +25,7 @@ public interface RegionConst {
//---------------------------------------地区编码(缩写RC)-------------------------------------------------------------

/**
* 丽水行政区划编码
* 杭州市行政区划编码
*/
String RC_HZ = "330100";
//丽水开发区


+ 3
- 1
hz-pm-api/src/main/java/com/hz/pm/api/common/model/constant/StateMachineConst.java Bestand weergeven

@@ -7,8 +7,10 @@ package com.hz.pm.api.common.model.constant;

public class StateMachineConst {

private StateMachineConst() {
}

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

}

hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareSBJAction.java → hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/HzProjectDeclareAction.java Bestand weergeven

@@ -1,7 +1,7 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.builder.ProjectDeclareStateMachineBuilderImpl;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
@@ -17,8 +17,8 @@ import org.springframework.statemachine.annotation.WithStateMachine;
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_SBJ_CODE)
public class ProjectDeclareSBJAction {
@WithStateMachine(id = ProjectDeclareStateMachineBuilderImpl.MACHINE_ID)
public class HzProjectDeclareAction {

private static final String PROJECT_DECLARE = StateMachineConst.PROJECT_DECLARE;


+ 0
- 273
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareAction.java Bestand weergeven

@@ -1,273 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
*
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_SBJ_CODE)
public class ProjectDeclareAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}


@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}
@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 29
- 25
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareChoiceAction.java Bestand weergeven

@@ -1,6 +1,8 @@
package com.hz.pm.api.common.statemachine.action;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.hz.pm.api.common.model.constant.ProjectDeclareConst;
import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.enumeration.CommonEnum;
@@ -32,7 +34,7 @@ public class ProjectDeclareChoiceAction implements Action<ProjectStatusEnum, Pro
public void execute(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> stateContext) {
log.info(String.valueOf(stateContext.getTarget().getId()));
ProjectStatusEnum projectStatusEnum = stateContext.getTarget().getId();
switch (projectStatusEnum){
switch (projectStatusEnum) {
case PENDING_PREQUALIFICATION_CHOICE:
preDeclareChoice(stateContext);
break;
@@ -48,49 +50,51 @@ public class ProjectDeclareChoiceAction implements Action<ProjectStatusEnum, Pro
}

private void approvedAfterChoice(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> stateContext) {
List<ProjectApplication> projectApplications = stateContext.getMessage().getHeaders().get(APPLICATION_DECLARE, List.class);
Project project = stateContext.getMessage().getHeaders().get(PROJECT_DECLARE, Project.class);
log.info("立项批复之后,项目的状态为:{}" + project.getStatus());
Project project = getProject(stateContext);
List<ProjectApplication> projectApplications = getProjectApplication(stateContext);
log.info("立项批复之后,项目的状态为:{}", project.getStatus());
// 判断 是否有初次创建的应用
if (CollUtil.isEmpty(projectApplications)){
if (CollUtil.isEmpty(projectApplications)) {
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}
final Boolean[] isFirstApp = {Boolean.FALSE};
projectApplications.stream().forEach(app -> {
final boolean[] isFirstApp = {Boolean.FALSE};
projectApplications.forEach(app -> {
Integer isFirst = app.getIsFirst();
if(isFirst.equals(CommonEnum.YES.getCode())){
if (isFirst.equals(CommonEnum.YES.getCode())) {
isFirstApp[0] = Boolean.TRUE;
}
});
if(isFirstApp[0]){
if (isFirstApp[0]) {
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APP_REGISTER.getCode());
}else{
} else {
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}
}

private void preDeclareChoice(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> stateContext) {
Project project = stateContext.getMessage().getHeaders().get(PROJECT_DECLARE, Project.class);
log.info("预审申报事件之前,项目的状态为:{}"+project.getStatus());
if (StateMachineUtil.isCityProject(project) && StateMachineUtil.judgeDeclareAmount(project,
ProjectDeclareConst.Number.DECLARE_AMOUNT_JUDGEMENT)){
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode());
}else {
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}
Project project = getProject(stateContext);
log.info("预审申报事件之前,项目的状态为:{}", project.getStatus());
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

private void preWithDrawChoice(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> stateContext) {
Project project = getProject(stateContext);
log.info("预审中撤回事件之前,项目的状态为:{}", project.getStatus());
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

private Project getProject(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> stateContext) {
Project project = stateContext.getMessage().getHeaders().get(PROJECT_DECLARE, Project.class);
log.info("预审中撤回事件之前,项目的状态为:{}"+project.getStatus());
if (StateMachineUtil.isCityProject(project) && StateMachineUtil.judgeDeclareAmount(project,
ProjectDeclareConst.Number.DECLARE_AMOUNT_JUDGEMENT)){
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}else {
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}
Assert.notNull(project, "项目信息获取失败%s", JSONUtil.toJsonStr(stateContext.getMessage()));
return project;
}
@SuppressWarnings("unchecked")
private List<ProjectApplication> getProjectApplication(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> stateContext) {
return stateContext.getMessage().getHeaders().get(APPLICATION_DECLARE, List.class);
}

}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareJNAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 景宁畲族自治县
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_JN_CODE)
public class ProjectDeclareJNAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}


@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}
@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareJYAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 缙云县
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_JY_CODE)
public class ProjectDeclareJYAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareKFBAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 开发区
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_KFQ_CODE)
public class ProjectDeclareKFBAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareLDAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 莲都区
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_LD_CODE)
public class ProjectDeclareLDAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareLQAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* ;龙泉市
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_LQ_CODE)
public class ProjectDeclareLQAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "TO_BE_APPROVED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareQTAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 青田县
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_QT_CODE)
public class ProjectDeclareQTAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareQYAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 庆元县
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_QY_CODE)
public class ProjectDeclareQYAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 287
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareSCAction.java Bestand weergeven

@@ -1,287 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 遂昌县
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_SC_CODE)
public class ProjectDeclareSCAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "APPROVED_AFTER_CHOICE")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.APPROVED_AFTER_CHOICE.getCode());
}

@OnTransition(source = "TO_BE_APP_REGISTER", target = "TO_BE_PURCHASED")
public void REGISTER_APP(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 279
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareSYAction.java Bestand weergeven

@@ -1,279 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 松阳县
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_SY_CODE)
public class ProjectDeclareSYAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 0
- 280
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareYHAction.java Bestand weergeven

@@ -1,280 +0,0 @@
package com.hz.pm.api.common.statemachine.action;

import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition;
import org.springframework.statemachine.annotation.WithStateMachine;

/**
* 项目申报状态机action集合类
* 云和县
* @author CMM
* @since 2023/02/08 13:48
*/
@Slf4j
@WithStateMachine(id = RegionContant.LS_YH_CODE)
public class ProjectDeclareYHAction {

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) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS")
public void UNDER_INTERNAL_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED")
public void UNDER_INTERNAL_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_DECLARED.getCode());
}

@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT")
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "PENDING_PREQUALIFICATION", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PENDING_PREQUALIFICATION", target = "UNDER_INTERNAL_AUDIT")
public void PENDING_PREQUALIFICATION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
}


@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS")
public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING")
public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED")
public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
}

@OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION")
public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW")
public void PRELIMINARY_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED")
public void PRELIMINARY_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode());
}

@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE")
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode());
}

@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE")
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE.getCode());
}


@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "IN_THE_ANNUAL_PLAN")
public void DEPARTMENT_UNITED_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "DEPARTMENT_JOINT_REVIEW_FAILED")
public void DEPARTMENT_UNITED_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED.getCode());
}

@OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING")
public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PRE_APPLYING.getCode());
}


@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED")
public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "BE_SUSPENDED")
public void ANNUAL_PLAN_SUSPEND(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.BE_SUSPENDED.getCode());
}

@OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "DEPARTMENT_JOINT_REVIEW")
public void IN_THE_ANNUAL_PLAN_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW.getCode());
}


@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "PLAN_TO_BE_DECLARED", target = "IN_THE_ANNUAL_PLAN")
public void PLAN_TO_DECLARE_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.IN_THE_ANNUAL_PLAN.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void DECLARE_PLAN_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "TO_BE_APPROVED")
public void PLAN_REVIEW_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "SCHEME_REVIEW_FAILED")
public void PLAN_REVIEW_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode());
}

@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW")
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}

@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED")
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
}


@OnTransition(source = "TO_BE_APPROVED", target = "TO_BE_PURCHASED")
public void PROJECT_APPROVAL(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待立项批复批复后,项目一级状态变更为已立项
project.setStage(ProjectStatusEnum.PROJECT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}

@OnTransition(source = "TO_BE_APPROVED", target = "SCHEME_UNDER_REVIEW")
public void TO_BE_APPROVED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode());
}


@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION")
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.OPERATION.getCode());
}

@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION")
public void START_TO_WORK(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}

@OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED")
public void TO_BE_PURCHASED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 待采购状态撤回后,项目一级状态回退到未立项
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.TO_BE_APPROVED.getCode());
}


@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED")
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode());
}

@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED")
public void UNDER_CONSTRUCTION_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.TO_BE_PURCHASED.getCode());
}


@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "UNDER_CONSTRUCTION")
public void TO_BE_FINALLY_INSPECTED_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode());
}


@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "ARCHIVED")
public void FINAL_ACCEPTANCE_PASS(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
// 终验审核通过后,项目一级状态变更为已归档
project.setStage(ProjectStatusEnum.ARCHIVED.getCode());
project.setStatus(ProjectStatusEnum.ACCEPTED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_REVIEW_FAILED")
public void FINAL_ACCEPTANCE_REJECT(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}

@OnTransition(source = "FINAL_ACCEPTANCE_REVIEW_FAILED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW")
public void FINAL_RE_ACCEPTANCE_APPLICATION(Message<ProjectStatusChangeEvent> message) {
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE);
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode());
}
}

+ 3
- 1
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineBuilder.java Bestand weergeven

@@ -14,10 +14,11 @@ import org.springframework.statemachine.persist.StateMachinePersister;
* @since 2023/02/07 15:56
*/
public interface ProjectDeclareStateMachineBuilder {

StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception;
/**
* 构建状态机
* @param beanFactory
* @param beanFactory \
* @author CMM
* @since 2023/02/07 16:15
*/
@@ -29,4 +30,5 @@ public interface ProjectDeclareStateMachineBuilder {
* @since 2023/02/07 16:22
*/
StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister();

}

hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineSBJBuilder.java → hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineBuilderImpl.java Bestand weergeven

@@ -1,14 +1,12 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory.PendingPreQualificationChoiceGuard;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
@@ -26,32 +24,31 @@ import java.util.EnumSet;
/**
* 项目申报状态机
* 市本级
*
* @author CMM
* @since 2023/02/07 15:56
*/
@Slf4j
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineSBJBuilder.MACHINEID_TO)
@EnableStateMachine(name = ProjectDeclareStateMachineBuilderImpl.MACHINE_ID)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineSBJBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;
public class ProjectDeclareStateMachineBuilderImpl implements ProjectDeclareStateMachineBuilder {

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_SBJ_CODE;
public static final String MACHINE_ID = "projectDeclareStateMachine";

private final BeanFactory beanFactory;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
log.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}

/**
* 构建状态机
*
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
@@ -61,7 +58,7 @@ public class ProjectDeclareStateMachineSBJBuilder implements ProjectDeclareState
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.machineId(MACHINE_ID)
.beanFactory(beanFactory);

builder.configureStates()
@@ -101,8 +98,8 @@ public class ProjectDeclareStateMachineSBJBuilder implements ProjectDeclareState
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS, new PendingPreQualificationChoiceGuard(), new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING, new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
@@ -143,9 +140,9 @@ public class ProjectDeclareStateMachineSBJBuilder implements ProjectDeclareState
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS, new PendingPreQualificationChoiceGuard()
, new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION, new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
@@ -154,8 +151,8 @@ public class ProjectDeclareStateMachineSBJBuilder implements ProjectDeclareState
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS, new PendingPreQualificationChoiceGuard(), new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING, new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
@@ -257,29 +254,25 @@ public class ProjectDeclareStateMachineSBJBuilder implements ProjectDeclareState

/**
* 持久化配置
*
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineSBJPersister")
@Bean(name = "projectDeclareStatePersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
return new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
log.info("当前项目为:{}", contextObj);
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_SBJ_CODE);
return result;
return new DefaultStateMachineContext<>(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, MACHINE_ID);
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 284
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineJNBuilder.java Bestand weergeven

@@ -1,284 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 景宁畲族自治县
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineJNBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineJNBuilder implements ProjectDeclareStateMachineBuilder{
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;
private Logger logger = LoggerFactory.getLogger(getClass());

private StateMachinePersister stateMachinePersister;
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_JN_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()
// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineJNPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_JN_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 285
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineJYBuilder.java Bestand weergeven

@@ -1,285 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 缙云县
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineJYBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineJYBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;
private Logger logger = LoggerFactory.getLogger(getClass());

private StateMachinePersister stateMachinePersister;
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_JY_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineJYPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_JY_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 285
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineKFQBuilder.java Bestand weergeven

@@ -1,285 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 开发区
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineKFQBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineKFQBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;
private Logger logger = LoggerFactory.getLogger(getClass());

private StateMachinePersister stateMachinePersister;
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_KFQ_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineKFQPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_KFQ_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 285
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineLDBuilder.java Bestand weergeven

@@ -1,285 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 莲都区
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineLDBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineLDBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_LD_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineLDPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_LD_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 286
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineLQBuilder.java Bestand weergeven

@@ -1,286 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 龙泉市
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineLQBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineLQBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_LQ_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()

// 年度计划中开启方案申报,从年度计划中到立项批复
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineLQPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_LQ_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 285
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineQTBuilder.java Bestand weergeven

@@ -1,285 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 青田县
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineQTBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineQTBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_QT_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineQTPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_QT_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 285
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineQYBuilder.java Bestand weergeven

@@ -1,285 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 庆元县
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineQYBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineQYBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_QY_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineQYPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_QY_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 295
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineSCBuilder.java Bestand weergeven

@@ -1,295 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 遂昌县
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineSCBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineSCBuilder implements ProjectDeclareStateMachineBuilder{
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_SC_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.choice(ProjectStatusEnum.APPROVED_AFTER_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.APPROVED_AFTER_CHOICE)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
.withChoice()
.source(ProjectStatusEnum.APPROVED_AFTER_CHOICE)
.first(ProjectStatusEnum.TO_BE_APP_REGISTER,projectDeclareGuardFactory.new ApprovedAfterChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.TO_BE_PURCHASED,new ProjectDeclareChoiceAction()).and()
//待所有应用都注册 并且 绑定了关系后 再进入下一状态 待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APP_REGISTER)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.REGISTER_APP).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineSCPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_SC_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 285
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineSYBuilder.java Bestand weergeven

@@ -1,285 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 松阳县
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineSYBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineSYBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_SY_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineSYPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_SY_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 285
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/ProjectDeclareStateMachineYHBuilder.java Bestand weergeven

@@ -1,285 +0,0 @@
package com.hz.pm.api.common.statemachine.builder;

import com.hz.pm.api.common.statemachine.action.ProjectDeclareChoiceAction;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;
import org.springframework.statemachine.config.EnableStateMachine;
import org.springframework.statemachine.config.StateMachineBuilder;
import org.springframework.statemachine.persist.DefaultStateMachinePersister;
import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component;

import java.util.EnumSet;

/**
* 项目申报状态机
* 云和县
* @author CMM
* @since 2023/02/07 15:56
*/
@Component
@EnableStateMachine(name= ProjectDeclareStateMachineYHBuilder.MACHINEID_TO)
@RequiredArgsConstructor
public class ProjectDeclareStateMachineYHBuilder implements ProjectDeclareStateMachineBuilder {
private static final ProjectDeclareGuardFactory projectDeclareGuardFactory = new ProjectDeclareGuardFactory();
private final BeanFactory beanFactory;

private StateMachinePersister stateMachinePersister;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* TO状态机
*/
public final static String MACHINEID_TO = RegionContant.LS_YH_CODE;

@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build() throws Exception {
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = build(beanFactory);
logger.info("状态机ID:" + stateMachine.getId());
stateMachine.start();
return stateMachine;
}
/**
* 构建状态机
* @param beanFactory
* @author CMM
* @since 2023/02/07 16:15
*/
@Override
public StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> build(BeanFactory beanFactory) throws Exception {
StateMachineBuilder.Builder<ProjectStatusEnum, ProjectStatusChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.machineId(MACHINEID_TO)
.beanFactory(beanFactory);

builder.configureStates()
.withStates()
.initial(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.choice(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.choice(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.states(EnumSet.allOf(ProjectStatusEnum.class));

builder.configureTransitions()
// 单位内部审核通过,从单位内部审核中到待预审
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_PASS).and()
// 单位内部审核驳回,从单位内部审核中到单位内部审核不通过
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT).and()
// 单位内部审核中撤回,从单位内部审核中到待申报
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.target(ProjectStatusEnum.TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_WITHDRAW).and()
// 单位内部审核不通过重新提交,从单位内部审核不通过到单位内部审核中
.withExternal()
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS)
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and()

// 待预审预审申报,从待预审到待预审选择
.withExternal()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and()
// 待预审申报,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()

// 省级部门联审通过,从省级部门联审中到省级部门联审成功
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and()
// 省级部门联审通过,从省级部门联审成功到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and()
// 省级部门联审不通过,从省级部门联审中到省级部门联审不通过
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED)
.event(ProjectStatusChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and()
// 省级部门联审中撤回,从省级部门联审中到待预审
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION)
.event(ProjectStatusChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and()

// 预审通过,从预审中到部门联审中
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_PASS).and()
// 预审驳回,从预审中到预审不通过
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT).and()
// 预审中撤回,从预审中到预审中撤回选择态
.withExternal()
.source(ProjectStatusEnum.PRE_APPLYING)
.target(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.event(ProjectStatusChangeEvent.PRE_APPLYING_WITHDRAW).and()
// 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PREQUALIFICATION_WITHDRAW_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard()
,new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PENDING_PREQUALIFICATION,new ProjectDeclareChoiceAction()).and()
// 预审不通过重新提交,从预审不通过到待预审选择
.withExternal()
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED)
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and()
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态
.withChoice()
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,new ProjectDeclareChoiceAction()).and()
// 部门联审通过,从部门联审中到年度计划中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and()
// 部门联审驳回,从部门联审中到部门联审不通过
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.DEPARTMENT_UNITED_REVIEW_REJECT).and()
// 部门联审中撤回,从部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
.target(ProjectStatusEnum.PRE_APPLYING)
.event(ProjectStatusChangeEvent.DEPARTMENT_JOINT_REVIEW_WITHDRAW).and()
// 年度计划中开启方案申报,从年度计划中到方案待申报
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE).and()
// 年度计划中暂缓,从年度计划中到被暂缓
.withExternal()
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.TO_BE_APPROVED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_PASS).and()
// 方案评审驳回,从方案评审中到方案评审不通过
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT).and()
// 方案评审中撤回,从方案评审中到方案待申报
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.target(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.event(ProjectStatusChangeEvent.SCHEME_UNDER_REVIEW_WITHDRAW).and()
// 方案评审不通过重新提交,从方案评审不通过到方案评审中
.withExternal()
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and()
// 待立项批复批复,从待立项批复到待采购
.withExternal()
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
// 待采购采购备案,从待采购到实施中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.OPERATION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()

// 待开工 实施,从实施到建设中
.withExternal()
.source(ProjectStatusEnum.OPERATION)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.START_TO_WORK).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.ARCHIVED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_PASS).and()
// 终审审核不通过,从终审审核中到终审审核不通过
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_REJECT).and()
// 终审审核中撤回,从终审审核中到待终验
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW).and()
// 终验中 重新提交
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_REVIEW_FAILED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_RE_ACCEPTANCE_APPLICATION).and();
return builder.build();
}

/**
* 持久化配置
* @author CMM
* @since 2023/02/07 16:22
*/
@Bean(name = "projectDeclareStateMachineYHPersister")
@Override
public StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> getProjectPersister() {
StateMachinePersister sp = new DefaultStateMachinePersister<>(new StateMachinePersist<ProjectStatusEnum, ProjectStatusChangeEvent, Project>() {
@Override
public void write(StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> context, Project contextObj) {
}

@Override
public StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> read(Project contextObj) {
StateMachineContext<ProjectStatusEnum, ProjectStatusChangeEvent> result = new DefaultStateMachineContext(ProjectStatusEnum.match(contextObj.getStatus()),
null, null, null, null, RegionContant.LS_YH_CODE);
return result;
}
});
stateMachinePersister = sp;
return sp;
}

public StateMachinePersister getStateMachinePersister(){
return stateMachinePersister;
}
}

+ 0
- 34
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/contant/RegionContant.java Bestand weergeven

@@ -1,34 +0,0 @@
package com.hz.pm.api.common.statemachine.contant;

/**
* @Classname RegionContant
* @Description
* @Date 2023/6/13 13:57
* @Author PoffyZhang
*/
public class RegionContant {
//市本级
public static final String LS_SBJ_CODE = "330100";
//莲都区
public static final String LS_LD_CODE = "331102";
//青田县
public static final String LS_QT_CODE = "331121";
//缙云县
public static final String LS_JY_CODE = "331122";
//遂昌县
public static final String LS_SC_CODE = "331123";
//松阳县
public static final String LS_SY_CODE = "331124";
//云和县
public static final String LS_YH_CODE = "331125";
//庆元县
public static final String LS_QY_CODE = "331126";
//景宁畲族自治县
public static final String LS_JN_CODE = "331127";
//龙泉市
public static final String LS_LQ_CODE = "331181";
//开发区
public static final String LS_KFQ_CODE = "331199";

public static final String MORE_CODE = "000";
}

+ 2
- 37
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/factory/ProjectDeclareGuardFactory.java Bestand weergeven

@@ -1,21 +1,10 @@
package com.hz.pm.api.common.statemachine.factory;

import cn.hutool.core.collection.CollUtil;
import com.hz.pm.api.common.model.constant.ProjectDeclareConst;
import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.enumeration.CommonEnum;
import com.hz.pm.api.common.statemachine.util.StateMachineUtil;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectApplication;
import org.springframework.statemachine.StateContext;
import org.springframework.statemachine.guard.Guard;

import java.util.List;

import static com.hz.pm.api.common.model.constant.StateMachineConst.APPLICATION_DECLARE;

/**
* 项目申报状态机guard集合类
*
@@ -24,37 +13,13 @@ import static com.hz.pm.api.common.model.constant.StateMachineConst.APPLICATION_
*/

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

public class PendingPreQualificationChoiceGuard implements Guard<ProjectStatusEnum, ProjectStatusChangeEvent> {
public static class PendingPreQualificationChoiceGuard implements Guard<ProjectStatusEnum, ProjectStatusChangeEvent> {
@Override
public boolean evaluate(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> context) {
Project project = context.getMessage().getHeaders().get(PROJECT_DECLARE, Project.class);
// 判断申报项目是否是市级项目,且申报金额是否大于等于1000万元
if (StateMachineUtil.isCityProject(project) && StateMachineUtil.judgeDeclareAmount(project,
ProjectDeclareConst.Number.DECLARE_AMOUNT_JUDGEMENT)){
return true;
}
return false;
return true;
}
}

public class ApprovedAfterChoiceGuard implements Guard<ProjectStatusEnum, ProjectStatusChangeEvent> {
@Override
public boolean evaluate(StateContext<ProjectStatusEnum, ProjectStatusChangeEvent> context) {
List<ProjectApplication> projectApplications = context.getMessage().getHeaders().get(APPLICATION_DECLARE, List.class);
final Boolean[] res = {Boolean.FALSE};
// 判断 是否有初次创建的应用
if (CollUtil.isEmpty(projectApplications)){
return res[0];
}
projectApplications.stream().forEach(app -> {
Integer isFirst = app.getIsFirst();
if(isFirst.equals(CommonEnum.YES.getCode())){
res[0] = Boolean.TRUE;
}
});
return res[0];
}
}
}

+ 0
- 57
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/MachineBuilderFounder.java Bestand weergeven

@@ -1,57 +0,0 @@
package com.hz.pm.api.common.statemachine.util;

import com.hz.pm.api.common.statemachine.builder.*;
import com.hz.pm.api.common.statemachine.contant.RegionContant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

/**
* 项目申报状态机
*
* @author CMM
* @since 2023/02/07 15:56
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class MachineBuilderFounder {

private static final Map<String, ProjectDeclareStateMachineBuilder> MACHINE_BUILDER_MAP = new HashMap<>(16);

public static ProjectDeclareStateMachineBuilder getByRegion(String regionCode) {
return MACHINE_BUILDER_MAP.get(regionCode);
}

private final ProjectDeclareStateMachineSBJBuilder projectDeclareStateMachineSBJBuilder;
private final ProjectDeclareStateMachineLDBuilder projectDeclareStateMachineLDBuilder;
private final ProjectDeclareStateMachineQTBuilder projectDeclareStateMachineQTBuilder;
private final ProjectDeclareStateMachineJYBuilder projectDeclareStateMachineJYBuilder;
private final ProjectDeclareStateMachineSCBuilder projectDeclareStateMachineSCBuilder;
private final ProjectDeclareStateMachineSYBuilder projectDeclareStateMachineSYBuilder;
private final ProjectDeclareStateMachineYHBuilder projectDeclareStateMachineYHBuilder;
private final ProjectDeclareStateMachineQYBuilder projectDeclareStateMachineQYBuilder;
private final ProjectDeclareStateMachineJNBuilder projectDeclareStateMachineJNBuilder;
private final ProjectDeclareStateMachineLQBuilder projectDeclareStateMachineLQBuilder;
private final ProjectDeclareStateMachineKFQBuilder projectDeclareStateMachineKFQBuilder;

@PostConstruct
public void machineBuilderFounder(){
MACHINE_BUILDER_MAP.put(RegionContant.LS_SBJ_CODE, projectDeclareStateMachineSBJBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_LD_CODE, projectDeclareStateMachineLDBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_QT_CODE, projectDeclareStateMachineQTBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_JY_CODE, projectDeclareStateMachineJYBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_SC_CODE, projectDeclareStateMachineSCBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_SY_CODE, projectDeclareStateMachineSYBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_YH_CODE, projectDeclareStateMachineYHBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_QY_CODE, projectDeclareStateMachineQYBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_JN_CODE, projectDeclareStateMachineJNBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_LQ_CODE, projectDeclareStateMachineLQBuilder);
MACHINE_BUILDER_MAP.put(RegionContant.LS_KFQ_CODE, projectDeclareStateMachineKFQBuilder);
}

}

+ 10
- 23
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/StateMachineUtil.java Bestand weergeven

@@ -1,16 +1,14 @@
package com.hz.pm.api.common.statemachine.util;

import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.common.model.constant.StateMachineConst;
import com.hz.pm.api.common.statemachine.builder.ProjectDeclareStateMachineBuilder;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.service.INdProjectStatusChangeService;
import com.hz.pm.api.projectlib.service.IProjectApplicationService;
import com.ningdatech.basic.exception.BizException;
import com.wflow.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -39,6 +37,10 @@ public class StateMachineUtil {

private static final String APPLICATION_DECLARE = StateMachineConst.APPLICATION_DECLARE;

//==================================================================================================================

private final ProjectDeclareStateMachineBuilder projectDeclareStateMachineBuilder;

private final INdProjectStatusChangeService projectStatusChangeService;

private final IProjectApplicationService projectApplicationService;
@@ -79,17 +81,14 @@ public class StateMachineUtil {
ProjectStatusChange projectStatusChange = new ProjectStatusChange();
projectStatusChange.setBeforeStatus(project.getStatus());

ProjectDeclareStateMachineBuilder builder = MachineBuilderFounder.getByRegion(project.getAreaCode());

VUtils.isTrue(Objects.isNull(builder)).throwMessage("状态机初始化失败!");
//获取TO状态机
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = builder.build();
// 获取TO状态机
StateMachine<ProjectStatusEnum, ProjectStatusChangeEvent> stateMachine = projectDeclareStateMachineBuilder.build();
Message<ProjectStatusChangeEvent> message = MessageBuilder.withPayload(event)
.setHeader(PROJECT_DECLARE, project)
.setHeader(APPLICATION_DECLARE, projectApplicationService.getApplicationsByProject(project))
.build();
//初始化状态机
StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> projectDeclareStateMachinePersister = builder.getProjectPersister();
StateMachinePersister<ProjectStatusEnum, ProjectStatusChangeEvent, Project> projectDeclareStateMachinePersister = projectDeclareStateMachineBuilder.getProjectPersister();
projectDeclareStateMachinePersister.restore(stateMachine, project);
stateMachine.sendEvent(message);
projectStatusChange.setProjectId(project.getId());
@@ -114,18 +113,6 @@ public class StateMachineUtil {
return flag > 0 || flag == 0;
}

/**
* 判断申报项目是否为市级项目
*
* @param project \
* @return boolean
* @since 2023/02/07 17:05
*/
public static boolean isCityProject(Project project) {
String areaCode = project.getAreaCode();
return areaCode.equals(RegionConst.RC_HZ);
}

public ProjectStatusChangeEvent getProjectStatusPassEvent(Integer status) {
ProjectStatusChangeEvent event = ProjectStatusChangeEvent.getPassValueByCode(status);
if (Objects.isNull(event)) {


+ 2
- 4
hz-pm-api/src/main/java/com/hz/pm/api/common/util/FreemarkerWordUtil.java Bestand weergeven

@@ -66,10 +66,8 @@ public class FreemarkerWordUtil {
//输出文件
File outFile = new File(filePath + File.separator + fileName);
//如果输出目标文件夹不存在,则创建
if (!outFile.getParentFile().exists()) {
if (outFile.getParentFile().mkdirs()) {
log.info("创建文件目录:{}", outFile.getParentFile().getAbsolutePath());
}
if (!outFile.getParentFile().exists() && (outFile.getParentFile().mkdirs())) {
log.info("创建文件目录:{}", outFile.getParentFile().getAbsolutePath());
}
//将模板和数据模型合并生成文件
Writer out = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(outFile.toPath()), StandardCharsets.UTF_8));


+ 30
- 23
hz-pm-api/src/main/java/com/hz/pm/api/common/util/SendWorkNoticeUtil.java Bestand weergeven

@@ -1,15 +1,16 @@
package com.hz.pm.api.common.util;

import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.GenericResult;
import com.hz.pm.api.todocenter.bean.entity.WorkNoticeInfo;
import com.ningdatech.basic.model.GenericResult;
import com.ningdatech.zwdd.client.ZwddClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadPoolExecutor;

/**
* 异步发送工作通知工具类
@@ -18,8 +19,8 @@ import java.util.concurrent.*;
* @since 2023/02/23 13:50
*/
@Slf4j
@RequiredArgsConstructor
@Component
@RequiredArgsConstructor
public class SendWorkNoticeUtil {

private final ZwddClient zwddClient;
@@ -27,10 +28,21 @@ public class SendWorkNoticeUtil {
/**
* 初始化线程池
*/
public static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 10,
60, TimeUnit.SECONDS, new ArrayBlockingQueue(10), new ThreadPoolExecutor.AbortPolicy());
public static final ThreadPoolTaskExecutor EXECUTOR;

public Boolean sendWorkNotice(WorkNoticeInfo workNoticeInfo){
static {
EXECUTOR = new ThreadPoolTaskExecutor();
EXECUTOR.setCorePoolSize(2);
EXECUTOR.setMaxPoolSize(4);
EXECUTOR.setQueueCapacity(200);
EXECUTOR.setKeepAliveSeconds(120);
EXECUTOR.setThreadNamePrefix("sendWorkNotice-");
EXECUTOR.setWaitForTasksToCompleteOnShutdown(true);
EXECUTOR.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
EXECUTOR.initialize();
}

public Boolean sendWorkNotice(WorkNoticeInfo workNoticeInfo) {

// 将发送工作通知交给异步任务Future
String msg = workNoticeInfo.getMsg();
@@ -44,23 +56,18 @@ public class SendWorkNoticeUtil {
log.info("异步任务执行完成, " + workNoticeInfo.getBizMsgId() + " 当前线程:" + Thread.currentThread().getName());
long endTime = System.currentTimeMillis();
log.info("方法执行完成返回,耗时:" + (endTime - startTime));
}else {
} else {
return "发送工作通知失败!";
}
return "发送工作通知成功!";
}, 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);
return Boolean.TRUE;
}, EXECUTOR);
try {
future.get();
} catch (InterruptedException | ExecutionException e) {
log.error("获取异步线程处理结果失败!", e);
Thread.currentThread().interrupt();
}
return Boolean.TRUE;
}

}

+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/constant/AnalysisBasicConstant.java Bestand weergeven

@@ -7,6 +7,8 @@ package com.hz.pm.api.dashboard.constant;

public class AnalysisBasicConstant {

private AnalysisBasicConstant() {
}

/**
* 丽水市区域编码


+ 68
- 72
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/handle/CockpitStatsHandler.java Bestand weergeven

@@ -5,13 +5,13 @@ import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.dashboard.constant.DashboardConstant;
import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.dashboard.enums.CockpitAppcationTypeEnum;
import com.hz.pm.api.dashboard.model.entity.CockpitApplication;
import com.hz.pm.api.dashboard.model.entity.CockpitStats;
import com.hz.pm.api.dashboard.model.vo.CockpitStatsVO;
import com.hz.pm.api.dashboard.model.vo.CockpitStatsVO.*;
import com.hz.pm.api.dashboard.service.ICockpitStatsService;
import com.hz.pm.api.sys.model.dto.RegionDTO;
import lombok.RequiredArgsConstructor;
@@ -24,6 +24,8 @@ import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;

import static com.hz.pm.api.dashboard.constant.DashboardConstant.CockpitStats.*;

/**
* @Classname CockpitStatsHandler
* @Description
@@ -39,23 +41,23 @@ public class CockpitStatsHandler {

private final ICockpitStatsService cockpitStatsService;

private static final List<Integer> years = Lists.newArrayList(2021,2022,2023,2024,2025);
private static final List<Integer> years = Lists.newArrayList(2021, 2022, 2023, 2024, 2025);

public CockpitStatsVO convertCockpitStats(CockpitStats cockpitStats, String regionCode, Integer year
, List<CockpitApplication> appDatas) {
CockpitStatsVO res = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.class);
CockpitStatsVO res = BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.class);

if(Objects.isNull(cockpitStats)){
if (Objects.isNull(cockpitStats)) {
return res;
}
//监测数据
res.setMonitorData(convertMonitor(cockpitStats,regionCode));
res.setMonitorData(convertMonitor(cockpitStats, regionCode));
//专家数据
res.setExpertData(convertExpertData(cockpitStats));
//顶部数据
res.setTopData(convertTopData(cockpitStats));
//地图数据
res.setMapProjectData(convertMapProjectsData(cockpitStats,year));
res.setMapProjectData(convertMapProjectsData(cockpitStats, year));
//项目项目数据
res.setStatusProjectsData(convertStatusProjectsData(cockpitStats));
//项目效益 优秀项目
@@ -69,23 +71,23 @@ public class CockpitStatsHandler {
//最佳/重大应用
res.setAppDatas(convertCockpitApps(appDatas));
//数据质量分数
res.setQualityDatas(convertQualityDatas(year));
res.setQualityDatas(convertQualityData(year));
return res;
}

private List<CockpitStatsVO.QualityData> convertQualityDatas(Integer year) {
List<CockpitStats> datas = cockpitStatsService.list(Wrappers.lambdaQuery(CockpitStats.class)
private List<QualityData> convertQualityData(Integer year) {
List<CockpitStats> dataList = cockpitStatsService.list(Wrappers.lambdaQuery(CockpitStats.class)
.eq(Objects.nonNull(year), CockpitStats::getYear, year)
.eq(Objects.isNull(year), CockpitStats::getYear, DashboardConstant.CockpitStats.NONE_YEAR)
.ne(CockpitStats::getRegionCode,DashboardConstant.CockpitStats.TOTAL)
.eq(Objects.isNull(year), CockpitStats::getYear, NONE_YEAR)
.ne(CockpitStats::getRegionCode, TOTAL)
.orderByAsc(CockpitStats::getRegionCode));

if(CollUtil.isEmpty(datas)){
if (CollUtil.isEmpty(dataList)) {
return Collections.emptyList();
}

return datas.stream().map(d -> {
CockpitStatsVO.QualityData data = new CockpitStatsVO.QualityData();
return dataList.stream().map(d -> {
QualityData data = new QualityData();
data.setRegionCode(d.getRegionCode());
data.setRegionName(d.getRegionName());
data.setQuality(d.getDataQuality());
@@ -105,150 +107,144 @@ public class CockpitStatsHandler {
}

private CockpitStatsVO.PerformanceData convertPerformanceData(CockpitStats cockpitStats) {
CockpitStatsVO.PerformanceData data = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.PerformanceData.class);
CockpitStatsVO.PerformanceData data = BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.PerformanceData.class);
data.setPerformanceTops(convertTops(cockpitStats));
return data;
}

private List<CockpitStatsVO.PerformanceTop> convertTops(CockpitStats cockpitStats) {
List<CockpitStatsVO.PerformanceTop> tops = Lists.newArrayList();
tops.add(new CockpitStatsVO.PerformanceTop("一星",cockpitStats.getPerformanceTop1Score(),cockpitStats.getPerformanceTop1Name()));
tops.add(new CockpitStatsVO.PerformanceTop("二星",cockpitStats.getPerformanceTop2Score(),cockpitStats.getPerformanceTop2Name()));
tops.add(new CockpitStatsVO.PerformanceTop("三星",cockpitStats.getPerformanceTop3Score(),cockpitStats.getPerformanceTop3Name()));
tops.add(new CockpitStatsVO.PerformanceTop("四星",cockpitStats.getPerformanceTop4Score(),cockpitStats.getPerformanceTop4Name()));
tops.add(new CockpitStatsVO.PerformanceTop("五星",cockpitStats.getPerformanceTop5Score(),cockpitStats.getPerformanceTop5Name()));
private List<PerformanceTop> convertTops(CockpitStats cockpitStats) {
List<PerformanceTop> tops = Lists.newArrayList();
tops.add(new PerformanceTop("一星", cockpitStats.getPerformanceTop1Score(), cockpitStats.getPerformanceTop1Name()));
tops.add(new PerformanceTop("二星", cockpitStats.getPerformanceTop2Score(), cockpitStats.getPerformanceTop2Name()));
tops.add(new PerformanceTop("三星", cockpitStats.getPerformanceTop3Score(), cockpitStats.getPerformanceTop3Name()));
tops.add(new PerformanceTop("四星", cockpitStats.getPerformanceTop4Score(), cockpitStats.getPerformanceTop4Name()));
tops.add(new PerformanceTop("五星", cockpitStats.getPerformanceTop5Score(), cockpitStats.getPerformanceTop5Name()));
return tops;
}

private CockpitStatsVO.ProduceData convertProduceData(CockpitStats cockpitStats) {
return BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.ProduceData.class);
return BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.ProduceData.class);
}

private CockpitStatsVO.ReduceData convertReduceData(CockpitStats cockpitStats) {
CockpitStatsVO.ReduceData data = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.ReduceData.class);
CockpitStatsVO.ReduceData data = BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.ReduceData.class);
data.setAmountComparisonCharts(convertAmountComparisonChart(cockpitStats));
return data;
}

private List<CockpitStatsVO.AmountComparisonChart> convertAmountComparisonChart(CockpitStats cockpitStats) {
List<CockpitStatsVO.AmountComparisonChart> res = Lists.newArrayList();
res.add(new CockpitStatsVO.AmountComparisonChart("申报", cockpitStats.getDeclaredAmountApprove(),cockpitStats.getApprovalAmountApprove(),cockpitStats.getDifferenceApprove()));
res.add(new CockpitStatsVO.AmountComparisonChart("批复", cockpitStats.getDeclaredAmountApproval(),cockpitStats.getApprovalAmountApproval(),cockpitStats.getDifferenceApproval()));
res.add(new CockpitStatsVO.AmountComparisonChart("合同", cockpitStats.getDeclaredAmountContract(),cockpitStats.getApprovalAmountContract(),cockpitStats.getDifferenceContract()));
private List<AmountComparisonChart> convertAmountComparisonChart(CockpitStats cockpitStats) {
List<AmountComparisonChart> res = Lists.newArrayList();
res.add(new AmountComparisonChart("申报", cockpitStats.getDeclaredAmountApprove(), cockpitStats.getApprovalAmountApprove(), cockpitStats.getDifferenceApprove()));
res.add(new AmountComparisonChart("批复", cockpitStats.getDeclaredAmountApproval(), cockpitStats.getApprovalAmountApproval(), cockpitStats.getDifferenceApproval()));
res.add(new AmountComparisonChart("合同", cockpitStats.getDeclaredAmountContract(), cockpitStats.getApprovalAmountContract(), cockpitStats.getDifferenceContract()));
return res;
}

private CockpitStatsVO.ExcellentData convertExcellentData(CockpitStats cockpitStats) {
CockpitStatsVO.ExcellentData data = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.ExcellentData.class);
CockpitStatsVO.ExcellentData data = BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.ExcellentData.class);
data.setExcellentProjects(Lists.newArrayList());
return data;
}

private CockpitStatsVO.StatusProjectsData convertStatusProjectsData(CockpitStats cockpitStats) {
return BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.StatusProjectsData.class);
return BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.StatusProjectsData.class);
}

private List<CockpitStatsVO.MapProjectsData> convertMapProjectsData(CockpitStats cockpitStats,Integer year) {
private List<CockpitStatsVO.MapProjectsData> convertMapProjectsData(CockpitStats cockpitStats, Integer year) {
List<CockpitStatsVO.MapProjectsData> mapProjectsDatas = Lists.newArrayList();
List<RegionDTO> regions = regionCacheHelper.listChildren(RegionConst.RC_HZ, RegionConst.RL_CITY);
regions = regions.stream().filter(r -> r.getRegionLevel() != 2).sorted(Comparator.comparing(RegionDTO::getRegionCode)).collect(Collectors.toList());

List<CockpitStats> cockpitStatsAll = cockpitStatsService.list(Wrappers.lambdaQuery(CockpitStats.class)
.eq(Objects.nonNull(year), CockpitStats::getYear, year)
.eq(Objects.isNull(year), CockpitStats::getYear, DashboardConstant.CockpitStats.NONE_YEAR));
Map<String, Integer> totalMap = cockpitStatsAll.stream().filter(c -> Objects.nonNull(c.getRegionCode()) && Objects.nonNull(c.getProjectsTotal()))
.collect(Collectors.toMap(c -> c.getRegionCode(), c -> c.getProjectsTotal()));
.eq(Objects.isNull(year), CockpitStats::getYear, NONE_YEAR));
Map<String, Integer> totalMap = cockpitStatsAll.stream()
.filter(c -> Objects.nonNull(c.getRegionCode()) && Objects.nonNull(c.getProjectsTotal()))
.collect(Collectors.toMap(CockpitStats::getRegionCode, CockpitStats::getProjectsTotal));

for(RegionDTO region : regions){
for (RegionDTO region : regions) {
CockpitStatsVO.MapProjectsData mapProjectsData = new CockpitStatsVO.MapProjectsData();
mapProjectsData.setRegionCode(region.getRegionCode());
mapProjectsData.setRegionName(region.getRegionName());
if(totalMap.containsKey(mapProjectsData.getRegionCode())){
mapProjectsData.setProjectsNum(totalMap.get(mapProjectsData.getRegionCode()));
}else{
mapProjectsData.setProjectsNum(0);
}
mapProjectsData.setProjectsNum(totalMap.getOrDefault(mapProjectsData.getRegionCode(), 0));
mapProjectsDatas.add(mapProjectsData);
}
return mapProjectsDatas;
}

private CockpitStatsVO.TopData convertTopData(CockpitStats cockpitStats) {
return BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.TopData.class);
return BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.TopData.class);
}

private CockpitStatsVO.Expert convertExpertData(CockpitStats cockpitStats) {
CockpitStatsVO.Expert expert = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.Expert.class);
expert.setExpertRegionData(buidExpertRegionData(cockpitStats));
CockpitStatsVO.Expert expert = BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.Expert.class);
expert.setExpertRegionData(buildExpertRegionData(cockpitStats));
return expert;
}

private List<CockpitStatsVO.ExpertRegion> buidExpertRegionData(CockpitStats cockpitStats) {
private List<CockpitStatsVO.ExpertRegion> buildExpertRegionData(CockpitStats cockpitStats) {
List<CockpitStatsVO.ExpertRegion> regionData = Lists.newArrayList();
List<RegionDTO> regions = regionCacheHelper.listChildren(RegionConst.RC_HZ, RegionConst.RL_CITY);
regions = regions.stream().filter(r -> r.getRegionLevel() != 2).sorted(Comparator.comparing(RegionDTO::getRegionCode)).collect(Collectors.toList());

List<CockpitStats> cs = cockpitStatsService.list();
Map<String, Integer> csMap = cs.stream().collect(Collectors.toMap(c -> c.getRegionCode() + c.getYear(), CockpitStats::getExpertTotalNum));
for(RegionDTO region : regions){
for (RegionDTO region : regions) {
CockpitStatsVO.ExpertRegion expertRegion = new CockpitStatsVO.ExpertRegion();
expertRegion.setRegionCode(region.getRegionCode());
expertRegion.setRegionName(region.getRegionName());
if(csMap.containsKey(region.getRegionCode() + 0)){
expertRegion.setExpertNum(csMap.get(region.getRegionCode() + 0));
}else{
expertRegion.setExpertNum(0);
}
expertRegion.setExpertNum(csMap.getOrDefault(region.getRegionCode() + 0, 0));
regionData.add(expertRegion);
}
return regionData;
}

private CockpitStatsVO.Monitor convertMonitor(CockpitStats cockpitStats,String regionCode) {
CockpitStatsVO.Monitor monitor = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.Monitor.class);
monitor.setPasswordGradeCharts(buidPasswordGradeCharts(cockpitStats));
monitor.setSecrecyGradeCharts(buidSecrecyGradeCharts(cockpitStats));
private CockpitStatsVO.Monitor convertMonitor(CockpitStats cockpitStats, String regionCode) {
CockpitStatsVO.Monitor monitor = BeanUtil.copyProperties(cockpitStats, CockpitStatsVO.Monitor.class);
monitor.setPasswordGradeCharts(buildPasswordGradeCharts(cockpitStats));
monitor.setSecrecyGradeCharts(buildSecrecyGradeCharts(cockpitStats));
monitor.setMonitorSafetyInputRate(computeSafetyRate(regionCode));
return monitor;
}

/**
* 安全投入 比 图
*
* @param regionCode
* @return
*/
private List<CockpitStatsVO.SafetyInput> computeSafetyRate(String regionCode) {
List<CockpitStats> cocks = cockpitStatsService.list(Wrappers.lambdaQuery(CockpitStats.class)
.eq(StringUtils.isNotBlank(regionCode), CockpitStats::getRegionCode, regionCode)
.eq(StringUtils.isBlank(regionCode), CockpitStats::getRegionCode, DashboardConstant.CockpitStats.TOTAL)
.eq(StringUtils.isBlank(regionCode), CockpitStats::getRegionCode, TOTAL)
.in(CockpitStats::getYear, years)
.orderByAsc(CockpitStats::getYear));
return cocks.stream().map(c -> {
CockpitStatsVO.SafetyInput safetyInput = new CockpitStatsVO.SafetyInput();
safetyInput.setYear(c.getYear());
safetyInput.setRate(Objects.nonNull(c.getMonitorDeclaredAmount()) && c.getMonitorDeclaredAmount().compareTo(BigDecimal.ZERO) > 0 ?
c.getMonitorSafetyInputAmount().multiply(BigDecimal.valueOf(100)).divide(c.getMonitorDeclaredAmount(),2, RoundingMode.CEILING): BigDecimal.ZERO);
c.getMonitorSafetyInputAmount().multiply(BigDecimal.valueOf(100)).divide(c.getMonitorDeclaredAmount(), 2, RoundingMode.CEILING) : BigDecimal.ZERO);
return safetyInput;
}).collect(Collectors.toList());
}

private List<CockpitStatsVO.SecrecyGradeChart> buidSecrecyGradeCharts(CockpitStats cockpitStats) {
List<CockpitStatsVO.SecrecyGradeChart> chars = Lists.newArrayList();
chars.add(new CockpitStatsVO.SecrecyGradeChart(1,cockpitStats.getMonitorSecrecyGrade1Num()));
chars.add(new CockpitStatsVO.SecrecyGradeChart(2,cockpitStats.getMonitorSecrecyGrade2Num()));
chars.add(new CockpitStatsVO.SecrecyGradeChart(3,cockpitStats.getMonitorSecrecyGrade3Num()));
chars.add(new CockpitStatsVO.SecrecyGradeChart(4,cockpitStats.getMonitorSecrecyGrade4Num()));
chars.add(new CockpitStatsVO.SecrecyGradeChart(5,cockpitStats.getMonitorSecrecyGrade5Num()));
private List<SecrecyGradeChart> buildSecrecyGradeCharts(CockpitStats cockpitStats) {
List<SecrecyGradeChart> chars = Lists.newArrayList();
chars.add(new SecrecyGradeChart(1, cockpitStats.getMonitorSecrecyGrade1Num()));
chars.add(new SecrecyGradeChart(2, cockpitStats.getMonitorSecrecyGrade2Num()));
chars.add(new SecrecyGradeChart(3, cockpitStats.getMonitorSecrecyGrade3Num()));
chars.add(new SecrecyGradeChart(4, cockpitStats.getMonitorSecrecyGrade4Num()));
chars.add(new SecrecyGradeChart(5, cockpitStats.getMonitorSecrecyGrade5Num()));
return chars;
}

private List<CockpitStatsVO.PasswordGradeChart> buidPasswordGradeCharts(CockpitStats cockpitStats) {
List<CockpitStatsVO.PasswordGradeChart> chars = Lists.newArrayList();
chars.add(new CockpitStatsVO.PasswordGradeChart(1,cockpitStats.getMonitorPasswordGrade1Num()));
chars.add(new CockpitStatsVO.PasswordGradeChart(2,cockpitStats.getMonitorPasswordGrade2Num()));
chars.add(new CockpitStatsVO.PasswordGradeChart(3,cockpitStats.getMonitorPasswordGrade3Num()));
chars.add(new CockpitStatsVO.PasswordGradeChart(4,cockpitStats.getMonitorPasswordGrade4Num()));
chars.add(new CockpitStatsVO.PasswordGradeChart(5,cockpitStats.getMonitorPasswordGrade5Num()));
private List<PasswordGradeChart> buildPasswordGradeCharts(CockpitStats cockpitStats) {
List<PasswordGradeChart> chars = Lists.newArrayList();
chars.add(new PasswordGradeChart(1, cockpitStats.getMonitorPasswordGrade1Num()));
chars.add(new PasswordGradeChart(2, cockpitStats.getMonitorPasswordGrade2Num()));
chars.add(new PasswordGradeChart(3, cockpitStats.getMonitorPasswordGrade3Num()));
chars.add(new PasswordGradeChart(4, cockpitStats.getMonitorPasswordGrade4Num()));
chars.add(new PasswordGradeChart(5, cockpitStats.getMonitorPasswordGrade5Num()));
return chars;
}
}

+ 8
- 6
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/handle/ProjectStatusHandler.java Bestand weergeven

@@ -11,6 +11,8 @@ import com.hz.pm.api.performance.service.IPerformanceAppraisalProjectService;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.service.INdProjectStatusChangeService;
import com.hz.pm.api.projectlib.service.IProjectInstService;
import com.hz.pm.api.projectlib.service.IProjectService;
@@ -51,7 +53,7 @@ public class ProjectStatusHandler {
* @param project \
* @return \
*/
public ProtraitProjectStatusSituationVO generateApproveStatus(Project project, String statusName, Integer instType) {
public ProtraitProjectStatusSituationVO genApproveStatus(Project project, String statusName, InstTypeEnum instType) {
ProtraitProjectStatusSituationVO vo = new ProtraitProjectStatusSituationVO();
if (Objects.isNull(project)) {
return vo;
@@ -65,7 +67,7 @@ public class ProjectStatusHandler {
//查询 项目与实例关联表
ProjectInst unitInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class)
.in(ProjectInst::getProjectId, ids)
.eq(ProjectInst::getInstType, instType)
.eq(ProjectInst::getInstType, instType.getCode())
.last(BizConst.LIMIT_1));
if (Objects.isNull(unitInst)) {
return vo;
@@ -89,8 +91,8 @@ public class ProjectStatusHandler {
* @param project \
* @return \
*/
public ProtraitProjectStatusSituationVO generateStatus(Project project, String statusName,
Integer currStatus, Integer nextStatus) {
public ProtraitProjectStatusSituationVO genStatus(Project project, String statusName,
ProjectStatusEnum currStatus, ProjectStatusEnum nextStatus) {
ProtraitProjectStatusSituationVO vo = new ProtraitProjectStatusSituationVO();
if (Objects.isNull(project)) {
return vo;
@@ -101,9 +103,9 @@ public class ProjectStatusHandler {
//查询 状态机流转的时间点
LambdaQueryWrapper<ProjectStatusChange> pscQuery = Wrappers
.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getBeforeStatus, currStatus)
.eq(ProjectStatusChange::getBeforeStatus, currStatus.getCode())
.eq(ProjectStatusChange::getProjectCode, projectCode)
.eq(ProjectStatusChange::getAfterStatus, nextStatus)
.eq(ProjectStatusChange::getAfterStatus, nextStatus.getCode())
.last(BizConst.LIMIT_1);
ProjectStatusChange statusChange = statusChangeService.getOne(pscQuery);
if (Objects.isNull(statusChange)) {


+ 0
- 4
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/helper/DashboardHelper.java Bestand weergeven

@@ -1,10 +1,7 @@
package com.hz.pm.api.dashboard.helper;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hz.pm.api.dashboard.constant.AnalysisBasicConstant;
import com.hz.pm.api.dashboard.model.entity.CockpitStats;
import com.hz.pm.api.dashboard.model.vo.CockpitStatsVO;
import com.hz.pm.api.sys.model.entity.Region;
import com.hz.pm.api.sys.service.IRegionService;
import lombok.RequiredArgsConstructor;
@@ -13,7 +10,6 @@ import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

/**


+ 54
- 70
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/DashboardProjectManage.java Bestand weergeven

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.dashboard.constant.ChartTypeEnum;
import com.hz.pm.api.dashboard.constant.DashboardConstant;
import com.hz.pm.api.dashboard.constant.DashboardConstant.Protrait;
import com.hz.pm.api.dashboard.handle.ApplicationHandler;
import com.hz.pm.api.dashboard.handle.ProjectStatusHandler;
import com.hz.pm.api.dashboard.helper.DashboardChartAssembler;
@@ -28,10 +28,10 @@ import com.hz.pm.api.gov.service.IGovOperationProjectBaseinfoService;
import com.hz.pm.api.portrait.service.IProjectTagService;
import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectdeclared.service.IPurchaseService;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectDelayApply;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.service.INdProjectDelayApplyService;
import com.hz.pm.api.projectlib.service.IProjectService;
import lombok.RequiredArgsConstructor;
@@ -194,15 +194,12 @@ public class DashboardProjectManage {
return dashboardProjectSummaryVO;
}

public DashboardProjectCntSummaryVO getProjectCntSummary(QueryYearPO queryYearPO) {
public DashboardProjectCntSummaryVO getProjectCntSummary(QueryYearPO req) {
// 预算年度
Integer year = queryYearPO.getYear();
String regionCode = queryYearPO.getRegionCode();
Integer year = req.getYear();
List<Project> allProjectList = iProjectService.list(Wrappers.lambdaQuery(Project.class)
.eq(Project::getNewest, true)
.eq(Objects.nonNull(year), Project::getProjectYear, year)
.eq(StringUtils.isNotBlank(regionCode), Project::getAreaCode, regionCode)
);
.eq(Objects.nonNull(year), Project::getProjectYear, year));

// 单位项目数量TOP5
List<CompanyProjectCntBO> companyProjectCntTop5List = new ArrayList<>();
@@ -215,9 +212,7 @@ public class DashboardProjectManage {
companyProjectCntBO.setProjectCnt(projectList.size());
companyProjectCntTop5List.add(companyProjectCntBO);
}
companyProjectCntTop5List = companyProjectCntTop5List.stream()
.sorted(Comparator.comparing(CompanyProjectCntBO::getProjectCnt).reversed())
.collect(Collectors.toList());
companyProjectCntTop5List.sort(Comparator.comparing(CompanyProjectCntBO::getProjectCnt).reversed());
if (companyProjectCntTop5List.size() > 5) {
companyProjectCntTop5List = companyProjectCntTop5List.subList(0, 5);
}
@@ -269,10 +264,10 @@ public class DashboardProjectManage {
}


public DashboardInvestmentSummaryVO getInvestmentSummary(QueryYearPO queryYearPO) {
public DashboardInvestmentSummaryVO getInvestmentSummary(QueryYearPO req) {
// 预算年度
Integer year = queryYearPO.getYear();
String regionCode = queryYearPO.getRegionCode();
Integer year = req.getYear();
String regionCode = req.getRegionCode();
List<Project> allProjectList = iProjectService.list(Wrappers.lambdaQuery(Project.class)
.eq(Project::getNewest, true)
.eq(Objects.nonNull(year), Project::getProjectYear, year)
@@ -289,9 +284,7 @@ public class DashboardProjectManage {
projectATIISBO.setApprovedTotalInvestmentIncrease(r.getApprovedTotalInvestmentIncrease());
return projectATIISBO;
}).collect(Collectors.toList());
projectATIISTop5List = projectATIISTop5List.stream()
.sorted(Comparator.comparing(ProjectATIISBO::getApprovedTotalInvestmentIncrease)
.reversed()).collect(Collectors.toList());
projectATIISTop5List.sort(Comparator.comparing(ProjectATIISBO::getApprovedTotalInvestmentIncrease));
if (projectATIISTop5List.size() > 5) {
projectATIISTop5List = projectATIISTop5List.subList(0, 5);
}
@@ -314,9 +307,7 @@ public class DashboardProjectManage {
companyProjectCntBO.setApprovedTotalInvestmentIncreaseSum(approvedTotalInvestmentIncreaseSum);
companyProjectATIISTop5List.add(companyProjectCntBO);
}
companyProjectATIISTop5List = companyProjectATIISTop5List.stream()
.sorted(Comparator.comparing(CompanyProjectCntBO::getApprovedTotalInvestmentIncreaseSum).reversed())
.collect(Collectors.toList());
companyProjectATIISTop5List.sort(Comparator.comparing(CompanyProjectCntBO::getApprovedTotalInvestmentIncreaseSum).reversed());
if (companyProjectATIISTop5List.size() > 5) {
companyProjectATIISTop5List = companyProjectATIISTop5List.subList(0, 5);
}
@@ -379,7 +370,7 @@ public class DashboardProjectManage {
projectInfo.setSafetyInputRate(convertSafetyInputRate(project));
projectInfo.setStatus(Objects.nonNull(project.getStatus()) ? project.getStatus().toString() : null);
//3.项目状态情况
projectInfo.setStatusSituation(generateProjectStatus(project));
projectInfo.setStatusSituation(genProjectStatus(project));
res.setProjectInfo(projectInfo);
} else if (Objects.nonNull(baseInfo)) {
ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(baseInfo, ProtraitProjectInfoVO.class);
@@ -388,7 +379,7 @@ public class DashboardProjectManage {
if (Objects.nonNull(apply)) {
try {
projectInfo.setProjectYear(Integer.valueOf(apply.getBaseProjSetYear()));
} catch (Exception e) {
} catch (Exception ignored) {
}
projectInfo.setProjectIntroduction(apply.getBaseProjIntro());
projectInfo.setBuildCycle(apply.getBaseProjDuration());
@@ -399,7 +390,7 @@ public class DashboardProjectManage {
projectInfo.setBuildOrgName(baseInfo.getBaseBuildDeprt());
projectInfo.setBuildOrgCode(baseInfo.getBaseBuildDeprtDing());
//3.项目状态情况
projectInfo.setStatusSituation(generateProjectStatus(baseInfo));
projectInfo.setStatusSituation(genProjectStatus(baseInfo));
projectInfo.setStatus(baseInfo.getBaseProjSetProg());
res.setProjectInfo(projectInfo);
} else if (Objects.nonNull(operationBase)) {
@@ -409,7 +400,7 @@ public class DashboardProjectManage {
if (Objects.nonNull(apply)) {
try {
projectInfo.setProjectYear(Integer.valueOf(apply.getBaseProjSetYear()));
} catch (Exception e) {
} catch (Exception ignored) {
}
projectInfo.setProjectIntroduction(apply.getBaseProjIntro());
projectInfo.setBuildCycle(apply.getBaseProjDuration());
@@ -420,7 +411,7 @@ public class DashboardProjectManage {
projectInfo.setBuildOrgName(operationBase.getBaseBuildDeprt());
projectInfo.setBuildOrgCode(operationBase.getBaseBuildDeprtDing());
//3.项目状态情况
projectInfo.setStatusSituation(generateProjectStatus(operationBase));
projectInfo.setStatusSituation(genProjectStatus(operationBase));
projectInfo.setStatus(operationBase.getBaseProjSetProg());
res.setProjectInfo(projectInfo);
}
@@ -449,7 +440,7 @@ public class DashboardProjectManage {
final Double[] total = {0.0};
array.forEach(j -> {
JSONObject json = JSON.parseObject(JSON.toJSONString(j));
Double safetyInputAmount = json.getDouble(DashboardConstant.Protrait.FEILD_SAFETYMONEY);
Double safetyInputAmount = json.getDouble(Protrait.FEILD_SAFETYMONEY);
if (Objects.nonNull(safetyInputAmount)) {
total[0] += safetyInputAmount;
}
@@ -458,16 +449,16 @@ public class DashboardProjectManage {
//申报金额
BigDecimal declareAmount = project.getDeclareAmount();
if (Objects.isNull(declareAmount) || declareAmount.compareTo(BigDecimal.ZERO) == 0) {
return DashboardConstant.Protrait.ZREO_PERCEN;
return Protrait.ZREO_PERCEN;
}
BigDecimal rate = BigDecimal.valueOf(totalAmount).multiply(BigDecimal.valueOf(100))
.divide(declareAmount, BigDecimal.ROUND_CEILING, RoundingMode.HALF_UP)
.stripTrailingZeros();
return rate.toPlainString();
} catch (Exception e) {
} catch (Exception ignored) {
}
}
return DashboardConstant.Protrait.ZREO_PERCEN;
return Protrait.ZREO_PERCEN;
}

/**
@@ -476,7 +467,7 @@ public class DashboardProjectManage {
* @param project
* @return
*/
private List<ProtraitProjectStatusSituationVO> generateProjectStatus(Project project) {
private List<ProtraitProjectStatusSituationVO> genProjectStatus(Project project) {
final List<ProtraitProjectStatusSituationVO> res = Lists.newArrayList();
//1.计划(单位内部审核)
res.add(new ProtraitProjectStatusSituationVO());
@@ -489,77 +480,70 @@ public class DashboardProjectManage {
//5.验收(终验)
res.add(new ProtraitProjectStatusSituationVO());
//6.运维(todo: 运维时间还没有)
res.add(ProtraitProjectStatusSituationVO.builder().statusName(DashboardConstant.Protrait.OPERATION).build());
res.add(ProtraitProjectStatusSituationVO.builder().statusName(Protrait.OPERATION).build());
//7.绩效
res.add(new ProtraitProjectStatusSituationVO());
//8.注销(todo: 还没有注销功能)
res.add(ProtraitProjectStatusSituationVO.builder().statusName(DashboardConstant.Protrait.LOG_OFF).build());
res.add(ProtraitProjectStatusSituationVO.builder().statusName(Protrait.LOG_OFF).build());

CompletableFuture.allOf(
CompletableFuture.runAsync(() -> {
res.set(0, statusHandler.generateApproveStatus(project, DashboardConstant.Protrait.PLAN, InstTypeEnum.UNIT_INNER_AUDIT.getCode()));
}, ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> {
res.set(1, statusHandler.generateApproveStatus(project, DashboardConstant.Protrait.DECLARED, InstTypeEnum.PRELIMINARY_PREVIEW.getCode()));
}, ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> {
res.set(2, statusHandler.generateApproveStatus(project, DashboardConstant.Protrait.APPROVE, InstTypeEnum.CONSTRUCTION_PLAN_REVIEW.getCode()));
}, ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> {
res.set(3, statusHandler.generateStatus(project, DashboardConstant.Protrait.CONSTRUCTION,
ProjectStatusEnum.UNDER_CONSTRUCTION.getCode(), ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode()));
}, ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> {
res.set(4, statusHandler.generateApproveStatus(project, DashboardConstant.Protrait.ACCEPT, InstTypeEnum.PROJECT_FINAL_INSPECTION.getCode()));
}, ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> {
res.set(6, statusHandler.generatePerformanceStatus(project));
}, ForkJoinPool.commonPool())
CompletableFuture.runAsync(() -> res.set(0, statusHandler.genApproveStatus(project, Protrait.PLAN,
InstTypeEnum.UNIT_INNER_AUDIT)), ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> res.set(1, statusHandler.genApproveStatus(project, Protrait.DECLARED,
InstTypeEnum.PRELIMINARY_PREVIEW)), ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> res.set(2, statusHandler.genApproveStatus(project, Protrait.APPROVE,
InstTypeEnum.CONSTRUCTION_PLAN_REVIEW)), ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> res.set(3, statusHandler.genStatus(project, Protrait.CONSTRUCTION,
ProjectStatusEnum.UNDER_CONSTRUCTION, ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)), ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> res.set(4, statusHandler.genApproveStatus(project, Protrait.ACCEPT,
InstTypeEnum.PROJECT_FINAL_INSPECTION)), ForkJoinPool.commonPool()),
CompletableFuture.runAsync(() -> res.set(6, statusHandler.generatePerformanceStatus(project)),
ForkJoinPool.commonPool())
).join();
return res;
}

private List<ProtraitProjectStatusSituationVO> generateProjectStatus(GovBizProjectBaseinfo baseinfo) {
private List<ProtraitProjectStatusSituationVO> genProjectStatus(GovBizProjectBaseinfo baseinfo) {
final List<ProtraitProjectStatusSituationVO> res = Lists.newArrayList();
//1.计划(单位内部审核)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.PLAN, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.PLAN, null));
//2.申报(项目预审)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.DECLARED, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.DECLARED, null));
//3.审批(建设方案审批)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.APPROVE, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.APPROVE, null));
//4.建设(立项后的建设中)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.CONSTRUCTION, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.CONSTRUCTION, null));
//5.验收(终验)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.ACCEPT,
res.add(new ProtraitProjectStatusSituationVO(Protrait.ACCEPT,
Objects.nonNull(baseinfo.getBaseProjSetProg()) && "07".equals(baseinfo.getBaseProjSetProg()) ? baseinfo.getTongTime() : null));
//6.运维(todo: 运维时间还没有)
res.add(ProtraitProjectStatusSituationVO.builder().statusName(DashboardConstant.Protrait.OPERATION).build());
res.add(ProtraitProjectStatusSituationVO.builder().statusName(Protrait.OPERATION).build());
//7.绩效
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.ACCEPT, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.ACCEPT, null));
//8.注销(todo: 还没有注销功能)
res.add(ProtraitProjectStatusSituationVO.builder().statusName(DashboardConstant.Protrait.LOG_OFF).build());
res.add(ProtraitProjectStatusSituationVO.builder().statusName(Protrait.LOG_OFF).build());
return res;
}

private List<ProtraitProjectStatusSituationVO> generateProjectStatus(GovOperationProjectBaseinfo baseinfo) {
private List<ProtraitProjectStatusSituationVO> genProjectStatus(GovOperationProjectBaseinfo baseinfo) {
final List<ProtraitProjectStatusSituationVO> res = Lists.newArrayList();
//1.计划(单位内部审核)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.PLAN, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.PLAN, null));
//2.申报(项目预审)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.DECLARED, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.DECLARED, null));
//3.审批(建设方案审批)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.APPROVE, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.APPROVE, null));
//4.建设(立项后的建设中)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.CONSTRUCTION, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.CONSTRUCTION, null));
//5.验收(终验)
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.ACCEPT,
res.add(new ProtraitProjectStatusSituationVO(Protrait.ACCEPT,
Objects.nonNull(baseinfo.getBaseProjSetProg()) && "07".equals(baseinfo.getBaseProjSetProg()) ? baseinfo.getTongTime() : null));
//6.运维(todo: 运维时间还没有)
res.add(ProtraitProjectStatusSituationVO.builder().statusName(DashboardConstant.Protrait.OPERATION).build());
res.add(ProtraitProjectStatusSituationVO.builder().statusName(Protrait.OPERATION).build());
//7.绩效
res.add(new ProtraitProjectStatusSituationVO(DashboardConstant.Protrait.ACCEPT, null));
res.add(new ProtraitProjectStatusSituationVO(Protrait.ACCEPT, null));
//8.注销(todo: 还没有注销功能)
res.add(ProtraitProjectStatusSituationVO.builder().statusName(DashboardConstant.Protrait.LOG_OFF).build());
res.add(ProtraitProjectStatusSituationVO.builder().statusName(Protrait.LOG_OFF).build());
return res;
}
}

+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/EarlyWarningStatisticsManage.java Bestand weergeven

@@ -71,7 +71,7 @@ public class EarlyWarningStatisticsManage {

EarlyWarningStatisticsVO res = new EarlyWarningStatisticsVO();
LambdaQueryWrapper<WflowEarlyWarningRecords> wrapper = Wrappers.lambdaQuery(WflowEarlyWarningRecords.class);
EarlyWarningUtil.buildPermissonWrapper(wrapper,user);
EarlyWarningUtil.buildPermissionWrapper(wrapper,user);
List<WflowEarlyWarningRecords> records = earlyWarningRecordsService.list(wrapper);
//累积总告警数
res.setAccumulatedAlarmsTotal(records.size());


+ 16
- 19
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/MeetingStatisticsManage.java Bestand weergeven

@@ -57,8 +57,8 @@ public class MeetingStatisticsManage {
List<Meeting> meetings = meetingService.list(Wrappers.lambdaQuery(Meeting.class));
//查出 年份的 会议数据
meetings = meetings.stream().filter(m -> {
if(Objects.nonNull(m.getStartTime()) &&
(Objects.isNull(year) || year.equals(m.getStartTime().getYear()))){
if (Objects.nonNull(m.getStartTime()) &&
(Objects.isNull(year) || year.equals(m.getStartTime().getYear()))) {
return Boolean.TRUE;
}
return Boolean.FALSE;
@@ -72,10 +72,10 @@ public class MeetingStatisticsManage {
//评审数
List<ExpertReview> expertReviews = Lists.newArrayList();
Integer reviewsTotal = 0;
if(CollUtil.isNotEmpty(meetingIds)){
if (CollUtil.isNotEmpty(meetingIds)) {
expertReviews = expertReviewService.list(Wrappers.lambdaQuery(ExpertReview.class)
.eq(ExpertReview::getIsFinal, Boolean.TRUE)
.in(ExpertReview::getMeetingId,meetingIds));
.in(ExpertReview::getMeetingId, meetingIds));
reviewsTotal = expertReviews.size();
}
//通过的评审
@@ -91,18 +91,15 @@ public class MeetingStatisticsManage {
res.setPassReview(passExpertReviews.size());
res.setNotPassRate(reviewsTotal.compareTo(0) == 0 ? BigDecimal.ZERO :
BigDecimal.valueOf(notpassExpertReviews.size()).multiply(BigDecimal.valueOf(100)
.divide(BigDecimal.valueOf(reviewsTotal), RoundingMode.HALF_UP)));
.divide(BigDecimal.valueOf(reviewsTotal), RoundingMode.HALF_UP)));

//各区域
List<RegionDTO> regions = regionCacheHelper.listChildren(RegionConst.RC_HZ, RegionConst.RL_CITY)
.stream().filter(r -> r.getRegionLevel().equals(RegionConst.RL_COUNTY))
.sorted(Comparator.comparing(RegionDTO::getRegionCode)).collect(Collectors.toList());
List<DataDTO> regionMeetngs = Lists.newArrayList();
for(RegionDTO region : regions){
regionMeetngs.add(DataDTO.of(region.getRegionName(),region.getRegionCode(),meetings.stream().filter(m -> {

return Boolean.FALSE;
}).collect(Collectors.toList()).size()));
for (RegionDTO region : regions) {
regionMeetngs.add(DataDTO.of(region.getRegionName(), region.getRegionCode(), meetings.size()));
}
res.setRegionMeetings(regionMeetngs);

@@ -110,14 +107,14 @@ public class MeetingStatisticsManage {
List<DataDTO> meetingTypes = Lists.newArrayList();
meetingTypes.add(DataDTO.of("预审会议", ReviewTemplateTypeEnum.PRELIMINARY_SCHEME_REVIEW.getCode().toString(),
meetings.stream().filter(m -> {
if(StringUtils.isNotBlank(m.getType()) &&
if (StringUtils.isNotBlank(m.getType()) &&
m.getType().equals(ReviewTemplateTypeEnum.PRELIMINARY_SCHEME_REVIEW.getCode()
.toString())){
.toString())) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}).collect(Collectors.toList()).size()));
Long yanshouCount = meetings.stream().filter(m -> {
long yanshouCount = meetings.stream().filter(m -> {
if (StringUtils.isNotBlank(m.getType()) &&
m.getType().equals(ReviewTemplateTypeEnum.ACCEPTANCE_SCHEME_REVIEW.getCode()
.toString())) {
@@ -125,13 +122,13 @@ public class MeetingStatisticsManage {
}
return Boolean.FALSE;
}).count();
meetingTypes.add(DataDTO.of("验收会议",ReviewTemplateTypeEnum.ACCEPTANCE_SCHEME_REVIEW.getCode().toString(),
yanshouCount.intValue()));
meetingTypes.add(DataDTO.of("验收会议", ReviewTemplateTypeEnum.ACCEPTANCE_SCHEME_REVIEW.getCode().toString(),
(int) yanshouCount));
res.setMeetingTypes(meetingTypes);

//各区县评审 不通过率
List<DataDTO> regionNotpassReview = Lists.newArrayList();
for(RegionDTO region : regions){
for (RegionDTO region : regions) {
DataDTO data = new DataDTO();
data.setCode(region.getRegionCode());
data.setName(region.getRegionName());
@@ -151,7 +148,7 @@ public class MeetingStatisticsManage {

data.setRate(CollUtil.isEmpty(regionReviews) ? BigDecimal.ZERO :
BigDecimal.valueOf(regionNotpass).multiply(BigDecimal.valueOf(100))
.divide(BigDecimal.valueOf(regionReviews.size()),BigDecimal.ROUND_CEILING,RoundingMode.HALF_UP));
.divide(BigDecimal.valueOf(regionReviews.size()), BigDecimal.ROUND_CEILING, RoundingMode.HALF_UP));

regionNotpassReview.add(data);
}
@@ -176,7 +173,7 @@ public class MeetingStatisticsManage {
.collect(Collectors.toList());
List<String> projectCodes = orgProjects.stream().map(Project::getProjectCode)
.collect(Collectors.toList());
if(CollUtil.isEmpty(projectCodes)){
if (CollUtil.isEmpty(projectCodes)) {
return data;
}
List<ExpertReview> reviews = finalExpertReviews.stream().filter(r -> Objects.nonNull(r.getProjectCode()) &&
@@ -186,7 +183,7 @@ public class MeetingStatisticsManage {
.count();
data.setRate(CollUtil.isEmpty(reviews) ? BigDecimal.ZERO :
BigDecimal.valueOf(orgNotpass).multiply(BigDecimal.valueOf(100))
.divide(BigDecimal.valueOf(reviews.size()),BigDecimal.ROUND_CEILING,RoundingMode.HALF_UP));
.divide(BigDecimal.valueOf(reviews.size()), BigDecimal.ROUND_CEILING, RoundingMode.HALF_UP));
return data;
})
.filter(d -> Objects.nonNull(d.getRate()))


+ 38
- 33
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/manage/ProjectCostStatisticsManage.java Bestand weergeven

@@ -1,6 +1,5 @@
package com.hz.pm.api.dashboard.manage;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.model.entity.DataDTO;
@@ -10,15 +9,15 @@ import com.hz.pm.api.meeting.entity.domain.Meeting;
import com.hz.pm.api.meeting.entity.domain.MeetingExpert;
import com.hz.pm.api.meeting.service.IMeetingExpertService;
import com.hz.pm.api.meeting.service.IMeetingService;
import com.ningdatech.basic.util.CollUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;

/**
@@ -36,22 +35,31 @@ public class ProjectCostStatisticsManage {

private final IMeetingService meetingService;

List<Integer> thisTwoYears = Lists.newArrayList(LocalDateTime.now().getYear() - 1
,LocalDateTime.now().getYear());
//评审费 每人500 (0.05万)
private static final BigDecimal REVIEW_AMOUNT_EXPERT = DashboardConstant.Expert.REVIEW_AOUMT_EXPERT;

private List<Integer> getRecentTwoYears() {
int currYear = LocalDate.now().getYear();
return Arrays.asList(currYear - 1, currYear);
}

public CostStatisticsVO statistics() {
CostStatisticsVO res = new CostStatisticsVO();
List<Meeting> meetings = meetingService.list(Wrappers.lambdaQuery(Meeting.class));
List<Long> meetingIds = meetings.stream().map(Meeting::getId)
.collect(Collectors.toList());
List<Meeting> meetings = meetingService.list(Wrappers.lambdaQuery(Meeting.class)
.select(Meeting::getStartTime, Meeting::getId));
//算出所有的 同意的专家
List<MeetingExpert> meetingExperts = meetingExpertService.listAgreedExperts(meetingIds);
List<MeetingExpert> meetingExperts;

//评审费 每人500 (0.05万)
BigDecimal reviewAoumtExpert = DashboardConstant.Expert.REVIEW_AOUMT_EXPERT;
if (meetings.isEmpty()) {
meetingExperts = Collections.emptyList();
} else {
List<Long> meetingIds = CollUtils.fieldList(meetings, Meeting::getId);
meetingExperts = meetingExpertService.listAgreedExperts(meetingIds);
}

//计算累积
res.setReviewAmount(reviewAoumtExpert.multiply(BigDecimal.valueOf(meetingExperts.size())));
res.setReviewAmount(REVIEW_AMOUNT_EXPERT.multiply(BigDecimal.valueOf(meetingExperts.size())));
res.setPricingAmount(BigDecimal.ZERO);

//近两年
@@ -64,30 +72,27 @@ public class ProjectCostStatisticsManage {
DataDTO pricingAvg = new DataDTO();
pricingAvg.setName("核价费");
BigDecimal reviewTwoYearTotal = BigDecimal.ZERO;
for(Integer thisYear : thisTwoYears){

Map<Integer, List<Meeting>> meetingMapYear = CollUtils.group(meetings, w -> w.getStartTime().getYear());
Map<Long, List<MeetingExpert>> expertMapMeetingId = CollUtils.group(meetingExperts, MeetingExpert::getMeetingId);

for (Integer thisYear : getRecentTwoYears()) {
//查出 年份的 会议数据
List<Meeting> yearMeetings = meetings.stream().filter(m -> {
if(Objects.nonNull(m.getStartTime()) &&
( thisYear.equals(m.getStartTime().getYear()))){
return Boolean.TRUE;
}
return Boolean.FALSE;
}).collect(Collectors.toList());
List<Long> yearMeetingIds = yearMeetings.stream().map(Meeting::getId)
List<Meeting> yearMeetings = meetingMapYear.getOrDefault(thisYear, Collections.emptyList());
List<MeetingExpert> yearMeetingExperts = yearMeetings.stream()
.map(w -> expertMapMeetingId.get(w.getId()))
.filter(Objects::nonNull)
.flatMap(Collection::stream)
.collect(Collectors.toList());
//算出所有的 同意的专家
List<MeetingExpert> yearMeetingExperts = Lists.newArrayList();
if(CollUtil.isNotEmpty(yearMeetingIds)){
yearMeetingExperts = meetingExpertService.listAgreedExperts(yearMeetingIds);
}
twoYearsReviews.add(DataDTO.of(thisYear.toString(),reviewAoumtExpert.multiply(BigDecimal
.valueOf(yearMeetingExperts.size()))));
twoYearsPricing.add(DataDTO.of(thisYear.toString(),BigDecimal.ZERO));

reviewTwoYearTotal = reviewTwoYearTotal.add(reviewAoumtExpert.multiply(BigDecimal
.valueOf(yearMeetingExperts.size())));
BigDecimal yearExpertCnt = BigDecimal.valueOf(yearMeetingExperts.size());
BigDecimal yearExpertAmount = REVIEW_AMOUNT_EXPERT.multiply(yearExpertCnt);
twoYearsReviews.add(DataDTO.of(thisYear.toString(), yearExpertAmount));
twoYearsPricing.add(DataDTO.of(thisYear.toString(), BigDecimal.ZERO));

reviewTwoYearTotal = reviewTwoYearTotal.add(yearExpertAmount);
}
reviewAvg.setAmount(reviewTwoYearTotal.divide(BigDecimal.valueOf(2),BigDecimal.ROUND_CEILING,
reviewAvg.setAmount(reviewTwoYearTotal.divide(BigDecimal.valueOf(2), BigDecimal.ROUND_CEILING,
RoundingMode.HALF_UP));
twoYearsAvg.add(reviewAvg);
twoYearsAvg.add(pricingAvg);


+ 1
- 3
hz-pm-api/src/main/java/com/hz/pm/api/dashboard/model/vo/ProjectStatisticsVO.java Bestand weergeven

@@ -5,13 +5,11 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
@ApiModel(value = "项目统计")
public class ProjectStatisticsVO implements Serializable {
private static final long serialVersionUID = 1L;
public class ProjectStatisticsVO {

@ApiModelProperty("项目计划数")
private Integer planTotal = 0;


+ 1
- 7
hz-pm-api/src/main/java/com/hz/pm/api/datascope/model/DataScopeDTO.java Bestand weergeven

@@ -7,7 +7,7 @@ import java.util.List;

/**
* <p>
* DataScopeDto
* DataScopeDTO
* </p>
*
* @author WendyYang
@@ -18,14 +18,8 @@ public class DataScopeDTO {

private RoleEnum role;

private List<Long> regionIds;

private List<String> regionCodes;

private String orgCode;

private String employeeCode;

private Long userId;

}

+ 3
- 3
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/DataScopeContext.java Bestand weergeven

@@ -1,7 +1,7 @@
package com.hz.pm.api.datascope.provider;

import com.ningdatech.basic.util.SpringUtils;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.ningdatech.basic.util.SpringUtils;
import lombok.RequiredArgsConstructor;

import java.io.Serializable;
@@ -19,7 +19,7 @@ import java.util.Optional;
@RequiredArgsConstructor
public class DataScopeContext implements Serializable {

private static final String WARN_MSG = "请先创建数据权限[%s]的实现类,使其实现 DataScopeProvider";
private static final String WARN_MSG = "请先创建数据权限[%s]的实现类";

private static final Map<String, DataScopeProvider> DSP_MAP;

@@ -35,7 +35,7 @@ public class DataScopeContext implements Serializable {
return dataScopeProvider.findDataFieldProperty();
}

public static Optional<DataScopeDTO> getDataScopeHasUserId(String roleCode,Long userId) {
public static Optional<DataScopeDTO> getDataScopeHasUserId(String roleCode, Long userId) {
DataScopeProvider dataScopeProvider = DSP_MAP.get(roleCode);
if (dataScopeProvider == null) {
throw new IllegalArgumentException(String.format(WARN_MSG, roleCode));


+ 6
- 11
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/DashboardUserDataScopeProviderImpl.java Bestand weergeven

@@ -1,6 +1,5 @@
package com.hz.pm.api.datascope.provider.impl;

import com.google.common.collect.Lists;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.provider.DataScopeProvider;
@@ -30,23 +29,19 @@ public class DashboardUserDataScopeProviderImpl implements DataScopeProvider {

@Override
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
DataScopeDTO ds = new DataScopeDTO();
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRegionCodes(Lists.newArrayList(userFullInfo.getRegionCode()));
ds.setUserId(userFullInfo.getUserId());
ds.setUserId(user.getUserId());
ds.setRole(RoleEnum.DASHBOARD);
return Optional.ofNullable(ds);
return Optional.of(ds);
}

@Override
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(userId);
DataScopeDTO ds = new DataScopeDTO();
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRegionCodes(Lists.newArrayList(userFullInfo.getRegionCode()));
ds.setUserId(userFullInfo.getUserId());
ds.setUserId(user.getUserId());
ds.setRole(RoleEnum.DASHBOARD);
return Optional.ofNullable(ds);
return Optional.of(ds);
}
}

+ 2
- 27
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/ExpertAdminDataScopeProviderImpl.java Bestand weergeven

@@ -1,11 +1,8 @@
package com.hz.pm.api.datascope.provider.impl;

import com.ningdatech.basic.util.CollUtils;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.provider.DataScopeProvider;
import com.hz.pm.api.sys.model.dto.RegionDTO;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.hz.pm.api.user.security.model.UserInfoDetails;
@@ -13,9 +10,6 @@ import com.hz.pm.api.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

/**
@@ -30,25 +24,15 @@ import java.util.Optional;
@RequiredArgsConstructor
public class ExpertAdminDataScopeProviderImpl implements DataScopeProvider {

private final RegionCacheHelper regionCacheHelper;
private final UserInfoHelper userInfoHelper;

@Override
public Optional<DataScopeDTO> findDataFieldProperty() {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
DataScopeDTO ds = new DataScopeDTO();
if (Objects.isNull(user.getRegionLevel())) {
ds.setRegionIds(Collections.emptyList());
ds.setRegionCodes(Collections.emptyList());
} else {
List<RegionDTO> regions = regionCacheHelper.listChildren(user.getRegionCode(), user.getRegionLevel());
ds.setRegionCodes(CollUtils.fieldList(regions, RegionDTO::getRegionCode));
ds.setRegionIds(CollUtils.fieldList(regions, RegionDTO::getId));
}
ds.setRole(RoleEnum.EXPERT_ADMIN);
ds.setUserId(user.getUserId());
ds.setEmployeeCode(user.getEmployeeCode());
ds.setOrgCode(user.getOrganizationCode());
ds.setOrgCode(user.getMhUnitIdStr());
return Optional.of(ds);
}

@@ -56,18 +40,9 @@ public class ExpertAdminDataScopeProviderImpl implements DataScopeProvider {
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(userId);
DataScopeDTO ds = new DataScopeDTO();
if (Objects.isNull(user.getRegionLevel())) {
ds.setRegionIds(Collections.emptyList());
ds.setRegionCodes(Collections.emptyList());
} else {
List<RegionDTO> regions = regionCacheHelper.listChildren(user.getRegionCode(), user.getRegionLevel());
ds.setRegionCodes(CollUtils.fieldList(regions, RegionDTO::getRegionCode));
ds.setRegionIds(CollUtils.fieldList(regions, RegionDTO::getId));
}
ds.setRole(RoleEnum.EXPERT_ADMIN);
ds.setUserId(user.getUserId());
ds.setEmployeeCode(user.getEmployeeCode());
ds.setOrgCode(user.getOrganizationCode());
ds.setOrgCode(user.getMhUnitIdStr());
return Optional.of(ds);
}



+ 2
- 17
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/ExpertDataScopeProviderImpl.java Bestand weergeven

@@ -1,6 +1,5 @@
package com.hz.pm.api.datascope.provider.impl;

import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
@@ -12,9 +11,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.Optional;
import java.util.stream.Collectors;

/**
* <p>
@@ -36,30 +33,18 @@ public class ExpertDataScopeProviderImpl implements DataScopeProvider {
@Override
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
//所有 丽水市的code
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(RegionConst.RC_HZ,
RegionConst.RL_CITY);

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(regionCodes.stream().collect(Collectors.toList()));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.EXPERT);
return Optional.ofNullable(ds);
return Optional.of(ds);
}

@Override
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
//所有 丽水市的code
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(RegionConst.RC_HZ,
RegionConst.RL_CITY);

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(regionCodes.stream().collect(Collectors.toList()));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.EXPERT);
return Optional.ofNullable(ds);
return Optional.of(ds);
}
}

+ 0
- 27
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/HigherUserDataScopeProviderImpl.java Bestand weergeven

@@ -1,9 +1,5 @@
package com.hz.pm.api.datascope.provider.impl;

import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.provider.DataScopeProvider;
@@ -14,8 +10,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;

/**
@@ -31,26 +25,14 @@ import java.util.Optional;
@Component("HIGH_MEMBER")
public class HigherUserDataScopeProviderImpl implements DataScopeProvider {

private final RegionCacheHelper regionCacheHelper;
private final UserInfoHelper userInfoHelper;

//和区域管理员一样
@Override
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
//借由 丽水市的code 来映射市本级的regionCode
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(userFullInfo.getRegionCode(),
RegionConst.RL_CITY);
//如果不是市本级的话 就直接放入本区域的县就好了
if(CollUtil.isEmpty(regionCodes)){
regionCodes = Lists.newArrayList();
regionCodes.add(userFullInfo.getRegionCode());
}

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(new ArrayList<>(regionCodes));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.REGION_MANAGER);
return Optional.of(ds);
}
@@ -59,18 +41,9 @@ public class HigherUserDataScopeProviderImpl implements DataScopeProvider {
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
//借由 丽水市的code 来映射市本级的regionCode
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(userFullInfo.getRegionCode(),
RegionConst.RL_CITY);
//如果不是市本级的话 就直接放入本区域的县就好了
if(CollUtil.isEmpty(regionCodes)){
regionCodes = Lists.newArrayList();
regionCodes.add(userFullInfo.getRegionCode());
}

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(new ArrayList<>(regionCodes));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.REGION_MANAGER);
return Optional.of(ds);
}


+ 4
- 7
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/OrdinaryUserDataScopeProviderImpl.java Bestand weergeven

@@ -1,6 +1,5 @@
package com.hz.pm.api.datascope.provider.impl;

import com.google.common.collect.Lists;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.provider.DataScopeProvider;
@@ -10,6 +9,7 @@ import com.hz.pm.api.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Optional;

/**
@@ -31,21 +31,18 @@ public class OrdinaryUserDataScopeProviderImpl implements DataScopeProvider {
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
DataScopeDTO ds = new DataScopeDTO();
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRegionCodes(Lists.newArrayList(userFullInfo.getRegionCode()));
ds.setUserId(userFullInfo.getUserId());
ds.setRole(RoleEnum.NORMAL_MEMBER);
return Optional.ofNullable(ds);
return Optional.of(ds);
}

@Override
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
DataScopeDTO ds = new DataScopeDTO();
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRegionCodes(Lists.newArrayList(userFullInfo.getRegionCode()));
ds.setUserId(userFullInfo.getUserId());
ds.setRole(RoleEnum.NORMAL_MEMBER);
return Optional.ofNullable(ds);
return Optional.of(ds);
}

}

+ 3
- 4
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/OrgAdminDataScopeProviderImpl.java Bestand weergeven

@@ -9,6 +9,7 @@ import com.hz.pm.api.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Optional;

/**
@@ -30,9 +31,8 @@ public class OrgAdminDataScopeProviderImpl implements DataScopeProvider {
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
DataScopeDTO ds = new DataScopeDTO();
ds.setOrgCode(userFullInfo.getEmpPosUnitCode());
ds.setOrgCode(String.valueOf(userFullInfo.getMhUnitId()));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.COMPANY_MANAGER);
return Optional.of(ds);
}
@@ -41,9 +41,8 @@ public class OrgAdminDataScopeProviderImpl implements DataScopeProvider {
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
DataScopeDTO ds = new DataScopeDTO();
ds.setOrgCode(userFullInfo.getEmpPosUnitCode());
ds.setOrgCode(String.valueOf(userFullInfo.getMhUnitId()));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.COMPANY_MANAGER);
return Optional.of(ds);
}


+ 0
- 27
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/RegionAdminDataScopeProviderImpl.java Bestand weergeven

@@ -1,8 +1,5 @@
package com.hz.pm.api.datascope.provider.impl;

import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
@@ -14,8 +11,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;

/**
@@ -37,19 +32,8 @@ public class RegionAdminDataScopeProviderImpl implements DataScopeProvider {
@Override
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
//借由 丽水市的code 来映射市本级的regionCode
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(userFullInfo.getRegionCode(),
RegionConst.RL_CITY);
//如果不是市本级的话 就直接放入本区域的县就好了
if(CollUtil.isEmpty(regionCodes)){
regionCodes = Lists.newArrayList();
regionCodes.add(userFullInfo.getRegionCode());
}

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(new ArrayList<>(regionCodes));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.REGION_MANAGER);
return Optional.of(ds);
}
@@ -57,19 +41,8 @@ public class RegionAdminDataScopeProviderImpl implements DataScopeProvider {
@Override
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
//借由 丽水市的code 来映射市本级的regionCode
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(userFullInfo.getRegionCode(),
RegionConst.RL_CITY);
//如果不是市本级的话 就直接放入本区域的县就好了
if(CollUtil.isEmpty(regionCodes)){
regionCodes = Lists.newArrayList();
regionCodes.add(userFullInfo.getRegionCode());
}

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(new ArrayList<>(regionCodes));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.REGION_MANAGER);
return Optional.of(ds);
}


+ 0
- 14
hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/SuperAdminDataScopeProviderImpl.java Bestand weergeven

@@ -1,6 +1,5 @@
package com.hz.pm.api.datascope.provider.impl;

import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
@@ -12,8 +11,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;

/**
@@ -37,13 +34,8 @@ public class SuperAdminDataScopeProviderImpl implements DataScopeProvider {
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
//所有 丽水市的code
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(RegionConst.RC_HZ,
RegionConst.RL_CITY);

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(new ArrayList<>(regionCodes));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.SUPER_ADMIN);
return Optional.of(ds);
}
@@ -51,14 +43,8 @@ public class SuperAdminDataScopeProviderImpl implements DataScopeProvider {
@Override
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
//所有 丽水市的code
Collection<String> regionCodes = regionCacheHelper.listChildRegionCodeList(RegionConst.RC_HZ,
RegionConst.RL_CITY);

DataScopeDTO ds = new DataScopeDTO();
ds.setRegionCodes(new ArrayList<>(regionCodes));
ds.setUserId(userFullInfo.getUserId());
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.SUPER_ADMIN);
return Optional.of(ds);
}


hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/VisitoyDataScopeProviderImpl.java → hz-pm-api/src/main/java/com/hz/pm/api/datascope/provider/impl/VisitorDataScopeProviderImpl.java Bestand weergeven

@@ -1,14 +1,12 @@
package com.hz.pm.api.datascope.provider.impl;

import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.provider.DataScopeProvider;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.hz.pm.api.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Optional;

/**
@@ -22,24 +20,19 @@ import java.util.Optional;
@Slf4j
@RequiredArgsConstructor
@Component("VISITOR")
public class VisitoyDataScopeProviderImpl implements DataScopeProvider {
private final UserInfoHelper userInfoHelper;
public class VisitorDataScopeProviderImpl implements DataScopeProvider {

@Override
public Optional<DataScopeDTO> findDataFieldProperty() {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
DataScopeDTO ds = new DataScopeDTO();
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.SUPER_ADMIN);
return Optional.ofNullable(ds);
return Optional.of(ds);
}

@Override
public Optional<DataScopeDTO> findDataFieldProperty(Long userId) {
UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId);
DataScopeDTO ds = new DataScopeDTO();
ds.setEmployeeCode(userFullInfo.getEmployeeCode());
ds.setRole(RoleEnum.SUPER_ADMIN);
return Optional.ofNullable(ds);
return Optional.of(ds);
}
}

+ 42
- 89
hz-pm-api/src/main/java/com/hz/pm/api/ding/task/EmployeeBatchGetTask.java Bestand weergeven

@@ -5,17 +5,16 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.GenericResult;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.ding.constants.DingOrganizationContant;
import com.hz.pm.api.organization.model.entity.DingEmployeeInfo;
import com.hz.pm.api.organization.model.entity.DingOrganization;
import com.hz.pm.api.organization.service.IDingEmployeeInfoService;
import com.hz.pm.api.organization.service.IDingOrganizationService;
import com.hz.pm.api.user.model.enumeration.UserAvailableEnum;
import com.hz.pm.api.user.entity.UserInfo;
import com.hz.pm.api.user.model.entity.UserInfo;
import com.hz.pm.api.user.service.IUserInfoService;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.GenericResult;
import com.ningdatech.zwdd.ZwddIntegrationProperties;
import com.ningdatech.zwdd.client.ZwddAuthClient;
import com.ningdatech.zwdd.client.ZwddClient;
@@ -25,9 +24,9 @@ import com.ningdatech.zwdd.model.dto.EmployeeInfoDTO;
import com.ningdatech.zwdd.model.query.PageOrganizationEmployeePositionsQuery;
import com.ningdatech.zwdd.model.response.OrganizationEmployeePosition;
import com.ningdatech.zwdd.model.response.OrganizationEmployeePosition.GovEmployeePosition;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@@ -40,49 +39,42 @@ import java.util.stream.Collectors;
* @date 2023/2/10 上午9:52
*/

@Component
@Slf4j
@Component
@RequiredArgsConstructor
public class EmployeeBatchGetTask {

private final static Integer PAGE_SIZE = 20;
private static final int PAGE_SIZE = 20;
private static final int GROUP_SIZE = 100;
private static final long MAX_SIZE = 10000;

private final static Integer GROUP_SIZE = 100;
//==================================================================================================================

private final static Integer MAX_SIZE = 10000;
private final ZwddClient zwddClient;
private final ZwddAuthClient zwddAuthClient;
private final IDingOrganizationService dingOrganizationService;
private final IDingEmployeeInfoService dingEmployeeInfoService;
private final ZwddIntegrationProperties zwddIntegrationProperties;
private final IUserInfoService userInfoService;

@Autowired
private ZwddClient zwddClient;

@Autowired
private ZwddAuthClient zwddAuthClient;

@Autowired
private IDingOrganizationService iDingOrganizationService;

@Autowired
private IDingEmployeeInfoService iDingEmployeeInfoService;

@Autowired
private ZwddIntegrationProperties zwddIntegrationProperties;

@Autowired
private IUserInfoService iUserInfoService;
//==================================================================================================================

@Transactional(rollbackFor = Exception.class)
// @Scheduled(cron = "0 0 1 * * ?")
public void batchGetEmployeeTask() {
// 获取所有的组织列表用户获取组织下的 用户信息(暂时 只查 单位的类型)
List<DingOrganization> dingOrganizationList = iDingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getTypeCode, DingOrganizationContant.UNIT_TYPE));
// 获取所有的组织列表用户获取组织下的 用户信息(暂时只查单位的类型)
List<DingOrganization> dingOrganizationList = dingOrganizationService.list(
Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getTypeCode, DingOrganizationContant.UNIT_TYPE));
log.info("所有待更新员工的单位数:{}", dingOrganizationList.size());
if (CollUtil.isNotEmpty(dingOrganizationList)) {
//记录任务 单位数
Integer index = 0;
for (DingOrganization dingOrganization : dingOrganizationList) {
log.info("当前单位:{},下标数,{}", dingOrganization.getOrganizationName(), index);
for (DingOrganization dingOrg : dingOrganizationList) {
log.info("当前单位:{},下标数,{}", dingOrg.getOrganizationName(), index);
index++;
List<OrganizationEmployeePosition> allOrganizationEmployeePositionList = new ArrayList<>();
String organizationCode = dingOrganization.getOrganizationCode();
String organizationCode = dingOrg.getOrganizationCode();
PageOrganizationEmployeePositionsQuery query = new PageOrganizationEmployeePositionsQuery();
query.setEmployeeStatus("A");
query.setOrganizationCode(organizationCode);
@@ -104,13 +96,13 @@ public class EmployeeBatchGetTask {
}
Long totalSize = data.getTotalSize();

log.info("dingOrganization :{}", JSON.toJSONString(dingOrganization));
log.info("dingOrg :{}", JSON.toJSONString(dingOrg));

log.info("totalSize :{},{}", totalSize, dingOrganization.getOrganizationName());
log.info("totalSize :{},{}", totalSize, dingOrg.getOrganizationName());
if (totalSize > PAGE_SIZE) {
if (totalSize > MAX_SIZE) {
//超过1万 按1万的处理
totalSize = MAX_SIZE.longValue();
totalSize = MAX_SIZE;
}

int restPageNo = totalSize % PAGE_SIZE > 0 ? 1 : 0;
@@ -118,7 +110,6 @@ public class EmployeeBatchGetTask {
for (pageNo = 2; pageNo <= maxPageNo; pageNo++) {
query.setPageNo(pageNo);
GenericResult<Page<OrganizationEmployeePosition>> pageGenericResult = zwddClient.pageOrganizationEmployeePositions(query);
// log.info("pageGenericResult :{}", JSON.toJSONString(pageGenericResult));
if (pageGenericResult.isSuccess()) {
allOrganizationEmployeePositionList.addAll(pageGenericResult.getData().getData());
} else {
@@ -216,57 +207,21 @@ public class EmployeeBatchGetTask {
}
}

List<DingOrganization> organizations = iDingOrganizationService.list();
List<DingOrganization> organizations = dingOrganizationService.list();
Map<String, DingOrganization> organizationMap = organizations.stream().collect(Collectors.toMap(DingOrganization::getOrganizationCode, o -> o));

for (DingEmployeeInfo dingEmployeeInfo : saveList) {
String employeeCode = dingEmployeeInfo.getEmployeeCode();

DingEmployeeInfo employeeInfo = iDingEmployeeInfoService.getOne(Wrappers.lambdaQuery(DingEmployeeInfo.class)
DingEmployeeInfo employeeInfo = dingEmployeeInfoService.getOne(Wrappers.lambdaQuery(DingEmployeeInfo.class)
.eq(DingEmployeeInfo::getEmployeeCode, employeeCode)
.last(BizConst.LIMIT_1));
if (Objects.isNull(employeeInfo)) {
iDingEmployeeInfoService.save(dingEmployeeInfo);
dingEmployeeInfoService.save(dingEmployeeInfo);
} else {
dingEmployeeInfo.setId(employeeInfo.getId());
iDingEmployeeInfoService.saveOrUpdate(dingEmployeeInfo);
dingEmployeeInfoService.saveOrUpdate(dingEmployeeInfo);
}
generateOrUpdateUserInfo(dingEmployeeInfo, organizationMap);
}
}

public void generateOrUpdateUserInfo(DingEmployeeInfo dingEmployeeInfo, Map<String, DingOrganization> organizationMap) {
String employeeCode = dingEmployeeInfo.getEmployeeCode();
UserInfo userInfo = iUserInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class)
.eq(UserInfo::getEmployeeCode, employeeCode));
if (Objects.isNull(userInfo)) {
userInfo = new UserInfo();
userInfo.setAccountId(dingEmployeeInfo.getAccountId());
userInfo.setUsername(dingEmployeeInfo.getEmployeeName());
userInfo.setRealName(dingEmployeeInfo.getEmployeeName());
userInfo.setEmployeeCode(dingEmployeeInfo.getEmployeeCode());
userInfo.setAvailable(UserAvailableEnum.DISABLE.name());
userInfo.setCreateBy(-1L);
userInfo.setUpdateBy(-1L);
userInfo.setCreateOn(LocalDateTime.now());
userInfo.setUpdateOn(LocalDateTime.now());
userInfo.setEmpPosUnitCode(dingEmployeeInfo.getEmpPosUnitCode());
userInfo.setAvatar(dingEmployeeInfo.getAvatar());
if (StringUtils.isNotBlank(userInfo.getEmpPosUnitCode()) && organizationMap.containsKey(userInfo.getEmpPosUnitCode())) {
DingOrganization dingOrganization = organizationMap.get(userInfo.getEmpPosUnitCode());
userInfo.setEmpPosUnitName(dingOrganization.getOrganizationName());
userInfo.setRegionCode(dingOrganization.getDivisionCode());
}
iUserInfoService.save(userInfo);
} else {
userInfo.setAvatar(dingEmployeeInfo.getAvatar());
userInfo.setEmpPosUnitCode(dingEmployeeInfo.getEmpPosUnitCode());
if (StringUtils.isNotBlank(userInfo.getEmpPosUnitCode()) && organizationMap.containsKey(userInfo.getEmpPosUnitCode())) {
DingOrganization dingOrganization = organizationMap.get(userInfo.getEmpPosUnitCode());
userInfo.setEmpPosUnitName(dingOrganization.getOrganizationName());
userInfo.setRegionCode(dingOrganization.getDivisionCode());
}
iUserInfoService.updateById(userInfo);
}
}

@@ -276,7 +231,7 @@ public class EmployeeBatchGetTask {
* @param regionCode
*/
public void batchGetEmployeeTaskByRegionCode(String regionCode) {
List<DingOrganization> units = iDingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class)
List<DingOrganization> units = dingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getTypeCode, DingOrganizationContant.UNIT_TYPE)
.eq(DingOrganization::getDivisionCode, regionCode));

@@ -317,7 +272,7 @@ public class EmployeeBatchGetTask {
if (totalSize > PAGE_SIZE) {
if (totalSize > MAX_SIZE) {
//超过1万 按1万的处理
totalSize = MAX_SIZE.longValue();
totalSize = MAX_SIZE;
}

int restPageNo = totalSize % PAGE_SIZE > 0 ? 1 : 0;
@@ -325,7 +280,6 @@ public class EmployeeBatchGetTask {
for (pageNo = 2; pageNo <= maxPageNo; pageNo++) {
query.setPageNo(pageNo);
GenericResult<Page<OrganizationEmployeePosition>> pageGenericResult = zwddClient.pageOrganizationEmployeePositions(query);
// log.info("pageGenericResult :{}", JSON.toJSONString(pageGenericResult));
if (pageGenericResult.isSuccess()) {
allOrganizationEmployeePositionList.addAll(pageGenericResult.getData().getData());
} else {
@@ -354,17 +308,16 @@ public class EmployeeBatchGetTask {
}

public void batchGetEmployeeTaskByOrdCode(String orgCode) {
DingOrganization org = iDingOrganizationService.getOne(Wrappers.lambdaQuery(DingOrganization.class)
DingOrganization org = dingOrganizationService.getOne(Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getOrganizationCode, orgCode)
.last(BizConst.LIMIT_1));
VUtils.isTrue(Objects.isNull(org)).throwMessage("单位不存在");
log.info("所属单位 {} 要更新员工信息了", org.getOrganizationName());

List<OrganizationEmployeePosition> allOrganizationEmployeePositionList = new ArrayList<>();
String organizationCode = orgCode;
PageOrganizationEmployeePositionsQuery query = new PageOrganizationEmployeePositionsQuery();
query.setEmployeeStatus("A");
query.setOrganizationCode(organizationCode);
query.setOrganizationCode(orgCode);
query.setReturnTotalSize(true);
query.setTenantId(zwddIntegrationProperties.getTenantId());
int pageNo = 1;
@@ -375,7 +328,7 @@ public class EmployeeBatchGetTask {
GenericResult<Page<OrganizationEmployeePosition>> firstPageGenericResult = zwddClient.pageOrganizationEmployeePositions(query);
Page<OrganizationEmployeePosition> data = firstPageGenericResult.getData();
if (Objects.isNull(data)) {
log.info("响应为空:{}", organizationCode);
log.info("响应为空:{}", orgCode);
return;
}
if (CollUtil.isNotEmpty(data.getData())) {
@@ -389,7 +342,7 @@ public class EmployeeBatchGetTask {
if (totalSize > PAGE_SIZE) {
if (totalSize > MAX_SIZE) {
//超过1万 按1万的处理
totalSize = MAX_SIZE.longValue();
totalSize = MAX_SIZE;
}

int restPageNo = totalSize % PAGE_SIZE > 0 ? 1 : 0;
@@ -444,22 +397,22 @@ public class EmployeeBatchGetTask {
return;
}

DingEmployeeInfo emp = iDingEmployeeInfoService.getOne(Wrappers.lambdaQuery(DingEmployeeInfo.class)
DingEmployeeInfo emp = dingEmployeeInfoService.getOne(Wrappers.lambdaQuery(DingEmployeeInfo.class)
.eq(DingEmployeeInfo::getEmployeeCode, empCode)
.last(BizConst.LIMIT_1));

if (Objects.nonNull(emp)) {
emp.setAvatar(data.getGovEmpAvatar());
iDingEmployeeInfoService.updateById(emp);
dingEmployeeInfoService.updateById(emp);
}

UserInfo user = iUserInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class)
UserInfo user = userInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class)
.eq(UserInfo::getEmployeeCode, empCode)
.last(BizConst.LIMIT_1));

if (Objects.nonNull(user)) {
user.setAvatar(data.getGovEmpAvatar());
iUserInfoService.updateById(user);
userInfoService.updateById(user);
}
}

@@ -470,7 +423,7 @@ public class EmployeeBatchGetTask {
*/
public void getBatchEmployeeByCode(String orgCode) {

List<DingEmployeeInfo> employees = iDingEmployeeInfoService.list(Wrappers.lambdaQuery(DingEmployeeInfo.class)
List<DingEmployeeInfo> employees = dingEmployeeInfoService.list(Wrappers.lambdaQuery(DingEmployeeInfo.class)
.eq(DingEmployeeInfo::getEmpPosUnitCode, orgCode));

for (DingEmployeeInfo employee : employees) {


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/expert/manage/ExpertManage.java Bestand weergeven

@@ -44,7 +44,7 @@ import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.sys.model.entity.UserRole;
import com.hz.pm.api.sys.service.IRoleService;
import com.hz.pm.api.sys.service.IUserRoleService;
import com.hz.pm.api.user.entity.UserInfo;
import com.hz.pm.api.user.model.entity.UserInfo;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.model.enumeration.UserAvailableEnum;
import com.hz.pm.api.user.service.IUserInfoService;


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/expert/model/SensitiveModifySegment.java Bestand weergeven

@@ -78,7 +78,7 @@ public class SensitiveModifySegment {
return false;
}
for (SensitiveModifySegment segment : segmentList) {
if (!segment.isValueEquals()) {
if (Boolean.FALSE.equals(segment.isValueEquals())) {
return true;
}
}


+ 35
- 41
hz-pm-api/src/main/java/com/hz/pm/api/expert/service/impl/ExpertInfoServiceImpl.java Bestand weergeven

@@ -24,7 +24,7 @@ import com.hz.pm.api.expert.model.cmd.*;
import com.hz.pm.api.expert.model.dto.*;
import com.hz.pm.api.expert.service.*;
import com.hz.pm.api.expert.utils.SensitiveModifySegmentUtils;
import com.hz.pm.api.meeting.helper.YxtCallOrSmsHelper;
import com.hz.pm.api.meeting.helper.YxtClientHelper;
import com.hz.pm.api.meta.constant.ExpertDictTypeEnum;
import com.hz.pm.api.meta.model.ExpertRegionInfo;
import com.hz.pm.api.meta.model.entity.ExpertDictionary;
@@ -36,7 +36,7 @@ import com.hz.pm.api.sys.model.entity.UserRole;
import com.hz.pm.api.sys.service.IRoleService;
import com.hz.pm.api.sys.service.IUserRoleService;
import com.hz.pm.api.user.model.enumeration.UserAvailableEnum;
import com.hz.pm.api.user.entity.UserInfo;
import com.hz.pm.api.user.model.entity.UserInfo;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.service.IUserInfoService;
@@ -78,7 +78,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
private final IUserRoleService userRoleService;
private final IExpertSensitiveInfoModifyDetailRecordService iExpertSensitiveInfoModifyDetailRecordService;
private final IUserInfoService userInfoService;
private final YxtCallOrSmsHelper yxtCallOrSmsHelper;
private final YxtClientHelper yxtClientHelper;
private final IExpertGovBusinessStripService expertGovBusinessStripService;

@Value("${login.url:}")
@@ -101,7 +101,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {

ExpertUserFullInfo expertUserFullInfo = iExpertUserFullInfoService.getByUserId(userId);

ExpertUserFullInfo saveExpertUserFullInfo = buildSaveExpertUserFullInfo(expertUserInfoDTO);
ExpertUserFullInfo saveExpertUserFullInfo = buildExpertUserFullInfo(expertUserInfoDTO);
if (Objects.nonNull(expertUserFullInfo)) {
// 专家信息审核通过之前,所有信息无需备份
iExpertUserFullInfoService.removeById(expertUserFullInfo.getId());
@@ -129,7 +129,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
iExpertTagService.saveBatch(saveExpertTagList);
}
// 保存所有专家字典字段
List<ExpertDictionary> saveExpertDictionaryList = buildSaveExpertDictionaryList(userId, expertDictionaryList);
List<ExpertDictionary> saveExpertDictionaryList = buildExpertDicts(userId, expertDictionaryList);
if (CollectionUtils.isNotEmpty(saveExpertDictionaryList)) {
iExpertDictionaryService.saveBatch(saveExpertDictionaryList);
}
@@ -141,14 +141,14 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
iExpertMetaApplyService.saveBatch(saveExpertIntentionWorkRegionApplyList);
}
// 保存所有专家回避单位
List<ExpertAvoidCompany> saveExpertAvoidCompanyList = buildSaveExpertAvoidCompanyList(userId, expertAvoidCompanyList);
List<ExpertAvoidCompany> saveExpertAvoidCompanyList = buildExpertAvoidCompany(userId, expertAvoidCompanyList);
if (CollectionUtils.isNotEmpty(saveExpertAvoidCompanyList)) {
iExpertAvoidCompanyService.saveBatch(saveExpertAvoidCompanyList);
}
}


private ExpertUserFullInfo buildSaveExpertUserFullInfo(ExpertUserFullInfoDTO expertUserInfoDTO) {
private ExpertUserFullInfo buildExpertUserFullInfo(ExpertUserFullInfoDTO expertUserInfoDTO) {
ExpertUserFullInfo expertUserFullInfo = new ExpertUserFullInfo();
if (Objects.nonNull(expertUserInfoDTO.getIsDingUser())) {
expertUserFullInfo.setIsDingUser(expertUserInfoDTO.getIsDingUser());
@@ -197,33 +197,35 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
}).collect(Collectors.toList());
}

private List<ExpertDictionary> buildSaveExpertDictionaryList(Long userId, List<ExpertDictionaryDTO> expertDictionaryList) {
if (CollectionUtils.isEmpty(expertDictionaryList)) {
return new ArrayList<>();
}
return expertDictionaryList.stream().map(r -> {
ExpertDictionary expertDictionary = new ExpertDictionary();
expertDictionary.setUserId(userId);
expertDictionary.setExpertInfoField(r.getExpertInfoField());
expertDictionary.setDictionaryCode(r.getDictionaryCode());
expertDictionary.setUpdateOn(LocalDateTime.now());
expertDictionary.setCreateOn(LocalDateTime.now());
return expertDictionary;
private List<ExpertDictionary> buildExpertDicts(Long userId, List<ExpertDictionaryDTO> exertDicts) {
if (CollectionUtils.isEmpty(exertDicts)) {
return Collections.emptyList();
}
LocalDateTime now = LocalDateTime.now();
return exertDicts.stream().map(r -> {
ExpertDictionary expertDict = new ExpertDictionary();
expertDict.setUserId(userId);
expertDict.setExpertInfoField(r.getExpertInfoField());
expertDict.setDictionaryCode(r.getDictionaryCode());
expertDict.setUpdateOn(now);
expertDict.setCreateOn(now);
return expertDict;
}).collect(Collectors.toList());
}


private List<ExpertAvoidCompany> buildSaveExpertAvoidCompanyList(Long userId, List<ExpertAvoidCompanyDTO> expertAvoidCompanyList) {
if (CollectionUtils.isEmpty(expertAvoidCompanyList)) {
return new ArrayList<>();
private List<ExpertAvoidCompany> buildExpertAvoidCompany(Long userId, List<ExpertAvoidCompanyDTO> avoidCompanies) {
if (CollectionUtils.isEmpty(avoidCompanies)) {
return Collections.emptyList();
}
return expertAvoidCompanyList.stream().map(r -> {
LocalDateTime now = LocalDateTime.now();
return avoidCompanies.stream().map(r -> {
ExpertAvoidCompany expertAvoidCompany = new ExpertAvoidCompany();
expertAvoidCompany.setCompanyName(r.getCompanyName());
expertAvoidCompany.setUserId(userId);
expertAvoidCompany.setCompanyUniqCode(r.getCompanyUniqCode());
expertAvoidCompany.setCreateOn(LocalDateTime.now());
expertAvoidCompany.setUpdateOn(LocalDateTime.now());
expertAvoidCompany.setCreateOn(now);
expertAvoidCompany.setUpdateOn(now);
return expertAvoidCompany;
}).collect(Collectors.toList());
}
@@ -239,15 +241,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {

List<ExpertDictionaryDTO> recommendedWayList = cmd.getRecommendedWay();
if (CollectionUtils.isNotEmpty(recommendedWayList)) {
List<ExpertDictionary> saveExpertDictionaryList = recommendedWayList.stream().map(r -> {
ExpertDictionary expertDictionary = new ExpertDictionary();
expertDictionary.setUserId(userId);
expertDictionary.setExpertInfoField(r.getExpertInfoField());
expertDictionary.setDictionaryCode(r.getDictionaryCode());
expertDictionary.setUpdateOn(LocalDateTime.now());
expertDictionary.setCreateOn(LocalDateTime.now());
return expertDictionary;
}).collect(Collectors.toList());
List<ExpertDictionary> saveExpertDictionaryList = buildExpertDicts(userId, recommendedWayList);
iExpertDictionaryService.saveBatch(saveExpertDictionaryList);
}

@@ -325,7 +319,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
Integer expertRegionLevel = cmd.getExpertRegionLevel();
Long expertUserId = cmd.getExpertUserId();

if (applyResult) {
if (Boolean.TRUE.equals(applyResult)) {
switch (applyTypeEnum) {
case EXPERT_INTENTION_JOIN: {
// 新增履职意向地
@@ -372,7 +366,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
ExpertUserFullInfo expertInfo = iExpertUserFullInfoService.getByUserId(expertUserId);
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String content;
if (cmd.getApplyResult()) {
if (Boolean.TRUE.equals(cmd.getApplyResult())) {
// 修改专家状态为可用
// 账号启用
LambdaUpdateWrapper<UserInfo> userInfoUpdate = Wrappers.lambdaUpdate(UserInfo.class)
@@ -387,7 +381,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
List<ExpertDictionaryDTO> expertType = cmd.getExpertType();
if (CollUtil.isNotEmpty(expertType)) {
expertType.forEach(r -> r.setExpertInfoField(ExpertDictTypeEnum.EXPERT_TYPE.getKey()));
List<ExpertDictionary> saveExpertDictList = buildSaveExpertDictionaryList(expertUserId, expertType);
List<ExpertDictionary> saveExpertDictList = buildExpertDicts(expertUserId, expertType);
iExpertDictionaryService.saveBatch(saveExpertDictList);
}
// 补充专家 专家角色
@@ -410,7 +404,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
SendSmsContext smsCtx = new SendSmsContext();
smsCtx.setContent(content);
smsCtx.setReceiveNumber(expertInfo.getPhoneNo());
yxtCallOrSmsHelper.sendSms(smsCtx);
yxtClientHelper.sendSms(smsCtx);
}
}

@@ -464,7 +458,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
List<Long> applyIdList = new ArrayList<>();

ExpertUserFullInfo originalExpertUserFullInfo = iExpertUserFullInfoService.getByUserId(userId);
ExpertUserFullInfo saveExpertUserFullInfo = buildSaveExpertUserFullInfo(expertUserInfoDTO);
ExpertUserFullInfo saveExpertUserFullInfo = buildExpertUserFullInfo(expertUserInfoDTO);
if (Objects.nonNull(originalExpertUserFullInfo)) {
saveExpertUserFullInfo.setId(originalExpertUserFullInfo.getId());
// 删除所有专家字典字段(需审核敏感字段不删除)
@@ -497,7 +491,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
iExpertUserFullInfoService.saveOrUpdate(saveExpertUserFullInfo);

// 保存所有专家字典字段
List<ExpertDictionary> saveExpertDictionaryList = buildSaveExpertDictionaryList(userId, expertDictionaryList);
List<ExpertDictionary> saveExpertDictionaryList = buildExpertDicts(userId, expertDictionaryList);
saveExpertDictionaryList = saveExpertDictionaryList
.stream().filter(r -> !ExpertUserInfoSensitiveFieldEnum.getSensitiveDictionaryList().contains(r.getExpertInfoField()))
.collect(Collectors.toList());
@@ -506,7 +500,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService {
}

// 保存所有专家回避单位
List<ExpertAvoidCompany> saveExpertAvoidCompanyList = buildSaveExpertAvoidCompanyList(userId, expertAvoidCompanyList);
List<ExpertAvoidCompany> saveExpertAvoidCompanyList = buildExpertAvoidCompany(userId, expertAvoidCompanyList);
if (CollectionUtils.isNotEmpty(saveExpertAvoidCompanyList)) {
// 删除回避单位
LambdaQueryWrapper<ExpertAvoidCompany> expertAvoidCompanyRemove = Wrappers.lambdaQuery(ExpertAvoidCompany.class)


+ 8
- 0
hz-pm-api/src/main/java/com/hz/pm/api/external/MhApiClient.java Bestand weergeven

@@ -31,6 +31,7 @@ public class MhApiClient {
private static final String USER_URL = "/sync/user";
private static final String EXPERT_URL = "/sync/expert";
private static final String COMPANY_URL = "/sync/company";
private static final String PROJECT_URL = "/project_info/getProjectInfoList";


public MhRetDTO<List<MhUnitDTO>> queryUnits() {
@@ -69,4 +70,11 @@ public class MhApiClient {
}, false);
}

public MhRetDTO<List<MhProjectDTO>> listProjects() {
String requestUrl = mhApiHost + PROJECT_URL;
String retBody = HttpUtil.get(requestUrl);
return JSONUtil.toBean(retBody, new TypeReference<MhRetDTO<List<MhProjectDTO>>>() {
}, false);
}

}

+ 46
- 0
hz-pm-api/src/main/java/com/hz/pm/api/external/model/dto/MhProjectDTO.java Bestand weergeven

@@ -0,0 +1,46 @@
package com.hz.pm.api.external.model.dto;

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

import java.math.BigDecimal;

/**
* <p>
* ResponseData
* </p>
*
* @author WendyYang
* @since 14:24 2024/1/23
*/
@Data
public class MhProjectDTO {

@ApiModelProperty("项目合规性检查附件")
private String fileId;

@ApiModelProperty("项目复核附件")
private String fileIdThree;

@ApiModelProperty("项目评审附件")
private String fileIdTwo;

@ApiModelProperty("项目评审预算金额")
private BigDecimal money;

@ApiModelProperty("项目名称")
private String projectName;

@ApiModelProperty("关键指标对象")
private MhProjectSchemeTargetDTO schemeTargetData;

@ApiModelProperty("项目总金额")
private BigDecimal totalMoney;

@ApiModelProperty("单位ID")
private Long unitId;

@ApiModelProperty("单位名称")
private String unitName;

}

+ 91
- 0
hz-pm-api/src/main/java/com/hz/pm/api/external/model/dto/MhProjectSchemeTargetDTO.java Bestand weergeven

@@ -0,0 +1,91 @@
package com.hz.pm.api.external.model.dto;

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

import java.math.BigDecimal;
import java.util.Date;

/**
* <p>
* MhProjectSchemeTargetDTO
* </p>
*
* @author WendyYang
* @since 14:26 2024/1/23
*/
@Data
@ApiModel("关键指标对象")
public class MhProjectSchemeTargetDTO {

@ApiModelProperty(value = "迁移上云信息系统数量")
private int cloudSystemNum;

@ApiModelProperty(value = "创建时间")
private Date createTime;

@ApiModelProperty(value = "创建单位")
private Long createUnit;

@ApiModelProperty(value = "创建人")
private String createUser;

@ApiModelProperty(value = "附件")
private String fileId;

@ApiModelProperty(value = "本地部署非涉密信息系统数量")
private Integer fsmLocalSystemNum;

@ApiModelProperty(value = "更新购置非涉密服务器数量")
private Integer fsmServerNum;

@ApiModelProperty(value = "更新购置非涉密数据库数量")
private Integer fsmUpdateDbNum;

@ApiModelProperty(value = "更新购置非涉密中间件数量")
private Integer fsmUpdateMiddleNum;

@ApiModelProperty(value = "vCPU(核数)")
private Integer hostCpuNum;

@ApiModelProperty(value = "内存(GB)")
private Integer hostMemoryNum;

@ApiModelProperty(value = "信创云虚拟主机数量")
private Integer hostNum;

@ApiModelProperty(value = "存储(GB)")
private Integer hostStoreNum;

@ApiModelProperty(value = "ID")
private String id;

@ApiModelProperty(value = "总投资预算金额(万元)")
private BigDecimal money;

@ApiModelProperty(value = "本地部署涉密信息系统数量")
private Integer smLocalSystemNum;

@ApiModelProperty(value = "更新购置涉密服务器数量")
private Integer smServerNum;

@ApiModelProperty(value = "更新购置涉密数据库数量")
private Integer smUpdateDbNum;

@ApiModelProperty(value = "更新购置涉密中间件数量")
private Integer smUpdateMiddleNum;

@ApiModelProperty(value = "更新时间")
private Date updateTime;

@ApiModelProperty(value = "更新人")
private String updateUser;

@ApiModelProperty(value = "信创云数据库数量")
private Integer xcDbNum;

@ApiModelProperty(value = "信创云中间件数量")
private Integer xcMiddleNum;

}

+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/external/sms/SmsServiceClient.java Bestand weergeven

@@ -56,7 +56,7 @@ public class SmsServiceClient {
* @return
*/
public SmsDto<SmsSendResponse> smsSend(String content, List<String> phones) {
String phonesSplit = String.join(",", phones);;
String phonesSplit = String.join(",", phones);
String refreshUrl = smsUrl + SMS_SEND;
Map<String,Object> map = new HashMap<>();
map.put("content",content);


+ 2
- 6
hz-pm-api/src/main/java/com/hz/pm/api/external/todo/TodoServiceClient.java Bestand weergeven

@@ -54,11 +54,8 @@ public class TodoServiceClient {
map.put("wkType",addSingleWkHandleDTO.getWkType());
map.put("wkUser",addSingleWkHandleDTO.getWkUser());
String responseResult = HttpUtil.post(url, JSON.toJSONString(map));
TodoDto todoDto = JSON.parseObject(responseResult, new TypeReference<TodoDto>() {
return JSON.parseObject(responseResult, new TypeReference<TodoDto>() {
});
// return JSON.parseObject(responseResult, new TypeReference<HashMap<String, String>>() {
// }).get("data");
return todoDto;
}

/**
@@ -74,9 +71,8 @@ public class TodoServiceClient {
.form("wkhandleId",wkhandleId);
HttpResponse response = request.execute();
String responseBody = response.body();
TodoDto todoDto = JSON.parseObject(responseBody, new TypeReference<TodoDto>() {
return JSON.parseObject(responseBody, new TypeReference<TodoDto>() {
});
return todoDto;
}



+ 1
- 5
hz-pm-api/src/main/java/com/hz/pm/api/external/todo/dto/AddSingleWkHandleDTO.java Bestand weergeven

@@ -4,8 +4,6 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
* @author 王仁康
* @date 2024-01-02 16:55:51
@@ -13,9 +11,7 @@ import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddSingleWkHandleDTO implements Serializable {

private static final long serialVersionUID = -2067546352159912820L;
public class AddSingleWkHandleDTO {

// 待办参数,ObjectJson字符串
private Object params;


+ 6
- 6
hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/DocumentationManage.java Bestand weergeven

@@ -2,6 +2,7 @@ package com.hz.pm.api.filemanage.manage;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hz.pm.api.filemanage.model.dto.DocumentationGroupSaveDTO;
@@ -106,7 +107,7 @@ public class DocumentationManage {
* @param id
* @return
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
public String deleteGroup(Long id) {
DocumentationGroup group = documentationGroupService.getById(id);
VUtils.isTrue(Objects.isNull(group)).throwMessage("该分组不存在!");
@@ -125,22 +126,21 @@ public class DocumentationManage {
* @param dto
* @return
*/
@Transactional(rollbackFor = Exception.class)
public String addDoc(DocumentationSaveDTO dto) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();

Long fileId = dto.getFileId();
File file = fileService.getById(fileId);

VUtils.isTrue(Objects.isNull(file)).throwMessage("该文件不存在!");
Assert.notNull(file, "该文件不存在!");

DocumentationGroup group = documentationGroupService.getById(dto.getGroupId());

VUtils.isTrue(Objects.isNull(group)).throwMessage("分组不存在!");
Assert.notNull(group, "分组不存在!");

Documentation documentation = new Documentation();
documentation.setCreateBy(user.getRealName());
documentation.setCreateOn(LocalDateTime.now());
documentation.setSize(Objects.nonNull(file.getSize()) ? file.getSize() / 1000L : 0L);
documentation.setSize(file.getSize() / 1000L);
documentation.setFileId(fileId);
documentation.setGroupId(dto.getGroupId());
documentation.setFileName(file.getOriginalFileName());


+ 71
- 87
hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/ProjectFileManage.java Bestand weergeven

@@ -2,24 +2,21 @@ package com.hz.pm.api.filemanage.manage;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.file.entity.File;
import com.ningdatech.file.service.FileService;
import com.ningdatech.file.utils.StrPool;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.model.constant.CommonConst;
import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.model.constant.CommonConst;
import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.expert.manage.ExpertReviewManage;
import com.hz.pm.api.expert.model.vo.ExpertReviewDetailVO;
import com.hz.pm.api.expert.model.vo.ProjectReviewDetailVO;
@@ -29,8 +26,6 @@ import com.hz.pm.api.filemanage.model.vo.ProjectApplyBorrowVO;
import com.hz.pm.api.filemanage.model.vo.ProjectFileListVO;
import com.hz.pm.api.filemanage.model.vo.ProjectFileVO;
import com.hz.pm.api.filemanage.service.INdProjectApplyBorrowService;
import com.hz.pm.api.organization.model.entity.DingOrganization;
import com.hz.pm.api.organization.service.IDingOrganizationService;
import com.hz.pm.api.projectdeclared.manage.ConstructionManage;
import com.hz.pm.api.projectdeclared.manage.DefaultDeclaredProjectManage;
import com.hz.pm.api.projectdeclared.manage.FinalAcceptanceManage;
@@ -43,12 +38,12 @@ import com.hz.pm.api.projectdeclared.model.vo.PreInsVO;
import com.hz.pm.api.projectdeclared.model.vo.PurchaseVO;
import com.hz.pm.api.projectdeclared.service.IContractService;
import com.hz.pm.api.projectdeclared.service.IPurchaseService;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.manage.ProjectLibManage;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectApplication;
import com.hz.pm.api.projectlib.model.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.vo.ProjectDetailVO;
import com.hz.pm.api.projectlib.service.IProjectApplicationService;
import com.hz.pm.api.projectlib.service.IProjectInstService;
@@ -56,8 +51,18 @@ import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.staging.enums.MsgTypeEnum;
import com.hz.pm.api.sys.manage.NoticeManage;
import com.hz.pm.api.todocenter.constant.WorkNoticeConstant;
import com.hz.pm.api.user.helper.MhUnitCache;
import com.hz.pm.api.user.model.dto.UnitDTO;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.file.entity.File;
import com.ningdatech.file.service.FileService;
import com.ningdatech.file.utils.StrPool;
import com.wflow.bean.entity.WflowModels;
import com.wflow.contants.HisProInsEndActId;
import com.wflow.exception.BusinessException;
@@ -106,7 +111,6 @@ public class ProjectFileManage {
private final IProjectInstService projectInstService;
private final HistoryService historyService;
private final INdProjectApplyBorrowService projectApplyBorrowService;
private final IDingOrganizationService dingOrganizationService;
private final IProjectApplicationService projectApplicationService;
private final TaskService taskService;
private final IPurchaseService purchaseService;
@@ -116,69 +120,70 @@ public class ProjectFileManage {
private final PurchaseManage purchaseManage;
private final ConstructionManage constructionManage;
private final FinalAcceptanceManage finalAcceptanceManage;
private final MhUnitCache mhUnitCache;

public PageVo<ProjectFileListVO> list(ProjectFileListParam param) {

UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
String employeeCode = userFullInfo.getEmployeeCode();
String empPosUnitCode = userFullInfo.getEmpPosUnitCode();

Page<Project> page = param.page();
projectService.page(page, Wrappers.lambdaQuery(Project.class)
.like(StringUtils.isNotBlank(param.getProjectName()), Project::getProjectName, param.getProjectName())
.like(StringUtils.isNotBlank(param.getBuildOrgName()), Project::getBuildOrgName, param.getBuildOrgName())
public PageVo<ProjectFileListVO> list(ProjectFileListParam req) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
LambdaQueryWrapper<Project> query = Wrappers.lambdaQuery(Project.class)
.like(StrUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName())
.like(StrUtils.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.eq(Project::getStatus, ProjectStatusEnum.ACCEPTED.getCode())
.orderByDesc(Project::getUpdateOn));
.orderByDesc(Project::getUpdateOn);
Page<Project> page = projectService.page(req.page(), query);
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}

// 获取本单位及下属单位的单位code
Set<String> subOrgSet = getSubOrgList(empPosUnitCode);
List<Long> subOrgSet = getSubOrgList(user.getMhUnitId());

List<ProjectFileListVO> vos = page.getRecords().stream().map(p -> {
ProjectFileListVO vo = new ProjectFileListVO();
vo.setId(p.getId());
// 用户只可查阅自己及下属单位的项目档案和已经申请借阅通过的项目档案
if (subOrgSet.contains(p.getBuildOrgCode()) || checkCanRead(subOrgSet, p)) {
if (!NumberUtil.isNumber(p.getBuildOrgCode())
|| subOrgSet.contains(Long.parseLong(p.getBuildOrgCode()))
|| checkCanRead(subOrgSet, p)) {
vo.setCanRead(Boolean.TRUE);
}
vo.setBuildOrgName(p.getBuildOrgName());
vo.setPojectCode(p.getProjectCode());
vo.setProjectName(p.getProjectName());
// 判断当前项目,当前登录用户是否已经开启了申请借阅并且没有审批完成
ProjectApplyBorrow projectApplyBorrow = projectApplyBorrowService.getOne(Wrappers.lambdaQuery(ProjectApplyBorrow.class)
.eq(ProjectApplyBorrow::getApplyBorrowEmployeeCode, employeeCode)
Wrapper<ProjectApplyBorrow> pabQuery = Wrappers.lambdaQuery(ProjectApplyBorrow.class)
.select(ProjectApplyBorrow::getInstanceId)
.eq(ProjectApplyBorrow::getApplyBorrowUserId, user.getUserIdStr())
.eq(ProjectApplyBorrow::getProjectId, p.getId())
.orderByDesc(ProjectApplyBorrow::getCreateOn)
.last("limit 1"));
.last(BizConst.LIMIT_1);
ProjectApplyBorrow projectApplyBorrow = projectApplyBorrowService.getOne(pabQuery);
if (Objects.nonNull(projectApplyBorrow)) {
String instCode = projectApplyBorrow.getInstanceId();
// 获取流程实例
HistoricProcessInstance newInstance =
historyService.createHistoricProcessInstanceQuery().processInstanceId(instCode).singleResult();
HistoricProcessInstance newInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(instCode)
.singleResult();
if (newInstance == null) {
vo.setCanApplyBorrow(Boolean.FALSE);
return vo;
}
ProjectInst projectInst = projectInstService
.getOne(Wrappers.lambdaQuery(ProjectInst.class).eq(ProjectInst::getInstCode, instCode));
ProjectInst projectInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class)
.eq(ProjectInst::getInstCode, instCode));
// 推送省局联审的项目流程实例为EMPTY
if (Objects.nonNull(projectInst)) {
Integer instType = projectInst.getInstType();
// 从申请借阅信息表中查询当前项目是否有当前登录用户发起的申请借阅审批流程
ProjectApplyBorrow applyBorrow = projectApplyBorrowService.getOne(Wrappers
.lambdaQuery(ProjectApplyBorrow.class).eq(ProjectApplyBorrow::getApplyBorrowEmployeeCode, employeeCode)
.eq(ProjectApplyBorrow::getProjectId, p.getId()).eq(ProjectApplyBorrow::getInstanceId, instCode));
.lambdaQuery(ProjectApplyBorrow.class)
.eq(ProjectApplyBorrow::getApplyBorrowUserId, user.getUserIdStr())
.eq(ProjectApplyBorrow::getProjectId, p.getId())
.eq(ProjectApplyBorrow::getInstanceId, instCode));
// 延期申请流程还未审核结束
if (Objects.nonNull(applyBorrow) && InstTypeEnum.APPLY_BORROW.getCode().equals(instType)
if (Objects.nonNull(applyBorrow) && InstTypeEnum.APPLY_BORROW.eq(instType)
&& Objects.isNull(newInstance.getEndActivityId())) {
vo.setCanApplyBorrow(Boolean.FALSE);
}
// 如果是延期申请审核被驳回,设置项目可以申请延期申报
else if (InstTypeEnum.APPLY_BORROW.getCode().equals(instType) &&
} else if (InstTypeEnum.APPLY_BORROW.eq(instType) &&
HisProInsEndActId.REJECT.equals(newInstance.getEndActivityId())) {
// 如果是延期申请审核被驳回,设置项目可以申请延期申报
vo.setCanApplyBorrow(Boolean.TRUE);
}
}
@@ -189,39 +194,32 @@ public class ProjectFileManage {
return PageVo.of(vos, page.getTotal());
}

private boolean checkCanRead(Set<String> subOrgSet, Project project) {
private boolean checkCanRead(List<Long> subOrgSet, Project project) {
// 从申请借阅信息表中查出本单位及下属单位审批通过的项目
List<String> subOrgSetStr = CollUtils.convert(subOrgSet, String::valueOf);
HashSet<Long> borrowProjectIdSet = new HashSet<>();
List<Long> applyBorrowProjectIdList = projectApplyBorrowService
.list(Wrappers.lambdaQuery(ProjectApplyBorrow.class)
.in(ProjectApplyBorrow::getApplyBorrowEmpPosUnitCode, subOrgSet)
.select(ProjectApplyBorrow::getProjectId)
.in(ProjectApplyBorrow::getApplyBorrowOrgCode, subOrgSetStr)
.eq(ProjectApplyBorrow::getIsSuccess, Boolean.TRUE))
.stream().map(ProjectApplyBorrow::getProjectId).filter(borrowProjectIdSet::add).collect(Collectors.toList());
.stream().map(ProjectApplyBorrow::getProjectId)
.filter(borrowProjectIdSet::add)
.collect(Collectors.toList());
return applyBorrowProjectIdList.contains(project.getId());
}

private Set<String> getSubOrgList(String empPosUnitCode) {
HashSet<String> orgSet = new HashSet<>();
// 先将自己加入子集
orgSet.add(empPosUnitCode);
Set<String> subOrgList = dingOrganizationService
.list(Wrappers.lambdaQuery(DingOrganization.class).eq(DingOrganization::getParentCode, empPosUnitCode))
.stream().map(DingOrganization::getOrganizationCode).collect(Collectors.toSet());
// 遍历子集
for (String orgCode : subOrgList) {
orgSet.addAll(getSubOrgList(orgCode));
}
return orgSet;
private List<Long> getSubOrgList(Long mhUnitId) {
List<Long> childIds = mhUnitCache.getChildrenIdsRecursion(mhUnitId);
childIds.add(mhUnitId);
return childIds;
}

public ProjectFileVO file(Long projectId) {

UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
String empPosUnitCode = userFullInfo.getEmpPosUnitCode();

UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
// 判断该项目是否为本单位或下属单位的项目或者已经申请借阅成功的项目
Project project = projectService.getById(projectId);
Set<String> subOrgList = getSubOrgList(empPosUnitCode);
List<Long> subOrgList = getSubOrgList(user.getMhUnitId());

if (!checkCanRead(subOrgList, project)) {
throw new BizException("您没有权限查看此项目档案!");
@@ -247,34 +245,24 @@ public class ProjectFileManage {
return projectFileVo;
}

public String wantRead(Long projectId) {
return "申请成功";
}

public String startApplyBorrowProcess(Long projectId) {
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
String employeeCode = user.getEmployeeCode();
VUtils.isTrue(StringUtils.isBlank(employeeCode)).throwMessage("获取登录用户 员工号 失败!");

Project project = projectService.getNewProject(projectId);
VUtils.isTrue(Objects.isNull(project)).throwMessage("提交失败 此项目不存在!");

// 首先要判断 项目当前状态 是不是 已归档
VUtils.isTrue(!ProjectStatusEnum.ACCEPTED.getCode().equals(project.getStatus())).throwMessage("提交失败 该项目不是 已归档");

String regionCode = user.getRegionCode();

WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class)
.eq(WflowModels::getRegionCode, regionCode)
.eq(WflowModels::getProcessType, ProjectProcessStageEnum.APPLY_BORROW.getCode()).last(BizConst.LIMIT_1));
.eq(WflowModels::getProcessType, ProjectProcessStageEnum.APPLY_BORROW.getCode())
.last(BizConst.LIMIT_1));

if (Objects.isNull(model)) {
log.error("此 【{}】区域找不到申请借阅流程配置", regionCode);
throw new BusinessException(String.format("此 【%s】区域找不到申请借阅流程配置", regionCode));
throw new BusinessException("找不到申请借阅流程配置");
}

ProcessStartParamsVo params = new ProcessStartParamsVo();
params.setUser(defaultDeclaredProjectManage.buildUser(employeeCode));
params.setUser(defaultDeclaredProjectManage.buildUser(user.getUserId()));
params.setProcessUsers(Collections.emptyMap());
// 放入条件判断的项目字段
// 把条件值给放入工作流
@@ -289,7 +277,7 @@ public class ProjectFileManage {
projectLibManage.saveProjectByApplyBorrow(project, user, instanceId);

// 发送给第一个审批人消息
noticeManage.sendFirtUser(project, model.getFormName(), instanceId, WorkNoticeConstant.PASS_MSG_TEMPLATE,
noticeManage.sendFirstUser(project, model.getFormName(), instanceId, WorkNoticeConstant.PASS_MSG_TEMPLATE,
MsgTypeEnum.PROJECT_REVIEW);

return instanceId;
@@ -544,19 +532,15 @@ public class ProjectFileManage {
}

ProjectApplyBorrowVO vo = BeanUtil.copyProperties(apply, ProjectApplyBorrowVO.class);
if (StringUtils.isNotBlank(vo.getApplyBorrowEmployeeCode())) {
UserFullInfoDTO user = userInfoHelper.getUserFullInfoByEmployeeCode(vo.getApplyBorrowEmployeeCode());
if (StrUtils.isNotBlank(vo.getApplyBorrowUserId())) {
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(Long.valueOf(vo.getApplyBorrowUserId()));
if (Objects.nonNull(user)) {
vo.setApplyBorrowEmployeeName(user.getUsername());
vo.setApplyBorrowUserName(user.getUsername());
}
}
if (StringUtils.isNotBlank(vo.getApplyBorrowEmpPosUnitCode())) {
DingOrganization organization = dingOrganizationService.getOne(Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getOrganizationCode, vo.getApplyBorrowEmpPosUnitCode())
.last(BizConst.LIMIT_1));
if (Objects.nonNull(organization)) {
vo.setApplyBorrowEmpPosUnitName(organization.getOrganizationName());
}
if (StrUtils.isNotBlank(vo.getApplyBorrowOrgCode())) {
UnitDTO mhUnit = mhUnitCache.getById(Long.parseLong(vo.getApplyBorrowOrgCode()));
vo.setApplyBorrowOrgName(mhUnit.getName());
}
if (Objects.nonNull(vo.getProjectId())) {
Project project = projectService.getById(vo.getProjectId());


+ 2
- 2
hz-pm-api/src/main/java/com/hz/pm/api/filemanage/model/entity/ProjectApplyBorrow.java Bestand weergeven

@@ -32,10 +32,10 @@ public class ProjectApplyBorrow implements Serializable {
private Long projectId;

@ApiModelProperty("申请借阅员工code")
private String applyBorrowEmployeeCode;
private String applyBorrowUserId;

@ApiModelProperty("申请借阅用户任职单位code")
private String applyBorrowEmpPosUnitCode;
private String applyBorrowOrgCode;

@ApiModelProperty("申请借阅审批流程ID")
private String instanceId;


+ 4
- 4
hz-pm-api/src/main/java/com/hz/pm/api/filemanage/model/vo/ProjectApplyBorrowVO.java Bestand weergeven

@@ -31,16 +31,16 @@ public class ProjectApplyBorrowVO implements Serializable {
private String projectName;

@ApiModelProperty("申请借阅员工code")
private String applyBorrowEmployeeCode;
private String applyBorrowUserId;

@ApiModelProperty("申请借阅员工名字")
private String applyBorrowEmployeeName;
private String applyBorrowUserName;

@ApiModelProperty("申请借阅用户任职单位code")
private String applyBorrowEmpPosUnitCode;
private String applyBorrowOrgCode;

@ApiModelProperty("申请借阅用户任职单位")
private String applyBorrowEmpPosUnitName;
private String applyBorrowOrgName;

@ApiModelProperty("申请借阅审批流程ID")
private String instanceId;


+ 5
- 5
hz-pm-api/src/main/java/com/hz/pm/api/fiscal/controller/CompanyFiscalCodeController.java Bestand weergeven

@@ -3,9 +3,9 @@ package com.hz.pm.api.fiscal.controller;

import com.ningdatech.log.annotation.WebLog;
import com.hz.pm.api.fiscal.manage.CompanyFiscalCodeManage;
import com.hz.pm.api.fiscal.model.po.ReqCompanyFiscalCodeAndSealSnPO;
import com.hz.pm.api.fiscal.model.po.CompanyFiscalCodeAndSealSnReq;
import com.hz.pm.api.fiscal.model.po.ReqGetCompanyFiscalCodeAndSealSnPO;
import com.hz.pm.api.fiscal.model.vo.ResCompanyFiscalCodeAndSealSnVO;
import com.hz.pm.api.fiscal.model.vo.CompanyFiscalCodeAndSealSnVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -35,13 +35,13 @@ public class CompanyFiscalCodeController {
@ApiOperation(value = "财政编码-配置", notes = "财政编码配置")
@PostMapping("/fiscal-and-seal/configure")
@WebLog("财政编码-配置")
public void fiscalAndSealCodeConfigure(@Valid @RequestBody ReqCompanyFiscalCodeAndSealSnPO reqCompanyFiscalCodeAndSealSnPO) {
companyFiscalCodeManage.fiscalCodeConfigure(reqCompanyFiscalCodeAndSealSnPO);
public void fiscalAndSealCodeConfigure(@Valid @RequestBody CompanyFiscalCodeAndSealSnReq req) {
companyFiscalCodeManage.fiscalCodeConfigure(req);
}

@ApiOperation(value = "获取财政编码-配置", notes = "获取财政编码配置")
@PostMapping("/fiscal-and-seal/get-configure")
public ResCompanyFiscalCodeAndSealSnVO getFiscalAndSealCodeConfigure(@Valid @RequestBody ReqGetCompanyFiscalCodeAndSealSnPO request) {
public CompanyFiscalCodeAndSealSnVO getFiscalAndSealCodeConfigure(@Valid @RequestBody ReqGetCompanyFiscalCodeAndSealSnPO request) {
return companyFiscalCodeManage.getFiscalCodeConfigure(request);
}



+ 47
- 49
hz-pm-api/src/main/java/com/hz/pm/api/fiscal/manage/CompanyFiscalCodeManage.java Bestand weergeven

@@ -1,16 +1,16 @@
package com.hz.pm.api.fiscal.manage;

import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.fiscal.entity.CompanyFiscalCode;
import com.hz.pm.api.fiscal.model.po.ReqCompanyFiscalCodeAndSealSnPO;
import com.hz.pm.api.fiscal.model.po.CompanyFiscalCodeAndSealSnReq;
import com.hz.pm.api.fiscal.model.po.ReqGetCompanyFiscalCodeAndSealSnPO;
import com.hz.pm.api.fiscal.model.vo.ResCompanyFiscalCodeAndSealSnVO;
import com.hz.pm.api.fiscal.model.vo.CompanyFiscalCodeAndSealSnVO;
import com.hz.pm.api.fiscal.service.ICompanyFiscalCodeService;
import com.hz.pm.api.signature.entity.CompanySignature;
import com.hz.pm.api.signature.service.ICompanySignatureService;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
@@ -24,68 +24,66 @@ import java.util.Objects;
@RequiredArgsConstructor
public class CompanyFiscalCodeManage {

private final UserInfoHelper userInfoHelper;
private final ICompanyFiscalCodeService fiscalCodeService;
private final ICompanySignatureService signatureService;

private final ICompanyFiscalCodeService iCompanyFiscalCodeService;
private final ICompanySignatureService iCompanySignatureService;

public void fiscalCodeConfigure(ReqCompanyFiscalCodeAndSealSnPO reqCompanyFiscalCodeAndSealSnPO) {
Long userId = LoginUserUtil.getUserId();
String organizationCode = reqCompanyFiscalCodeAndSealSnPO.getOrganizationCode();
if (StringUtils.isBlank(organizationCode)) {
organizationCode = userInfoHelper.getUserEmpPosUnitCode(userId);
public void fiscalCodeConfigure(CompanyFiscalCodeAndSealSnReq req) {
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String temOrgCode;
if (StrUtils.isBlank(req.getOrganizationCode())) {
temOrgCode = String.valueOf(userDetail.getMhUnitId());
} else {
temOrgCode = req.getOrganizationCode();
}
// TODO 校验用户权限

// 保存财政编码配置
CompanyFiscalCode companyFiscalCode = iCompanyFiscalCodeService.getByOrganizationCode(organizationCode);
// 保存财政编码配置 TODO 校验用户权限
CompanyFiscalCode companyFiscalCode = fiscalCodeService.getByOrgCode(temOrgCode);
if (Objects.isNull(companyFiscalCode)) {
companyFiscalCode = new CompanyFiscalCode();
companyFiscalCode.setOrganizationCode(organizationCode);
companyFiscalCode.setOrganizationCode(temOrgCode);
companyFiscalCode.setCreateOn(LocalDateTime.now());
companyFiscalCode.setCreateBy(userId);
companyFiscalCode.setCreateBy(userDetail.getUserId());
}
String fiscalCode = reqCompanyFiscalCodeAndSealSnPO.getFiscalCode();
String fiscalCode = req.getFiscalCode();
companyFiscalCode.setFiscalCode(fiscalCode);
companyFiscalCode.setUpdateOn(LocalDateTime.now());
companyFiscalCode.setUpdateBy(userId);
iCompanyFiscalCodeService.saveOrUpdate(companyFiscalCode);
companyFiscalCode.setUpdateBy(userDetail.getUserId());
fiscalCodeService.saveOrUpdate(companyFiscalCode);


// 保存印章配置
CompanySignature companySignature = iCompanySignatureService.getByOrganizationCode(organizationCode);
if (Objects.isNull(companySignature)) {
companySignature = new CompanySignature();
companySignature.setOrganizationCode(organizationCode);
companySignature.setCreateOn(LocalDateTime.now());
CompanySignature signature = signatureService.getByOrganizationCode(temOrgCode);
if (Objects.isNull(signature)) {
signature = new CompanySignature();
signature.setOrganizationCode(temOrgCode);
signature.setCreateOn(LocalDateTime.now());
}
String sealSn = reqCompanyFiscalCodeAndSealSnPO.getSealSn();
companySignature.setSealSn(sealSn);
companySignature.setUpdateOn(LocalDateTime.now());
companySignature.setCreateBy(userId);
companySignature.setUpdateBy(userId);
iCompanySignatureService.saveOrUpdate(companySignature);
String sealSn = req.getSealSn();
signature.setSealSn(sealSn);
signature.setUpdateOn(LocalDateTime.now());
signature.setCreateBy(userDetail.getUserId());
signature.setUpdateBy(userDetail.getUserId());
signatureService.saveOrUpdate(signature);
}

public ResCompanyFiscalCodeAndSealSnVO getFiscalCodeConfigure(ReqGetCompanyFiscalCodeAndSealSnPO request) {
Long userId = LoginUserUtil.getUserId();
String organizationCode = request.getOrganizationCode();
if (StringUtils.isBlank(organizationCode)) {
organizationCode = userInfoHelper.getUserEmpPosUnitCode(userId);
public CompanyFiscalCodeAndSealSnVO getFiscalCodeConfigure(ReqGetCompanyFiscalCodeAndSealSnPO request) {
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String temOrgCode;
if (StrUtils.isBlank(request.getOrganizationCode())) {
temOrgCode = String.valueOf(userDetail.getMhUnitId());
} else {
temOrgCode = request.getOrganizationCode();
}
CompanySignature companySignature = iCompanySignatureService.getByOrganizationCode(organizationCode);
CompanyFiscalCode companyFiscalCode = iCompanyFiscalCodeService.getByOrganizationCode(organizationCode);

ResCompanyFiscalCodeAndSealSnVO returnVO = new ResCompanyFiscalCodeAndSealSnVO();
if (Objects.isNull(companySignature)) {
CompanySignature signature = signatureService.getByOrganizationCode(temOrgCode);
if (Objects.isNull(signature)) {
return null;
}
returnVO.setCreateTime(companySignature.getCreateOn());
returnVO.setUpdateTime(companySignature.getUpdateOn());
returnVO.setFiscalCode(companyFiscalCode.getFiscalCode());
returnVO.setSealSn(companySignature.getSealSn());
return returnVO;
CompanyFiscalCode cfc = fiscalCodeService.getByOrgCode(temOrgCode);
CompanyFiscalCodeAndSealSnVO res = new CompanyFiscalCodeAndSealSnVO();
res.setCreateTime(signature.getCreateOn());
res.setUpdateTime(signature.getUpdateOn());
res.setFiscalCode(cfc.getFiscalCode());
res.setSealSn(signature.getSealSn());
return res;
}
}

hz-pm-api/src/main/java/com/hz/pm/api/fiscal/model/po/ReqCompanyFiscalCodeAndSealSnPO.java → hz-pm-api/src/main/java/com/hz/pm/api/fiscal/model/po/CompanyFiscalCodeAndSealSnReq.java Bestand weergeven

@@ -12,9 +12,8 @@ import javax.validation.constraints.NotBlank;
*/
@Data
@ApiModel("财政编码配置")
public class ReqCompanyFiscalCodeAndSealSnPO {
public class CompanyFiscalCodeAndSealSnReq {

// @NotBlank(message = "组织编码 不能为空")
@ApiModelProperty("组织编码(需传入用户任职单位code)")
private String organizationCode;


hz-pm-api/src/main/java/com/hz/pm/api/fiscal/model/vo/ResCompanyFiscalCodeAndSealSnVO.java → hz-pm-api/src/main/java/com/hz/pm/api/fiscal/model/vo/CompanyFiscalCodeAndSealSnVO.java Bestand weergeven

@@ -13,7 +13,7 @@ import java.time.LocalDateTime;

@Data
@ApiModel("财政编码配置VO")
public class ResCompanyFiscalCodeAndSealSnVO {
public class CompanyFiscalCodeAndSealSnVO {

@ApiModelProperty("组织编码")
private String organizationCode;

+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/fiscal/service/ICompanyFiscalCodeService.java Bestand weergeven

@@ -16,7 +16,7 @@ import java.util.Map;
*/
public interface ICompanyFiscalCodeService extends IService<CompanyFiscalCode> {

CompanyFiscalCode getByOrganizationCode(String orgCode);
CompanyFiscalCode getByOrgCode(String orgCode);

/**
* 获取 key orgCode fiscalCode


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/fiscal/service/impl/CompanyFiscalCodeServiceImpl.java Bestand weergeven

@@ -29,7 +29,7 @@ public class CompanyFiscalCodeServiceImpl extends ServiceImpl<NdCompanyFiscalCod


@Override
public CompanyFiscalCode getByOrganizationCode(String orgCode) {
public CompanyFiscalCode getByOrgCode(String orgCode) {
if (StringUtils.isBlank(orgCode)) {
return null;
}


+ 6
- 6
hz-pm-api/src/main/java/com/hz/pm/api/gov/controller/GovProjectCollectionController.java Bestand weergeven

@@ -78,15 +78,15 @@ public class GovProjectCollectionController {
@PostMapping("/save")
@ApiOperation("项目归集保存")
@WebLog("项目归集保存")
public String save(@Valid @RequestBody GovBizProjectSaveDTO saveDTO) {
return collectionManage.save(saveDTO,null);
public String save(@Valid @RequestBody GovBizProjectSaveDTO req) {
return collectionManage.save(req);
}

@PostMapping("/operation/save")
@ApiOperation("运维项目归集保存")
@WebLog("运维项目归集保存")
public String operationSave(@Valid @RequestBody GovOperationProjectSaveDTO saveDTO) {
return collectionManage.operationSave(saveDTO,null);
return collectionManage.operationSave(saveDTO, null);
}

@PostMapping("/remove/{projId}")
@@ -131,14 +131,14 @@ public class GovProjectCollectionController {
@ApiOperation("项目归集暂存草稿箱")
@WebLog("项目归集暂存草稿箱")
public String draft(@Valid @RequestBody GovBizProjectSaveDTO saveDTO) {
return collectionManage.draft(saveDTO,null);
return collectionManage.draft(saveDTO, null);
}

@PostMapping("/operation/draft")
@ApiOperation("运维项目归集暂存草稿箱")
@WebLog("运维项目归集暂存草稿箱")
public String operationDraft(@Valid @RequestBody GovOperationProjectSaveDTO saveDTO) {
return collectionManage.operationDraft(saveDTO,null);
return collectionManage.operationDraft(saveDTO, null);
}

@PostMapping("/draft-remove/{draftId}")
@@ -200,7 +200,7 @@ public class GovProjectCollectionController {
@PostMapping("/remove-project")
@ApiOperation("删除申报项目")
@WebLog("删除申报项目")
public String removeProject(@RequestBody List<String> projectCodes){
public String removeProject(@RequestBody List<String> projectCodes) {
return collectionManage.removeProject(projectCodes);
}



+ 71
- 124
hz-pm-api/src/main/java/com/hz/pm/api/gov/manage/GovProjectCollectionManage.java Bestand weergeven

@@ -3,15 +3,16 @@ package com.hz.pm.api.gov.manage;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.model.constant.RegionConst;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.gov.contants.BizProjectContant;
import com.hz.pm.api.gov.convert.ProjectConvert;
import com.hz.pm.api.gov.model.dto.*;
@@ -29,9 +30,9 @@ import com.hz.pm.api.projectdeclared.service.IOperationService;
import com.hz.pm.api.projectdeclared.service.IPreInsAcceptancePersonService;
import com.hz.pm.api.projectdeclared.service.IPurchaseService;
import com.hz.pm.api.projectdeclared.utils.GenerateProjectCodeUtil;
import com.hz.pm.api.projectlib.model.entity.*;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.entity.*;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.service.*;
import com.hz.pm.api.safety.model.entity.PersonSafetyInfo;
@@ -77,9 +78,11 @@ import java.time.temporal.Temporal;
import java.util.*;
import java.util.stream.Collectors;

import static com.hz.pm.api.gov.contants.BizProjectContant.ProjectCollection.*;

/**
* @author zpf
* @date 2023/8/21 下午2:27
* @since 2023/8/21 下午2:27
*/

@Component
@@ -173,16 +176,14 @@ public class GovProjectCollectionManage {
/**
* 分页查 项目归集
*
* @param req
* @return
* @param req \
* @return \
*/
public PageVo<GovBizProjectListVO> list(ProjectListReq req) {
Page<GovBizProjectBaseinfo> page = req.page();
LambdaQueryWrapper<GovBizProjectBaseinfo> wrapper = Wrappers.lambdaQuery(GovBizProjectBaseinfo.class)
.like(StringUtils.isNotBlank(req.getProjectName()), GovBizProjectBaseinfo::getBaseProjName, req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrg()), GovBizProjectBaseinfo::getBaseBuildDeprt, req.getBuildOrg())
.eq(StringUtils.isNotBlank(req.getAreaCode()), GovBizProjectBaseinfo::getBaseAreaCode, req.getAreaCode() + BizConst.NINE_AREA_CODE_LAST)
.eq(StringUtils.isNotBlank(req.getRegionCode()), GovBizProjectBaseinfo::getBaseAreaCode, req.getRegionCode() + BizConst.NINE_AREA_CODE_LAST)
.gt(Objects.nonNull(req.getCreateOnMin()), GovBizProjectBaseinfo::getTongTime, req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()), GovBizProjectBaseinfo::getTongTime, req.getCreateOnMax())
.eq(StringUtils.isNotBlank(req.getProjectType()), GovBizProjectBaseinfo::getBaseProjType, req.getProjectType())
@@ -195,7 +196,6 @@ public class GovProjectCollectionManage {
ProjectTypeNewEnum.XU_OPERA.getCode()))
.eq(GovBizProjectBaseinfo::getDeleted, Boolean.FALSE)
.orderByDesc(GovBizProjectBaseinfo::getBizTime);
// permissions(wrapper);
baseinfoService.page(page, wrapper);

if (CollUtil.isEmpty(page.getRecords())) {
@@ -208,10 +208,10 @@ public class GovProjectCollectionManage {

Map<String, GovBizProjectApply> applyMap = Maps.newHashMap();
if (CollUtil.isNotEmpty(projIds)) {
List<GovBizProjectApply> applys = projectApplyService.list(Wrappers.lambdaQuery(GovBizProjectApply.class)
List<GovBizProjectApply> applies = projectApplyService.list(Wrappers.lambdaQuery(GovBizProjectApply.class)
.in(GovBizProjectApply::getBaseProjId, projIds)
.eq(GovBizProjectApply::getDeleted, Boolean.FALSE));
applyMap = applys.stream().collect(Collectors.toMap(GovBizProjectApply::getBaseProjId, a -> a));
applyMap = applies.stream().collect(Collectors.toMap(GovBizProjectApply::getBaseProjId, a -> a));
}

Map<String, GovBizProjectApply> finalApplyMap = applyMap;
@@ -246,8 +246,6 @@ public class GovProjectCollectionManage {
LambdaQueryWrapper<GovOperationProjectBaseinfo> wrapper = Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class)
.like(StringUtils.isNotBlank(req.getProjectName()), GovOperationProjectBaseinfo::getBaseProjName, req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrg()), GovOperationProjectBaseinfo::getBaseBuildDeprt, req.getBuildOrg())
.eq(StringUtils.isNotBlank(req.getAreaCode()), GovOperationProjectBaseinfo::getBaseAreaCode, req.getAreaCode() + BizConst.NINE_AREA_CODE_LAST)
.eq(StringUtils.isNotBlank(req.getRegionCode()), GovOperationProjectBaseinfo::getBaseAreaCode, req.getRegionCode() + BizConst.NINE_AREA_CODE_LAST)
.gt(Objects.nonNull(req.getCreateOnMin()), GovOperationProjectBaseinfo::getTongTime, req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()), GovOperationProjectBaseinfo::getTongTime, req.getCreateOnMax())
.eq(StringUtils.isNotBlank(req.getProjectType()), GovOperationProjectBaseinfo::getBaseProjType, req.getProjectType())
@@ -305,8 +303,6 @@ public class GovProjectCollectionManage {
LambdaQueryWrapper<GovBizProjectDraft> wrapper = Wrappers.lambdaQuery(GovBizProjectDraft.class)
.like(StringUtils.isNotBlank(req.getProjectName()), GovBizProjectDraft::getBaseProjName, req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrg()), GovBizProjectDraft::getBaseBuildDeprt, req.getBuildOrg())
.eq(StringUtils.isNotBlank(req.getAreaCode()), GovBizProjectDraft::getBaseAreaCode, req.getAreaCode() + BizConst.NINE_AREA_CODE_LAST)
.eq(StringUtils.isNotBlank(req.getRegionCode()), GovBizProjectDraft::getBaseAreaCode, req.getRegionCode() + BizConst.NINE_AREA_CODE_LAST)
.gt(Objects.nonNull(req.getCreateOnMin()), GovBizProjectDraft::getTongTime, req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()), GovBizProjectDraft::getTongTime, req.getCreateOnMax())
.eq(StringUtils.isNotBlank(req.getProjectType()), GovBizProjectDraft::getBaseProjType, req.getProjectType())
@@ -347,13 +343,11 @@ public class GovProjectCollectionManage {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
Page<GovOperationProjectDraft> page = req.page();
LambdaQueryWrapper<GovOperationProjectDraft> wrapper = Wrappers.lambdaQuery(GovOperationProjectDraft.class)
.like(StringUtils.isNotBlank(req.getProjectName()), GovOperationProjectDraft::getBaseProjName, req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrg()), GovOperationProjectDraft::getBaseBuildDeprt, req.getBuildOrg())
.eq(StringUtils.isNotBlank(req.getAreaCode()), GovOperationProjectDraft::getBaseAreaCode, req.getAreaCode() + BizConst.NINE_AREA_CODE_LAST)
.eq(StringUtils.isNotBlank(req.getRegionCode()), GovOperationProjectDraft::getBaseAreaCode, req.getRegionCode() + BizConst.NINE_AREA_CODE_LAST)
.like(StrUtil.isNotBlank(req.getProjectName()), GovOperationProjectDraft::getBaseProjName, req.getProjectName())
.like(StrUtil.isNotBlank(req.getBuildOrg()), GovOperationProjectDraft::getBaseBuildDeprt, req.getBuildOrg())
.gt(Objects.nonNull(req.getCreateOnMin()), GovOperationProjectDraft::getTongTime, req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()), GovOperationProjectDraft::getTongTime, req.getCreateOnMax())
.eq(StringUtils.isNotBlank(req.getProjectType()), GovOperationProjectDraft::getBaseProjType, req.getProjectType())
.eq(StrUtil.isNotBlank(req.getProjectType()), GovOperationProjectDraft::getBaseProjType, req.getProjectType())
.eq(GovOperationProjectDraft::getDeleted, Boolean.FALSE)
.eq(GovOperationProjectDraft::getCreateId, user.getUserId())
.orderByDesc(GovOperationProjectDraft::getBizTime);
@@ -381,28 +375,10 @@ public class GovProjectCollectionManage {
return PageVo.of(res, page.getTotal());
}

/**
* 数据权限
*
* @param wrapper
*/
private void permissions(LambdaQueryWrapper<GovBizProjectBaseinfo> wrapper) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
//超管和区域管理员
if (user.getSuperAdmin() || user.getRegionAdmin()) {
log.info("超管和区管 可以看所有");
return;
}

wrapper.eq(GovBizProjectBaseinfo::getBaseBuildDeprtDing, user.getEmpPosUnitCode());
}

public Long count(ProjectListReq req) {
LambdaQueryWrapper<GovBizProjectBaseinfo> wrapper = Wrappers.lambdaQuery(GovBizProjectBaseinfo.class)
.like(StringUtils.isNotBlank(req.getProjectName()), GovBizProjectBaseinfo::getBaseProjName, req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrg()), GovBizProjectBaseinfo::getBaseBuildDeprt, req.getBuildOrg())
.eq(StringUtils.isNotBlank(req.getAreaCode()), GovBizProjectBaseinfo::getAreaCode, req.getAreaCode())
.eq(StringUtils.isNotBlank(req.getRegionCode()), GovBizProjectBaseinfo::getAreaCode, req.getRegionCode())
.gt(Objects.nonNull(req.getCreateOnMin()), GovBizProjectBaseinfo::getTongTime, req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()), GovBizProjectBaseinfo::getTongTime, req.getCreateOnMax())
.eq(GovBizProjectBaseinfo::getDeleted, Boolean.FALSE)
@@ -414,8 +390,6 @@ public class GovProjectCollectionManage {
LambdaQueryWrapper<GovOperationProjectBaseinfo> wrapper = Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class)
.like(StringUtils.isNotBlank(req.getProjectName()), GovOperationProjectBaseinfo::getBaseProjName, req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrg()), GovOperationProjectBaseinfo::getBaseBuildDeprt, req.getBuildOrg())
.eq(StringUtils.isNotBlank(req.getAreaCode()), GovOperationProjectBaseinfo::getAreaCode, req.getAreaCode())
.eq(StringUtils.isNotBlank(req.getRegionCode()), GovOperationProjectBaseinfo::getAreaCode, req.getRegionCode())
.gt(Objects.nonNull(req.getCreateOnMin()), GovOperationProjectBaseinfo::getTongTime, req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()), GovOperationProjectBaseinfo::getTongTime, req.getCreateOnMax())
.eq(GovOperationProjectBaseinfo::getDeleted, Boolean.FALSE)
@@ -681,26 +655,23 @@ public class GovProjectCollectionManage {
/**
* 项目归集保存
*
* @param saveDTO
* @return
* @param req \
* @return \
*/
@Transactional
public String save(GovBizProjectSaveDTO saveDTO, UserInfoDetails user) {
if (Objects.isNull(user)) {
user = LoginUserUtil.loginUserDetail();
}
@Transactional(rollbackFor = Exception.class)
public String save(GovBizProjectSaveDTO req) {
LocalDateTime now = LocalDateTime.now();
UserInfoDetails user = LoginUserUtil.loginUserDetail();

GovBizProjectBaseinfoDTO base = saveDTO.getBaseinfo();
String baseProjId = saveDTO.getBaseProjId();
String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST;
GovBizProjectBaseinfoDTO base = req.getBaseinfo();
String baseProjId = req.getBaseProjId();
String baseProjName = base.getBaseProjName();

//1.保存基本信息
GovBizProjectBaseinfoDTO baseinfo = saveDTO.getBaseinfo();
GovBizProjectBaseinfoDTO baseinfo = req.getBaseinfo();
baseinfo.setBaseProjId(baseProjId);
baseinfo.setBaseProjName(baseProjName);
baseinfo.setBaseAreaCode(baseAreaCode);
baseinfo.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE);
baseinfo.setIsEffective(IS_EFFECTIVE);
GovBizProjectBaseinfo oldBaseInfo = baseinfoService.getOne(Wrappers.lambdaQuery(GovBizProjectBaseinfo.class)
.eq(GovBizProjectBaseinfo::getBaseProjId, baseProjId)
.last(BizConst.LIMIT_1));
@@ -709,30 +680,28 @@ public class GovProjectCollectionManage {
checkName(baseProjName, baseProjId);
GovBizProjectBaseinfo saveBase = BeanUtil.copyProperties(baseinfo, GovBizProjectBaseinfo.class);
saveBase.setBaseProjName(baseProjName);
saveBase.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE);
saveBase.setIsEffective(IS_EFFECTIVE);
if (Objects.nonNull(oldBaseInfo)) {
saveBase.setId(oldBaseInfo.getId());
saveBase.setBaseAreaCode(null);
} else {
saveBase.setTongTime(LocalDateTime.now());
saveBase.setBaseAreaCode(baseAreaCode);
saveBase.setBaseAreaName(regionCacheHelper.getRegionName(user.getRegionCode(), RegionConst.RL_COUNTY));
saveBase.setTongTime(now);
}
saveBase.setAreaCode(RegionConst.RC_HZ);
saveBase.setBizTime(LocalDateTime.now());
saveBase.setBizTime(now);
saveBase.setUpdateBy(user.getUsername());
saveBase.setUpdateOn(LocalDateTime.now());
saveBase.setUpdateOn(now);

//如果是新增的话 要生成 项目编号
if (StringUtils.isBlank(baseProjId) || BizProjectContant.ProjectCollection.DRAFT.equals(baseProjId)) {
baseProjId = generateProjectCodeUtil.generateProjectCode(saveDTO);
if (StringUtils.isBlank(baseProjId) || DRAFT.equals(baseProjId)) {
baseProjId = generateProjectCodeUtil.generateProjectCode(req);
saveBase.setBaseProjId(baseProjId);
}

baseinfoService.saveOrUpdate(saveBase);

// 2.保存 申报信息
GovBizProjectApplyDTO apply = saveDTO.getApply();
GovBizProjectApplyDTO apply = req.getApply();
if (Objects.nonNull(apply)) {
apply.setBaseProjId(baseProjId);
apply.setBaseProjName(baseProjName);
@@ -745,7 +714,7 @@ public class GovProjectCollectionManage {
if (Objects.nonNull(oldApply)) {
saveApply.setId(oldApply.getId());
} else {
saveApply.setTongTime(LocalDateTime.now());
saveApply.setTongTime(now);
}
if (Objects.nonNull(saveApply.getBaseProjStartTime()) &&
Objects.nonNull(saveApply.getBaseProjEndTime())) {
@@ -753,16 +722,16 @@ public class GovProjectCollectionManage {
saveApply.getBaseProjEndTime()));
}
saveApply.setAreaCode(RegionConst.RC_HZ);
saveApply.setBizTime(LocalDateTime.now());
saveApply.setBizTime(now);
saveApply.setUpdateBy(user.getUsername());
saveApply.setUpdateOn(LocalDateTime.now());
saveApply.setUpdateOn(now);
if (projectApplyService.saveOrUpdate(saveApply)) {
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssApply(apply, oldApply, saveApply));
}
}

// 3.保存 审批信息
GovBizProjectApproveDTO approve = saveDTO.getApprove();
GovBizProjectApproveDTO approve = req.getApprove();
if (Objects.nonNull(approve)) {
approve.setBaseProjId(baseProjId);
approve.setBaseProjName(baseProjName);
@@ -787,7 +756,7 @@ public class GovProjectCollectionManage {
}

// 4.保存 建设项目 实施信息
GovBizProjectCimplementDTO cimplement = saveDTO.getCimplement();
GovBizProjectCimplementDTO cimplement = req.getCimplement();
if (Objects.nonNull(cimplement)) {
cimplement.setBaseProjId(baseProjId);
cimplement.setBaseProjName(baseProjName);
@@ -804,19 +773,19 @@ public class GovProjectCollectionManage {
if (Objects.nonNull(oldCimplement)) {
saveCimplement.setId(oldCimplement.getId());
} else {
saveCimplement.setTongTime(LocalDateTime.now());
saveCimplement.setTongTime(now);
}
saveCimplement.setAreaCode(RegionConst.RC_HZ);
saveCimplement.setBizTime(LocalDateTime.now());
saveCimplement.setBizTime(now);
saveCimplement.setUpdateBy(user.getUsername());
saveCimplement.setUpdateOn(LocalDateTime.now());
saveCimplement.setUpdateOn(now);
if (cimplementService.saveOrUpdate(saveCimplement)) {
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssCimplement(cimplement, oldCimplement, saveCimplement));
}
}

// 5.保存 运维项目 实施信息
GovBizProjectMimplementDTO mimplement = saveDTO.getMimplement();
GovBizProjectMimplementDTO mimplement = req.getMimplement();
if (Objects.nonNull(mimplement)) {
mimplement.setBaseProjId(baseProjId);
mimplement.setBaseProjName(baseProjName);
@@ -833,43 +802,40 @@ public class GovProjectCollectionManage {
if (Objects.nonNull(oldMimplement)) {
saveMimplement.setId(oldMimplement.getId());
} else {
saveMimplement.setTongTime(LocalDateTime.now());
saveMimplement.setTongTime(now);
}
if (Objects.nonNull(saveBase.getAreaCode())) {
saveMimplement.setAreaCode(saveBase.getAreaCode());
}
saveMimplement.setAreaCode(RegionConst.RC_HZ);
saveMimplement.setBizTime(LocalDateTime.now());
saveMimplement.setBizTime(now);
saveMimplement.setUpdateBy(user.getUsername());
saveMimplement.setUpdateOn(LocalDateTime.now());
saveMimplement.setUpdateOn(now);
if (mimplementService.saveOrUpdate(saveMimplement)) {
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssMimplement(mimplement, oldMimplement, saveMimplement));
}
}

// 6.保存 采购信息
List<GovBizProjectProcureDTO> procures = saveDTO.getProcures();
List<GovBizProjectProcureDTO> procures = req.getProcures();

if (Objects.nonNull(procures)) {
procureService.remove(Wrappers.lambdaQuery(GovBizProjectProcure.class)
.eq(GovBizProjectProcure::getBaseProjId, baseProjId));

String finalBaseProjId = baseProjId;
UserInfoDetails finalUser = user;

Integer index = 1;
for (GovBizProjectProcureDTO procure : procures) {
procure.setBaseProjId(finalBaseProjId);
procure.setBaseProjId(baseProjId);
procure.setBaseProjName(baseProjName);
procure.setBaseBidCode(finalBaseProjId + StrPool.DASH + String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS, index));
procure.setBaseBidCode(baseProjId + StrPool.DASH + String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS, index));
GovBizProjectProcure saveProcure = BeanUtil.copyProperties(procure, GovBizProjectProcure.class);
saveProcure.setBaseProjId(finalBaseProjId);
saveProcure.setBaseProjId(baseProjId);
saveProcure.setId(null);
saveProcure.setAreaCode(RegionConst.RC_HZ);
saveProcure.setTongTime(LocalDateTime.now());
saveProcure.setBizTime(LocalDateTime.now());
saveProcure.setUpdateBy(finalUser.getUsername());
saveProcure.setUpdateOn(LocalDateTime.now());
saveProcure.setTongTime(now);
saveProcure.setBizTime(now);
saveProcure.setUpdateBy(user.getUsername());
saveProcure.setUpdateOn(now);
if (procureService.save(saveProcure)) {
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssProcure(procure, null, saveProcure));
}
@@ -878,11 +844,8 @@ public class GovProjectCollectionManage {

}

//7. 推送数据(改为定时推送了)
// pushProject(saveDTO);
//如果是草稿箱来的 就要删除
if (Objects.nonNull(saveDTO.getDraftId())) {
draftService.removeById(saveDTO.getDraftId());
if (Objects.nonNull(req.getDraftId())) {
draftService.removeById(req.getDraftId());
}

return BizConst.SAVE_SUCCESS;
@@ -895,6 +858,7 @@ public class GovProjectCollectionManage {
* @param user
* @return
*/
@Transactional(rollbackFor = Exception.class)
public String operationSave(GovOperationProjectSaveDTO saveDTO, UserInfoDetails user) {
if (Objects.isNull(user)) {
user = LoginUserUtil.loginUserDetail();
@@ -902,15 +866,13 @@ public class GovProjectCollectionManage {

GovOperationProjectBaseinfoDTO base = saveDTO.getBaseinfo();
String baseProjId = saveDTO.getBaseProjId();
String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST;
String baseProjName = base.getBaseProjName();

//1.保存基本信息
GovOperationProjectBaseinfoDTO baseinfo = saveDTO.getBaseinfo();
baseinfo.setBaseProjId(baseProjId);
baseinfo.setBaseProjName(baseProjName);
baseinfo.setBaseAreaCode(baseAreaCode);
baseinfo.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE);
baseinfo.setIsEffective(IS_EFFECTIVE);
GovOperationProjectBaseinfo oldBaseInfo = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class)
.eq(GovOperationProjectBaseinfo::getBaseProjId, baseProjId)
.last(BizConst.LIMIT_1));
@@ -919,22 +881,19 @@ public class GovProjectCollectionManage {
checkNameOperation(baseProjName, baseProjId);
GovOperationProjectBaseinfo saveBase = BeanUtil.copyProperties(baseinfo, GovOperationProjectBaseinfo.class);
saveBase.setBaseProjName(baseProjName);
saveBase.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE);
saveBase.setIsEffective(IS_EFFECTIVE);
if (Objects.nonNull(oldBaseInfo)) {
saveBase.setId(oldBaseInfo.getId());
saveBase.setBaseAreaCode(null);
} else {
saveBase.setBaseAreaCode(baseAreaCode);
saveBase.setTongTime(LocalDateTime.now());
saveBase.setBaseAreaName(regionCacheHelper.getRegionName(user.getRegionCode(), RegionConst.RL_COUNTY));
}
saveBase.setAreaCode(RegionConst.RC_HZ);
saveBase.setBizTime(LocalDateTime.now());
saveBase.setUpdateBy(user.getUsername());
saveBase.setUpdateOn(LocalDateTime.now());

//如果是新增的话 要生成 项目编号
if (StringUtils.isBlank(baseProjId) || BizProjectContant.ProjectCollection.DRAFT.equals(baseProjId)) {
if (StringUtils.isBlank(baseProjId) || DRAFT.equals(baseProjId)) {
baseProjId = generateProjectCodeUtil.generateProjectCode(saveDTO);
saveBase.setBaseProjId(baseProjId);
}
@@ -1064,21 +1023,18 @@ public class GovProjectCollectionManage {
procureService.remove(Wrappers.lambdaQuery(GovBizProjectProcure.class)
.eq(GovBizProjectProcure::getBaseProjId, baseProjId));

String finalBaseProjId = baseProjId;
UserInfoDetails finalUser = user;

Integer index = 1;
for (GovBizProjectProcureDTO procure : procures) {
procure.setBaseProjId(finalBaseProjId);
procure.setBaseProjId(baseProjId);
procure.setBaseProjName(baseProjName);
procure.setBaseBidCode(finalBaseProjId + StrPool.DASH + String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS, index));
procure.setBaseBidCode(baseProjId + StrPool.DASH + String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS, index));
GovBizProjectProcure saveProcure = BeanUtil.copyProperties(procure, GovBizProjectProcure.class);
saveProcure.setBaseProjId(finalBaseProjId);
saveProcure.setBaseProjId(baseProjId);
saveProcure.setId(null);
saveProcure.setAreaCode(RegionConst.RC_HZ);
saveProcure.setTongTime(LocalDateTime.now());
saveProcure.setBizTime(LocalDateTime.now());
saveProcure.setUpdateBy(finalUser.getUsername());
saveProcure.setUpdateBy(user.getUsername());
saveProcure.setUpdateOn(LocalDateTime.now());
if (procureService.save(saveProcure)) {
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssProcure(procure, null, saveProcure));
@@ -1088,8 +1044,6 @@ public class GovProjectCollectionManage {

}

//7. 推送数据(改为定时推送了)
// pushProject(saveDTO);
//如果是草稿箱来的 就要删除
if (Objects.nonNull(saveDTO.getDraftId())) {
operationProjectDraftService.removeById(saveDTO.getDraftId());
@@ -1130,14 +1084,12 @@ public class GovProjectCollectionManage {
GovBizProjectDraft draft = new GovBizProjectDraft();
//草稿id
Long draftId = saveDTO.getDraftId();
String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST;
if (Objects.nonNull(draftId)) {
GovBizProjectDraft oldDraft = draftService.getById(draftId);
VUtils.isTrue(Objects.isNull(oldDraft)).throwMessage("该草稿不存在!");
draft.setId(draftId);
} else {
draft.setTongTime(LocalDateTime.now());
draft.setBaseAreaCode(baseAreaCode);
draft.setCreateId(user.getUserId());
draft.setTongTime(LocalDateTime.now());
}
@@ -1148,7 +1100,7 @@ public class GovProjectCollectionManage {
String baseProjName = base.getBaseProjName();
//要生成 草稿的项目编号
if (StringUtils.isBlank(baseProjId)) {
baseProjId = BizProjectContant.ProjectCollection.DRAFT;
baseProjId = DRAFT;
}

// 2.保存 申报信息
@@ -1207,12 +1159,12 @@ public class GovProjectCollectionManage {
.setIgnoreError(Boolean.TRUE).setIgnoreNullValue(Boolean.TRUE));
draft.setBaseProjId(baseProjId);
draft.setBaseProjName(baseProjName);
draft.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE);
draft.setIsEffective(IS_EFFECTIVE);
draft.setAreaCode(RegionConst.RC_HZ);
draft.setBizTime(LocalDateTime.now());
draft.setUpdateBy(user.getUsername());
draft.setUpdateOn(LocalDateTime.now());
draft.setOp(BizProjectContant.ProjectCollection.OP_INSERT);
draft.setOp(OP_INSERT);

draftService.saveOrUpdate(draft);

@@ -1227,14 +1179,12 @@ public class GovProjectCollectionManage {
GovOperationProjectDraft draft = new GovOperationProjectDraft();
//草稿id
Long draftId = saveDTO.getDraftId();
String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST;
if (Objects.nonNull(draftId)) {
GovOperationProjectDraft oldDraft = operationProjectDraftService.getById(draftId);
VUtils.isTrue(Objects.isNull(oldDraft)).throwMessage("该草稿不存在!");
draft.setId(draftId);
} else {
draft.setTongTime(LocalDateTime.now());
draft.setBaseAreaCode(baseAreaCode);
draft.setCreateId(user.getUserId());
draft.setTongTime(LocalDateTime.now());
}
@@ -1245,7 +1195,7 @@ public class GovProjectCollectionManage {
String baseProjName = base.getBaseProjName();
//要生成 草稿的项目编号
if (StringUtils.isBlank(baseProjId)) {
baseProjId = BizProjectContant.ProjectCollection.DRAFT;
baseProjId = DRAFT;
}

// 2.保存 申报信息
@@ -1304,12 +1254,12 @@ public class GovProjectCollectionManage {
.setIgnoreError(Boolean.TRUE).setIgnoreNullValue(Boolean.TRUE));
draft.setBaseProjId(baseProjId);
draft.setBaseProjName(baseProjName);
draft.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE);
draft.setIsEffective(IS_EFFECTIVE);
draft.setAreaCode(RegionConst.RC_HZ);
draft.setBizTime(LocalDateTime.now());
draft.setUpdateBy(user.getUsername());
draft.setUpdateOn(LocalDateTime.now());
draft.setOp(BizProjectContant.ProjectCollection.OP_INSERT);
draft.setOp(OP_INSERT);

operationProjectDraftService.saveOrUpdate(draft);

@@ -1722,26 +1672,23 @@ public class GovProjectCollectionManage {
throw BizException.wrap("pdf转换无效");
}

private Boolean checkFieldNotPdf(String field, Object record, String fieldName) {
if (StringUtils.isBlank(field)) {
private boolean checkFieldNotPdf(String field, Object record, String fieldName) {
if (StrUtil.isBlank(field)) {
return Boolean.FALSE;
}

//如果没有老值
// 如果没有老值
if (Objects.isNull(record)) {
return Boolean.TRUE;
}

//和老值做个对比 不一样则true
// 和老值做个对比 不一样则true
Class<?> clazz = record.getClass();
String oldFiled = StringUtils.EMPTY;
try {
Field fieldDeclared = clazz.getDeclaredField(fieldName);
fieldDeclared.setAccessible(Boolean.TRUE);
oldFiled = Objects.nonNull(fieldDeclared.get(record)) ? String.valueOf(fieldDeclared.get(record)) : null;
} catch (NoSuchFieldException e) {
log.error("转换PDF文件出错" + e);
} catch (IllegalAccessException e) {
} catch (NoSuchFieldException | IllegalAccessException e) {
log.error("转换PDF文件出错" + e);
}



+ 52
- 51
hz-pm-api/src/main/java/com/hz/pm/api/gov/utils/ProjectConvertUtil.java Bestand weergeven

@@ -21,6 +21,7 @@ import com.hz.pm.api.projectlib.model.vo.ProjectApplicationVO;
import com.hz.pm.api.projectlib.model.vo.ProjectDetailVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
@@ -38,12 +39,13 @@ public class ProjectConvertUtil {

/**
* 申报项目 转为 项目归集
*
* @param project
* @return
*/
public static GovBizProjectDetailVO declaredToCollection(ProjectDetailVO project, FileService fileService){
public static GovBizProjectDetailVO declaredToCollection(ProjectDetailVO project, FileService fileService) {
GovBizProjectDetailVO projectCollection = new GovBizProjectDetailVO();
if(Objects.isNull(project)){
if (Objects.isNull(project)) {
return projectCollection;
}
String projectCode = project.getProjectCode();
@@ -52,11 +54,11 @@ public class ProjectConvertUtil {
projectCollection.setBaseProjName(projectName);
projectCollection.setBaseinfo(buildBaseinfo(project));
projectCollection.setApply(buildApply(project));
projectCollection.setApprove(buildApprove(project,fileService));
projectCollection.setApprove(buildApprove(project, fileService));
String projectType = project.getProjectType();
ProjectTypeNewEnum match = ProjectTypeNewEnum.match(projectType);
if(Objects.nonNull(match)){
switch (match){
if (Objects.nonNull(match)) {
switch (match) {
case SJ_BUILD:
case FIRST_BUILD:
case SZ_BUILD:
@@ -98,10 +100,8 @@ public class ProjectConvertUtil {
baseinfo.setBaseProvManDepartDing(project.getHigherSuperOrgCode());
baseinfo.setBaseProvManDeprtType(project.getBaseProvManDeprtType());
ProjectStatusEnum match = ProjectStatusEnum.match(project.getStatus());
if(Objects.nonNull(match)){
if(Objects.nonNull(match.getCollectionStatus())){
baseinfo.setBaseProjSetProg(match.getCollectionStatus().getCode());
}
if (Objects.nonNull(match) && (Objects.nonNull(match.getCollectionStatus()))) {
baseinfo.setBaseProjSetProg(match.getCollectionStatus().getCode());
}
baseinfo.setBaseProjType(project.getProjectType());
baseinfo.setDeleted(Boolean.FALSE);
@@ -117,7 +117,7 @@ public class ProjectConvertUtil {
apply.setBaseHistorProjId(project.getBaseHistorProjId());
apply.setBaseBasisEstablish(project.getBaseBasisEstablish());
List<ProjectApplicationVO> projectApplications = project.getProjectApplications();
if(CollUtil.isNotEmpty(projectApplications)){
if (CollUtil.isNotEmpty(projectApplications)) {
String appName = projectApplications.stream().map(app -> {
if (StringUtils.isNotBlank(app.getRelatedExistsApplication())) {
return app.getRelatedExistsApplication();
@@ -140,8 +140,8 @@ public class ProjectConvertUtil {
}
apply.setBaseBasisAmountOri(project.getBaseBasisAmountOri());
String coreBusiness = project.getCoreBusiness();
if(StringUtils.isNotBlank(coreBusiness)){
try{
if (StringUtils.isNotBlank(coreBusiness)) {
try {
JSONArray coreJson = JSON.parseArray(coreBusiness);
String matters = coreJson.stream().map(j -> {
JSONObject matterJson = JSON.parseObject(JSON.toJSONString(j));
@@ -155,8 +155,8 @@ public class ProjectConvertUtil {
.collect(Collectors.joining(StrPool.SEMICOLON_CHINA));
apply.setBaseCoreBusiness(matters);
apply.setBaseCoreBusinessCode(matterCodes);
}catch (Exception e){
log.error("项目转化失败",e);
} catch (Exception e) {
log.error("项目转化失败", e);
}
}
apply.setBaseDevelopCode(project.getDevelopCode());
@@ -166,14 +166,14 @@ public class ProjectConvertUtil {
apply.setBaseProjApplyFile(project.getProjectApplicationForm());
String beginTime = project.getBeginTime();
String endTime = project.getEndTime();
if(StringUtils.isNotBlank(beginTime)){
if (StringUtils.isNotBlank(beginTime)) {
apply.setBaseProjStartTime(BizUtils.convertLocalDateTime(beginTime));
}
if(StringUtils.isNotBlank(endTime)){
if (StringUtils.isNotBlank(endTime)) {
apply.setBaseProjEndTime(BizUtils.convertLocalDateTime(endTime));
}
if(StringUtils.isNotBlank(beginTime) && StringUtils.isNotBlank(endTime)){
try{
if (StringUtils.isNotBlank(beginTime) && StringUtils.isNotBlank(endTime)) {
try {
String yearEnd = endTime.split(StrPool.DASH)[0];
String yearStart = beginTime.split(StrPool.DASH)[0];
String monthEnd = endTime.split(StrPool.DASH)[1];
@@ -181,8 +181,8 @@ public class ProjectConvertUtil {
Integer duration = Integer.parseInt(monthEnd) - Integer.parseInt(monthStart) +
(Integer.parseInt(yearEnd) - Integer.parseInt(yearStart)) * 12;
apply.setBaseProjDuration(String.valueOf(duration));
}catch (Exception e){
log.error("日期转换失败:",e);
} catch (Exception e) {
log.error("日期转换失败:", e);
}
}
apply.setBaseProjConsClass(project.getBuildLevel());
@@ -203,12 +203,12 @@ public class ProjectConvertUtil {
}

//转化审批信息
private static GovBizProjectApproveVO buildApprove(ProjectDetailVO project,FileService fileService) {
private static GovBizProjectApproveVO buildApprove(ProjectDetailVO project, FileService fileService) {
GovBizProjectApproveVO approve = new GovBizProjectApproveVO();
// approve.setBaseProjId(project.getProjectCode());
approve.setBaseProjName(project.getProjectName());
File file = fileService.getById(project.getApprovedFile());
if(Objects.nonNull(file)){
if (Objects.nonNull(file)) {
approve.setApprovalFile(JSON.toJSONString(Lists.newArrayList(file)));
}
approve.setAreaCode(RegionConst.RC_HZ);
@@ -220,24 +220,24 @@ public class ProjectConvertUtil {
approve.setBaseProjReplyAmount(project.getApprovalBudget());
approve.setBaseReviewCommentsFile(project.getProposeAttachFiles());
List<ProjectApplicationVO> projectApplications = project.getProjectApplications();
if(CollUtil.isNotEmpty(projectApplications)){
if (CollUtil.isNotEmpty(projectApplications)) {
Integer max = 0;
for(ProjectApplicationVO app : projectApplications){
max = Math.max(app.getSecrecyGrade(),max);
for (ProjectApplicationVO app : projectApplications) {
max = Math.max(app.getSecrecyGrade(), max);
}
if(max > 0){
approve.setEqualProtectionLevel(String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS,max));
if (max > 0) {
approve.setEqualProtectionLevel(String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS, max));
}
}
approve.setPreliminaryDesignScheme(project.getPreliminaryPlanFile());
approve.setPreliminaryDesignFile(project.getPreliminaryInspectionMaterials());
approve.setBaseReviewOpinion(project.getProposeAttach());
if(Objects.nonNull(project.getBaseReviewResults())){
if (Objects.nonNull(project.getBaseReviewResults())) {
approve.setBaseReviewResults(String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS,
project.getBaseReviewResults()));
}
List<PurchaseVO> purchases = project.getPurchases();
if(CollUtil.isNotEmpty(purchases)){
if (CollUtil.isNotEmpty(purchases)) {
purchases.stream().map(PurchaseVO::getTransactionAmount)
.filter(Objects::nonNull).reduce(BigDecimal::add)
.ifPresent(approve::setReleaseYearMoney);
@@ -256,15 +256,15 @@ public class ProjectConvertUtil {
cim.setDeleted(Boolean.FALSE);
cim.setBaseDevelopCode(project.getDevelopCode());
//总结报告
cim.setBaseSummReportFile(searchReportFile(project,5,2));
cim.setBaseSummReportFile(searchReportFile(project, 5, 2));
//监理总结报告
cim.setBaseEstaSummFile(searchReportFile(project,5,3));
cim.setBaseEstaSummFile(searchReportFile(project, 5, 3));
//建设核查表
cim.setBaseCheckFile(searchReportFile(project,3,2));
cim.setBaseThirdAcceptFile(searchReportFile(project,5,4));
cim.setBaseInitialOpinionFile(searchReportFile(project,5,5));
cim.setBaseCheckFile(searchReportFile(project, 3, 2));
cim.setBaseThirdAcceptFile(searchReportFile(project, 5, 4));
cim.setBaseInitialOpinionFile(searchReportFile(project, 5, 5));
List<ProjectApplicationVO> projectApplications = project.getProjectApplications();
if(CollUtil.isNotEmpty(projectApplications)){
if (CollUtil.isNotEmpty(projectApplications)) {
String appCode = projectApplications.stream().map(app -> {
if (StringUtils.isNotBlank(app.getRelatedExistsApplication())) {
return app.getRelatedExistsApplicationCode();
@@ -286,13 +286,13 @@ public class ProjectConvertUtil {
mim.setDeleted(Boolean.FALSE);
mim.setBaseDevelopCode(project.getDevelopCode());
//监理总结报告
mim.setBaseEstaSummFile(searchReportFile(project,5,3));
mim.setBaseEstaSummFile(searchReportFile(project, 5, 3));
//建设核查表
// mim.setBaseCheckFile(searchReportFile(project,3,2));
mim.setBaseThirdAcceptFile(searchReportFile(project,5,4));
mim.setBaseThirdAcceptFile(searchReportFile(project, 5, 4));
// mim.setBaseInitialOpinionFile(searchReportFile(project,5,5));
List<ProjectApplicationVO> projectApplications = project.getProjectApplications();
if(CollUtil.isNotEmpty(projectApplications)){
if (CollUtil.isNotEmpty(projectApplications)) {
String appCode = projectApplications.stream().map(app -> {
if (StringUtils.isNotBlank(app.getRelatedExistsApplication())) {
return app.getRelatedExistsApplicationCode();
@@ -309,13 +309,13 @@ public class ProjectConvertUtil {
List<PurchaseVO> purchases = project.getPurchases();
ContractVO contract = project.getContract();
final BigDecimal[] paymentTotal = {BigDecimal.ZERO};
if(Objects.nonNull(contract)){
if (Objects.nonNull(contract)) {
List<PaymentPlanVO> payments = contract.getPayments();
payments.stream().map(PaymentPlanVO::getPaymentAmount)
.reduce(BigDecimal::add)
.ifPresent(b -> paymentTotal[0] = b);
}
if(CollUtil.isNotEmpty(purchases)){
if (CollUtil.isNotEmpty(purchases)) {
return purchases.stream().map(p -> {
GovBizProjectProcureVO purchase = new GovBizProjectProcureVO();
purchase.setBaseProjName(project.getProjectName());
@@ -333,7 +333,7 @@ public class ProjectConvertUtil {
purchase.setBaseWinningBidTime(p.getTransactionTime());
purchase.setBiddingFile(p.getAcceptanceLetter());
purchase.setPaymentProgress(paymentTotal[0]);
if(Objects.nonNull(contract)){
if (Objects.nonNull(contract)) {
purchase.setPurchaseContract(contract.getAttachment());
}
purchase.setSetProjCodeFinan(project.getFinancialCode());
@@ -346,31 +346,32 @@ public class ProjectConvertUtil {

/**
* 查询项目 初验终验的 报告
*
* @param project
* @return
*/
private static String searchReportFile(ProjectDetailVO project,Integer firstIndex,Integer secondIndex) {
if(Objects.isNull(project)){
private static String searchReportFile(ProjectDetailVO project, Integer firstIndex, Integer secondIndex) {
if (Objects.isNull(project)) {
return null;
}
if(StringUtils.isNotBlank(project.getFinalAcceptanceMaterials())){
return searchReportFileInner(project.getFinalAcceptanceMaterials(),firstIndex,secondIndex);
}else if(StringUtils.isNotBlank(project.getPreliminaryInspectionMaterials())){
return searchReportFileInner(project.getFinalAcceptanceMaterials(),firstIndex,secondIndex);
if (StringUtils.isNotBlank(project.getFinalAcceptanceMaterials())) {
return searchReportFileInner(project.getFinalAcceptanceMaterials(), firstIndex, secondIndex);
} else if (StringUtils.isNotBlank(project.getPreliminaryInspectionMaterials())) {
return searchReportFileInner(project.getFinalAcceptanceMaterials(), firstIndex, secondIndex);
}
return null;
}

private static String searchReportFileInner(String fileStr,Integer firstIndex,Integer secondIndex) {
try{
private static String searchReportFileInner(String fileStr, Integer firstIndex, Integer secondIndex) {
try {
JSONArray jsonArray = JSON.parseArray(fileStr);
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(jsonArray.get(firstIndex - 1)));
JSONArray data = jsonObject.getJSONArray("data");
JSONObject wangong = JSON.parseObject(JSON.toJSONString(data.get(secondIndex - 1)));
JSONArray files = wangong.getJSONArray("files");
return JSON.toJSONString(files);
}catch (Exception e){
log.error("解析文件失败:",e);
} catch (Exception e) {
log.error("解析文件失败:", e);
}
return null;
}


+ 0
- 2
hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/AppIrsManage.java Bestand weergeven

@@ -277,7 +277,6 @@ public class AppIrsManage {
String appSecret = "496f0f2a19994f76b4fd9dae087366c7";
String appKey = "A331101453557202109017383";
String method = "POST";
String interfaceName = "5crv7i4727abLCv0";
String secret = refreshTokenService.refreshToken(appKey, appSecret, govRequestTokenUrl, govRefreshTokenUrl, method);
log.info("secret :{}", secret);
String sign = MD5.create().digestHex(appKey + secret + timestamp);
@@ -374,7 +373,6 @@ public class AppIrsManage {
String appSecret = driAppSecret;
String appKey = driAppKey;
String method = HttpMethod.POST.name();
String interfaceName = driInterfaceName;
String secret = refreshTokenService.refreshToken(appKey, appSecret, govRequestTokenUrl, govRefreshTokenUrl, method);
log.info("secret : {}", secret);
String sign = MD5.create().digestHex(appKey + secret + timestamp);


+ 23
- 23
hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/IrsProjectManage.java Bestand weergeven

@@ -18,6 +18,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -37,6 +38,7 @@ public class IrsProjectManage {

/**
* IRS档案 项目列表
*
* @param req
* @return
*/
@@ -44,39 +46,37 @@ public class IrsProjectManage {
Page<Project> page = req.page();
UserInfoDetails user = LoginUserUtil.loginUserDetail();
LambdaQueryWrapper<Project> wrapper = Wrappers.lambdaQuery(Project.class)
.eq(StringUtils.isNotBlank(req.getAreaCode()),Project::getAreaCode,req.getAreaCode())
.eq(StringUtils.isNotBlank(req.getRegionCode()),Project::getAreaCode,req.getRegionCode())
.eq(StringUtils.isNotBlank(req.getProjectType()),Project::getProjectType,req.getProjectType())
.eq(Objects.nonNull(req.getStatus()),Project::getStatus,req.getStatus())
.eq(Objects.nonNull(req.getStage()),Project::getStage,req.getStage())
.ge(Objects.nonNull(req.getApproveAmountMin()),Project::getApprovalAmount,req.getApproveAmountMin())
.le(Objects.nonNull(req.getApproveAmountMax()),Project::getApprovalAmount,req.getApproveAmountMax())
.eq(Objects.nonNull(req.getProjectYear()),Project::getProjectYear,req.getProjectYear())
.ge(Objects.nonNull(req.getCreateOnMin()),Project::getCreateOn,req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()),Project::getCreateOn,req.getCreateOnMax())
.like(StringUtils.isNotBlank(req.getProjectName()),Project::getProjectName,req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrgName()),Project::getBuildOrgName,req.getBuildOrgName())
.eq(StringUtils.isNotBlank(req.getProjectType()), Project::getProjectType, req.getProjectType())
.eq(Objects.nonNull(req.getStatus()), Project::getStatus, req.getStatus())
.eq(Objects.nonNull(req.getStage()), Project::getStage, req.getStage())
.ge(Objects.nonNull(req.getApproveAmountMin()), Project::getApprovalAmount, req.getApproveAmountMin())
.le(Objects.nonNull(req.getApproveAmountMax()), Project::getApprovalAmount, req.getApproveAmountMax())
.eq(Objects.nonNull(req.getProjectYear()), Project::getProjectYear, req.getProjectYear())
.ge(Objects.nonNull(req.getCreateOnMin()), Project::getCreateOn, req.getCreateOnMin())
.le(Objects.nonNull(req.getCreateOnMax()), Project::getCreateOn, req.getCreateOnMax())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName())
.like(StringUtils.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.gt(Project::getStatus, ProjectStatusEnum.UNDER_CONSTRUCTION.getCode())
.eq(Project::getNewest,Boolean.TRUE)
.eq(Project::getNewest, Boolean.TRUE)
.eq(Project::getIncludeApplication, CommonEnum.YES.getCode())
.orderByDesc(Project::getUpdateOn);
buildPermission(wrapper,user);
projectService.page(page,wrapper);
buildPermission(wrapper, user);
projectService.page(page, wrapper);

if(CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}
List<ProjectLibListItemVO> res = page.getRecords().stream().map(p -> BeanUtil.copyProperties(p,ProjectLibListItemVO.class)).collect(Collectors.toList());
return PageVo.of(res,page.getTotal());
List<ProjectLibListItemVO> res = page.getRecords().stream()
.map(p -> BeanUtil.copyProperties(p, ProjectLibListItemVO.class))
.collect(Collectors.toList());
return PageVo.of(res, page.getTotal());
}

private void buildPermission(LambdaQueryWrapper<Project> wrapper, UserInfoDetails user) {
if(user.getSuperAdmin()){
if (user.getSuperAdmin() || user.getRegionAdmin()) {
log.info("超管 都可看 项目档案列表");
}else if(user.getRegionAdmin()){
wrapper.eq(Project::getAreaCode,user.getRegionCode());
}else{
wrapper.eq(Project::getBuildOrgCode,user.getEmpPosUnitCode());
} else {
wrapper.eq(Project::getBuildOrgCode, user.getMhUnitIdStr());
}
}
}

+ 3
- 3
hz-pm-api/src/main/java/com/hz/pm/api/leave/entity/po/LeaveCreateReq.java Bestand weergeven

@@ -62,10 +62,10 @@ public class LeaveCreateReq {
if (!this.getStartTime().isBefore(this.getEndTime())) {
throw new BizException("无效的请假时间");
}
if (leaveTypeEnum.equals(LeaveTypeEnum.FIXED_TERM)) {
if (this.getFixedType() == null || this.getFixedType().isEmpty()) {
if (leaveTypeEnum.equals(LeaveTypeEnum.FIXED_TERM)
&& (this.getFixedType() == null || this.getFixedType().isEmpty())) {
throw new BizException("固定时段不能为空");
}
}
}
}


+ 7
- 7
hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingCallOrMsgHelper.java Bestand weergeven

@@ -20,7 +20,7 @@ import com.hz.pm.api.staging.service.INdWorkNoticeStagingService;
import com.hz.pm.api.sys.model.entity.Notify;
import com.hz.pm.api.sys.service.INotifyService;
import com.hz.pm.api.todocenter.bean.entity.WorkNoticeInfo;
import com.hz.pm.api.user.entity.UserInfo;
import com.hz.pm.api.user.model.entity.UserInfo;
import com.hz.pm.api.user.service.IUserInfoService;
import com.ningdatech.yxt.model.cmd.SendSmsCmd.SendSmsContext;
import com.ningdatech.yxt.model.cmd.SubmitTaskCallCmd.SubmitTaskCallContext;
@@ -48,7 +48,7 @@ import java.util.stream.Collectors;
public class MeetingCallOrMsgHelper {

private final IUserInfoService userInfoService;
private final YxtCallOrSmsHelper yxtCallOrSmsHelper;
private final YxtClientHelper yxtClientHelper;
private final INdWorkNoticeStagingService workNoticeStagingService;
private final IDingEmployeeInfoService dingEmployeeInfoService;
private final IDingOrganizationService dingOrganizationService;
@@ -102,7 +102,7 @@ public class MeetingCallOrMsgHelper {
SendSmsContext yxtContent = new SendSmsContext();
yxtContent.setContent(msgContent);
yxtContent.setReceiveNumber(info.getMobile());
yxtCallOrSmsHelper.sendSms(yxtContent);
yxtClientHelper.sendSms(yxtContent);
// 发送工作通知
if (info.getAccountId() != null) {
WorkNoticeInfo swn = getSendWorkNoticeInfo(info.getAccountId());
@@ -148,7 +148,7 @@ public class MeetingCallOrMsgHelper {
}
});
notifyService.saveBatch(notifies);
yxtCallOrSmsHelper.sendSms(yxtContents);
yxtClientHelper.sendSms(yxtContents);
workNoticeStagingService.addByWorkNotice(workingNotices, MsgTypeEnum.EXPERT_REVIEW);
}

@@ -164,7 +164,7 @@ public class MeetingCallOrMsgHelper {
context.setContent(content);
return context;
}).collect(Collectors.toList());
yxtCallOrSmsHelper.sendSms(contexts);
yxtClientHelper.sendSms(contexts);
}

/**
@@ -184,7 +184,7 @@ public class MeetingCallOrMsgHelper {
context.setReceiveNumber(w.getMobile());
return context;
});
String submitKey = yxtCallOrSmsHelper.submitCallTask(callContexts);
String submitKey = yxtClientHelper.submitCallTask(callContexts);
experts.forEach(w -> w.setSubmitKey(submitKey));
}

@@ -200,7 +200,7 @@ public class MeetingCallOrMsgHelper {
SendSmsContext yxtContent = new SendSmsContext();
yxtContent.setContent(msgContent);
yxtContent.setReceiveNumber(info.getMobile());
yxtCallOrSmsHelper.sendSms(yxtContent);
yxtClientHelper.sendSms(yxtContent);
// 发送工作通知
if (info.getAccountId() != null) {
WorkNoticeInfo swn = getSendWorkNoticeInfo(info.getAccountId());


+ 0
- 66
hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingDataScopeHelper.java Bestand weergeven

@@ -1,66 +0,0 @@
package com.hz.pm.api.meeting.helper;

import com.ningdatech.basic.util.CollUtils;
import com.hz.pm.api.common.helper.RegionCacheHelper;
import com.hz.pm.api.common.model.entity.ViewRegionDTO;
import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;

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

/**
* <p>
* MeetingDataScopeHelper
* </p>
*
* @author WendyYang
* @since 2023/4/27
**/
@Component
@AllArgsConstructor
public class MeetingDataScopeHelper {

private final RegionCacheHelper regionCacheHelper;

private static RoleEnum getRolePriorityMax() {
List<Role> roleList = LoginUserUtil.loginUserDetail().getUserRoleList();
List<String> roleCodeList = CollUtils.fieldList(roleList, Role::getCode);
if (roleCodeList.contains(RoleEnum.SUPER_ADMIN.name())) {
return RoleEnum.SUPER_ADMIN;
}
if (roleCodeList.contains(RoleEnum.REGION_MANAGER.name())) {
return RoleEnum.REGION_MANAGER;
}
return RoleEnum.EXPERT_ADMIN;
}

public ViewRegionDTO meetingListViewRegions() {
RoleEnum role = getRolePriorityMax();
UserInfoDetails user = LoginUserUtil.loginUserDetail();
String regionCode = user.getRegionCode();
Integer regionLevel = user.getRegionLevel();
Collection<String> regions;
switch (role) {
case SUPER_ADMIN:
regions = null;
break;
case REGION_MANAGER:
regions = regionCacheHelper.listChildRegionCodeList(regionCode, regionLevel);
break;
case EXPERT_ADMIN:
regions = Collections.singletonList(regionCode);
break;
default:
regions = Collections.emptyList();
break;
}
return new ViewRegionDTO(regions, regionLevel);
}

}

hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/YxtCallOrSmsHelper.java → hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/YxtClientHelper.java Bestand weergeven

@@ -24,7 +24,7 @@ import static com.ningdatech.yxt.model.cmd.SubmitTaskCallCmd.of;
*/
@Component
@AllArgsConstructor
public class YxtCallOrSmsHelper {
public class YxtClientHelper {

private final YxtClient yxtClient;


+ 2
- 6
hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java Bestand weergeven

@@ -30,7 +30,6 @@ import com.hz.pm.api.meeting.entity.req.*;
import com.hz.pm.api.meeting.entity.vo.*;
import com.hz.pm.api.meeting.helper.ExpertInviteHelper;
import com.hz.pm.api.meeting.helper.MeetingCallOrMsgHelper;
import com.hz.pm.api.meeting.helper.MeetingDataScopeHelper;
import com.hz.pm.api.meeting.helper.MeetingManageHelper;
import com.hz.pm.api.meeting.service.*;
import com.hz.pm.api.meeting.task.ExpertRandomInviteTask;
@@ -89,13 +88,10 @@ public class MeetingManage {
private final DistributedLock distributedLock;
private final IProjectService projectService;
private final IMeetingInnerProjectService meetingInnerProjectService;
private final IMeetingOuterProjectService meetingOuterProjectService;
private final IBelongOrgService belongOrgService;
private final IDingOrganizationService dingOrganizationService;
private final IExpertReviewService expertReviewService;
private final ExpertInviteHelper expertInviteHelper;
private final MeetingCallOrMsgHelper meetingCallOrMsgHelper;
private final MeetingDataScopeHelper meetingDataScopeHelper;
private final IMeetingExpertJudgeService expertJudgeService;
private final IMeetingExpertJudgeService meetingExpertJudgeService;

@@ -130,8 +126,8 @@ public class MeetingManage {
// 保存会议基本信息
Meeting meeting = BeanUtil.copyProperties(meetingBasic, Meeting.class);
meeting.setStatus(MeetingStatusEnum.NORMAL.getCode());
meeting.setHoldOrg(userDetail.getOrganizationName());
meeting.setHoldOrgCode(userDetail.getOrganizationCode());
meeting.setHoldOrg(String.valueOf(userDetail.getMhUnitId()));
meeting.setHoldOrgCode(userDetail.getMhUnitName());
meeting.setCreator(userDetail.getUsername());
meeting.setInviteStatus(Boolean.FALSE);
meeting.setConfirmedRoster(Boolean.FALSE);


+ 7
- 2
hz-pm-api/src/main/java/com/hz/pm/api/organization/controller/ProcDefController.java Bestand weergeven

@@ -1,5 +1,7 @@
package com.hz.pm.api.organization.controller;

import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.log.annotation.WebLog;
import com.hz.pm.api.organization.manage.ProcDefManage;
@@ -50,8 +52,11 @@ public class ProcDefController {
@ApiOperation(value = "单位流程配置保存", notes = "单位流程配置保存")
@PostMapping("/save")
@WebLog("单位流程配置保存")
public String save(@Validated @RequestBody WflowOrgProcdefDto wflowOrgProcdefDto) {
return orgProcessModelService.saveProcessLs(wflowOrgProcdefDto);
public String save(@Validated @RequestBody WflowOrgProcdefDto req) {
if (StrUtils.isBlank(req.getOrgCode())) {
req.setOrgCode(LoginUserUtil.loginUserDetail().getMhUnitIdStr());
}
return orgProcessModelService.saveProcessLs(req);
}

@ApiOperation(value = "单位流程配置启用", notes = "单位流程配置启用")


+ 5
- 4
hz-pm-api/src/main/java/com/hz/pm/api/performance/helper/impl/TemplateDetailBuildHelperImpl.java Bestand weergeven

@@ -73,7 +73,8 @@ public class TemplateDetailBuildHelperImpl implements TemplateDetailBuildHelper
.eq(PerformanceAppraisalScoreInfo::getAppraisalProjectCode,projectCode)
.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.RE_APPRAISAL.getCode()));
if (CollUtil.isNotEmpty(reAppraisalScoreInfo)) {
Map<String, List<PerformanceAppraisalScoreInfo>> reAppScoreInfoMap = reAppraisalScoreInfo.stream().collect(Collectors.groupingBy(PerformanceAppraisalScoreInfo::getAppraisalEmployeeName));
Map<String, List<PerformanceAppraisalScoreInfo>> reAppScoreInfoMap = reAppraisalScoreInfo.stream()
.collect(Collectors.groupingBy(PerformanceAppraisalScoreInfo::getAppraisalUserName));
HashMap<String, BigDecimal> scoreMap = MapUtil.newHashMap();
for (String name : reAppScoreInfoMap.keySet()) {
List<PerformanceAppraisalScoreInfo> scoreInfos = reAppScoreInfoMap.get(name);
@@ -97,13 +98,13 @@ public class TemplateDetailBuildHelperImpl implements TemplateDetailBuildHelper
.eq(PerformanceAppraisalScoreInfo::getAppraisalProjectCode,projectCode)
.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.EXPERT_VERIFY.getCode()));
if (CollUtil.isNotEmpty(verifyScoreInfo)) {
Map<String, List<PerformanceAppraisalScoreInfo>> verifyScoreInfoMap = verifyScoreInfo.stream().collect(Collectors.groupingBy(PerformanceAppraisalScoreInfo::getAppraisalEmployeeName));
Map<String, List<PerformanceAppraisalScoreInfo>> verifyScoreInfoMap = verifyScoreInfo.stream()
.collect(Collectors.groupingBy(PerformanceAppraisalScoreInfo::getAppraisalUserName));
HashMap<String, BigDecimal> scoreMap = MapUtil.newHashMap();
for (String name : verifyScoreInfoMap.keySet()) {
List<PerformanceAppraisalScoreInfo> scoreInfos = verifyScoreInfoMap.get(name);
BigDecimal totalScore = scoreInfos.stream().map(PerformanceAppraisalScoreInfo::getAppraisalScore)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
scoreMap.put(name, totalScore);
}
detailThirdVo.setVerifyTotalScoreInfo(scoreMap);


+ 70
- 82
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/AppAppraisalManage.java Bestand weergeven

@@ -1,47 +1,49 @@
package com.hz.pm.api.performance.manage;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import com.hz.pm.api.performance.enumration.AppIndexTypeEnum;
import com.hz.pm.api.performance.model.dto.AppAppraisalInfoDTO;
import com.hz.pm.api.performance.model.vo.*;
import com.hz.pm.api.projectlib.model.entity.ProjectApplication;
import com.hz.pm.api.projectlib.service.IProjectApplicationService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.StrPool;
import com.hz.pm.api.performance.constant.ProjectBizConst;
import com.hz.pm.api.performance.enumration.AppIndexTypeEnum;
import com.hz.pm.api.performance.model.dto.AppAppraisalInfoDTO;
import com.hz.pm.api.performance.model.dto.ProjectAppraisalDTO;
import com.hz.pm.api.performance.model.entity.*;
import com.hz.pm.api.performance.model.req.PerformanceAppraisalListReq;
import com.hz.pm.api.performance.model.vo.*;
import com.hz.pm.api.performance.service.*;
import com.hz.pm.api.projectlib.model.entity.ProjectApplication;
import com.hz.pm.api.projectlib.service.IProjectApplicationService;
import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.sys.service.IRoleService;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
* AppAppraisalManage
* @return
*
* @author CMM
* @return
* @since 2023/08/10 8:55
*/
@Component
@@ -56,8 +58,10 @@ public class AppAppraisalManage {
private final IPerformanceAppraisalApplicationService performanceAppraisalApplicationService;
private final IPerformanceAppraisalAppIndicatorService performanceAppraisalAppIndicatorService;
private final IProjectCoreBusinessIndicatorsService projectCoreBusinessIndicatorsService;

/**
* 应用评价-评价计划列表
*
* @param req
* @return
*/
@@ -68,31 +72,31 @@ public class AppAppraisalManage {
List<Long> roleIdList = userRoleList.stream().map(Role::getId).collect(Collectors.toList());
Role role = roleService.getOne(Wrappers.lambdaQuery(Role.class)
.eq(Role::getName, ProjectBizConst.REAPPRAISAL_ROLE));
if (Objects.isNull(role)){
if (Objects.isNull(role)) {
throw new BizException("登录用户没有复评员角色!");
}

// 登录用户不是复评员,不能查看复评计划列表
if (!roleIdList.contains(role.getId())){
if (!roleIdList.contains(role.getId())) {
return PageVo.empty();
}

// 获取所有已添加到评价计划中的应用信息
List<PerformanceAppraisalApplication> paas = performanceAppraisalApplicationService.list();
// 没有包含应用的评价计划
if (CollUtil.isEmpty(paas)){
if (CollUtil.isEmpty(paas)) {
return PageVo.empty();
}
Set<Long> paIds = paas.stream().map(PerformanceAppraisalApplication::getAppraisalId).collect(Collectors.toSet());
Page<PerformanceAppraisal> page = req.page();
LambdaQueryWrapper<PerformanceAppraisal> wrapper = Wrappers.lambdaQuery(PerformanceAppraisal.class)
.in(PerformanceAppraisal::getId,paIds)
.in(PerformanceAppraisal::getId, paIds)
.orderByDesc(PerformanceAppraisal::getUpdateOn);
performanceAppraisalService.page(page,wrapper);
performanceAppraisalService.page(page, wrapper);
List<PerformanceAppraisalVO> res = page.getRecords().stream()
.map(p -> BeanUtil.copyProperties(p, PerformanceAppraisalVO.class))
.collect(Collectors.toList());
return PageVo.of(res,page.getTotal());
return PageVo.of(res, page.getTotal());
}


@@ -108,7 +112,7 @@ public class AppAppraisalManage {
.eq(PerformanceAppraisalApplication::getAppraisalId, planId)
.eq(PerformanceAppraisalApplication::getIsCompleteAppraisal, Boolean.FALSE));
// 没有当前用户待评价的应用信息
if (CollUtil.isEmpty(paas)){
if (CollUtil.isEmpty(paas)) {
return PageVo.empty();
}
List<Long> ids = paas.stream().map(PerformanceAppraisalApplication::getApplicationId).collect(Collectors.toList());
@@ -126,36 +130,36 @@ public class AppAppraisalManage {
}
appIds = ids;
// 没有当前用户待评价的应用信息
if(CollUtil.isEmpty(appIds)){
if (CollUtil.isEmpty(appIds)) {
return PageVo.empty();
}
Page<ProjectApplication> page = req.page();
LambdaQueryWrapper<ProjectApplication> wrapper = Wrappers.lambdaQuery(ProjectApplication.class)
.in(ProjectApplication::getId, appIds)
.like(StringUtils.isNotBlank(req.getApplicationName()),ProjectApplication::getApplicationName,req.getApplicationName());
projectApplicationService.page(page,wrapper);
.like(StringUtils.isNotBlank(req.getApplicationName()), ProjectApplication::getApplicationName, req.getApplicationName());
projectApplicationService.page(page, wrapper);

if(CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}

List<PerformanceAppraisalAppVO> res = page.getRecords().stream()
.map(p -> {
PerformanceAppraisalAppVO vo = BeanUtil.copyProperties(p, PerformanceAppraisalAppVO.class);
vo.setCanAppraisal(checkCanAppraisal(employeeCode,p.getId(),planId));
vo.setCanAppraisal(checkCanAppraisal(employeeCode, p.getId(), planId));
vo.setApplicationName(StringUtils.isNotBlank(p.getApplicationName()) ? p.getApplicationName() : p.getRelatedExistsApplication());
vo.setAppraisalId(planId);
return vo;
})
.collect(Collectors.toList());

return PageVo.of(res,page.getTotal());
return PageVo.of(res, page.getTotal());
}

public PageVo<PerformanceAppraisalAppVO> evaluatedList(Long planId, PerformanceAppraisalListReq req) {

UserInfoDetails user = LoginUserUtil.loginUserDetail();
String employeeCode = user.getEmployeeCode();
String employeeCode = user.getUserIdStr();

PerformanceAppraisal plan = performanceAppraisalService.getById(planId);
VUtils.isTrue(Objects.isNull(plan)).throwMessage("该评价计划不存在!");
@@ -164,7 +168,7 @@ public class AppAppraisalManage {
List<PerformanceAppraisalApplication> paas = performanceAppraisalApplicationService.list(Wrappers.lambdaQuery(PerformanceAppraisalApplication.class)
.eq(PerformanceAppraisalApplication::getAppraisalId, planId)
.eq(PerformanceAppraisalApplication::getIsCompleteAppraisal, Boolean.TRUE));
if (CollUtil.isEmpty(paas)){
if (CollUtil.isEmpty(paas)) {
return PageVo.empty();
}
// 从绩效评价打分信息表中获取上述绩效评价计划应用的打分信息
@@ -173,39 +177,38 @@ public class AppAppraisalManage {
List<Long> appIds = Lists.newArrayList();
if (CollUtil.isNotEmpty(appraisalScoreInfos)) {
// 筛选出当前登录用户已进行打分的应用信息
List<Long> scoredAppIds = appraisalScoreInfos.stream()
appIds = appraisalScoreInfos.stream()
.filter(a -> employeeCode.equals(a.getAppraisalEmployeeCode()))
.map(PerformanceAppraisalAppScoreInfo::getApplicationId)
.collect(Collectors.toList());
appIds = scoredAppIds;
}

// 没有当前用户已评价的应用信息
if(CollUtil.isEmpty(appIds)){
if (CollUtil.isEmpty(appIds)) {
return PageVo.empty();
}

Page<ProjectApplication> page = req.page();
LambdaQueryWrapper<ProjectApplication> wrapper = Wrappers.lambdaQuery(ProjectApplication.class)
.in(ProjectApplication::getId, appIds)
.like(StringUtils.isNotBlank(req.getApplicationName()),ProjectApplication::getApplicationName,req.getApplicationName());
projectApplicationService.page(page,wrapper);
.like(StringUtils.isNotBlank(req.getApplicationName()), ProjectApplication::getApplicationName, req.getApplicationName());
projectApplicationService.page(page, wrapper);

if(CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}

List<PerformanceAppraisalAppVO> res = page.getRecords().stream()
.map(p -> {
PerformanceAppraisalAppVO vo = BeanUtil.copyProperties(p, PerformanceAppraisalAppVO.class);
vo.setCanAppraisal(checkCanAppraisal(employeeCode,p.getId(),planId));
vo.setCanAppraisal(checkCanAppraisal(employeeCode, p.getId(), planId));
vo.setApplicationName(StringUtils.isNotBlank(p.getApplicationName()) ? p.getApplicationName() : p.getRelatedExistsApplication());
vo.setAppraisalId(planId);
return vo;
})
.collect(Collectors.toList());

return PageVo.of(res,page.getTotal());
return PageVo.of(res, page.getTotal());
}

/**
@@ -216,14 +219,14 @@ public class AppAppraisalManage {
* @param appraisalId
* @return
*/
private Boolean checkCanAppraisal(String employeeCode, Long appId, Long appraisalId) {
private Boolean checkCanAppraisal(String employeeCode, Long appId, Long appraisalId) {
// 从绩效评价应用打分信息表中查询打分人员为当前登录复评用户的打分信息
// 如果没有相关的打分信息,说明是当前登录复评用户是首次评价
List<PerformanceAppraisalAppScoreInfo> scoreInfos = performanceAppraisalAppScoreInfoService.list(Wrappers.lambdaQuery(PerformanceAppraisalAppScoreInfo.class)
.eq(PerformanceAppraisalAppScoreInfo::getApplicationId,appId)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId,appraisalId)
.eq(PerformanceAppraisalAppScoreInfo::getApplicationId, appId)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId, appraisalId)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalEmployeeCode, employeeCode));
if (CollUtil.isEmpty(scoreInfos)){
if (CollUtil.isEmpty(scoreInfos)) {
return true;
}
return Boolean.FALSE;
@@ -233,28 +236,26 @@ public class AppAppraisalManage {
public AppAppraisalIndexDetailVO detail(Long planId, Long appId) {

ProjectApplication projectApplication = projectApplicationService.getById(appId);
VUtils.isTrue(Objects.isNull(projectApplication)).throwMessage("应用不存在!");
Assert.notNull(projectApplication, "应用不存在!");

AppAppraisalIndexDetailVO resVo = new AppAppraisalIndexDetailVO();
if (StringUtils.isNotBlank(projectApplication.getApplicationName())) {
resVo.setApplicationName(projectApplication.getApplicationName());
}else {
} else {
resVo.setApplicationName(projectApplication.getRelatedExistsApplication());
}
if (Objects.nonNull(projectApplication)){
resVo.setBuildOrgName(projectApplication.getBuildOrgName());
// todo 应用状态 需通过appCode通过IRS接口获取,这里暂时写死 已验收
resVo.setApplicationStatus("已验收");
}
resVo.setBuildOrgName(projectApplication.getBuildOrgName());
// todo 应用状态 需通过appCode通过IRS接口获取,这里暂时写死 已验收
resVo.setApplicationStatus("已验收");
// 获取指标配置的应用指标信息
// 通用指标
List<PerformanceAppraisalAppIndicator> commonIndexList = performanceAppraisalAppIndicatorService.list(Wrappers.lambdaQuery(PerformanceAppraisalAppIndicator.class)
.eq(PerformanceAppraisalAppIndicator::getIndexType, AppIndexTypeEnum.COMMON.getCode())
.eq(PerformanceAppraisalAppIndicator::getIsDisplay,Boolean.TRUE)
.orderBy(Boolean.TRUE,Boolean.TRUE,PerformanceAppraisalAppIndicator::getSort));
.eq(PerformanceAppraisalAppIndicator::getIsDisplay, Boolean.TRUE)
.orderBy(Boolean.TRUE, Boolean.TRUE, PerformanceAppraisalAppIndicator::getSort));
// 获取当前应用通用指标的的打分信息
Map<Long, PerformanceAppraisalAppScoreInfo> commonScoreInfoMap = performanceAppraisalAppScoreInfoService.list(Wrappers.lambdaQuery(PerformanceAppraisalAppScoreInfo.class)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId,planId)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId, planId)
.eq(PerformanceAppraisalAppScoreInfo::getApplicationId, appId)
.eq(PerformanceAppraisalAppScoreInfo::getIndexType, AppIndexTypeEnum.COMMON.getCode()))
.stream().collect(Collectors.toMap(PerformanceAppraisalAppScoreInfo::getIndexId, p -> p));
@@ -274,11 +275,11 @@ public class AppAppraisalManage {
// 辅助指标
List<PerformanceAppraisalAppIndicator> auxIndexList = performanceAppraisalAppIndicatorService.list(Wrappers.lambdaQuery(PerformanceAppraisalAppIndicator.class)
.eq(PerformanceAppraisalAppIndicator::getIndexType, AppIndexTypeEnum.AUX.getCode())
.eq(PerformanceAppraisalAppIndicator::getIsDisplay,Boolean.TRUE)
.orderBy(Boolean.TRUE,Boolean.TRUE,PerformanceAppraisalAppIndicator::getSort));
.eq(PerformanceAppraisalAppIndicator::getIsDisplay, Boolean.TRUE)
.orderBy(Boolean.TRUE, Boolean.TRUE, PerformanceAppraisalAppIndicator::getSort));
// 获取当前应用辅助指标的的打分信息
Map<Long, PerformanceAppraisalAppScoreInfo> auxScoreInfoMap = performanceAppraisalAppScoreInfoService.list(Wrappers.lambdaQuery(PerformanceAppraisalAppScoreInfo.class)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId,planId)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId, planId)
.eq(PerformanceAppraisalAppScoreInfo::getApplicationId, appId)
.eq(PerformanceAppraisalAppScoreInfo::getIndexType, AppIndexTypeEnum.AUX.getCode()))
.stream().collect(Collectors.toMap(PerformanceAppraisalAppScoreInfo::getIndexId, p -> p));
@@ -299,7 +300,7 @@ public class AppAppraisalManage {
.eq(ProjectCoreBusinessIndicators::getApplicationId, appId));
// 获取当前应用业务指标的的打分信息
Map<Long, PerformanceAppraisalAppScoreInfo> businessScoreInfoMap = performanceAppraisalAppScoreInfoService.list(Wrappers.lambdaQuery(PerformanceAppraisalAppScoreInfo.class)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId,planId)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId, planId)
.eq(PerformanceAppraisalAppScoreInfo::getApplicationId, appId)
.eq(PerformanceAppraisalAppScoreInfo::getIndexType, AppIndexTypeEnum.BUSINESS.getCode()))
.stream().collect(Collectors.toMap(PerformanceAppraisalAppScoreInfo::getIndexId, p -> p));
@@ -333,7 +334,7 @@ public class AppAppraisalManage {
.eq(PerformanceAppraisalApplication::getApplicationId, applicationId));

List<Long> indexIds = appAppraisalInfoList.stream().filter(a -> AppIndexTypeEnum.COMMON.getCode().equals(a.getIndexType()) ||
AppIndexTypeEnum.AUX.getCode().equals(a.getIndexType()))
AppIndexTypeEnum.AUX.getCode().equals(a.getIndexType()))
.map(AppAppraisalInfoDTO::getIndexId)
.collect(Collectors.toList());
List<Long> businessIndexIds = appAppraisalInfoList.stream()
@@ -366,18 +367,18 @@ public class AppAppraisalManage {
Map<Long, ProjectCoreBusinessIndicators> finalBusinessIndexMap = businessIndexMap;
List<PerformanceAppraisalAppScoreInfo> scoreInfos = appAppraisalInfoList.stream().map(a -> {
if (AppIndexTypeEnum.COMMON.getCode().equals(a.getIndexType()) ||
AppIndexTypeEnum.AUX.getCode().equals(a.getIndexType())){
AppIndexTypeEnum.AUX.getCode().equals(a.getIndexType())) {
PerformanceAppraisalAppIndicator appIndicator = finalIndexMap.get(a.getIndexId());
BigDecimal score = a.getScore();
BigDecimal indexScore = appIndicator.getIndexScore();
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0){
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0) {
throw new BizException("评价得分必须大于等于0且小于等于指标分值!");
}
} else if (AppIndexTypeEnum.BUSINESS.getCode().equals(a.getIndexType())) {
ProjectCoreBusinessIndicators coreBusinessIndicators = finalBusinessIndexMap.get(a.getIndexId());
BigDecimal score = a.getScore();
BigDecimal indexScore = coreBusinessIndicators.getScore();
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0){
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0) {
throw new BizException("评价得分必须大于等于0且小于等于指标分值!");
}
}
@@ -396,7 +397,7 @@ public class AppAppraisalManage {
scoreInfo.setUpdateBy(username);
return scoreInfo;
}).collect(Collectors.toList());
if (performanceAppraisalAppScoreInfoService.saveBatch(scoreInfos)){
if (performanceAppraisalAppScoreInfoService.saveBatch(scoreInfos)) {
// 计算评价总分并保存
BigDecimal appraisalTotalScore = appAppraisalInfoList.stream()
.map(AppAppraisalInfoDTO::getScore)
@@ -412,18 +413,5 @@ public class AppAppraisalManage {
}
return "提交失败";
}
private void judgeCompleteAppraisal(PerformanceAppraisalProjectGroup group, PerformanceAppraisalApplication appraisalApplication) {
// 获取该评价应用的复评打分信息
List<PerformanceAppraisalAppScoreInfo> scoreInfos = performanceAppraisalAppScoreInfoService.list(Wrappers.lambdaQuery(PerformanceAppraisalAppScoreInfo.class)
.eq(PerformanceAppraisalAppScoreInfo::getAppraisalId, group.getAppraisalId())
.eq(PerformanceAppraisalAppScoreInfo::getApplicationId, appraisalApplication.getApplicationId()));
String reAppraisalUsers = group.getReAppraisalUsers();
List<String> users = scoreInfos.stream().map(PerformanceAppraisalAppScoreInfo::getAppraisalEmployeeCode).collect(Collectors.toList());
if (CollUtil.isNotEmpty(users)){
String join = String.join(StrPool.COMMA, users);
if (join.equals(reAppraisalUsers)) {
appraisalApplication.setIsCompleteAppraisal(Boolean.TRUE);
}
}
}

}

+ 90
- 84
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/IndicatorConfigManage.java Bestand weergeven

@@ -3,16 +3,15 @@ package com.hz.pm.api.performance.manage;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.StrPool;
import com.hz.pm.api.common.enumeration.CommonEnum;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.model.constant.CommonConst;
import com.hz.pm.api.common.enumeration.CommonEnum;
import com.hz.pm.api.common.util.BizUtils;
import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.performance.enumration.PerformanceTemplateTypeEnum;
import com.hz.pm.api.performance.helper.TemplateDetailBuildHelper;
import com.hz.pm.api.performance.model.dto.PerformanceIndicatorAppIndexSaveDTO;
@@ -34,6 +33,10 @@ import com.hz.pm.api.performance.service.IPerformanceIndicatorProjectTemplateDet
import com.hz.pm.api.performance.service.IPerformanceIndicatorProjectTemplateService;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.StrPool;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -43,7 +46,6 @@ import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -67,18 +69,18 @@ public class IndicatorConfigManage {

/**
* 模板列表
*
* @param req
* @return
*/
public PageVo<ProjectIndexTemplateVO> projectIndexTemplateList(PerformanceAppraisalListReq req) {
Page<PerformanceIndicatorProjectTemplate> page = req.page();
LambdaQueryWrapper<PerformanceIndicatorProjectTemplate> wrapper = Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplate.class)
.like(StringUtils.isNotBlank(req.getTemplateName()), PerformanceIndicatorProjectTemplate::getName, req.getTemplateName())
.eq(StringUtils.isNotBlank(req.getRegionCode()), PerformanceIndicatorProjectTemplate::getRegionCode,req.getRegionCode())
.like(StrUtils.isNotBlank(req.getTemplateName()), PerformanceIndicatorProjectTemplate::getName, req.getTemplateName())
.orderByDesc(PerformanceIndicatorProjectTemplate::getCreateOn);
indicatorProjectTemplateService.page(page,wrapper);
indicatorProjectTemplateService.page(page, wrapper);

if(CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}

@@ -86,40 +88,40 @@ public class IndicatorConfigManage {
.map(p -> BeanUtil.copyProperties(p, ProjectIndexTemplateVO.class))
.collect(Collectors.toList());

return PageVo.of(res,page.getTotal());
return PageVo.of(res, page.getTotal());
}

/**
* 查询项目模板详情
* @param id
* @return
*
* @param id \
* @return \
*/
public ProjectIndexTemplateVO projectDetail(Long id) {
PerformanceIndicatorProjectTemplate template = indicatorProjectTemplateService.getById(id);
if(Objects.isNull(template)){
if (Objects.isNull(template)) {
return null;
}
ProjectIndexTemplateVO vo = BeanUtil.copyProperties(template,
ProjectIndexTemplateVO.class);
String projectTagIds = template.getProjectTagIds();
if (StringUtils.isNotBlank(projectTagIds)){
List<Long> proTagIdList = Arrays.stream(projectTagIds.split(StrPool.COMMA)).map(Long::valueOf).collect(Collectors.toList());
vo.setProjectTagIds(proTagIdList);
if (StringUtils.isNotBlank(projectTagIds)) {
vo.setProjectTagIds(BizUtils.splitToLong(projectTagIds));
}
// 获取模版绩效指标详情
List<PerformanceIndicatorProjectTemplateDetail> templateDetails = indicatorProjectTemplateDetailService.list(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, id)
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional,Boolean.FALSE));
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional, Boolean.FALSE));
// 获取模版附加绩效指标详情
List<PerformanceIndicatorProjectTemplateDetail> additionalTemplateDetails = indicatorProjectTemplateDetailService.list(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, id)
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional,Boolean.TRUE));
if(CollUtil.isNotEmpty(templateDetails)){
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional, Boolean.TRUE));
if (CollUtil.isNotEmpty(templateDetails)) {
List<ProjectTemplateDetailVO> templateDetailVos = templateDetailBuildHelper.buildTemplateDetail(templateDetails, null, null);
vo.setTemplateDetails(templateDetailVos);
}

if (CollUtil.isNotEmpty(additionalTemplateDetails)){
if (CollUtil.isNotEmpty(additionalTemplateDetails)) {
List<ProjectTemplateDetailVO> additionalTemplateDetailVos = templateDetailBuildHelper.buildTemplateDetail(additionalTemplateDetails, null, null);
vo.setAdditionalIndexDetails(additionalTemplateDetailVos);
}
@@ -128,6 +130,7 @@ public class IndicatorConfigManage {

/**
* 项目指标 模板保存
*
* @param dto
* @return
*/
@@ -138,35 +141,35 @@ public class IndicatorConfigManage {
List<Long> projectTagIds = dto.getProjectTagIds();
List<String> tagIdList = projectTagIds.stream().map(String::valueOf).collect(Collectors.toList());
template.setProjectTagIds(String.join(StrPool.COMMA, tagIdList));
if (Objects.isNull(dto.getStatus())){
if (Objects.isNull(dto.getStatus())) {
// 默认模版禁用
template.setStatus(0);
}
if(Objects.nonNull(dto.getId())){
if (Objects.nonNull(dto.getId())) {
PerformanceIndicatorProjectTemplate old = indicatorProjectTemplateService.getById(dto.getId());
VUtils.isTrue(Objects.isNull(old)).throwMessage("该模板不存在!");
Assert.notNull(old, "该模板不存在!");
template.setId(old.getId());
}else{
} else {
template.setId(null);
template.setCreateOn(LocalDateTime.now());
template.setCreateBy(user.getUsername());
}
template.setUpdateOn(LocalDateTime.now());
template.setUpdateBy(user.getUsername());
if(indicatorProjectTemplateService.saveOrUpdate(template)){
if (indicatorProjectTemplateService.saveOrUpdate(template)) {
//保存 模板指标的详情
if(CollUtil.isNotEmpty(dto.getTemplateDetails())){
if (CollUtil.isNotEmpty(dto.getTemplateDetails())) {
//先删除
indicatorProjectTemplateDetailService.remove(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId,dto.getId())
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional,Boolean.FALSE));
analysisTemplateDetails(dto.getTemplateDetails(),template.getId());
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, dto.getId())
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional, Boolean.FALSE));
analysisTemplateDetails(dto.getTemplateDetails(), template.getId());
//校检 所有3级指标(不包括附加指标) 总分是不是100
List<PerformanceIndicatorProjectTemplateDetail> indexList = indicatorProjectTemplateDetailService.list(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, template.getId())
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional,Boolean.FALSE)
.eq(PerformanceIndicatorProjectTemplateDetail::getType,PerformanceTemplateTypeEnum.THIRD_INDEX.getCode()));
if(CollUtil.isNotEmpty(indexList)){
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional, Boolean.FALSE)
.eq(PerformanceIndicatorProjectTemplateDetail::getType, PerformanceTemplateTypeEnum.THIRD_INDEX.getCode()));
if (CollUtil.isNotEmpty(indexList)) {
BigDecimal sum = indexList.stream()
.map(PerformanceIndicatorProjectTemplateDetail::getIndexScore)
.filter(Objects::nonNull)
@@ -176,11 +179,11 @@ public class IndicatorConfigManage {
}
}
// 保存 模版附加指标详情
if (CollUtil.isNotEmpty(dto.getAdditionalIndexDetails())){
if (CollUtil.isNotEmpty(dto.getAdditionalIndexDetails())) {
indicatorProjectTemplateDetailService.remove(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId,dto.getId())
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional,Boolean.TRUE));
analysisAdditionalTemplateDetails(dto.getAdditionalIndexDetails(),template.getId());
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, dto.getId())
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional, Boolean.TRUE));
analysisAdditionalTemplateDetails(dto.getAdditionalIndexDetails(), template.getId());
}
return BizConst.SAVE_SUCCESS;
}
@@ -189,37 +192,39 @@ public class IndicatorConfigManage {

/**
* 解析 项目考核指标
*
* @param templateDetails
* @return
*/
public void analysisTemplateDetails(
List<ProjectTemplateDetailDTO> templateDetails,Long templateId) {
if(CollUtil.isEmpty(templateDetails)){
List<ProjectTemplateDetailDTO> templateDetails, Long templateId) {
if (CollUtil.isEmpty(templateDetails)) {
return;
}
analysisTemplateDetailsInner(templateDetails,templateId,null);
analysisTemplateDetailsInner(templateDetails, templateId, null);
}

/**
* 解析 项目附加考核指标
*
* @param additionalTemplateDetails
* @return
*/
public void analysisAdditionalTemplateDetails(
List<ProjectTemplateDetailDTO> additionalTemplateDetails,Long templateId) {
if(CollUtil.isEmpty(additionalTemplateDetails)){
List<ProjectTemplateDetailDTO> additionalTemplateDetails, Long templateId) {
if (CollUtil.isEmpty(additionalTemplateDetails)) {
return;
}
analysisAdditionalTemplateDetailsInner(additionalTemplateDetails,templateId,null);
analysisAdditionalTemplateDetailsInner(additionalTemplateDetails, templateId, null);
}

public void analysisTemplateDetailsInner(List<ProjectTemplateDetailDTO> templateDetails,
Long templateId,Long parentId) {
if(CollUtil.isEmpty(templateDetails)){
Long templateId, Long parentId) {
if (CollUtil.isEmpty(templateDetails)) {
return;
}
UserInfoDetails user = LoginUserUtil.loginUserDetail();
for(ProjectTemplateDetailDTO detail : templateDetails){
for (ProjectTemplateDetailDTO detail : templateDetails) {
//计算阶段的
PerformanceIndicatorProjectTemplateDetail templateDetail = BeanUtil.copyProperties(detail, PerformanceIndicatorProjectTemplateDetail.class);
templateDetail.setCreateBy(user.getUsername());
@@ -233,19 +238,19 @@ public class IndicatorConfigManage {

indicatorProjectTemplateDetailService.save(templateDetail);

if(CollUtil.isNotEmpty(detail.getChildren())){
analysisTemplateDetailsInner(detail.getChildren(),templateId,templateDetail.getId());
if (CollUtil.isNotEmpty(detail.getChildren())) {
analysisTemplateDetailsInner(detail.getChildren(), templateId, templateDetail.getId());
}
}
}

public void analysisAdditionalTemplateDetailsInner(List<ProjectTemplateDetailDTO> templateDetails,
Long templateId,Long parentId) {
if(CollUtil.isEmpty(templateDetails)){
Long templateId, Long parentId) {
if (CollUtil.isEmpty(templateDetails)) {
return;
}
UserInfoDetails user = LoginUserUtil.loginUserDetail();
for(ProjectTemplateDetailDTO detail : templateDetails){
for (ProjectTemplateDetailDTO detail : templateDetails) {
//计算阶段的
PerformanceIndicatorProjectTemplateDetail templateDetail = BeanUtil.copyProperties(detail, PerformanceIndicatorProjectTemplateDetail.class);
templateDetail.setCreateBy(user.getUsername());
@@ -260,14 +265,15 @@ public class IndicatorConfigManage {

indicatorProjectTemplateDetailService.save(templateDetail);

if(CollUtil.isNotEmpty(detail.getChildren())){
analysisAdditionalTemplateDetailsInner(detail.getChildren(),templateId,templateDetail.getId());
if (CollUtil.isNotEmpty(detail.getChildren())) {
analysisAdditionalTemplateDetailsInner(detail.getChildren(), templateId, templateDetail.getId());
}
}
}

/**
* 装配 模板详情
*
* @param templateDetails
* @return
*/
@@ -310,11 +316,11 @@ public class IndicatorConfigManage {
}
return res;
}

/**
* 删除项目模板
*
*
* @param id
* @return
*/
@@ -328,8 +334,8 @@ public class IndicatorConfigManage {

if (indicatorProjectTemplateService.removeById(id)) {
indicatorProjectTemplateDetailService
.remove(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, id));
.remove(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, id));
return "删除成功";
}
return "操作失败";
@@ -337,7 +343,7 @@ public class IndicatorConfigManage {

public Boolean enOrDisProjectIndexTemplate(Long templateId, boolean active) {
PerformanceIndicatorProjectTemplate projectTemplate = indicatorProjectTemplateService.getById(templateId);
if (Boolean.TRUE.equals(active)){
if (Boolean.TRUE.equals(active)) {
// 根据创建模板时选择的项目类型、预算年度、项目金额、项目标签
// 判断模板是否可以启用(同一套组合只能启用一套模板)
PerformanceIndicatorProjectTemplate template = indicatorProjectTemplateService.getOne(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplate.class)
@@ -345,12 +351,12 @@ public class IndicatorConfigManage {
.eq(PerformanceIndicatorProjectTemplate::getProjectYear, projectTemplate.getProjectYear())
.eq(PerformanceIndicatorProjectTemplate::getAmountRange, projectTemplate.getAmountRange())
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds, projectTemplate.getProjectTagIds())
.eq(PerformanceIndicatorProjectTemplate::getStatus,CommonEnum.YES.getCode()));
if (Objects.nonNull(template)){
.eq(PerformanceIndicatorProjectTemplate::getStatus, CommonEnum.YES.getCode()));
if (Objects.nonNull(template)) {
throw new BizException("相同配置的模板已存在,当前模板无法启用!");
}
projectTemplate.setStatus(CommonEnum.YES.getCode());
}else {
} else {
projectTemplate.setStatus(CommonEnum.NO.getCode());
}
return indicatorProjectTemplateService.updateById(projectTemplate);
@@ -361,7 +367,7 @@ public class IndicatorConfigManage {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
PerformanceIndicatorProjectTemplate projectTemplate = indicatorProjectTemplateService.getById(templateId);
PerformanceIndicatorProjectTemplate newTemplate = new PerformanceIndicatorProjectTemplate();
BeanUtils.copyProperties(projectTemplate,newTemplate);
BeanUtils.copyProperties(projectTemplate, newTemplate);
// 复制后,项目模版名称变更为xxx副本,状态为禁用
newTemplate.setName(projectTemplate.getName() + CommonConst.COPY);
newTemplate.setStatus(CommonEnum.NO.getCode());
@@ -381,7 +387,7 @@ public class IndicatorConfigManage {
List<PerformanceIndicatorProjectTemplateDetail> thirdList = projectTemplateDetails.stream()
.filter(p -> PerformanceTemplateTypeEnum.THIRD_INDEX.getCode().equals(p.getType()))
.collect(Collectors.toList());
if (CollUtil.isEmpty(thirdList)){
if (CollUtil.isEmpty(thirdList)) {
throw new BizException("当前模板未配置三级指!");
}
List<PerformanceIndicatorProjectTemplateDetail> templateDetails = Lists.newArrayList();
@@ -400,7 +406,7 @@ public class IndicatorConfigManage {
// 再保存关联的二级指标
Long thirdParentId = templateDetail.getParentId();
PerformanceIndicatorProjectTemplateDetail secondTemplateDetail = detailMap.get(thirdParentId);
if (Objects.isNull(secondTemplateDetail)){
if (Objects.isNull(secondTemplateDetail)) {
throw new BizException("三级指标:" + templateDetail.getName() + "对应的二级指标不存在");
}
PerformanceIndicatorProjectTemplateDetail newSecondTemplateDetail = new PerformanceIndicatorProjectTemplateDetail();
@@ -420,7 +426,7 @@ public class IndicatorConfigManage {
// 再保存关联的一级指标
Long secondParentId = secondTemplateDetail.getParentId();
PerformanceIndicatorProjectTemplateDetail firstTemplateDetail = detailMap.get(secondParentId);
if (Objects.isNull(firstTemplateDetail)){
if (Objects.isNull(firstTemplateDetail)) {
throw new BizException("二级指标:" + secondTemplateDetail.getName() + "对应的一级指标不存在");
}
PerformanceIndicatorProjectTemplateDetail newFirstTemplateDetail = new PerformanceIndicatorProjectTemplateDetail();
@@ -453,32 +459,32 @@ public class IndicatorConfigManage {
.eq(Objects.nonNull(req.getIndexLevel()), PerformanceAppraisalProjectIndicator::getIndexLevel, req.getIndexLevel())
.eq(StringUtils.isNotBlank(req.getRegionCode()), PerformanceAppraisalProjectIndicator::getRegionCode, req.getRegionCode())
.orderByDesc(PerformanceAppraisalProjectIndicator::getCreateOn);
projectIndicatorService.page(page,wrapper);
projectIndicatorService.page(page, wrapper);

if (CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}
List<ProjectIndexVO> result = page.getRecords().stream()
.map(i -> BeanUtil.copyProperties(i, ProjectIndexVO.class))
.collect(Collectors.toList());
return PageVo.of(result,page.getTotal());
return PageVo.of(result, page.getTotal());
}

public String projectIndexSave(PerformanceIndicatorProjectIndexSaveDTO dto) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
PerformanceAppraisalProjectIndicator projectIndicator = BeanUtil.copyProperties(dto, PerformanceAppraisalProjectIndicator.class);
if(Objects.nonNull(dto.getId())){
if (Objects.nonNull(dto.getId())) {
PerformanceAppraisalProjectIndicator old = projectIndicatorService.getById(dto.getId());
VUtils.isTrue(Objects.isNull(old)).throwMessage("该项目指标不存在!");
Assert.notNull(old, "该项目指标不存在!");
projectIndicator.setId(old.getId());
}else{
} else {
projectIndicator.setId(null);
projectIndicator.setCreateOn(LocalDateTime.now());
projectIndicator.setCreateBy(user.getUsername());
}
projectIndicator.setUpdateOn(LocalDateTime.now());
projectIndicator.setUpdateBy(user.getUsername());
if(projectIndicatorService.saveOrUpdate(projectIndicator)){
if (projectIndicatorService.saveOrUpdate(projectIndicator)) {
return "指标新增成功";
}
return "指标新增失败";
@@ -495,7 +501,7 @@ public class IndicatorConfigManage {

public ProjectIndexVO projectIndexDetail(Long id) {
PerformanceAppraisalProjectIndicator projectIndex = projectIndicatorService.getById(id);
if(Objects.isNull(projectIndex)){
if (Objects.isNull(projectIndex)) {
return null;
}
return BeanUtil.copyProperties(projectIndex, ProjectIndexVO.class);
@@ -505,33 +511,33 @@ public class IndicatorConfigManage {
Page<PerformanceAppraisalAppIndicator> page = req.page();
LambdaQueryWrapper<PerformanceAppraisalAppIndicator> wrapper = Wrappers.lambdaQuery(PerformanceAppraisalAppIndicator.class)
.like(StringUtils.isNotBlank(req.getIndexName()), PerformanceAppraisalAppIndicator::getIndexName, req.getIndexName())
.orderBy(Boolean.FALSE,Boolean.TRUE, PerformanceAppraisalAppIndicator::getSort);
appIndicatorService.page(page,wrapper);
.orderBy(Boolean.FALSE, Boolean.TRUE, PerformanceAppraisalAppIndicator::getSort);
appIndicatorService.page(page, wrapper);

if (CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}
List<AppIndexVO> result = page.getRecords().stream()
.map(i -> BeanUtil.copyProperties(i, AppIndexVO.class))
.collect(Collectors.toList());
return PageVo.of(result,page.getTotal());
return PageVo.of(result, page.getTotal());
}

public String appIndexSave(PerformanceIndicatorAppIndexSaveDTO dto) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
PerformanceAppraisalAppIndicator appIndicator = BeanUtil.copyProperties(dto, PerformanceAppraisalAppIndicator.class);
if(Objects.nonNull(dto.getId())){
if (Objects.nonNull(dto.getId())) {
PerformanceAppraisalAppIndicator old = appIndicatorService.getById(dto.getId());
VUtils.isTrue(Objects.isNull(old)).throwMessage("该项目指标不存在!");
Assert.notNull(old, "该项目指标不存在!");
appIndicator.setId(old.getId());
}else{
} else {
appIndicator.setId(null);
appIndicator.setCreateOn(LocalDateTime.now());
appIndicator.setCreateBy(user.getUsername());
}
appIndicator.setUpdateOn(LocalDateTime.now());
appIndicator.setUpdateBy(user.getUsername());
if(appIndicatorService.saveOrUpdate(appIndicator)){
if (appIndicatorService.saveOrUpdate(appIndicator)) {
return "指标新增成功";
}
return "指标新增失败";
@@ -548,7 +554,7 @@ public class IndicatorConfigManage {

public AppIndexVO appIndexDetail(Long id) {
PerformanceAppraisalAppIndicator appIndex = appIndicatorService.getById(id);
if(Objects.isNull(appIndex)){
if (Objects.isNull(appIndex)) {
return null;
}
return BeanUtil.copyProperties(appIndex, AppIndexVO.class);
@@ -556,9 +562,9 @@ public class IndicatorConfigManage {

public Boolean enOrDisAppIndex(Long appId, Boolean state) {
PerformanceAppraisalAppIndicator appIndicator = appIndicatorService.getById(appId);
if (Boolean.TRUE.equals(state)){
if (Boolean.TRUE.equals(state)) {
appIndicator.setIsDisplay(Boolean.TRUE);
}else {
} else {
appIndicator.setIsDisplay(Boolean.FALSE);
}
return appIndicatorService.updateById(appIndicator);


+ 84
- 89
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/OrgSelfAppraisalManage.java Bestand weergeven

@@ -4,40 +4,44 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.StrPool;
import com.hz.pm.api.common.enumeration.CommonEnum;
import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.common.util.ExcelExportStyle;
import com.hz.pm.api.performance.constant.ProjectBizConst;
import com.hz.pm.api.performance.enumration.AppraisalTypeEnum;
import com.hz.pm.api.performance.helper.TemplateDetailBuildHelper;
import com.hz.pm.api.performance.model.dto.SelfAppraisalScoreExportDTO;
import com.hz.pm.api.performance.model.dto.ProjectAppraisalDTO;
import com.hz.pm.api.performance.model.dto.ProjectAppraisalInfoDTO;
import com.hz.pm.api.performance.model.dto.SelfAppraisalScoreExportDTO;
import com.hz.pm.api.performance.model.entity.*;
import com.hz.pm.api.performance.model.req.PerformanceAppraisalExportReq;
import com.hz.pm.api.performance.model.req.PerformanceAppraisalListReq;
import com.hz.pm.api.performance.model.vo.*;
import com.hz.pm.api.performance.model.vo.PerformanceAppraisalProjectVO;
import com.hz.pm.api.performance.model.vo.PerformanceAppraisalVO;
import com.hz.pm.api.performance.model.vo.ProjectAppraisalIndexDetailVO;
import com.hz.pm.api.performance.model.vo.ProjectTemplateDetailVO;
import com.hz.pm.api.performance.service.*;
import com.hz.pm.api.performance.util.ExcelFillCellMergeStrategy;
import com.hz.pm.api.performance.util.MultiColumnMergeStrategy;
import com.hz.pm.api.portrait.model.entity.ProjectTag;
import com.hz.pm.api.portrait.service.IProjectTagService;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.sys.service.IRoleService;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.StrPool;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -48,7 +52,10 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
@@ -71,8 +78,10 @@ public class OrgSelfAppraisalManage {
private final IPerformanceIndicatorProjectTemplateDetailService indicatorProjectTemplateDetailService;
private final IProjectTagService projectTagService;
private final IPerformanceAppraisalScoreInfoService performanceAppraisalScoreInfoService;

/**
* 绩效列表
*
* @param req
* @return
*/
@@ -80,51 +89,51 @@ public class OrgSelfAppraisalManage {
UserInfoDetails user = LoginUserUtil.loginUserDetail();

//当前登录用户 单位code
String empPosUnitCode = user.getEmpPosUnitCode();
String mhUnitId = user.getMhUnitIdStr();
// 获取当前登录用户的角色列表,只有单位管理员才能查看该列表
List<Role> userRoleList = user.getUserRoleList();
List<Long> roleIdList = userRoleList.stream().map(Role::getId).collect(Collectors.toList());
Role role = roleService.getOne(Wrappers.lambdaQuery(Role.class)
.eq(Role::getName, RoleEnum.COMPANY_MANAGER.getDesc()));
if (Objects.isNull(role)){
if (Objects.isNull(role)) {
throw new BizException("登录用户没有单位管理员角色!");
}

// 登录用户不是单位管理员,不能查看本单位的自评计划列表
if (!roleIdList.contains(role.getId())){
if (!roleIdList.contains(role.getId())) {
return PageVo.empty();
}

// 获取登录用户所在单位的所有已终验项目信息
List<Project> projectLists = projectService.list(Wrappers.lambdaQuery(Project.class)
.eq(Project::getStatus, ProjectStatusEnum.ACCEPTED.getCode())
.eq(Project::getBuildOrgCode, empPosUnitCode));
.eq(Project::getBuildOrgCode, mhUnitId));

if(CollUtil.isEmpty(projectLists)){
if (CollUtil.isEmpty(projectLists)) {
return PageVo.empty();
}
List<Long> projectIds = projectLists.stream().map(Project::getId).collect(Collectors.toList());
// 获取添加过该单位项目的所有评价计划信息
List<PerformanceAppraisalProject> paps = performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.in(PerformanceAppraisalProject::getProjectId, projectIds));
if(CollUtil.isEmpty(paps)){
if (CollUtil.isEmpty(paps)) {
return PageVo.empty();
}
Set<Long> paIds = paps.stream().map(PerformanceAppraisalProject::getAppraisalId).collect(Collectors.toSet());
// 获取评价计划列表
Page<PerformanceAppraisal> page = req.page();
LambdaQueryWrapper<PerformanceAppraisal> wrapper = Wrappers.lambdaQuery(PerformanceAppraisal.class)
.in(PerformanceAppraisal::getId,paIds)
.in(PerformanceAppraisal::getId, paIds)
.orderByDesc(PerformanceAppraisal::getUpdateOn);
performanceAppraisalService.page(page,wrapper);
if(CollUtil.isEmpty(page.getRecords())){
performanceAppraisalService.page(page, wrapper);
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}

List<PerformanceAppraisalVO> res = page.getRecords().stream()
.map(p -> BeanUtil.copyProperties(p, PerformanceAppraisalVO.class))
.collect(Collectors.toList());
return PageVo.of(res,page.getTotal());
return PageVo.of(res, page.getTotal());
}

public PageVo<PerformanceAppraisalProjectVO> pendingList(Long planId, PerformanceAppraisalListReq req) {
@@ -135,11 +144,11 @@ public class OrgSelfAppraisalManage {

// 获取评价计划内已添加的待评价项目信息
List<PerformanceAppraisalProject> paps = performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())).stream()
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())).stream()
.filter(p -> Objects.isNull(p.getSelfAppraisalScoreTime())).collect(Collectors.toList());
Map<Long, PerformanceAppraisalProject> papsMap = paps.stream().collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));

if(CollUtil.isEmpty(paps)){
if (CollUtil.isEmpty(paps)) {
return PageVo.empty();
}

@@ -149,19 +158,19 @@ public class OrgSelfAppraisalManage {
LambdaQueryWrapper<Project> wrapper = Wrappers.lambdaQuery(Project.class)
.in(Project::getProjectCode, projectCodes)
.eq(Project::getNewest, Boolean.TRUE)
.eq(Project::getBuildOrgCode, user.getEmpPosUnitCode())
.like(StringUtils.isNotBlank(req.getProjectName()),Project::getProjectName,req.getProjectName());
projectService.page(page,wrapper);
.eq(Project::getBuildOrgCode, user.getMhUnitIdStr())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
projectService.page(page, wrapper);

if(CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}

List<PerformanceAppraisalProjectVO> res = page.getRecords().stream()
.map(p -> {
PerformanceAppraisalProjectVO vo = BeanUtil.copyProperties(p, PerformanceAppraisalProjectVO.class);
List<PerformanceAppraisalProjectVO> res = page.getRecords().stream().map(p -> {
PerformanceAppraisalProjectVO vo = new PerformanceAppraisalProjectVO();
BeanUtil.copyProperties(p, vo);
PerformanceAppraisalProject appraisalProject = papsMap.get(p.getId());
BeanUtil.copyProperties(appraisalProject,vo);
BeanUtil.copyProperties(appraisalProject, vo);
vo.setProjectId(appraisalProject.getProjectId());
vo.setProjectTypeName(ProjectTypeNewEnum.getDesc(p.getProjectType()));
vo.setCanSelfAppraisal(checkCanSelfAppraisal(appraisalProject));
@@ -170,7 +179,7 @@ public class OrgSelfAppraisalManage {
})
.collect(Collectors.toList());

return PageVo.of(res,page.getTotal());
return PageVo.of(res, page.getTotal());
}

/**
@@ -188,11 +197,11 @@ public class OrgSelfAppraisalManage {

// 获取评价计划内已添加的已评价项目信息
List<PerformanceAppraisalProject> paps = performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())).stream()
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())).stream()
.filter(p -> Objects.nonNull(p.getSelfAppraisalScoreTime())).collect(Collectors.toList());
Map<Long, PerformanceAppraisalProject> papsMap = paps.stream().collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));

if(CollUtil.isEmpty(paps)){
if (CollUtil.isEmpty(paps)) {
return PageVo.empty();
}

@@ -202,18 +211,18 @@ public class OrgSelfAppraisalManage {
LambdaQueryWrapper<Project> wrapper = Wrappers.lambdaQuery(Project.class)
.in(Project::getProjectCode, projectCodes)
.eq(Project::getNewest, Boolean.TRUE)
.eq(Project::getBuildOrgCode, user.getEmpPosUnitCode())
.like(StringUtils.isNotBlank(req.getProjectName()),Project::getProjectName,req.getProjectName());
projectService.page(page,wrapper);
.eq(Project::getBuildOrgCode, user.getMhUnitIdStr())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
projectService.page(page, wrapper);

if(CollUtil.isEmpty(page.getRecords())){
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}
List<PerformanceAppraisalProjectVO> res = page.getRecords().stream()
.map(p -> {
PerformanceAppraisalProjectVO vo = BeanUtil.copyProperties(p, PerformanceAppraisalProjectVO.class);
PerformanceAppraisalProject appraisalProject = papsMap.get(p.getId());
BeanUtil.copyProperties(appraisalProject,vo);
BeanUtil.copyProperties(appraisalProject, vo);
vo.setProjectId(appraisalProject.getProjectId());
vo.setProjectTypeName(ProjectTypeNewEnum.getDesc(p.getProjectType()));
vo.setCanSelfAppraisal(checkCanSelfAppraisal(appraisalProject));
@@ -222,30 +231,27 @@ public class OrgSelfAppraisalManage {
})
.collect(Collectors.toList());

return PageVo.of(res,page.getTotal());
return PageVo.of(res, page.getTotal());
}

/**
* 是否可以自评
*
* @param appraisalProject
* @return
*/
private Boolean checkCanSelfAppraisal(PerformanceAppraisalProject appraisalProject) {
// 在自评时间段内,且是首次自评(打分时间为空)
if(LocalDateTime.now().compareTo(appraisalProject.getSelfAppraisalStart()) > 0 &&
if (LocalDateTime.now().compareTo(appraisalProject.getSelfAppraisalStart()) > 0 &&
LocalDateTime.now().compareTo(appraisalProject.getSelfAppraisalEnd()) < 0 &&
Objects.isNull(appraisalProject.getSelfAppraisalScoreTime())){
Objects.isNull(appraisalProject.getSelfAppraisalScoreTime())) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}

public ProjectAppraisalIndexDetailVO getAppraisalTemplateDetail(String projectCode) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
String regionCode = user.getRegionCode();

ProjectAppraisalIndexDetailVO vo = new ProjectAppraisalIndexDetailVO();

// 根据项目编码获取最新版本的项目信息
Project project = projectService.getProjectByCode(projectCode);
VUtils.isTrue(Objects.isNull(project)).throwMessage("项目不存在!");
@@ -256,7 +262,7 @@ public class OrgSelfAppraisalManage {
VUtils.isTrue(Objects.isNull(approvalAmount)).throwMessage("未获取到该项目的立项批复金额");
// 根据项目code获取项目标签ID列表
List<Long> tagIdList = projectTagService.list(Wrappers.lambdaQuery(ProjectTag.class)
.eq(ProjectTag::getProjectCode, projectCode)).stream()
.eq(ProjectTag::getProjectCode, projectCode)).stream()
.map(ProjectTag::getTagId).collect(Collectors.toList());
VUtils.isTrue(CollUtil.isEmpty(tagIdList)).throwMessage("当前项目未设置标签,匹配不到指标模板,请至项目库或评价计划编辑页面设置标签!");

@@ -264,25 +270,24 @@ public class OrgSelfAppraisalManage {
String projectTagIds = String.join(StrPool.COMMA, strIdList);

Integer amountRange = null;
if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) < 0){
if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) < 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_ONE;
} else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) >= 0 &&
approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.TWENTY_MILLION)) < 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_TWO;
}else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.TWENTY_MILLION)) >= 0){
} else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.TWENTY_MILLION)) >= 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_THREE;
}
LambdaQueryWrapper<PerformanceIndicatorProjectTemplate> wrapper = Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplate.class)
.eq(PerformanceIndicatorProjectTemplate::getRegionCode, regionCode)
.eq(PerformanceIndicatorProjectTemplate::getProjectType, projectType)
.eq(PerformanceIndicatorProjectTemplate::getProjectYear, projectYear)
.eq(PerformanceIndicatorProjectTemplate::getAmountRange, amountRange)
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds,projectTagIds)
.eq(PerformanceIndicatorProjectTemplate::getStatus,CommonEnum.YES.getCode())
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds, projectTagIds)
.eq(PerformanceIndicatorProjectTemplate::getStatus, CommonEnum.YES.getCode())
.orderByDesc(PerformanceIndicatorProjectTemplate::getUpdateOn);
List<PerformanceIndicatorProjectTemplate> templates = indicatorProjectTemplateService.list(wrapper);
VUtils.isTrue(CollUtil.isEmpty(templates)).throwMessage("该项目匹配不到指标模板,请返回上一页或者刷新重试。");
if (templates.size() > 1){
if (templates.size() > 1) {
throw new BizException("当前项目匹配到多个模板,请返回模板库检查模板配置!");
}
PerformanceIndicatorProjectTemplate projectTemplate = templates.get(0);
@@ -290,13 +295,13 @@ public class OrgSelfAppraisalManage {
// 获取模版绩效指标详情
List<PerformanceIndicatorProjectTemplateDetail> templateDetails = indicatorProjectTemplateDetailService.list(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, projectTemplate.getId())
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional,Boolean.FALSE));
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional, Boolean.FALSE));
// 获取模版附加绩效指标详情
List<PerformanceIndicatorProjectTemplateDetail> additionalTemplateDetails = indicatorProjectTemplateDetailService.list(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.eq(PerformanceIndicatorProjectTemplateDetail::getTemplateId, projectTemplate.getId())
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional,Boolean.TRUE));
List<ProjectTemplateDetailVO> templateDetailVos = templateDetailBuildHelper.buildTemplateDetail(templateDetails,projectCode,vo);
List<ProjectTemplateDetailVO> additionalTemplateDetailVos = templateDetailBuildHelper.buildTemplateDetail(additionalTemplateDetails,projectCode,vo);
.eq(PerformanceIndicatorProjectTemplateDetail::getIsAdditional, Boolean.TRUE));
List<ProjectTemplateDetailVO> templateDetailVos = templateDetailBuildHelper.buildTemplateDetail(templateDetails, projectCode, vo);
List<ProjectTemplateDetailVO> additionalTemplateDetailVos = templateDetailBuildHelper.buildTemplateDetail(additionalTemplateDetails, projectCode, vo);
vo.setProjectName(project.getProjectName());
vo.setBuildOrgName(project.getBuildOrgName());
vo.setProjectStatus(project.getStatus());
@@ -310,8 +315,6 @@ public class OrgSelfAppraisalManage {
@Transactional(rollbackFor = Exception.class)
public String submitSelfAppraisal(ProjectAppraisalDTO param) {
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String employeeCode = userDetail.getEmployeeCode();
String username = userDetail.getUsername();
Long appraisalId = param.getAppraisalId();
Long appraisalProjectId = param.getAppraisalProjectId();
String appraisalProjectCode = param.getAppraisalProjectCode();
@@ -320,12 +323,12 @@ public class OrgSelfAppraisalManage {
PerformanceAppraisalProject appraisalProject = performanceAppraisalProjectService.getOne(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, appraisalId)
.eq(PerformanceAppraisalProject::getProjectId, appraisalProjectId)
.eq(PerformanceAppraisalProject::getProjectCode,appraisalProjectCode));
if (Objects.isNull(appraisalProject)){
.eq(PerformanceAppraisalProject::getProjectCode, appraisalProjectCode));
if (Objects.isNull(appraisalProject)) {
throw new BizException("该项目已被移除评价计划,请返回上一页或者刷新重试!");
}
// 根据项目模板详情ID保存自评得分、打分时间
if (CollUtil.isEmpty(appraisalInfoList)){
if (CollUtil.isEmpty(appraisalInfoList)) {
throw new BizException("填写所有自评得分后才能提交!");
}
List<Long> ids = appraisalInfoList.stream()
@@ -334,7 +337,7 @@ public class OrgSelfAppraisalManage {
// 查出项目模版详情信息
List<PerformanceIndicatorProjectTemplateDetail> detailList = indicatorProjectTemplateDetailService.list(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.in(PerformanceIndicatorProjectTemplateDetail::getId, ids));
if (CollUtil.isEmpty(detailList)){
if (CollUtil.isEmpty(detailList)) {
throw new BizException("评价指标不存在!");
}
Map<Long, PerformanceIndicatorProjectTemplateDetail> detailMap = detailList.stream().collect(Collectors.toMap(PerformanceIndicatorProjectTemplateDetail::getId, d -> d));
@@ -342,7 +345,7 @@ public class OrgSelfAppraisalManage {
PerformanceIndicatorProjectTemplateDetail templateDetail = detailMap.get(a.getProjectTemplateDetailId());
BigDecimal score = a.getScore();
BigDecimal indexScore = templateDetail.getIndexScore();
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0){
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0) {
throw new BizException("自评得分必须大于等于0且小于等于指标分值!");
}
// 保存自评分数信息
@@ -353,17 +356,17 @@ public class OrgSelfAppraisalManage {
scoreInfo.setAppraisalType(AppraisalTypeEnum.SELF_APPRAISAL.getCode());
scoreInfo.setTemplateDetailId(templateDetail.getId());
scoreInfo.setTemplateId(templateDetail.getTemplateId());
scoreInfo.setAppraisalEmployeeCode(employeeCode);
scoreInfo.setAppraisalEmployeeName(username);
scoreInfo.setAppraisalUserId(String.valueOf(userDetail.getUserId()));
scoreInfo.setAppraisalUserName(userDetail.getRealName());
scoreInfo.setAppraisalId(appraisalId);
scoreInfo.setAppraisalProjectId(appraisalProjectId);
scoreInfo.setAppraisalProjectCode(appraisalProjectCode);
scoreInfo.setCreateOn(LocalDateTime.now());
scoreInfo.setCreateBy(username);
scoreInfo.setCreateBy(userDetail.getRealName());
return scoreInfo;
}).collect(Collectors.toList());

if (performanceAppraisalScoreInfoService.saveBatch(scoreInfos)){
if (performanceAppraisalScoreInfoService.saveBatch(scoreInfos)) {
// 计算自评总分并保存
BigDecimal selfAppraisalTotalScore = appraisalInfoList.stream()
.map(ProjectAppraisalInfoDTO::getScore)
@@ -373,7 +376,7 @@ public class OrgSelfAppraisalManage {
appraisalProject.setSelfAppraisalScoreTime(LocalDateTime.now());
appraisalProject.setIsCompleteSelfAppraisal(Boolean.TRUE);
appraisalProject.setUpdateOn(LocalDateTime.now());
appraisalProject.setUpdateBy(username);
appraisalProject.setUpdateBy(userDetail.getRealName());
performanceAppraisalProjectService.updateById(appraisalProject);
return "提交成功";
}
@@ -381,48 +384,41 @@ public class OrgSelfAppraisalManage {
}

public void exportScore(HttpServletResponse response, PerformanceAppraisalExportReq param) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
String regionCode = user.getRegionCode();
String projectCode = param.getProjectCode();
Long appraisalId = param.getAppraisalId();

// 根据项目编码获取最新版本的项目信息
Project project = projectService.getProjectByCode(projectCode);
VUtils.isTrue(Objects.isNull(project)).throwMessage("项目不存在!");
Assert.notNull(project, "项目不存在!");
// 根据项目类型、预算年度、批复金额、项目标签匹配本区域指标模版
String projectType = project.getProjectType();
Integer projectYear = project.getProjectYear();
BigDecimal approvalAmount = project.getApprovalAmount();
VUtils.isTrue(Objects.isNull(approvalAmount)).throwMessage("未获取到该项目的立项批复金额");
Assert.notNull(approvalAmount, "未获取到该项目的立项批复金额");
// 根据项目code获取项目标签ID列表
List<Long> tagIdList = projectTagService.list(Wrappers.lambdaQuery(ProjectTag.class)
String tagIdStr = projectTagService.list(Wrappers.lambdaQuery(ProjectTag.class)
.eq(ProjectTag::getProjectCode, projectCode)).stream()
.map(ProjectTag::getTagId).collect(Collectors.toList());
VUtils.isTrue(CollUtil.isEmpty(tagIdList)).throwMessage("当前项目未设置标签,匹配不到指标模板,请至项目库或评价计划编辑页面设置标签!");

List<String> strIdList = tagIdList.stream().map(String::valueOf).collect(Collectors.toList());
String projectTagIds = String.join(StrPool.COMMA, strIdList);

.map(w -> w.getTagId().toString()).collect(Collectors.joining(","));
Assert.notEmpty(tagIdStr, "当前项目未设置标签,匹配不到指标模板,请至项目库或评价计划编辑页面设置标签!");
Integer amountRange = null;
if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) < 0){
if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) < 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_ONE;
} else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) >= 0 &&
approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.TWENTY_MILLION)) < 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_TWO;
}else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.TWENTY_MILLION)) >= 0){
} else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.TWENTY_MILLION)) >= 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_THREE;
}
LambdaQueryWrapper<PerformanceIndicatorProjectTemplate> wrapper = Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplate.class)
.eq(PerformanceIndicatorProjectTemplate::getRegionCode, regionCode)
.eq(PerformanceIndicatorProjectTemplate::getProjectType, projectType)
.eq(PerformanceIndicatorProjectTemplate::getProjectYear, projectYear)
.eq(PerformanceIndicatorProjectTemplate::getAmountRange, amountRange)
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds,projectTagIds)
.eq(PerformanceIndicatorProjectTemplate::getStatus,CommonEnum.YES.getCode())
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds, tagIdStr)
.eq(PerformanceIndicatorProjectTemplate::getStatus, CommonEnum.YES.getCode())
.orderByDesc(PerformanceIndicatorProjectTemplate::getUpdateOn);
List<PerformanceIndicatorProjectTemplate> templates = indicatorProjectTemplateService.list(wrapper);
VUtils.isTrue(CollUtil.isEmpty(templates)).throwMessage("该项目匹配不到指标模板,请返回上一页或者刷新重试。");
if (templates.size() > 1){
if (templates.size() > 1) {
throw new BizException("当前项目匹配到多个模板,请返回模板库检查模板配置!");
}
PerformanceIndicatorProjectTemplate projectTemplate = templates.get(0);
@@ -442,7 +438,7 @@ public class OrgSelfAppraisalManage {
.orderBy(Boolean.TRUE, Boolean.TRUE, PerformanceAppraisalScoreInfo::getTemplateDetailId));
Map<Long, PerformanceAppraisalScoreInfo> scoreInfoMap = scoreInfoList.stream()
.collect(Collectors.toMap(PerformanceAppraisalScoreInfo::getTemplateDetailId, p -> p));
// 筛选出所有打分的三级指标模板详情ID
for (PerformanceAppraisalScoreInfo scoreInfo : scoreInfoList) {
SelfAppraisalScoreExportDTO thirdDto = new SelfAppraisalScoreExportDTO();
@@ -471,7 +467,7 @@ public class OrgSelfAppraisalManage {
thirdDto.setSecondIndexName(secondTemplateDetail.getName());
// 一级指标名称
Long firstId = secondTemplateDetail.getParentId();
if (Objects.nonNull(firstId)){
if (Objects.nonNull(firstId)) {
PerformanceIndicatorProjectTemplateDetail firstTemplateDetail = templateDetailMap.get(firstId);
if (Objects.nonNull(firstTemplateDetail)) {
thirdDto.setFirstIndexName(firstTemplateDetail.getName());
@@ -481,7 +477,7 @@ public class OrgSelfAppraisalManage {
}
if (Boolean.FALSE.equals(thirdTemplateDetail.getIsAdditional())) {
exportDataList.add(thirdDto);
}else {
} else {
exportAdditionalDataList.add(thirdDto);
}
}
@@ -496,14 +492,13 @@ public class OrgSelfAppraisalManage {
try {
EasyExcel.write(response.getOutputStream(), SelfAppraisalScoreExportDTO.class)
.autoCloseStream(false)
.registerWriteHandler(new MultiColumnMergeStrategy(exportDataList.size(),0,1))
.registerWriteHandler(new ExcelFillCellMergeStrategy(mergeRowIndex,mergeColumnIndex))
.registerWriteHandler(new MultiColumnMergeStrategy(exportDataList.size(), 0, 1))
.registerWriteHandler(new ExcelFillCellMergeStrategy(mergeRowIndex, mergeColumnIndex))
.registerWriteHandler(ExcelExportStyle.formalStyle())
.sheet(fileName)
.doWrite(exportDataList);
} catch (IOException e) {
throw new BizException(e);
}

}
}

+ 226
- 232
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/PerformanceAppraisalPlanManage.java
Diff onderdrukt omdat het te groot bestand
Bestand weergeven


+ 36
- 44
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/ReAppraisalManage.java Bestand weergeven

@@ -7,6 +7,7 @@ import cn.hutool.core.util.CharsetUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
@@ -25,8 +26,8 @@ import com.hz.pm.api.performance.service.*;
import com.hz.pm.api.performance.util.*;
import com.hz.pm.api.portrait.model.entity.ProjectTag;
import com.hz.pm.api.portrait.service.IProjectTagService;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.sys.service.IRoleService;
@@ -115,10 +116,7 @@ public class ReAppraisalManage {
} else {
empCodeList.add(reAppraisalUsers);
}
if (empCodeList.contains(employeeCode)) {
return true;
}
return false;
return empCodeList.contains(employeeCode);
}).collect(Collectors.toList());
// 当前登录复评员用户,没有参加评价计划
if (CollUtil.isEmpty(groupList)) {
@@ -150,12 +148,12 @@ public class ReAppraisalManage {
/**
* 是否可以复评
*
* @param employeeCode
* @param projectCode
* @param appraisalId
* @return
* @param userId \
* @param projectCode \
* @param appraisalId \
* @return \
*/
private Boolean checkCanReAppraisal(String employeeCode, String projectCode, Long appraisalId) {
private Boolean checkCanReAppraisal(String userId, String projectCode, Long appraisalId) {
// 首次复评(复评打分时间为空)
// 从绩效评价打分信息表中查询打分类型为复评、打分人员为当前登录复评用户的打分信息
// 如果没有相关的打分信息,说明是当前登录复评用户是首次复评
@@ -163,7 +161,7 @@ public class ReAppraisalManage {
.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.RE_APPRAISAL.getCode())
.eq(PerformanceAppraisalScoreInfo::getAppraisalProjectCode, projectCode)
.eq(PerformanceAppraisalScoreInfo::getAppraisalId, appraisalId)
.eq(PerformanceAppraisalScoreInfo::getAppraisalEmployeeCode, employeeCode));
.eq(PerformanceAppraisalScoreInfo::getAppraisalUserId, userId));
if (CollUtil.isEmpty(scoreInfos)) {
return true;
}
@@ -230,7 +228,7 @@ public class ReAppraisalManage {
@Transactional(rollbackFor = Exception.class)
public String submitReAppraisal(ProjectAppraisalDTO param) {
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String employeeCode = userDetail.getEmployeeCode();
String userIdStr = String.valueOf(userDetail.getMhUserId());
String username = userDetail.getUsername();
Long appraisalId = param.getAppraisalId();
Long appraisalProjectId = param.getAppraisalProjectId();
@@ -270,8 +268,8 @@ public class ReAppraisalManage {
scoreInfo.setAppraisalType(AppraisalTypeEnum.RE_APPRAISAL.getCode());
scoreInfo.setTemplateDetailId(templateDetail.getId());
scoreInfo.setTemplateId(templateDetail.getTemplateId());
scoreInfo.setAppraisalEmployeeCode(employeeCode);
scoreInfo.setAppraisalEmployeeName(username);
scoreInfo.setAppraisalUserId(userIdStr);
scoreInfo.setAppraisalUserName(username);
scoreInfo.setAppraisalId(appraisalId);
scoreInfo.setAppraisalProjectId(appraisalProjectId);
scoreInfo.setAppraisalProjectCode(appraisalProjectCode);
@@ -317,7 +315,7 @@ public class ReAppraisalManage {
.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.RE_APPRAISAL.getCode()));
// 判断打分人员是否为分组内的复评人员
if (CollUtil.isNotEmpty(scoreInfoList)) {
Set<String> users = scoreInfoList.stream().map(PerformanceAppraisalScoreInfo::getAppraisalEmployeeCode).collect(Collectors.toSet());
Set<String> users = scoreInfoList.stream().map(PerformanceAppraisalScoreInfo::getAppraisalUserId).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(users)) {
String reAppraisalUsers = group.getReAppraisalUsers();
String join = String.join(StrPool.COMMA, users);
@@ -330,27 +328,22 @@ public class ReAppraisalManage {
}

public void exportScore(HttpServletResponse response, PerformanceAppraisalExportReq param) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
String regionCode = user.getRegionCode();
String projectCode = param.getProjectCode();
Long appraisalId = param.getAppraisalId();

// 根据项目编码获取最新版本的项目信息
Project project = projectService.getProjectByCode(projectCode);
VUtils.isTrue(Objects.isNull(project)).throwMessage("项目不存在!");
Assert.notNull(project, "项目不存在!");
// 根据项目类型、预算年度、批复金额、项目标签匹配本区域指标模版
String projectType = project.getProjectType();
Integer projectYear = project.getProjectYear();
BigDecimal approvalAmount = project.getApprovalAmount();
VUtils.isTrue(Objects.isNull(approvalAmount)).throwMessage("未获取到该项目的立项批复金额");
Assert.notNull(approvalAmount, "未获取到该项目的立项批复金额");
// 根据项目code获取项目标签ID列表
List<Long> tagIdList = projectTagService.list(Wrappers.lambdaQuery(ProjectTag.class)
String tagIdStr = projectTagService.list(Wrappers.lambdaQuery(ProjectTag.class)
.eq(ProjectTag::getProjectCode, projectCode)).stream()
.map(ProjectTag::getTagId).collect(Collectors.toList());
VUtils.isTrue(CollUtil.isEmpty(tagIdList)).throwMessage("当前项目未设置标签,匹配不到指标模板,请至项目库或评价计划编辑页面设置标签!");

List<String> strIdList = tagIdList.stream().map(String::valueOf).collect(Collectors.toList());
String projectTagIds = String.join(StrPool.COMMA, strIdList);
.map(w -> w.getTagId().toString()).collect(Collectors.joining(","));
Assert.notEmpty(tagIdStr, "当前项目未设置标签,匹配不到指标模板,请至项目库或评价计划编辑页面设置标签!");

Integer amountRange = null;
if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) < 0) {
@@ -362,15 +355,14 @@ public class ReAppraisalManage {
amountRange = ProjectBizConst.AMOUNT_RANGE_THREE;
}
LambdaQueryWrapper<PerformanceIndicatorProjectTemplate> wrapper = Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplate.class)
.eq(PerformanceIndicatorProjectTemplate::getRegionCode, regionCode)
.eq(PerformanceIndicatorProjectTemplate::getProjectType, projectType)
.eq(PerformanceIndicatorProjectTemplate::getProjectYear, projectYear)
.eq(PerformanceIndicatorProjectTemplate::getAmountRange, amountRange)
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds, projectTagIds)
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds, tagIdStr)
.eq(PerformanceIndicatorProjectTemplate::getStatus, CommonEnum.YES.getCode())
.orderByDesc(PerformanceIndicatorProjectTemplate::getUpdateOn);
List<PerformanceIndicatorProjectTemplate> templates = indicatorProjectTemplateService.list(wrapper);
VUtils.isTrue(CollUtil.isEmpty(templates)).throwMessage("该项目匹配不到指标模板,请返回上一页或者刷新重试。");
Assert.notEmpty(templates, "该项目匹配不到指标模板,请返回上一页或者刷新重试。");
if (templates.size() > 1) {
throw new BizException("当前项目匹配到多个模板,请返回模板库检查模板配置!");
}
@@ -398,7 +390,7 @@ public class ReAppraisalManage {
.filter(s -> AppraisalTypeEnum.RE_APPRAISAL.getCode().equals(s.getAppraisalType()))
.collect(Collectors.toList());
List<String> reUserList = reScoreInfoList.stream()
.map(PerformanceAppraisalScoreInfo::getAppraisalEmployeeName)
.map(PerformanceAppraisalScoreInfo::getAppraisalUserName)
.collect(Collectors.toList());

// 筛选出所有打分的三级指标模板详情ID
@@ -434,8 +426,8 @@ public class ReAppraisalManage {
scoreMap.put(ProjectBizConst.SELF_APPRAISAL_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(ProjectBizConst.SELF_APPRAISAL_SCORE, appraisalScoreInfo.getAppraisalScore());
} else if (AppraisalTypeEnum.RE_APPRAISAL.getCode().equals(appraisalScoreInfo.getAppraisalType())) {
scoreMap.put(appraisalScoreInfo.getAppraisalEmployeeName() + ProjectBizConst.RE_APPRAISAL_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(appraisalScoreInfo.getAppraisalEmployeeName() + ProjectBizConst.RE_APPRAISAL_SCORE, appraisalScoreInfo.getAppraisalScore());
scoreMap.put(appraisalScoreInfo.getAppraisalUserName() + ProjectBizConst.RE_APPRAISAL_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(appraisalScoreInfo.getAppraisalUserName() + ProjectBizConst.RE_APPRAISAL_SCORE, appraisalScoreInfo.getAppraisalScore());
}

if (Boolean.TRUE.equals(thirdTemplateDetail.getIsAdditional())) {
@@ -456,21 +448,21 @@ public class ReAppraisalManage {
// 需要从第几行开始合并
int mergeRowIndex = 2;

List<ExcelHead> headList = Lists.newArrayList();
headList.add(new ExcelHead(ProjectBizConst.FIRST_INDEX_NAME, ProjectBizConst.FIRST_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SECOND_INDEX_NAME, ProjectBizConst.SECOND_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.THIRD_INDEX_NAME, ProjectBizConst.THIRD_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.INDEX_SCORE, ProjectBizConst.INDEX_SCORE_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.INDEX_DETAIL, ProjectBizConst.INDEX_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.GRADE_DETAIL, ProjectBizConst.GRADE_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SUPPORT_MATERIAL, ProjectBizConst.SUPPORT_MATERIAL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SELF_APPRAISAL_BASIS, ProjectBizConst.SELF_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SELF_APPRAISAL_SCORE, ProjectBizConst.SELF_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
List<ExcelHead<Object>> headList = Lists.newArrayList();
headList.add(new ExcelHead<>(ProjectBizConst.FIRST_INDEX_NAME, ProjectBizConst.FIRST_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SECOND_INDEX_NAME, ProjectBizConst.SECOND_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.THIRD_INDEX_NAME, ProjectBizConst.THIRD_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.INDEX_SCORE, ProjectBizConst.INDEX_SCORE_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.INDEX_DETAIL, ProjectBizConst.INDEX_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.GRADE_DETAIL, ProjectBizConst.GRADE_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SUPPORT_MATERIAL, ProjectBizConst.SUPPORT_MATERIAL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SELF_APPRAISAL_BASIS, ProjectBizConst.SELF_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SELF_APPRAISAL_SCORE, ProjectBizConst.SELF_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
for (String reUser : reUserList) {
headList.add(new ExcelHead(reUser + ProjectBizConst.RE_APPRAISAL_BASIS, ProjectBizConst.RE_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(reUser + ProjectBizConst.RE_APPRAISAL_SCORE, ProjectBizConst.RE_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(reUser + ProjectBizConst.RE_APPRAISAL_BASIS, ProjectBizConst.RE_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(reUser + ProjectBizConst.RE_APPRAISAL_SCORE, ProjectBizConst.RE_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
}
headList.add(new ExcelHead(ProjectBizConst.IS_ADDITIONAL, ProjectBizConst.IS_ADDITIONAL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.IS_ADDITIONAL, ProjectBizConst.IS_ADDITIONAL_TITLE, StrPool.EMPTY));

// 数据导出处理函数
try {


+ 59
- 62
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/RectifyAuditManage.java Bestand weergeven

@@ -1,52 +1,50 @@
package com.hz.pm.api.performance.manage;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.StrPool;
import com.google.common.collect.Lists;
import com.hz.pm.api.performance.enumration.AppraisalTypeEnum;
import com.hz.pm.api.performance.enumration.RectifyAuditEnum;
import com.hz.pm.api.performance.model.dto.ProjectAppraisalInfoDTO;
import com.hz.pm.api.performance.model.entity.*;
import com.hz.pm.api.performance.service.*;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.performance.enumration.AppraisalTypeEnum;
import com.hz.pm.api.performance.enumration.RectifyAuditEnum;
import com.hz.pm.api.performance.enumration.RectifyStatusEnum;
import com.hz.pm.api.performance.model.dto.ProjectAppraisalDTO;
import com.hz.pm.api.performance.model.dto.ProjectAppraisalInfoDTO;
import com.hz.pm.api.performance.model.entity.*;
import com.hz.pm.api.performance.model.req.PerformanceAppraisalListReq;
import com.hz.pm.api.performance.model.vo.PerformanceAppraisalProjectVO;
import com.hz.pm.api.performance.model.vo.PerformanceAppraisalVO;
import com.hz.pm.api.performance.service.*;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.sys.service.IRoleService;
import com.hz.pm.api.user.model.enumeration.RoleEnum;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

/**
* RectifyAuditManage
*
* @return
*
* @author CMM
* @return
* @since 2023/08/12 17:36
*/
@Component
@@ -62,9 +60,10 @@ public class RectifyAuditManage {
private final IPerformanceAppraisalProjectGroupService groupService;
private final IPerformanceIndicatorProjectTemplateDetailService indicatorProjectTemplateDetailService;
private final IPerformanceAppraisalScoreInfoService performanceAppraisalScoreInfoService;

/**
* 绩效列表
*
*
* @param req
* @return
*/
@@ -163,9 +162,9 @@ public class RectifyAuditManage {

// 因为一个核查用户只能出现在一个评价计划中的一个分组中,所以根据评价计划ID和核查组长信息可以确定分组内项目信息
PerformanceAppraisalProjectGroup projectGroup =
groupService.getOne(Wrappers.lambdaQuery(PerformanceAppraisalProjectGroup.class)
.eq(PerformanceAppraisalProjectGroup::getAppraisalId, planId)
.eq(PerformanceAppraisalProjectGroup::getVerifyLeader, employeeCode));
groupService.getOne(Wrappers.lambdaQuery(PerformanceAppraisalProjectGroup.class)
.eq(PerformanceAppraisalProjectGroup::getAppraisalId, planId)
.eq(PerformanceAppraisalProjectGroup::getVerifyLeader, employeeCode));
// 当前登录专家没有为核查组长的绩效分组信息
if (Objects.isNull(projectGroup)) {
return PageVo.empty();
@@ -180,25 +179,25 @@ public class RectifyAuditManage {
}
// 获取评价计划内已添加的核查组长为当前登录专家用户的待整改审核项目信息
List<PerformanceAppraisalProject> paps =
performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())
.in(PerformanceAppraisalProject::getProjectCode, codes)
.eq(PerformanceAppraisalProject::getIsRectify, Boolean.TRUE)
.eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.TO_BE_REVIEWED.getCode()));
performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())
.in(PerformanceAppraisalProject::getProjectCode, codes)
.eq(PerformanceAppraisalProject::getIsRectify, Boolean.TRUE)
.eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.TO_BE_REVIEWED.getCode()));
if (CollUtil.isEmpty(paps)) {
return PageVo.empty();
}
Map<Long, PerformanceAppraisalProject> papsMap =
paps.stream().collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));
paps.stream().collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));

// 获取本单位在当前评价计划内的项目
Set<String> projectCodes =
paps.stream().map(PerformanceAppraisalProject::getProjectCode).collect(Collectors.toSet());
paps.stream().map(PerformanceAppraisalProject::getProjectCode).collect(Collectors.toSet());
Page<Project> page = req.page();
LambdaQueryWrapper<Project> wrapper = Wrappers.lambdaQuery(Project.class)
.in(Project::getProjectCode, projectCodes).eq(Project::getNewest, Boolean.TRUE)
.like(StringUtils.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
.in(Project::getProjectCode, projectCodes).eq(Project::getNewest, Boolean.TRUE)
.like(StringUtils.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
projectService.page(page, wrapper);

if (CollUtil.isEmpty(page.getRecords())) {
@@ -231,9 +230,9 @@ public class RectifyAuditManage {

// 因为一个核查用户只能出现在一个评价计划中的一个分组中,所以根据评价计划ID和核查组长信息可以确定分组内项目信息
PerformanceAppraisalProjectGroup projectGroup =
groupService.getOne(Wrappers.lambdaQuery(PerformanceAppraisalProjectGroup.class)
.eq(PerformanceAppraisalProjectGroup::getAppraisalId, planId)
.eq(PerformanceAppraisalProjectGroup::getVerifyLeader, employeeCode));
groupService.getOne(Wrappers.lambdaQuery(PerformanceAppraisalProjectGroup.class)
.eq(PerformanceAppraisalProjectGroup::getAppraisalId, planId)
.eq(PerformanceAppraisalProjectGroup::getVerifyLeader, employeeCode));
// 当前登录专家没有为核查组长的绩效分组信息
if (Objects.isNull(projectGroup)) {
return PageVo.empty();
@@ -248,28 +247,28 @@ public class RectifyAuditManage {
}
// 获取评价计划内已添加的核查组长为当前登录专家用户的已整改审核项目信息
List<
PerformanceAppraisalProject> paps =
PerformanceAppraisalProject> paps =
performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())
.in(PerformanceAppraisalProject::getProjectCode, codes)
.eq(PerformanceAppraisalProject::getIsRectify, Boolean.TRUE)
.and(wp -> wp
.eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.NOT_APPROVED.getCode())
.or().eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.APPROVED.getCode())));
.eq(PerformanceAppraisalProject::getAppraisalId, plan.getId())
.in(PerformanceAppraisalProject::getProjectCode, codes)
.eq(PerformanceAppraisalProject::getIsRectify, Boolean.TRUE)
.and(wp -> wp
.eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.NOT_APPROVED.getCode())
.or().eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.APPROVED.getCode())));
if (CollUtil.isEmpty(paps)) {
return PageVo.empty();
}
Map<Long, PerformanceAppraisalProject> papsMap =
paps.stream().collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));
paps.stream().collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));

// 获取评价计划内的项目
Set<String> projectCodes =
paps.stream().map(PerformanceAppraisalProject::getProjectCode).collect(Collectors.toSet());
paps.stream().map(PerformanceAppraisalProject::getProjectCode).collect(Collectors.toSet());
Page<Project> page = req.page();
LambdaQueryWrapper<Project> wrapper = Wrappers.lambdaQuery(Project.class)
.in(Project::getProjectCode, projectCodes).eq(Project::getNewest, Boolean.TRUE)
.like(StringUtils.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
.in(Project::getProjectCode, projectCodes).eq(Project::getNewest, Boolean.TRUE)
.like(StringUtils.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
projectService.page(page, wrapper);

if (CollUtil.isEmpty(page.getRecords())) {
@@ -296,7 +295,7 @@ public class RectifyAuditManage {
@Transactional(rollbackFor = Exception.class)
public String submit(ProjectAppraisalDTO param) {
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String employeeCode = userDetail.getEmployeeCode();
String userIdStr = String.valueOf(userDetail.getUserId());
String username = userDetail.getUsername();
Long appraisalId = param.getAppraisalId();
Long appraisalProjectId = param.getAppraisalProjectId();
@@ -305,13 +304,11 @@ public class RectifyAuditManage {
String rectifyAuditOpinion = param.getRectifyAuditOpinion();
String rectifyAuditAppendix = param.getRectifyAuditAppendix();
List<ProjectAppraisalInfoDTO> appraisalInfoList = param.getAppraisalInfoList();
Long groupId = param.getGroupId();
PerformanceAppraisalProjectGroup group = groupService.getById(groupId);

// 获取评价项目
PerformanceAppraisalProject appraisalProject = performanceAppraisalProjectService.getOne(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, appraisalId)
.eq(PerformanceAppraisalProject::getProjectCode,appraisalProjectCode)
.eq(PerformanceAppraisalProject::getProjectCode, appraisalProjectCode)
.eq(PerformanceAppraisalProject::getProjectId, appraisalProjectId));

List<Long> ids = appraisalInfoList.stream()
@@ -320,7 +317,7 @@ public class RectifyAuditManage {
// 查出项目模版详情信息
List<PerformanceIndicatorProjectTemplateDetail> detailList = indicatorProjectTemplateDetailService.list(Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplateDetail.class)
.in(PerformanceIndicatorProjectTemplateDetail::getId, ids));
if (CollUtil.isEmpty(detailList)){
if (CollUtil.isEmpty(detailList)) {
throw new BizException("评价指标不存在!");
}
Map<Long, PerformanceIndicatorProjectTemplateDetail> detailMap = detailList.stream().collect(Collectors.toMap(PerformanceIndicatorProjectTemplateDetail::getId, d -> d));
@@ -328,7 +325,7 @@ public class RectifyAuditManage {
PerformanceIndicatorProjectTemplateDetail templateDetail = detailMap.get(a.getProjectTemplateDetailId());
BigDecimal score = a.getScore();
BigDecimal indexScore = templateDetail.getIndexScore();
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0){
if (score.compareTo(indexScore) > 0 || score.compareTo(BigDecimal.ZERO) < 0) {
throw new BizException("核查审核得分必须大于等于0且小于等于指标分值!");
}
// 保存核查分数信息
@@ -339,8 +336,8 @@ public class RectifyAuditManage {
scoreInfo.setAppraisalType(AppraisalTypeEnum.EXPERT_RECTIFY_AUDIT.getCode());
scoreInfo.setTemplateDetailId(templateDetail.getId());
scoreInfo.setTemplateId(templateDetail.getTemplateId());
scoreInfo.setAppraisalEmployeeCode(employeeCode);
scoreInfo.setAppraisalEmployeeName(username);
scoreInfo.setAppraisalUserId(userIdStr);
scoreInfo.setAppraisalUserName(username);
scoreInfo.setAppraisalId(appraisalId);
scoreInfo.setAppraisalProjectId(appraisalProjectId);
scoreInfo.setAppraisalProjectCode(appraisalProjectCode);
@@ -349,7 +346,7 @@ public class RectifyAuditManage {
return scoreInfo;
}).collect(Collectors.toList());

if (performanceAppraisalScoreInfoService.saveBatch(scoreInfos)){
if (performanceAppraisalScoreInfoService.saveBatch(scoreInfos)) {
// 计算核查总分并保存
BigDecimal rectifyTotalScore = appraisalInfoList.stream()
.map(ProjectAppraisalInfoDTO::getScore)


+ 34
- 27
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/RectifyManage.java Bestand weergeven

@@ -2,10 +2,13 @@ package com.hz.pm.api.performance.manage;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.performance.enumration.RectifyStatusEnum;
import com.hz.pm.api.performance.model.dto.ProjectAppraisalDTO;
import com.hz.pm.api.performance.model.entity.PerformanceAppraisal;
@@ -70,12 +73,12 @@ public class RectifyManage {
UserInfoDetails user = LoginUserUtil.loginUserDetail();

// 当前登录用户 单位code
String empPosUnitCode = user.getEmpPosUnitCode();
String mhUnitId = user.getMhUnitIdStr();
// 获取当前登录用户的角色列表,只有单位管理员才能查看该列表
List<Role> userRoleList = user.getUserRoleList();
List<Long> roleIdList = userRoleList.stream().map(Role::getId).collect(Collectors.toList());
Role role =
roleService.getOne(Wrappers.lambdaQuery(Role.class).eq(Role::getName, RoleEnum.COMPANY_MANAGER.getDesc()));
Role role = roleService.getOne(Wrappers.lambdaQuery(Role.class)
.eq(Role::getName, RoleEnum.COMPANY_MANAGER.getDesc()));
if (Objects.isNull(role)) {
throw new BizException("登录用户没有单位管理员角色!");
}
@@ -87,7 +90,7 @@ public class RectifyManage {

// 获取登录用户所在单位的所有已终验项目信息
List<Project> projectLists = projectService.list(Wrappers.lambdaQuery(Project.class)
.eq(Project::getStatus, ProjectStatusEnum.ACCEPTED.getCode()).eq(Project::getBuildOrgCode, empPosUnitCode));
.eq(Project::getStatus, ProjectStatusEnum.ACCEPTED.getCode()).eq(Project::getBuildOrgCode, mhUnitId));

if (CollUtil.isEmpty(projectLists)) {
return PageVo.empty();
@@ -161,7 +164,7 @@ public class RectifyManage {
Page<Project> page = req.page();
LambdaQueryWrapper<Project> wrapper =
Wrappers.lambdaQuery(Project.class).in(Project::getProjectCode, projectCodes)
.eq(Project::getNewest, Boolean.TRUE).eq(Project::getBuildOrgCode, user.getEmpPosUnitCode())
.eq(Project::getNewest, Boolean.TRUE).eq(Project::getBuildOrgCode, user.getMhUnitId())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
projectService.page(page, wrapper);

@@ -189,7 +192,7 @@ public class RectifyManage {
UserInfoDetails user = LoginUserUtil.loginUserDetail();

PerformanceAppraisal plan = performanceAppraisalService.getById(planId);
VUtils.isTrue(Objects.isNull(plan)).throwMessage("该评价计划不存在!");
Assert.notNull(plan, "该评价计划不存在!");

// 获取评价计划内已添加的已整改项目信息
List<PerformanceAppraisalProject> paps =
@@ -199,8 +202,6 @@ public class RectifyManage {
.and(wp -> wp
.eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.TO_BE_REVIEWED.getCode()).or()
.eq(PerformanceAppraisalProject::getRectifyStatus, RectifyStatusEnum.APPROVED.getCode())));
Map<Long, PerformanceAppraisalProject> papsMap =
paps.stream().collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));

if (CollUtil.isEmpty(paps)) {
return PageVo.empty();
@@ -210,15 +211,19 @@ public class RectifyManage {
Set<String> projectCodes =
paps.stream().map(PerformanceAppraisalProject::getProjectCode).collect(Collectors.toSet());
Page<Project> page = req.page();
LambdaQueryWrapper<Project> wrapper =
Wrappers.lambdaQuery(Project.class).in(Project::getProjectCode, projectCodes)
.eq(Project::getNewest, Boolean.TRUE).eq(Project::getBuildOrgCode, user.getEmpPosUnitCode())
.like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
LambdaQueryWrapper<Project> wrapper = Wrappers.lambdaQuery(Project.class)
.in(Project::getProjectCode, projectCodes)
.eq(Project::getNewest, Boolean.TRUE)
.eq(Project::getBuildOrgCode, user.getMhUnitId())
.like(StrUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName());
projectService.page(page, wrapper);

if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}
Map<Long, PerformanceAppraisalProject> papsMap = paps.stream()
.collect(Collectors.toMap(PerformanceAppraisalProject::getProjectId, p -> p));

List<PerformanceAppraisalProjectVO> res = page.getRecords().stream().map(p -> {
PerformanceAppraisalProjectVO vo = BeanUtil.copyProperties(p, PerformanceAppraisalProjectVO.class);
PerformanceAppraisalProject appraisalProject = papsMap.get(p.getId());
@@ -239,19 +244,20 @@ public class RectifyManage {
RectifyDetailVO vo = new RectifyDetailVO();
// 根据评价计划ID和项目编号获取评价项目信息
PerformanceAppraisalProject appraisalProject = performanceAppraisalProjectService.getOne(Wrappers
.lambdaQuery(PerformanceAppraisalProject.class).eq(PerformanceAppraisalProject::getAppraisalId, planId)
.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, planId)
.eq(PerformanceAppraisalProject::getProjectCode, projectCode));
VUtils.isTrue(Objects.isNull(appraisalProject)).throwMessage("该项目已被移除评价计划,请返回上一页或者刷新重试!!");
Assert.notNull(appraisalProject, "该项目已被移除评价计划,请返回上一页或者刷新重试!");
BeanUtils.copyProperties(appraisalProject, vo);
String rectifySubmitEmployeeCode = appraisalProject.getRectifySubmitEmployeeCode();
if (StringUtils.isNotBlank(rectifySubmitEmployeeCode)) {
UserFullInfoDTO userFullInfoDto = userInfoHelper.getUserFullInfoByEmployeeCode(rectifySubmitEmployeeCode);
vo.setRectifySubmitEmployee(userFullInfoDto);
String rectifySubmitUserId = appraisalProject.getRectifySubmitUserId();
if (StrUtils.isNotBlank(rectifySubmitUserId)) {
UserFullInfoDTO userFullInfoDto = userInfoHelper.getUserFullInfo(rectifySubmitUserId);
vo.setRectifySubmitUser(userFullInfoDto);
}
String rectifyResSubEmpCode = appraisalProject.getRectifyResSubEmpCode();
if (StringUtils.isNotBlank(rectifyResSubEmpCode)) {
UserFullInfoDTO userFullInfoDto = userInfoHelper.getUserFullInfoByEmployeeCode(rectifyResSubEmpCode);
vo.setRectifyResSubEmployee(userFullInfoDto);
String rectifyResSubUserId = appraisalProject.getRectifyResSubUserId();
if (StrUtils.isNotBlank(rectifyResSubUserId)) {
UserFullInfoDTO userFullInfoDto = userInfoHelper.getUserFullInfo(rectifyResSubUserId);
vo.setRectifyResSubUser(userFullInfoDto);
}
vo.setRectifyStatusName(RectifyStatusEnum.getDesc(appraisalProject.getRectifyStatus()));
return vo;
@@ -260,7 +266,7 @@ public class RectifyManage {
@Transactional(rollbackFor = Exception.class)
public String fillOutResult(ProjectAppraisalDTO param) {
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String employeeCode = userDetail.getEmployeeCode();
String userIdStr = String.valueOf(userDetail.getUserId());
String username = userDetail.getUsername();

Long appraisalId = param.getAppraisalId();
@@ -270,16 +276,17 @@ public class RectifyManage {
String rectifyResultAppendix = param.getRectifyResultAppendix();

// 判断该项目是否还存在于计划或分组中
PerformanceAppraisalProject appraisalProject = performanceAppraisalProjectService.getOne(Wrappers
.lambdaQuery(PerformanceAppraisalProject.class).eq(PerformanceAppraisalProject::getAppraisalId, appraisalId)
Wrapper<PerformanceAppraisalProject> query = Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
.eq(PerformanceAppraisalProject::getAppraisalId, appraisalId)
.eq(PerformanceAppraisalProject::getProjectId, appraisalProjectId)
.eq(PerformanceAppraisalProject::getProjectCode, appraisalProjectCode));
.eq(PerformanceAppraisalProject::getProjectCode, appraisalProjectCode);
PerformanceAppraisalProject appraisalProject = performanceAppraisalProjectService.getOne(query);
if (Objects.isNull(appraisalProject)) {
throw new BizException("该项目已被移除评价计划,请返回上一页或者刷新重试!");
}
appraisalProject.setRectifyResult(rectifyResult);
appraisalProject.setRectifyResultAppendix(rectifyResultAppendix);
appraisalProject.setRectifyResSubEmpCode(employeeCode);
appraisalProject.setRectifyResSubUserId(userIdStr);
appraisalProject.setRectifyResSubTime(LocalDateTime.now());
// 更新整改状态为整改待审核
appraisalProject.setRectifyStatus(RectifyStatusEnum.TO_BE_REVIEWED.getCode());


+ 73
- 69
hz-pm-api/src/main/java/com/hz/pm/api/performance/manage/VerifyManage.java Bestand weergeven

@@ -2,16 +2,21 @@ package com.hz.pm.api.performance.manage;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.enumeration.CommonEnum;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.performance.constant.ProjectBizConst;
import com.hz.pm.api.performance.enumration.AppraisalTypeEnum;
import com.hz.pm.api.performance.enumration.RectifyStatusEnum;
@@ -26,8 +31,8 @@ import com.hz.pm.api.performance.service.*;
import com.hz.pm.api.performance.util.*;
import com.hz.pm.api.portrait.model.entity.ProjectTag;
import com.hz.pm.api.portrait.service.IProjectTagService;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.sys.model.entity.Role;
import com.hz.pm.api.sys.service.IRoleService;
@@ -47,6 +52,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -100,12 +106,14 @@ public class VerifyManage {
List<PerformanceAppraisalProjectGroup> projectGroups = groupService.list();
for (PerformanceAppraisalProjectGroup projectGroup : projectGroups) {
String verificationUsers = projectGroup.getVerificationUsers();
if (verificationUsers.contains(StrPool.COMMA)) {
if (verificationUsers.contains(employeeCode)) {
if (StrUtils.isNotBlank(verificationUsers)) {
if (verificationUsers.contains(StrPool.COMMA)) {
if (verificationUsers.contains(employeeCode)) {
groups.add(projectGroup);
}
} else if (verificationUsers.equals(employeeCode)) {
groups.add(projectGroup);
}
} else if (verificationUsers.equals(employeeCode)) {
groups.add(projectGroup);
}
}
// 当前登录专家没有绩效分组信息
@@ -139,31 +147,28 @@ public class VerifyManage {
/**
* 是否可以核查
*
* @param employeeCode
* @param projectCode
* @param appraisalId
* @return
* @param userId \
* @param projectCode \
* @param appraisalId \
* @return \
*/
private Boolean checkCanVerify(String employeeCode, String projectCode, Long appraisalId) {

private Boolean checkCanVerify(String userId, String projectCode, Long appraisalId) {
// 首次核查(核查打分信息为空)
// 从绩效评价打分信息表中查询打分类型为专家核查、打分人员为当前登录专家用户的打分信息
// 如果没有相关的打分信息,说明是当前登录复评用户是首次核查
List<PerformanceAppraisalScoreInfo> scoreInfos = performanceAppraisalScoreInfoService.list(Wrappers.lambdaQuery(PerformanceAppraisalScoreInfo.class)
Wrapper<PerformanceAppraisalScoreInfo> query = Wrappers.lambdaQuery(PerformanceAppraisalScoreInfo.class)
.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.EXPERT_VERIFY.getCode())
.eq(PerformanceAppraisalScoreInfo::getAppraisalId, appraisalId)
.eq(PerformanceAppraisalScoreInfo::getAppraisalProjectCode, projectCode)
.eq(PerformanceAppraisalScoreInfo::getAppraisalEmployeeCode, employeeCode));
if (CollUtil.isEmpty(scoreInfos)) {
return true;
}
return Boolean.FALSE;
.eq(PerformanceAppraisalScoreInfo::getAppraisalUserId, userId)
.last(BizConst.LIMIT_1);
return performanceAppraisalScoreInfoService.count(query) == 0;
}

public PageVo<PerformanceAppraisalProjectVO> groupProjectList(Long groupId, PerformanceAppraisalListReq req) {

UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String employeeCode = userDetail.getEmployeeCode();
String userIdStr = userDetail.getUserIdStr();

// 获取分组内的项目信息
PerformanceAppraisalProjectGroup projectGroup = groupService.getById(groupId);
@@ -204,10 +209,10 @@ public class VerifyManage {
BeanUtil.copyProperties(appraisalProject, vo);
vo.setProjectId(appraisalProject.getProjectId());
vo.setProjectTypeName(ProjectTypeNewEnum.getDesc(p.getProjectType()));
vo.setCanVerify(checkCanVerify(employeeCode, appraisalProject.getProjectCode(), appraisalId));
vo.setCanVerify(checkCanVerify(userIdStr, appraisalProject.getProjectCode(), appraisalId));
// 如果登录用户是核查组长,该项目可填写整改意见
String verifyLeader = projectGroup.getVerifyLeader();
if (employeeCode.equals(verifyLeader)) {
if (userIdStr.equals(verifyLeader)) {
vo.setCanRectify(Boolean.TRUE);
}
vo.setGroupId(groupId);
@@ -220,7 +225,7 @@ public class VerifyManage {
@Transactional(rollbackFor = Exception.class)
public String submitVerify(ProjectAppraisalDTO param) {
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();
String employeeCode = userDetail.getEmployeeCode();
String userIdStr = String.valueOf(userDetail.getUserId());
String username = userDetail.getUsername();
Long appraisalId = param.getAppraisalId();
Long appraisalProjectId = param.getAppraisalProjectId();
@@ -260,8 +265,8 @@ public class VerifyManage {
scoreInfo.setAppraisalType(AppraisalTypeEnum.EXPERT_VERIFY.getCode());
scoreInfo.setTemplateDetailId(templateDetail.getId());
scoreInfo.setTemplateId(templateDetail.getTemplateId());
scoreInfo.setAppraisalEmployeeCode(employeeCode);
scoreInfo.setAppraisalEmployeeName(username);
scoreInfo.setAppraisalUserName(username);
scoreInfo.setAppraisalUserId(userIdStr);
scoreInfo.setAppraisalId(appraisalId);
scoreInfo.setAppraisalProjectId(appraisalProjectId);
scoreInfo.setAppraisalProjectCode(appraisalProjectCode);
@@ -281,7 +286,7 @@ public class VerifyManage {
if (Objects.nonNull(appraisalProject.getVerifyTotalScore())) {
// 已经进行了核查,计算两个分值的平均分
BigDecimal add = verifyTotalScore.add(appraisalProject.getReAppraisalTotalScore());
lastVerifyTotalScore = add.divide(BigDecimal.valueOf(2));
lastVerifyTotalScore = add.divide(BigDecimal.valueOf(2), RoundingMode.HALF_UP);
} else {
// 还没有进行过复评
lastVerifyTotalScore = verifyTotalScore;
@@ -298,7 +303,7 @@ public class VerifyManage {
StringUtils.isNotBlank(param.getRectifyOpinion())) {
appraisalProject.setIsRectify(param.getIsRectify());
appraisalProject.setRectifyOpinion(param.getRectifyOpinion());
appraisalProject.setRectifySubmitEmployeeCode(employeeCode);
appraisalProject.setRectifySubmitUserId(userIdStr);
appraisalProject.setRectifySubmitTime(LocalDateTime.now());
appraisalProject.setRectifyStatus(RectifyStatusEnum.TO_BE_SUBMITTED.getCode());
}
@@ -317,7 +322,9 @@ public class VerifyManage {

// 判断打分人员是否为分组内的核查人员
if (CollUtil.isNotEmpty(scoreInfoList)) {
Set<String> users = scoreInfoList.stream().map(PerformanceAppraisalScoreInfo::getAppraisalEmployeeCode).collect(Collectors.toSet());
Set<String> users = scoreInfoList.stream()
.map(PerformanceAppraisalScoreInfo::getAppraisalUserId)
.collect(Collectors.toSet());
if (CollUtil.isNotEmpty(users)) {
String verificationUsers = group.getVerificationUsers();
String join = String.join(StrPool.COMMA, users);
@@ -330,29 +337,24 @@ public class VerifyManage {
}

public void exportScore(HttpServletResponse response, PerformanceAppraisalExportReq param) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
String regionCode = user.getRegionCode();
String projectCode = param.getProjectCode();
Long appraisalId = param.getAppraisalId();

// 根据项目编码获取最新版本的项目信息
Project project = projectService.getProjectByCode(projectCode);
VUtils.isTrue(Objects.isNull(project)).throwMessage("项目不存在!");
Assert.notNull(project, "项目不存在!");
// 根据项目类型、预算年度、批复金额、项目标签匹配本区域指标模版
String projectType = project.getProjectType();
Integer projectYear = project.getProjectYear();
BigDecimal approvalAmount = project.getApprovalAmount();
VUtils.isTrue(Objects.isNull(approvalAmount)).throwMessage("未获取到该项目的立项批复金额");
Assert.notNull(approvalAmount, "未获取到该项目的立项批复金额");
// 根据项目code获取项目标签ID列表
List<Long> tagIdList = projectTagService.list(Wrappers.lambdaQuery(ProjectTag.class)
String tagIdStr = projectTagService.list(Wrappers.lambdaQuery(ProjectTag.class)
.eq(ProjectTag::getProjectCode, projectCode)).stream()
.map(ProjectTag::getTagId).collect(Collectors.toList());
VUtils.isTrue(CollUtil.isEmpty(tagIdList)).throwMessage("当前项目未设置标签,匹配不到指标模板,请至项目库或评价计划编辑页面设置标签!");
.map(w -> w.getTagId().toString()).collect(Collectors.joining(","));
Assert.notEmpty(tagIdStr, "当前项目未设置标签,请至项目库或评价计划编辑页面设置标签!");

List<String> strIdList = tagIdList.stream().map(String::valueOf).collect(Collectors.toList());
String projectTagIds = String.join(StrPool.COMMA, strIdList);

Integer amountRange = null;
Integer amountRange;
if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) < 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_ONE;
} else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.FIVE_MILLION)) >= 0 &&
@@ -360,19 +362,20 @@ public class VerifyManage {
amountRange = ProjectBizConst.AMOUNT_RANGE_TWO;
} else if (approvalAmount.compareTo(BigDecimal.valueOf(ProjectBizConst.TWENTY_MILLION)) >= 0) {
amountRange = ProjectBizConst.AMOUNT_RANGE_THREE;
} else {
amountRange = null;
}
LambdaQueryWrapper<PerformanceIndicatorProjectTemplate> wrapper = Wrappers.lambdaQuery(PerformanceIndicatorProjectTemplate.class)
.eq(PerformanceIndicatorProjectTemplate::getRegionCode, regionCode)
LambdaQueryWrapper<PerformanceIndicatorProjectTemplate> wrapper = Wrappers
.lambdaQuery(PerformanceIndicatorProjectTemplate.class)
.eq(PerformanceIndicatorProjectTemplate::getProjectType, projectType)
.eq(PerformanceIndicatorProjectTemplate::getProjectYear, projectYear)
.eq(PerformanceIndicatorProjectTemplate::getAmountRange, amountRange)
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds, projectTagIds)
.eq(PerformanceIndicatorProjectTemplate::getProjectTagIds, tagIdStr)
.eq(PerformanceIndicatorProjectTemplate::getStatus, CommonEnum.YES.getCode())
.orderByDesc(PerformanceIndicatorProjectTemplate::getUpdateOn);
List<PerformanceIndicatorProjectTemplate> templates = indicatorProjectTemplateService.list(wrapper);
VUtils.isTrue(CollUtil.isEmpty(templates)).throwMessage("该项目匹配不到指标模板,请返回上一页或者刷新重试。");
if (templates.size() > 1) {
throw new BizException("当前项目匹配到多个模板,请返回模板库检查模板配置!");
if (templates.size() != 1) {
throw BizException.wrap("当前项目模版配置错误!");
}
PerformanceIndicatorProjectTemplate projectTemplate = templates.get(0);
// 装配项目指标详情及分数信息
@@ -384,11 +387,12 @@ public class VerifyManage {
List<Map<String, Object>> exportDataList = Lists.newArrayList();
List<Map<String, Object>> exportAdditionalDataList = Lists.newArrayList();
// 构建指标和打分详情
List<PerformanceAppraisalScoreInfo> scoreInfoList = performanceAppraisalScoreInfoService.list(Wrappers.lambdaQuery(PerformanceAppraisalScoreInfo.class)
List<PerformanceAppraisalScoreInfo> scoreInfoList = performanceAppraisalScoreInfoService.list(Wrappers
.lambdaQuery(PerformanceAppraisalScoreInfo.class)
.eq(PerformanceAppraisalScoreInfo::getAppraisalId, appraisalId)
.and(wp -> wp.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.SELF_APPRAISAL.getCode()).or()
.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.RE_APPRAISAL.getCode()).or()
.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.EXPERT_VERIFY.getCode()))
.and(wp -> wp.eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.SELF_APPRAISAL.getCode())
.or().eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.RE_APPRAISAL.getCode())
.or().eq(PerformanceAppraisalScoreInfo::getAppraisalType, AppraisalTypeEnum.EXPERT_VERIFY.getCode()))
.eq(PerformanceAppraisalScoreInfo::getAppraisalProjectCode, projectCode)
.orderBy(Boolean.TRUE, Boolean.TRUE, PerformanceAppraisalScoreInfo::getTemplateDetailId));
Map<Long, PerformanceAppraisalScoreInfo> scoreInfoMap = scoreInfoList.stream()
@@ -399,7 +403,7 @@ public class VerifyManage {
.filter(s -> AppraisalTypeEnum.RE_APPRAISAL.getCode().equals(s.getAppraisalType()))
.collect(Collectors.toList());
List<String> reUserList = reScoreInfoList.stream()
.map(PerformanceAppraisalScoreInfo::getAppraisalEmployeeName)
.map(PerformanceAppraisalScoreInfo::getAppraisalUserName)
.collect(Collectors.toList());

// 获取核查打分人员信息
@@ -407,12 +411,12 @@ public class VerifyManage {
.filter(s -> AppraisalTypeEnum.EXPERT_VERIFY.getCode().equals(s.getAppraisalType()))
.collect(Collectors.toList());
List<String> verifyUserList = verifyScoreInfoList.stream()
.map(PerformanceAppraisalScoreInfo::getAppraisalEmployeeName)
.map(PerformanceAppraisalScoreInfo::getAppraisalUserName)
.collect(Collectors.toList());

// 筛选出所有打分的三级指标模板详情ID
for (PerformanceAppraisalScoreInfo scoreInfo : scoreInfoList) {
HashMap<String, Object> scoreMap = MapUtil.newHashMap();
Map<String, Object> scoreMap = MapUtil.newHashMap();
Long detailId = scoreInfo.getTemplateDetailId();
PerformanceIndicatorProjectTemplateDetail thirdTemplateDetail = templateDetailMap.get(detailId);

@@ -444,11 +448,11 @@ public class VerifyManage {
scoreMap.put(ProjectBizConst.SELF_APPRAISAL_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(ProjectBizConst.SELF_APPRAISAL_SCORE, appraisalScoreInfo.getAppraisalScore());
} else if (AppraisalTypeEnum.RE_APPRAISAL.getCode().equals(appraisalScoreInfo.getAppraisalType())) {
scoreMap.put(appraisalScoreInfo.getAppraisalEmployeeName() + ProjectBizConst.RE_APPRAISAL_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(appraisalScoreInfo.getAppraisalEmployeeName() + ProjectBizConst.RE_APPRAISAL_SCORE, appraisalScoreInfo.getAppraisalScore());
scoreMap.put(appraisalScoreInfo.getAppraisalUserName() + ProjectBizConst.RE_APPRAISAL_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(appraisalScoreInfo.getAppraisalUserName() + ProjectBizConst.RE_APPRAISAL_SCORE, appraisalScoreInfo.getAppraisalScore());
} else if (AppraisalTypeEnum.EXPERT_VERIFY.getCode().equals(appraisalScoreInfo.getAppraisalType())) {
scoreMap.put(appraisalScoreInfo.getAppraisalEmployeeName() + ProjectBizConst.VERIFY_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(appraisalScoreInfo.getAppraisalEmployeeName() + ProjectBizConst.VERIFY_SCORE, appraisalScoreInfo.getAppraisalScore());
scoreMap.put(appraisalScoreInfo.getAppraisalUserName() + ProjectBizConst.VERIFY_BASIS, appraisalScoreInfo.getAppraisalBasis());
scoreMap.put(appraisalScoreInfo.getAppraisalUserName() + ProjectBizConst.VERIFY_SCORE, appraisalScoreInfo.getAppraisalScore());
}

if (Boolean.TRUE.equals(thirdTemplateDetail.getIsAdditional())) {
@@ -469,26 +473,26 @@ public class VerifyManage {
// 需要从第几行开始合并
int mergeRowIndex = 2;

List<ExcelHead> headList = Lists.newArrayList();
headList.add(new ExcelHead(ProjectBizConst.FIRST_INDEX_NAME, ProjectBizConst.FIRST_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SECOND_INDEX_NAME, ProjectBizConst.SECOND_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.THIRD_INDEX_NAME, ProjectBizConst.THIRD_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.INDEX_SCORE, ProjectBizConst.INDEX_SCORE_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.INDEX_DETAIL, ProjectBizConst.INDEX_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.GRADE_DETAIL, ProjectBizConst.GRADE_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SUPPORT_MATERIAL, ProjectBizConst.SUPPORT_MATERIAL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SELF_APPRAISAL_BASIS, ProjectBizConst.SELF_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(ProjectBizConst.SELF_APPRAISAL_SCORE, ProjectBizConst.SELF_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
List<ExcelHead<Object>> headList = Lists.newArrayList();
headList.add(new ExcelHead<>(ProjectBizConst.FIRST_INDEX_NAME, ProjectBizConst.FIRST_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SECOND_INDEX_NAME, ProjectBizConst.SECOND_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.THIRD_INDEX_NAME, ProjectBizConst.THIRD_INDEX_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.INDEX_SCORE, ProjectBizConst.INDEX_SCORE_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.INDEX_DETAIL, ProjectBizConst.INDEX_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.GRADE_DETAIL, ProjectBizConst.GRADE_DETAIL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SUPPORT_MATERIAL, ProjectBizConst.SUPPORT_MATERIAL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SELF_APPRAISAL_BASIS, ProjectBizConst.SELF_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.SELF_APPRAISAL_SCORE, ProjectBizConst.SELF_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
for (String reUser : reUserList) {
headList.add(new ExcelHead(reUser + ProjectBizConst.RE_APPRAISAL_BASIS, ProjectBizConst.RE_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(reUser + ProjectBizConst.RE_APPRAISAL_SCORE, ProjectBizConst.RE_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(reUser + ProjectBizConst.RE_APPRAISAL_BASIS, ProjectBizConst.RE_APPRAISAL_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(reUser + ProjectBizConst.RE_APPRAISAL_SCORE, ProjectBizConst.RE_APPRAISAL_SCORE_TITLE, StrPool.EMPTY));
}

for (String verifyUser : verifyUserList) {
headList.add(new ExcelHead(verifyUser + ProjectBizConst.VERIFY_BASIS, ProjectBizConst.VERIFY_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead(verifyUser + ProjectBizConst.VERIFY_SCORE, ProjectBizConst.VERIFY_SCORE_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(verifyUser + ProjectBizConst.VERIFY_BASIS, ProjectBizConst.VERIFY_BASIS_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(verifyUser + ProjectBizConst.VERIFY_SCORE, ProjectBizConst.VERIFY_SCORE_TITLE, StrPool.EMPTY));
}
headList.add(new ExcelHead(ProjectBizConst.IS_ADDITIONAL, ProjectBizConst.IS_ADDITIONAL_TITLE, StrPool.EMPTY));
headList.add(new ExcelHead<>(ProjectBizConst.IS_ADDITIONAL, ProjectBizConst.IS_ADDITIONAL_TITLE, StrPool.EMPTY));

// 数据导出处理函数
try {


+ 0
- 3
hz-pm-api/src/main/java/com/hz/pm/api/performance/model/dto/PerformanceIndicatorProjectTemplateSaveDTO.java Bestand weergeven

@@ -25,9 +25,6 @@ public class PerformanceIndicatorProjectTemplateSaveDTO implements Serializable
@ApiModelProperty("模板名称")
private String name;

@ApiModelProperty("丽水 区域code")
private String regionCode;

@ApiModelProperty("项目年度")
private Integer projectYear;



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

Laden…
Annuleren
Opslaan