Merge remote-tracking branch 'origin/feature/REQ-3300' into feature/REQ-3300

This commit is contained in:
xudawei 2025-02-19 14:22:18 +08:00
commit 274385bff8
5 changed files with 60 additions and 7 deletions

View File

@ -56,6 +56,11 @@
<artifactId>axzo-test-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.pokonyan</groupId>
<artifactId>pokonyan</artifactId>

View File

@ -14,6 +14,9 @@ spring:
main:
allow-bean-definition-overriding: true
server:
shutdown: graceful
arthas:
app-name: ${spring.application.name}
agent-id: ${ARTHAS_AGENT_ID:${spring.profiles.active}-${spring.application.name}}

View File

@ -24,6 +24,7 @@
<mapstruct.version>1.4.2.Final</mapstruct.version>
<poi.version>5.2.2</poi.version>
<easyexcel.version>3.3.3</easyexcel.version>
<feign-httpclient.version>11.8</feign-httpclient.version>
</properties>
<modules>
@ -54,6 +55,12 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>${feign-httpclient.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -159,6 +159,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
ChangeRecord record = changeRecordService.getById(req.getVisaId());
AssertUtil.notNull(record, "未找到变洽签记录");
AssertUtil.isTrue(Objects.equals(record.getImGroupId(), req.getImGroupId()), "IM群信息不匹配");
AssertUtil.isTrue(Objects.equals(record.getStatus(), VisaStatusEnum.DECIDING), "单据未在决策中,已不支持该操作");
ChangeRecordRelation relation = new ChangeRecordRelation();
relation.setVisaId(req.getVisaId());
@ -192,6 +193,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
ChangeRecord record = changeRecordService.getById(req.getVisaId());
AssertUtil.notNull(record, "未找到变洽签记录");
AssertUtil.isTrue(Objects.equals(record.getImGroupId(), req.getImGroupId()), "IM 群信息不匹配");
AssertUtil.isTrue(Objects.equals(record.getStatus(), VisaStatusEnum.DECIDING), "单据未在决策中,已不支持该操作");
if (Boolean.TRUE.equals(req.getClearAll())) {
deleteByVisaId(req.getVisaId(), Lists.newArrayList(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE));
@ -259,8 +261,8 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
if (req.getGroupTotalPersonCount() - 1 == agreeCount) {
// 全部同意
buttons.add(ImGroupButton.builder()
.name(VisaButtonTypeEnum.EXECUTE.getDesc())
.type(VisaButtonTypeEnum.EXECUTE.name())
.name(VisaButtonTypeEnum.TO_APPROVE.getDesc())
.type(VisaButtonTypeEnum.TO_APPROVE.name())
.build());
} else {
buttons.add(ImGroupButton.builder()

View File

@ -22,6 +22,7 @@ import cn.axzo.framework.domain.web.result.PageData;
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.api.vo.req.GroupCreateRequest;
import cn.axzo.im.center.api.vo.req.GroupDismissRequest;
import cn.axzo.im.center.api.vo.req.SendChatMessageRequest;
import cn.axzo.im.center.api.vo.resp.GroupCreateResponse;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.GroupType;
@ -1141,7 +1142,17 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
return Collections.emptyMap();
}
// Map<personId,OrgNodeUserBriefInfoResp>
return nodeUserResp.stream().collect(Collectors.toMap(OrgNodeUserBriefInfoResp::getPersonId, Function.identity(), (v1, v2) -> v1));
return nodeUserResp.stream().collect(Collectors.toMap(OrgNodeUserBriefInfoResp::getPersonId, Function.identity(), (v1, v2) -> {
// 优先取exited=false的数据若均为false则取updateAt较大的数据
if (Objects.nonNull(v1.getExited()) && Objects.nonNull(v2.getExited())) {
if (v1.getExited() && !v2.getExited()) {
return v2;
} else if (!v1.getExited() && v2.getExited()) {
return v1;
}
}
return v1.getUpdateAt().compareTo(v2.getUpdateAt()) > 0 ? v1 : v2;
}));
}
private static VisaChangeInitiatorResp buildInitiatorResp(Map<Long, OrgNodeUserBriefInfoResp> initiatorMap, ChangeRecordConfirm i) {
@ -1309,7 +1320,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
if (!req.isSkipNoOnlyOnce()) {
// 单号项目内唯一性
ChangeRecord visaRecord = getVisaByWorkspaceIdAndNo(req.getRelationWorkspaceId(), req.getNo());
AssertUtil.isNull(visaRecord, "已存在相同单号的变更签证单据,请修改");
// 编辑模式下需要排除自身
if (Objects.nonNull(visaRecord) && !Objects.equals(visaRecord.getId(), req.getId())) {
throw new ServiceException("已存在相同单号的变更签证单据,请修改");
}
}
// 工程存在性
ProjectDetailRes projectById = visaProjectApiGateway.getProjectById(req.getRelationProject());
@ -1450,6 +1464,9 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
@Transactional(rollbackFor = Exception.class)
public void forbid(ChangeRecordButtonOperationReq req) {
ChangeRecord record = getById(req.getVisaId());
AssertUtil.notNull(record, "未找到变洽签单据");
AssertUtil.isTrue(Objects.equals(record.getStatus(), VisaStatusEnum.TO_REPORT)
&& Objects.equals(record.getStatus(), VisaStatusEnum.COMPLETED), "当前单据状态不支持该操作");
//校验操作人
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
@ -1567,6 +1584,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
public void reDecision(ChangeRecordButtonOperationReq req) {
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
AssertUtil.notNull(visa, "未找到变洽签单据");
AssertUtil.isTrue(Objects.equals(visa.getStatus(), VisaStatusEnum.DECIDING)
|| Objects.equals(visa.getStatus(), VisaStatusEnum.EXECUTING), "单据未在决策中或执行中,不支持该操作");
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
ImGroupOperationClearReq build = new ImGroupOperationClearReq();
@ -1576,17 +1595,18 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
changeRecordRelationService.clearImOperationParticipate(build);
// 重新发送卡片
sendCardToImGroup(req, visa);
sendCardAndMsgToImGroup(req, visa);
}
private void sendCardToImGroup(ChangeRecordButtonOperationReq req, ChangeRecord visa) {
private void sendCardAndMsgToImGroup(ChangeRecordButtonOperationReq req, ChangeRecord visa) {
CardSendRequest cardRequest = new CardSendRequest();
cardRequest.setAppCode(MSG_CENTER_APP_CODE);
cardRequest.setTemplateCode(refreshableConfiguration.getImGroupCardTemplateCode());
cardRequest.setBizCode(IM_GROUP_BIZ_INFO_VISA_ID + ":" + visa.getId());
cardRequest.setSender(PeerPerson.create(req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId()));
cardRequest.setImSenderAccountAppType(AppTypeEnum.CMP);
cardRequest.setImReceiveAccounts(Sets.newHashSet(String.valueOf(visa.getImGroupId())));
HashSet<String> imReceiveAccounts = Sets.newHashSet(String.valueOf(visa.getImGroupId()));
cardRequest.setImReceiveAccounts(imReceiveAccounts);
OrganizationalUnitVO unitInfo = organizationalUnitGateway.getUnitInfo(req.getOperatorOuId());
PersonProfileDto profile = visaProfileGateway.getProfile(req.getOperatorPersonId());
@ -1600,10 +1620,26 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
"amountChange", VisaHelper.buildChangeAmount(visa.getAmountChange())
)));
msgCenterGateway.sendCardToCroup(cardRequest);
// 普通群消息
SendChatMessageRequest msgRequest = new SendChatMessageRequest();
msgRequest.setAsTextMessage(visa.getTopic() + ",请各位审阅");
msgRequest.setImReceiveAccounts(imReceiveAccounts);
msgRequest.setSender(PersonAccountAttribute.builder()
.personId(String.valueOf(req.getOperatorPersonId()))
.ouId(req.getOperatorOuId())
.workspaceId(req.getOperatorWorkspaceId())
.appType(AppTypeEnum.CMP)
.build());
msgRequest.setBizId(IM_GROUP_BIZ_INFO_VISA_ID + ":" + visa.getId());
msgCenterGateway.sendMsgToGroup(msgRequest);
}
@Override
public void doExecute(ChangeRecordButtonOperationReq req) {
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
AssertUtil.notNull(visa, "未找到变洽签单据");
AssertUtil.isTrue(Objects.equals(visa.getStatus(), VisaStatusEnum.DECIDING), "单据未在决策中,不支持该操作");
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
changeStatus(ChangeStatusRequest.builder()