@@ -1,12 +1,17 @@ | |||||
package com.ningdatech.pmapi.ding.task; | package com.ningdatech.pmapi.ding.task; | ||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.ningdatech.basic.model.GenericResult; | import com.ningdatech.basic.model.GenericResult; | ||||
import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo; | import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo; | ||||
import com.ningdatech.pmapi.organization.model.entity.DingOrganization; | import com.ningdatech.pmapi.organization.model.entity.DingOrganization; | ||||
import com.ningdatech.pmapi.organization.service.IDingEmployeeInfoService; | import com.ningdatech.pmapi.organization.service.IDingEmployeeInfoService; | ||||
import com.ningdatech.pmapi.organization.service.IDingOrganizationService; | import com.ningdatech.pmapi.organization.service.IDingOrganizationService; | ||||
import com.ningdatech.pmapi.user.constant.UserAvailableEnum; | |||||
import com.ningdatech.pmapi.user.entity.UserInfo; | |||||
import com.ningdatech.pmapi.user.service.IUserInfoService; | |||||
import com.ningdatech.zwdd.ZwddIntegrationProperties; | import com.ningdatech.zwdd.ZwddIntegrationProperties; | ||||
import com.ningdatech.zwdd.client.ZwddClient; | import com.ningdatech.zwdd.client.ZwddClient; | ||||
import com.ningdatech.zwdd.model.Page; | import com.ningdatech.zwdd.model.Page; | ||||
@@ -20,9 +25,7 @@ import org.springframework.stereotype.Component; | |||||
import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.*; | |||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
/** | /** | ||||
@@ -49,6 +52,9 @@ public class EmployeeBatchGetTask { | |||||
@Autowired | @Autowired | ||||
private ZwddIntegrationProperties zwddIntegrationProperties; | private ZwddIntegrationProperties zwddIntegrationProperties; | ||||
@Autowired | |||||
private IUserInfoService iUserInfoService; | |||||
@Transactional(rollbackFor = Exception.class) | @Transactional(rollbackFor = Exception.class) | ||||
public void batchGetEmployeeTask() { | public void batchGetEmployeeTask() { | ||||
@@ -107,16 +113,18 @@ public class EmployeeBatchGetTask { | |||||
List<String> employeeCodes = segment.stream().map(OrganizationEmployeePosition::getEmployeeCode).distinct().collect(Collectors.toList()); | List<String> employeeCodes = segment.stream().map(OrganizationEmployeePosition::getEmployeeCode).distinct().collect(Collectors.toList()); | ||||
GenericResult<List<EmployeeAccountIdDTO>> listGenericResult = zwddClient.listEmployeeAccountIds(employeeCodes); | GenericResult<List<EmployeeAccountIdDTO>> listGenericResult = zwddClient.listEmployeeAccountIds(employeeCodes); | ||||
List<EmployeeAccountIdDTO> employeeAccountIdDTOList = listGenericResult.getData(); | List<EmployeeAccountIdDTO> employeeAccountIdDTOList = listGenericResult.getData(); | ||||
Map<String, Long> employeeCodeAccountIdMap = employeeAccountIdDTOList.stream() | |||||
.collect(Collectors.toMap(EmployeeAccountIdDTO::getEmployeeCode, EmployeeAccountIdDTO::getAccountId)); | |||||
if (CollUtil.isNotEmpty(employeeAccountIdDTOList)) { | |||||
Map<String, Long> employeeCodeAccountIdMap = employeeAccountIdDTOList.stream().filter(Objects::nonNull) | |||||
.collect(Collectors.toMap(EmployeeAccountIdDTO::getEmployeeCode, EmployeeAccountIdDTO::getAccountId)); | |||||
List<DingEmployeeInfo> dingEmployeeInfos = buildDingEmployeeInfoRecordList(segment); | |||||
List<DingEmployeeInfo> dingEmployeeInfos = buildDingEmployeeInfoRecordList(segment); | |||||
dingEmployeeInfos = dingEmployeeInfos.stream().map(r -> { | |||||
r.setAccountId(employeeCodeAccountIdMap.get(r.getEmployeeCode())); | |||||
return r; | |||||
}).collect(Collectors.toList()); | |||||
dingEmployeeInfoSaveRecordList.addAll(dingEmployeeInfos); | |||||
dingEmployeeInfos = dingEmployeeInfos.stream().map(r -> { | |||||
r.setAccountId(employeeCodeAccountIdMap.get(r.getEmployeeCode())); | |||||
return r; | |||||
}).collect(Collectors.toList()); | |||||
dingEmployeeInfoSaveRecordList.addAll(dingEmployeeInfos); | |||||
} | |||||
} | } | ||||
private List<DingEmployeeInfo> buildDingEmployeeInfoRecordList(List<OrganizationEmployeePosition> allOrganizationEmployeePositionList) { | private List<DingEmployeeInfo> buildDingEmployeeInfoRecordList(List<OrganizationEmployeePosition> allOrganizationEmployeePositionList) { | ||||
@@ -154,13 +162,66 @@ public class EmployeeBatchGetTask { | |||||
} | } | ||||
private void saveBatch(List<DingEmployeeInfo> dingEmployeeInfoSaveRecordList) { | private void saveBatch(List<DingEmployeeInfo> dingEmployeeInfoSaveRecordList) { | ||||
if (dingEmployeeInfoSaveRecordList.size() <= GROUP_SIZE) { | |||||
iDingEmployeeInfoService.saveBatch(dingEmployeeInfoSaveRecordList); | |||||
} else { | |||||
List<List<DingEmployeeInfo>> split = Lists.partition(dingEmployeeInfoSaveRecordList, GROUP_SIZE); | |||||
for (List<DingEmployeeInfo> segment : split) { | |||||
iDingEmployeeInfoService.saveBatch(segment); | |||||
dingEmployeeInfoSaveRecordList = dingEmployeeInfoSaveRecordList.stream() | |||||
.filter(r -> "true".equals(r.getMainJob()) | |||||
&& "A".equals(r.getEmpStatus()) | |||||
&& StringUtils.isNotBlank(r.getOrganizationCode()) | |||||
&& StringUtils.isNotBlank(r.getEmployeeCode()) | |||||
).collect(Collectors.toList()); | |||||
Set<String> uniqueKeySet = new HashSet<String>(); | |||||
List<DingEmployeeInfo> saveList = new ArrayList<>(); | |||||
for (DingEmployeeInfo dingEmployeeInfo : dingEmployeeInfoSaveRecordList) { | |||||
if (uniqueKeySet.add(dingEmployeeInfo.getEmployeeCode() + dingEmployeeInfo.getOrganizationCode())) { | |||||
saveList.add(dingEmployeeInfo); | |||||
} | |||||
} | |||||
for (DingEmployeeInfo dingEmployeeInfo : saveList) { | |||||
String employeeCode = dingEmployeeInfo.getEmployeeCode(); | |||||
DingEmployeeInfo employeeInfo = iDingEmployeeInfoService.getOne(Wrappers.lambdaQuery(DingEmployeeInfo.class) | |||||
.eq(DingEmployeeInfo::getOrganizationCode, dingEmployeeInfo.getOrganizationCode()) | |||||
.eq(DingEmployeeInfo::getEmployeeCode, employeeCode)); | |||||
if (Objects.isNull(employeeInfo)) { | |||||
iDingEmployeeInfoService.save(dingEmployeeInfo); | |||||
} else { | |||||
dingEmployeeInfo.setId(employeeInfo.getId()); | |||||
iDingEmployeeInfoService.saveOrUpdate(dingEmployeeInfo); | |||||
} | } | ||||
generateOrUpdateUserInfo(dingEmployeeInfo); | |||||
} | |||||
} | |||||
public void generateOrUpdateUserInfo(DingEmployeeInfo dingEmployeeInfo) { | |||||
String employeeCode = dingEmployeeInfo.getEmployeeCode(); | |||||
UserInfo userInfo = iUserInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class) | |||||
.eq(UserInfo::getEmployeeCode, employeeCode)); | |||||
if (Objects.isNull(userInfo)) { | |||||
userInfo = UserInfo.builder() | |||||
.accountId(dingEmployeeInfo.getAccountId()) | |||||
.username(dingEmployeeInfo.getEmployeeName()) | |||||
.realName(dingEmployeeInfo.getEmployeeName()) | |||||
.employeeCode(dingEmployeeInfo.getEmployeeCode()) | |||||
.available(UserAvailableEnum.DISABLE.name()) | |||||
.createBy(-1L) | |||||
.updateBy(-1L) | |||||
.createOn(LocalDateTime.now()) | |||||
.updateOn(LocalDateTime.now()) | |||||
.build(); | |||||
iUserInfoService.save(userInfo); | |||||
} | } | ||||
} | } | ||||
// if (saveList.size() <= GROUP_SIZE) { | |||||
// iDingEmployeeInfoService.saveBatch(saveList); | |||||
// } else { | |||||
// List<List<DingEmployeeInfo>> split = Lists.partition(saveList, GROUP_SIZE); | |||||
// for (List<DingEmployeeInfo> segment : split) { | |||||
// iDingEmployeeInfoService.saveBatch(segment); | |||||
// } | |||||
// } | |||||
} | } |
@@ -29,6 +29,9 @@ public class InviteExpertListItemVO extends ExpertBasicInfoVO { | |||||
@ApiModelProperty("手机号") | @ApiModelProperty("手机号") | ||||
private String mobile; | private String mobile; | ||||
@ApiModelProperty("是否是专家组长") | |||||
private Boolean isHeadman; | |||||
@ApiModelProperty("专家会议ID") | @ApiModelProperty("专家会议ID") | ||||
private Long expertMeetingId; | private Long expertMeetingId; | ||||
@@ -67,7 +67,7 @@ public class ExpertInviteManage { | |||||
private final ExpertInviteHelper expertInviteHelper; | private final ExpertInviteHelper expertInviteHelper; | ||||
private final IExpertUserFullInfoService expertUserFullInfoService; | private final IExpertUserFullInfoService expertUserFullInfoService; | ||||
private final IMeetingService meetingService; | private final IMeetingService meetingService; | ||||
private final IExpertAvoidCompanyService iExpertAvoidCompanyService; | |||||
private final IExpertAvoidCompanyService expertAvoidCompanyService; | |||||
private final YxtCallOrSmsHelper yxtCallOrSmsHelper; | private final YxtCallOrSmsHelper yxtCallOrSmsHelper; | ||||
private static final Predicate<Collection<?>> COLL_EMPTY = (coll) -> coll != null && coll.isEmpty(); | private static final Predicate<Collection<?>> COLL_EMPTY = (coll) -> coll != null && coll.isEmpty(); | ||||
@@ -114,27 +114,17 @@ public class ExpertInviteManage { | |||||
/** | /** | ||||
* 如果抽取回避单位和专家回避单位一致,同样需要回避该专家 | * 如果抽取回避单位和专家回避单位一致,同样需要回避该专家 | ||||
* | * | ||||
* @param companyNames / | |||||
* @param unitCodeList / | |||||
* @return / | * @return / | ||||
*/ | */ | ||||
private List<Long> avoidCompanyExpertIds(List<String> companyNames) { | |||||
if (CollUtil.isEmpty(companyNames)) { | |||||
private List<Long> avoidCompanyExpertIds(List<String> unitCodeList) { | |||||
if (CollUtil.isEmpty(unitCodeList)) { | |||||
return new ArrayList<>(); | return new ArrayList<>(); | ||||
} | } | ||||
List<String> dealCompanyNames = new ArrayList<>(); | |||||
for (String companyName : companyNames) { | |||||
if (companyName.contains(",")) { | |||||
String[] splitCompanyNames = companyName.split(","); | |||||
for (String splitCompanyName : splitCompanyNames) { | |||||
dealCompanyNames.add(splitCompanyName); | |||||
} | |||||
} else { | |||||
dealCompanyNames.add(companyName); | |||||
} | |||||
} | |||||
List<ExpertAvoidCompany> expertAvoidCompanyList = iExpertAvoidCompanyService.list(Wrappers.lambdaQuery(ExpertAvoidCompany.class) | |||||
.in(ExpertAvoidCompany::getCompanyName, dealCompanyNames)); | |||||
return expertAvoidCompanyList.stream().map(ExpertAvoidCompany::getUserId).distinct().collect(Collectors.toList()); | |||||
LambdaQueryWrapper<ExpertAvoidCompany> query = Wrappers.lambdaQuery(ExpertAvoidCompany.class) | |||||
.in(ExpertAvoidCompany::getCompanyUniqCode, unitCodeList); | |||||
List<ExpertAvoidCompany> expertAvoidCompanyList = expertAvoidCompanyService.list(query); | |||||
return CollUtils.fieldList(expertAvoidCompanyList, ExpertAvoidCompany::getUserId); | |||||
} | } | ||||
private List<Long> mergeExpertIdsByCondition(RandomInviteRuleDTO rule, AvoidRuleDTO avoidInfo) { | private List<Long> mergeExpertIdsByCondition(RandomInviteRuleDTO rule, AvoidRuleDTO avoidInfo) { | ||||
@@ -268,22 +258,14 @@ public class ExpertInviteManage { | |||||
boolean avoidCompany = CollUtil.isNotEmpty(avoidRule.getAvoidUnitIdList()); | boolean avoidCompany = CollUtil.isNotEmpty(avoidRule.getAvoidUnitIdList()); | ||||
Set<String> tmpAvoidCompany = new HashSet<>(); | Set<String> tmpAvoidCompany = new HashSet<>(); | ||||
if (avoidCompany) { | if (avoidCompany) { | ||||
List<String> companyIds = avoidRule.getAvoidUnitIdList(); | |||||
for (String companyId : companyIds) { | |||||
if (companyId.contains(",")) { | |||||
String[] splitCompanyIds = companyId.split(","); | |||||
Collections.addAll(tmpAvoidCompany, splitCompanyIds); | |||||
} else { | |||||
tmpAvoidCompany.add(companyId); | |||||
} | |||||
} | |||||
tmpAvoidCompany.addAll(avoidRule.getAvoidUnitIdList()); | |||||
} | } | ||||
// 回避信息 | // 回避信息 | ||||
LambdaQueryWrapper<ExpertUserFullInfo> query = buildBaseExpertQuery(); | LambdaQueryWrapper<ExpertUserFullInfo> query = buildBaseExpertQuery(); | ||||
query.notIn(!tmpAvoidCompany.isEmpty(), ExpertUserFullInfo::getCompany, tmpAvoidCompany); | |||||
query.notIn(!tmpAvoidCompany.isEmpty(), ExpertUserFullInfo::getCompanyUniqCode, tmpAvoidCompany); | |||||
if (avoidCompany) { | if (avoidCompany) { | ||||
query.notExists("select 1 from expert_avoid_company eac where eac.user_id = nd_expert_user_full_info.user_id" + | query.notExists("select 1 from expert_avoid_company eac where eac.user_id = nd_expert_user_full_info.user_id" + | ||||
" and company_name in ({0})", CollUtils.joinByComma(avoidRule.getAvoidUnitIdList())); | |||||
" and company_uniq_code in ({0})", CollUtils.joinByComma(avoidRule.getAvoidUnitIdList())); | |||||
} | } | ||||
// 处理专家层级 | // 处理专家层级 | ||||
addRegionLimit(query, randomRule); | addRegionLimit(query, randomRule); | ||||
@@ -322,7 +304,7 @@ public class ExpertInviteManage { | |||||
if (userInfoList.isEmpty()) { | if (userInfoList.isEmpty()) { | ||||
return result; | return result; | ||||
} | } | ||||
Map<String, List<ExpertUserFullInfo>> userGroupByUnit = CollUtils.group(userInfoList, ExpertUserFullInfo::getCompany); | |||||
Map<String, List<ExpertUserFullInfo>> userGroupByUnit = CollUtils.group(userInfoList, ExpertUserFullInfo::getCompanyUniqCode); | |||||
result.setTotal(userInfoList.size()); | result.setTotal(userInfoList.size()); | ||||
// count为空表示数量校验 | // count为空表示数量校验 | ||||
if (randomRule.getCount() == null || result.getTotal() >= randomRule.getCount()) { | if (randomRule.getCount() == null || result.getTotal() >= randomRule.getCount()) { | ||||
@@ -357,9 +339,9 @@ public class ExpertInviteManage { | |||||
return result; | return result; | ||||
} | } | ||||
LambdaQueryWrapper<ExpertUserFullInfo> query = buildBaseExpertQuery(); | LambdaQueryWrapper<ExpertUserFullInfo> query = buildBaseExpertQuery(); | ||||
query.notIn(ExpertUserFullInfo::getCompany, avoidRule.getAvoidUnitIdList()); | |||||
query.notIn(ExpertUserFullInfo::getCompanyUniqCode, avoidRule.getAvoidUnitIdList()); | |||||
query.notExists("select 1 from expert_avoid_company eac where eac.user_id = nd_expert_user_full_info.user_id" + | query.notExists("select 1 from expert_avoid_company eac where eac.user_id = nd_expert_user_full_info.user_id" + | ||||
" and company_name in ({0})", CollUtils.joinByComma(avoidRule.getAvoidOrgIdList())); | |||||
" and company_uniq_code in ({0})", CollUtils.joinByComma(avoidRule.getAvoidOrgIdList())); | |||||
// 处理专家层级 | // 处理专家层级 | ||||
if (StrUtils.isNotBlank(randomRule.getExpertRegionCode())) { | if (StrUtils.isNotBlank(randomRule.getExpertRegionCode())) { | ||||
@@ -411,7 +393,7 @@ public class ExpertInviteManage { | |||||
List<Long> tempExpertIds = CollUtils.fieldList(removeExpertByCompany, MeetingExpert::getExpertId); | List<Long> tempExpertIds = CollUtils.fieldList(removeExpertByCompany, MeetingExpert::getExpertId); | ||||
// 移除确认参加、通知中的、拒绝参加、已取消 | // 移除确认参加、通知中的、拒绝参加、已取消 | ||||
userFullInfos.removeIf(w -> tempExpertIds.contains(w.getUserId()) || removeExpertIds.contains(w.getUserId())); | userFullInfos.removeIf(w -> tempExpertIds.contains(w.getUserId()) || removeExpertIds.contains(w.getUserId())); | ||||
Map<String, List<ExpertUserFullInfo>> userGroupByUnit = CollUtils.group(userFullInfos, ExpertUserFullInfo::getCompany); | |||||
Map<String, List<ExpertUserFullInfo>> userGroupByUnit = CollUtils.group(userFullInfos, ExpertUserFullInfo::getCompanyUniqCode); | |||||
result.setTotal(userGroupByUnit.size()); | result.setTotal(userGroupByUnit.size()); | ||||
result.setExperts(inviteGroupByCompany(userGroupByUnit, count)); | result.setExperts(inviteGroupByCompany(userGroupByUnit, count)); | ||||
return result; | return result; | ||||
@@ -439,7 +421,7 @@ public class ExpertInviteManage { | |||||
* | * | ||||
* @param expertGroupByUnit 需要抽取的人 | * @param expertGroupByUnit 需要抽取的人 | ||||
* @param count 抽取数量 | * @param count 抽取数量 | ||||
* @return java.util.List<com.ningdatech.emapi.expert.entity.domain.ExpertUserFullInfo> | |||||
* @return 抽取到的专家信息 | |||||
* @author WendyYang | * @author WendyYang | ||||
**/ | **/ | ||||
private List<ExpertUserFullInfo> inviteGroupByCompany(Map<String, List<ExpertUserFullInfo>> expertGroupByUnit, Integer count) { | private List<ExpertUserFullInfo> inviteGroupByCompany(Map<String, List<ExpertUserFullInfo>> expertGroupByUnit, Integer count) { | ||||
@@ -456,6 +456,7 @@ public class MeetingManage { | |||||
item.setMobile(me.getMobile()); | item.setMobile(me.getMobile()); | ||||
item.setNoticeTime(me.getCreateOn()); | item.setNoticeTime(me.getCreateOn()); | ||||
item.setRuleId(me.getRuleId()); | item.setRuleId(me.getRuleId()); | ||||
item.setIsHeadman(me.getIsHeadman()); | |||||
if (NOTICING.eq(me.getStatus())) { | if (NOTICING.eq(me.getStatus())) { | ||||
item.setNoticeStatus("通知中"); | item.setNoticeStatus("通知中"); | ||||
} else { | } else { | ||||
@@ -67,7 +67,7 @@ | |||||
<select id="listExpertLastByMeetingIds" resultType="com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert"> | <select id="listExpertLastByMeetingIds" resultType="com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert"> | ||||
SELECT * FROM (SELECT ROW_NUMBER() OVER ( PARTITION BY expert_id, meeting_id ORDER BY update_on DESC ) rowNumber, | SELECT * FROM (SELECT ROW_NUMBER() OVER ( PARTITION BY expert_id, meeting_id ORDER BY update_on DESC ) rowNumber, | ||||
ID, expert_id, status, meeting_id, invite_type, mobile, expert_name, update_on, pre_id, rule_id FROM meeting_expert | |||||
ID, expert_id, status, meeting_id, invite_type, mobile, expert_name, update_on, rule_id FROM meeting_expert | |||||
where meeting_id <foreach collection="meetingIds" separator="," close=")" open=" in (" item="item"> | where meeting_id <foreach collection="meetingIds" separator="," close=")" open=" in (" item="item"> | ||||
#{item}</foreach>) em WHERE rowNumber = 1 | #{item}</foreach>) em WHERE rowNumber = 1 | ||||
</select> | </select> | ||||
@@ -107,6 +107,9 @@ public class ConstructionPlanManage { | |||||
String regionCode = projectInfo.getAreaCode(); | String regionCode = projectInfo.getAreaCode(); | ||||
//放入文件 | |||||
projectInfo.setConstructionPlanFile(projectDto.getConstructionPlanFile()); | |||||
WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) | WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) | ||||
.eq(WflowModels::getRegionCode, regionCode) | .eq(WflowModels::getRegionCode, regionCode) | ||||
.eq(WflowModels::getProcessType, ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS.getCode()) | .eq(WflowModels::getProcessType, ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS.getCode()) | ||||
@@ -282,7 +282,7 @@ public class DeclaredProjectManage { | |||||
projectApplication.setProjectId(project.getId()); | projectApplication.setProjectId(project.getId()); | ||||
return projectApplication; | return projectApplication; | ||||
}).collect(Collectors.toList()); | }).collect(Collectors.toList()); | ||||
projectApplicationService.saveBatch(applications); | |||||
projectApplicationService.saveOrUpdateBatch(applications); | |||||
} | } | ||||
//保存项目和实例的关系 | //保存项目和实例的关系 | ||||
ProjectInst projectInst = new ProjectInst(); | ProjectInst projectInst = new ProjectInst(); | ||||
@@ -2,23 +2,16 @@ package com.ningdatech.pmapi.projectdeclared.manage; | |||||
import com.alibaba.excel.EasyExcel; | import com.alibaba.excel.EasyExcel; | ||||
import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
import com.alibaba.fastjson.TypeReference; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 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.function.VUtils; | import com.ningdatech.basic.function.VUtils; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.basic.util.NdDateUtils; | import com.ningdatech.basic.util.NdDateUtils; | ||||
import com.ningdatech.pmapi.common.constant.CommonConst; | |||||
import com.ningdatech.pmapi.common.enumeration.ProjectProcessStageEnum; | |||||
import com.ningdatech.pmapi.common.helper.UserInfoHelper; | import com.ningdatech.pmapi.common.helper.UserInfoHelper; | ||||
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; | import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; | ||||
import com.ningdatech.pmapi.common.util.ExcelDownUtil; | import com.ningdatech.pmapi.common.util.ExcelDownUtil; | ||||
import com.ningdatech.pmapi.common.util.ExcelExportStyle; | import com.ningdatech.pmapi.common.util.ExcelExportStyle; | ||||
import com.ningdatech.pmapi.projectdeclared.model.dto.DeclaredProjectExportDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO; | import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO; | ||||
import com.ningdatech.pmapi.projectdeclared.model.dto.PretrialDeclaredExportDTO; | import com.ningdatech.pmapi.projectdeclared.model.dto.PretrialDeclaredExportDTO; | ||||
import com.ningdatech.pmapi.projectdeclared.model.dto.ProjectConditionDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.req.PrequalificationDeclaredListReq; | import com.ningdatech.pmapi.projectdeclared.model.req.PrequalificationDeclaredListReq; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum; | ||||
@@ -26,33 +19,22 @@ import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | |||||
import com.ningdatech.pmapi.projectlib.manage.ProjectLibManage; | import com.ningdatech.pmapi.projectlib.manage.ProjectLibManage; | ||||
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO; | import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO; | ||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | import com.ningdatech.pmapi.projectlib.model.entity.Project; | ||||
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst; | |||||
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | ||||
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | ||||
import com.ningdatech.pmapi.projectlib.service.IProjectInstService; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | import com.ningdatech.pmapi.projectlib.service.IProjectService; | ||||
import com.ningdatech.pmapi.staging.service.IProjectStagingService; | import com.ningdatech.pmapi.staging.service.IProjectStagingService; | ||||
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; | import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; | ||||
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails; | |||||
import com.ningdatech.pmapi.user.util.LoginUserUtil; | import com.ningdatech.pmapi.user.util.LoginUserUtil; | ||||
import com.wflow.bean.entity.WflowModels; | |||||
import com.wflow.exception.BusinessException; | import com.wflow.exception.BusinessException; | ||||
import com.wflow.workflow.bean.dto.OrgInfoDTO; | |||||
import com.wflow.workflow.bean.vo.ProcessStartParamsVo; | |||||
import com.wflow.workflow.service.ProcessInstanceService; | |||||
import com.wflow.workflow.service.ProcessModelService; | |||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import org.springframework.beans.BeanUtils; | import org.springframework.beans.BeanUtils; | ||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||
import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.util.Collections; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | |||||
import java.util.Objects; | import java.util.Objects; | ||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
@@ -108,9 +90,9 @@ public class PrequalificationDeclaredProjectManage { | |||||
VUtils.isTrue(!ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode().equals(projectInfo.getStatus()) || | VUtils.isTrue(!ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode().equals(projectInfo.getStatus()) || | ||||
!ProjectStatusEnum.NOT_APPROVED.getCode().equals(projectInfo.getStage())) | !ProjectStatusEnum.NOT_APPROVED.getCode().equals(projectInfo.getStage())) | ||||
.throwMessage("提交失败 该项目不是 待预审状态或者未立项阶段"); | .throwMessage("提交失败 该项目不是 待预审状态或者未立项阶段"); | ||||
//TODO 再判断 该项目是否 真实走完 单位内部审批 | |||||
//使用状态机 进入下一步 看看需不需要走省级审批 | |||||
//使用状态机 进入下一步 看看需不需要走省级审批 放入文件 | |||||
projectInfo.setHigherLineSuperOrgReviewComments(projectDto.getHigherLineSuperOrgReviewComments()); | |||||
stateMachineUtils.pass(projectInfo); | stateMachineUtils.pass(projectInfo); | ||||
String instanceId = null; | String instanceId = null; | ||||
//如果是省级部门 需要联审的(申报金额大于1000万 并且是市级项目) | //如果是省级部门 需要联审的(申报金额大于1000万 并且是市级项目) | ||||