feat(REQ-3300) - 增加 IM 群聊中的重新发起和发起执行两个按钮的逻辑

This commit is contained in:
wangli 2025-02-06 22:17:44 +08:00
parent 7a7aae20c0
commit b2bb2ec3d4
7 changed files with 110 additions and 11 deletions

View File

@ -2,7 +2,7 @@ package cn.axzo.nanopart.visa.api.changerecord;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.FetchVisaAllConfirmReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
@ -120,5 +120,20 @@ public interface ChangeRecordApi {
* @return
*/
@PostMapping("/api/visa/change/record/forbid")
ApiResult<Void> forbidChangeRecord(@Validated @RequestBody ChangeRecordForbidReq req);
ApiResult<Void> forbidChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req);
/**
* IM 变洽签群重新发起按钮
* @return
*/
@PostMapping("/api/visa/change/reDecision")
ApiResult<Void> reDecisionChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req);
/**
* IM 变洽签全发起执行按钮
* @param req
* @return
*/
@PostMapping("/api/visa/change/execute")
ApiResult<Void> executeChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req();
}

View File

@ -17,7 +17,7 @@ import javax.validation.constraints.NotNull;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ChangeRecordForbidReq {
public class ChangeRecordButtonOperationReq {
/**
* 变洽签主键 ID
@ -25,6 +25,12 @@ public class ChangeRecordForbidReq {
@NotNull(message = "变洽签 ID 不能为空")
private Long visaId;
/**
* IM ID
*/
@NotNull(message = "IM 群 ID 不能为空")
private Long imGroupId;
/**
* 操作人 personId
*/

View File

@ -5,7 +5,7 @@ import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.framework.domain.web.result.PageData;
import cn.axzo.nanopart.visa.api.changerecord.ChangeRecordApi;
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.FetchVisaAllConfirmReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
@ -21,6 +21,7 @@ import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -108,8 +109,20 @@ public class ChangeRecordController implements ChangeRecordApi {
}
@Override
public ApiResult<Void> forbidChangeRecord(ChangeRecordForbidReq req) {
public ApiResult<Void> forbidChangeRecord(ChangeRecordButtonOperationReq req) {
changeRecordService.forbid(req);
return ApiResult.ok();
}
@Override
public ApiResult<Void> reDecisionChangeRecord(ChangeRecordButtonOperationReq req) {
changeRecordService.reDecision(req);
return ApiResult.ok();
}
@Override
public ApiResult<Void> executeChangeRecord(ChangeRecordButtonOperationReq req) {
changeRecordService.doExecute(req);
return ApiResult.ok();
}
}

View File

@ -40,6 +40,13 @@ public interface ChangeRecordRelationService extends IService<ChangeRecordRelati
*/
Boolean saveImOperationParticipate(ImGroupOperationReq req);
/**
* IM 群聊中群主操作重新发起清空所有人的操作信息
* @param req
* @return
*/
Boolean clearImOperationParticipate(ImGroupOperationReq req);
/**
* IM 群聊界面查询当前人的 tips 横条
*

View File

@ -2,7 +2,7 @@ package cn.axzo.nanopart.visa.server.service;
import cn.axzo.framework.domain.web.result.PageData;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveOnlyReq;
@ -104,7 +104,7 @@ public interface ChangeRecordService extends IService<ChangeRecord> {
*
* @param req
*/
void forbid(ChangeRecordForbidReq req);
void forbid(ChangeRecordButtonOperationReq req);
/**
* IM 群聊中提交审批
@ -113,4 +113,8 @@ public interface ChangeRecordService extends IService<ChangeRecord> {
* @return
*/
Long approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req);
void reDecision(ChangeRecordButtonOperationReq req);
void doExecute(ChangeRecordButtonOperationReq req);
}

View File

@ -23,10 +23,10 @@ import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -134,9 +134,11 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveImOperationParticipate(ImGroupOperationReq req) {
ChangeRecord record = changeRecordService.getById(req.getVisaId());
AssertUtil.notNull(record, "未找到变洽签记录");
AssertUtil.isTrue(Objects.equals(record.getImGroupId(), req.getImGroupId()), "IM群信息不匹配");
ChangeRecordRelation relation = new ChangeRecordRelation();
relation.setVisaId(req.getVisaId());
@ -152,6 +154,17 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean clearImOperationParticipate(ImGroupOperationReq 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));
return true;
}
@Override
public ImGroupTipsResp queryImGroupTips(ImGroupTipsQueryReq req) {
ChangeRecord record = changeRecordService.getById(req.getVisaId());

View File

@ -28,8 +28,9 @@ 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.enums.VisaTypeEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
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.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveOnlyReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
@ -1027,9 +1028,12 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
}
@Override
@Transactional(rollbackFor = Exception.class)
public void forbid(ChangeRecordForbidReq req) {
public void forbid(ChangeRecordButtonOperationReq req) {
ChangeRecord record = getById(req.getVisaId());
//校验操作人
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
ChangeStatusRequest changeStatusRequest = new ChangeStatusRequest();
changeStatusRequest.setVisaId(req.getVisaId());
changeStatusRequest.setUpdateStatus(VisaStatusEnum.FORBIDED);
@ -1056,8 +1060,25 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
}
}
private void validOperationPermission(Long visaId, Long personId, Long ouId, Long workspaceId) {
List<ChangeRecordConfirm> confirmUsers = changeRecordConfirmService.findByCondition(VisaConfirmDto.builder()
.visaId(visaId)
.bizType(VisaConfirmBizTypeEnum.CREATE)
.build());
AssertUtil.isTrue(CollectionUtils.isNotEmpty(confirmUsers) && confirmUsers.size() == 1, "单据发起人信息数据异常");
ChangeRecordConfirm creator = confirmUsers.get(0);
AssertUtil.isTrue(Objects.equals(creator.getPersonId(), personId)
&& Objects.equals(creator.getOuId(), ouId)
&& Objects.equals(creator.getWorkspaceId(), workspaceId), "不是单据发起人,不能操作");
}
@Override
public Long approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req) {
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
VisaChangeApproveCreateReq createReq = buildVisaChangeApproveCreateReqByVisaId(req.getVisaId());
AssertUtil.notNull(createReq, "未找到变洽签单据");
createReq.setApprovePersonInfoList(req.getApprovePersonInfoList());
@ -1068,6 +1089,26 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
return req.getVisaId();
}
@Override
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());
}
@Override
public void doExecute(ChangeRecordButtonOperationReq req) {
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
changeStatus(ChangeStatusRequest.builder()
.visaId(req.getVisaId())
.updateStatus(VisaStatusEnum.EXECUTING)
.build());
}
/**
* 通过变更单id构建审批提交对象
*