feat(REQ-3300) - 添加 IM 群聊Tips 的提交审批按钮

This commit is contained in:
wangli 2025-02-06 18:52:28 +08:00
parent f5a7ba894d
commit 7a7aae20c0
9 changed files with 98 additions and 25 deletions

View File

@ -112,7 +112,7 @@ public interface ChangeRecordApi {
* @return
*/
@PostMapping("/api/visa/change/approve/only/create")
ApiResult<Long> approveExistsVisaChangeRecord(@Validated @RequestBody VisaChangeApproveOnlyReq req);
ApiResult<Long> approveCreateOnlyVisaChangeRecord(@Validated @RequestBody VisaChangeApproveOnlyReq req);
/**
* IM 变洽签群废止按钮

View File

@ -38,4 +38,10 @@ public class VisaChangeApproveOnlyReq {
*/
private List<VisaChangeApproveCreateReq.ApprovePersonInfo> approvePersonInfoList;
private Long operatorPersonId;
private Long operatorOuId;
private Long operatorWorkspaceId;
}

View File

@ -64,6 +64,11 @@ public class VisaChangeTempCreateReq {
@NotNull(message = "请选择工程")
@Min(value = 1, message = "请选择工程")
private Long relationProject;
/**
* 工程名称
*/
@NotBlank(message = "工程名称不能为空")
private String relationProjectName;
/**
* 区域集合
@ -108,6 +113,7 @@ public class VisaChangeTempCreateReq {
/**
* 有符号的变更金额
*/
@NotNull(message = "变更金额不能为空")
private BigDecimal amountChange;
/**

View File

@ -103,8 +103,8 @@ public class ChangeRecordController implements ChangeRecordApi {
}
@Override
public ApiResult<Long> approveExistsVisaChangeRecord(VisaChangeApproveOnlyReq req) {
return null;
public ApiResult<Long> approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req) {
return ApiResult.ok(changeRecordService.approveCreateOnlyVisaChangeRecord(req));
}
@Override

View File

@ -58,8 +58,29 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
/**
* 区域集合
* <pre>
* [
* {
* "areaId": 249556,
* "childrenAreaList": [
* {
* "areaId": 249739,
* "childrenAreaList": []
* }
* ]
* },
* {
* "areaId": 249556,
* "childrenAreaList": [
* {
* "areaId": 249739,
* "childrenAreaList": []
* }
* ]
* }
* ]
* </pre>
*/
@TableField(value = "relation_area", typeHandler = FastjsonTypeHandler.class)
private JSONArray relationArea;

View File

@ -5,6 +5,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveOnlyReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
@ -104,4 +105,12 @@ public interface ChangeRecordService extends IService<ChangeRecord> {
* @param req
*/
void forbid(ChangeRecordForbidReq req);
/**
* IM 群聊中提交审批
*
* @param req
* @return
*/
Long approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req);
}

View File

@ -4,6 +4,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.server.dto.VisaAddLogContext;
import cn.axzo.nanopart.visa.server.dto.VisaLogParam;
import com.alibaba.fastjson.JSONArray;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

View File

@ -37,7 +37,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -360,8 +359,16 @@ public class ChangeRecordConfirmServiceImpl extends ServiceImpl<ChangeRecordConf
Map<Long, PersonProfileDto> personMap = buildPersonDtoMap(list.stream()
.map(ChangeRecordConfirm::getPersonId)
.collect(Collectors.toSet()));
list.stream().map(i-> VisaChangeApproveCreateReq.ApprovePersonInfo.builder().build())
return list.stream().map(i -> VisaChangeApproveCreateReq.ApprovePersonInfo.builder()
.workspaceId(i.getWorkspaceId())
.ouId(i.getOuId())
.nodeId(i.getNodeId())
.personId(i.getPersonId())
.realName(personMap.getOrDefault(i.getPersonId(), new PersonProfileDto())
.getRealName())
.avatarUrl(personMap.getOrDefault(i.getPersonId(), new PersonProfileDto())
.getAvatarUrl())
.build())
.collect(Collectors.toList());
return null;
}
}

View File

@ -31,6 +31,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveOnlyReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
@ -552,7 +553,25 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
/*保存签证信息*/
Long visaId = tempCreateVisaChangeRecord(req);
/*提交审批 TODO 应该可以抽取在IM 中“重新发起”可复用*/
/*提交审批*/
String processInstanceId = createProcessInstance(req, visaId);
AssertUtil.isTrue(StringUtils.hasText(processInstanceId), "创建审批异常");
// 更新主表中的审批字段记录变量表的审批的信息
updateApprovalInfo(visaId, processInstanceId);
// 更新主表状态
changeStatus(ChangeStatusRequest.builder()
.visaId(visaId)
.updateStatus(VisaStatusEnum.APPROVING)
.personId(req.getOperatorPersonId())
.ouId(req.getOperatorOuId())
.workspaceId(req.getRelationWorkspaceId())
.build());
return visaId;
}
private String createProcessInstance(VisaChangeApproveCreateReq req, Long visaId) {
BpmnProcessInstanceCreateDTO processDto = new BpmnProcessInstanceCreateDTO();
// 发起时指定审批人
processDto.setSpecifyAssignerMap(ImmutableMap.of(req.getActivityId(), buildApprovers(req.getApprovePersonInfoList())));
@ -574,12 +593,17 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
formVariables.put(FORM_FIELD_HAPPEN_TIME, req.getHappenTime());
formVariables.put(FORM_FIELD_TOPIC, req.getTopic());
formVariables.put(FORM_FIELD_RELATION_PROJECT, req.getRelationProject());
formVariables.put(FORM_FIELD_RELATION_PROFESSIONAL, req.getRelationProject());
formVariables.put(FORM_FIELD_RELATION_PROFESSIONAL, req.getRelationProfessional());
formVariables.put(FORM_FIELD_REASON, req.getReason());
formVariables.put(FORM_FIELD_RELATION_AREA, req.getRelationArea());
formVariables.put(FORM_FIELD_CONTEXT_DESCRIPTION, req.getChangeContextAndDescriptionList());
// TODO 变更金额
formVariables.put(FORM_FIELD_AMOUNT_CHANGE, "");
String amountDesc = "不变";
if (req.getAmountChange().compareTo(BigDecimal.ZERO) > 0) {
amountDesc = "增加" + req.getAmountChange().toPlainString() + "";
} else if (req.getAmountChange().compareTo(BigDecimal.ZERO) < 0) {
amountDesc = "减少" + req.getAmountChange().toPlainString() + "";
}
formVariables.put(FORM_FIELD_AMOUNT_CHANGE, amountDesc);
// 三种单据
if (MapUtils.isNotEmpty(req.getRelationOrderMap())) {
@ -604,20 +628,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
Map<String, Object> pendingVariables = new HashMap<>();
pendingVariables.put(WORKFLOW_PENDING_TOPIC, req.getTopic());
processDto.setPendingVariables(pendingVariables);
String processInstanceId = workflowGateway.processInstanceCreate(processDto);
// 更新主表中的审批字段记录变量表的审批的信息
updateApprovalInfo(visaId, processInstanceId);
// 更新主表状态
changeStatus(ChangeStatusRequest.builder()
.visaId(visaId)
.updateStatus(VisaStatusEnum.APPROVING)
.personId(req.getOperatorPersonId())
.ouId(req.getOperatorOuId())
.workspaceId(req.getRelationWorkspaceId())
.build());
return visaId;
return workflowGateway.processInstanceCreate(processDto);
}
/**
@ -1045,6 +1056,18 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
}
}
@Override
public Long approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req) {
VisaChangeApproveCreateReq createReq = buildVisaChangeApproveCreateReqByVisaId(req.getVisaId());
AssertUtil.notNull(createReq, "未找到变洽签单据");
createReq.setApprovePersonInfoList(req.getApprovePersonInfoList());
createReq.setOperatorOuId(req.getOperatorOuId());
createReq.setOperatorPersonId(req.getOperatorPersonId());
createReq.setRelationWorkspaceId(req.getOperatorWorkspaceId());
createProcessInstance(createReq, req.getVisaId());
return req.getVisaId();
}
/**
* 通过变更单id构建审批提交对象
*