feat(REQ-3300) - 调整 IM 群成员变动后,需操作对应的投票记录

This commit is contained in:
wangli 2025-02-07 17:04:38 +08:00
parent 34bbba9f01
commit a1f33a364d
3 changed files with 56 additions and 14 deletions

View File

@ -1,6 +1,7 @@
package cn.axzo.nanopart.visa.server.service;
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationClearReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
@ -45,7 +46,7 @@ public interface ChangeRecordRelationService extends IService<ChangeRecordRelati
* @param req
* @return
*/
Boolean clearImOperationParticipate(ImGroupOperationReq req);
Boolean clearImOperationParticipate(ImGroupOperationClearReq req);
/**
* IM 群聊界面查询当前人的 tips 横条

View File

@ -1,13 +1,17 @@
package cn.axzo.nanopart.visa.server.service.impl;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.basics.common.util.NumberUtil;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.framework.domain.ServiceException;
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.api.vo.req.SendChatMessageRequest;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationClearReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
@ -17,6 +21,7 @@ import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
import cn.axzo.nanopart.visa.server.dto.VisaRelationDto;
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordRelationDao;
import cn.axzo.nanopart.visa.server.rpc.MsgCenterGateway;
import cn.axzo.nanopart.visa.server.rpc.VisaProfileGateway;
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
@ -24,6 +29,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@ -37,6 +43,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_VISA_ID;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_OWNER_TIPS;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_PARTICIPATE_TIPS;
@ -51,6 +58,7 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_PARTICIPA
public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRelationDao, ChangeRecordRelation> implements ChangeRecordRelationService {
private final ChangeRecordService changeRecordService;
private final VisaProfileGateway visaProfileGateway;
private final MsgCenterGateway msgCenterGateway;
/**
* 保存
@ -130,6 +138,9 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
}
return this.lambdaQuery().eq(ChangeRecordRelation::getVisaId, dto.getVisaId())
.eq(ChangeRecordRelation::getVarName, dto.getVarName())
.eq(StringUtils.hasText(dto.getContent()), ChangeRecordRelation::getContent, dto.getContent())
.eq(StringUtils.hasText(dto.getContentExt()), ChangeRecordRelation::getContentExt, dto.getContentExt())
.eq(Objects.nonNull(dto.getCreateBy()), ChangeRecordRelation::getCreateBy, dto.getCreateBy())
.eq(ChangeRecordRelation::getIsDelete, 0).list();
}
@ -145,23 +156,47 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
relation.setVarName(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE.getCode());
relation.setVarExt(req.getButtonType().getCode());
relation.setVarType(VisaRelationVarTypeEnum.LONG.getType());
relation.setContentExt(String.valueOf(req.getOperatorOuId()));
relation.setContent(String.valueOf(req.getOperatorWorkspaceId()));
relation.setContentExt(String.valueOf(req.getOperatorWorkspaceId()));
relation.setContent(String.valueOf(req.getOperatorOuId()));
relation.setCreateBy(req.getOperatorPersonId());
relation.setUpdateBy(req.getOperatorPersonId());
save(relation);
// 发送同意拒绝的文案至群内
SendChatMessageRequest msgRequest = new SendChatMessageRequest();
msgRequest.setAsTextMessage(req.getButtonType().getDesc() + "");
msgRequest.setImReceiveAccounts(Sets.newHashSet(String.valueOf(req.getImGroupId())));
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 + ":" + req.getVisaId());
msgCenterGateway.sendMsgToGroup(msgRequest);
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean clearImOperationParticipate(ImGroupOperationReq req) {
public Boolean clearImOperationParticipate(ImGroupOperationClearReq req) {
ChangeRecord record = changeRecordService.getById(req.getVisaId());
AssertUtil.notNull(record, "未找到变洽签记录");
AssertUtil.isTrue(Objects.equals(record.getImGroupId(), req.getImGroupId()), "IM 群信息不匹配");
deleteByVisaId(req.getVisaId(), Lists.newArrayList(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE));
if (Boolean.TRUE.equals(req.getClearAll())) {
deleteByVisaId(req.getVisaId(), Lists.newArrayList(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE));
} else {
List<ChangeRecordRelation> byCondition = findByCondition(VisaRelationDto.builder()
.visaId(req.getVisaId())
.varName(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE.getCode())
.content(String.valueOf(req.getOperatorOuId()))
.contentExt(NumberUtil.isPositiveNumber(req.getOperatorWorkspaceId()) ? String.valueOf(req.getOperatorWorkspaceId()) : null)
.createBy(req.getOperatorPersonId())
.build());
removeByIds(byCondition.stream().map(ChangeRecordRelation::getVisaId).collect(Collectors.toList()));
}
return true;
}
@ -172,6 +207,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
ImGroupTipsResp resp = new ImGroupTipsResp();
resp.setStatus(record.getStatus());
resp.setStatusText(record.getStatus().getDesc());
List<ChangeRecordRelation> imGroupParticipate = findByCondition(VisaRelationDto.builder()
.visaId(req.getVisaId())
.varName(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE.getCode())

View File

@ -31,7 +31,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationClearReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveOnlyReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
@ -123,7 +123,9 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATIO
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_TASK_ORDER;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_VISA_ORDER;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_TOPIC;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_RECORD_ID;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_OWNER_WORKSPACE_ID;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_VISA_ID;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_VISA_TYPE;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_PENDING_TOPIC;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_VISA_TYPE_KEY;
@ -577,7 +579,9 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
// 群头像
request.setAvatar("https://axzo-obs-public.obs.cn-north-4.myhuaweicloud.com:443/obs-public/obs-public/visa-group.png");
request.setMemberLimit(100L);
request.setBizGroupInfo(Maps.of(IM_GROUP_BIZ_INFO_RECORD_ID, visaId));
request.setBizGroupInfo(Maps.of(IM_GROUP_BIZ_INFO_VISA_ID, visaId,
IM_GROUP_BIZ_INFO_OWNER_WORKSPACE_ID, req.getRelationWorkspaceId(),
IM_GROUP_BIZ_INFO_VISA_TYPE, req.getType().getCode()));
GroupCreateResponse imGroup = msgCenterGateway.createImGroup(request);
updateImInfo(visaId, imGroup);
@ -1182,10 +1186,11 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
public void reDecision(ChangeRecordButtonOperationReq req) {
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
changeRecordRelationService.clearImOperationParticipate(ImGroupOperationReq.builder()
.visaId(req.getVisaId())
.imGroupId(req.getImGroupId())
.build());
ImGroupOperationClearReq build = new ImGroupOperationClearReq();
build.setVisaId(req.getVisaId());
build.setImGroupId(req.getImGroupId());
build.setClearAll(true);
changeRecordRelationService.clearImOperationParticipate(build);
}
@Override