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

This commit is contained in:
chenwenjian 2025-02-08 15:36:10 +08:00
commit 033dab1511
7 changed files with 120 additions and 3 deletions

View File

@ -124,16 +124,19 @@ public interface ChangeRecordApi {
/**
* IM 变洽签群重新发起按钮
*
* @return
*/
@PostMapping("/api/visa/change/reDecision")
ApiResult<Void> reDecisionChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req);
/**
* IM 变洽签全发起执行按钮
* IM 变洽签群发起执行按钮
*
* @param req
* @return
*/
@PostMapping("/api/visa/change/execute")
ApiResult<Void> executeChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req);
}

View File

@ -1,10 +1,11 @@
package cn.axzo.nanopart.visa.api.changerecord;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.visa.api.request.ChangeRecordAppendAttachReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq;
import cn.axzo.nanopart.visa.api.request.VisaRelationReq;
import cn.axzo.nanopart.visa.api.response.ImGroupTipsResp;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.response.VisaRelationResp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
@ -30,4 +31,12 @@ public interface ChangeRecordRelationApi {
@PostMapping("/api/visa/relation/im/tips")
ApiResult<ImGroupTipsResp> queryImGroupTips(@Validated @RequestBody ImGroupTipsQueryReq req);
/**
* 变洽签追加附件
*
* @param req
* @return
*/
@PostMapping("/api/visa/relation/attach/append")
ApiResult<Void> appendAttachment(@Validated @RequestBody ChangeRecordAppendAttachReq req);
}

View File

@ -0,0 +1,39 @@
package cn.axzo.nanopart.visa.api.request;
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 变洽签增加附件
*
* @author wangli
* @since 2025-02-08 14:19
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ChangeRecordAppendAttachReq {
/**
* 变洽签主键 ID
*/
@NotNull(message = "变洽签主键 ID")
private Long visaId;
/**
* 新增的附件
*/
private List<UploadFieldDTO> attach;
private Long operatorPersonId;
private Long operatorOuId;
}

View File

@ -2,6 +2,7 @@ package cn.axzo.nanopart.visa.server.controller;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.visa.api.changerecord.ChangeRecordRelationApi;
import cn.axzo.nanopart.visa.api.request.ChangeRecordAppendAttachReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq;
import cn.axzo.nanopart.visa.api.request.VisaRelationReq;
@ -45,4 +46,10 @@ public class ChangeRecordRelationController implements ChangeRecordRelationApi {
public ApiResult<ImGroupTipsResp> queryImGroupTips(ImGroupTipsQueryReq req) {
return ApiResult.ok(changeRecordRelationService.queryImGroupTips(req));
}
@Override
public ApiResult<Void> appendAttachment(ChangeRecordAppendAttachReq req) {
changeRecordRelationService.appendAttachment(req);
return ApiResult.ok();
}
}

View File

@ -1,9 +1,9 @@
package cn.axzo.nanopart.visa.server.rpc;
import cn.axzo.pokonyan.util.RpcUtil;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
import cn.axzo.workflow.starter.api.WorkflowCoreService;
import cn.axzo.workflow.starter.api.WorkflowManageService;
import cn.azxo.framework.common.logger.MethodAroundLog;
@ -48,4 +48,8 @@ public class WorkflowGateway {
}
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "更新指定流程表单最后一次编辑的内容")
public Boolean updateInstanceFormData(FormVariablesUpdateDTO dto) {
return workflowCoreService.updateInstanceFormVariables(dto);
}
}

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.ChangeRecordAppendAttachReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationClearReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq;
@ -33,6 +34,7 @@ public interface ChangeRecordRelationService extends IService<ChangeRecordRelati
List<ChangeRecordRelation> findByVisaAndVarName(Long visaId, String varName);
boolean deleteByVisaId(Long visaId, List<VisaRelationFieldEnum> relationTypes);
/**
* IM 群聊中保存 IM 用户操作横条的人
*
@ -43,6 +45,7 @@ public interface ChangeRecordRelationService extends IService<ChangeRecordRelati
/**
* IM 群聊中群主操作重新发起清空所有人的操作信息
*
* @param req
* @return
*/
@ -55,4 +58,11 @@ public interface ChangeRecordRelationService extends IService<ChangeRecordRelati
* @return
*/
ImGroupTipsResp queryImGroupTips(ImGroupTipsQueryReq req);
/**
* 追加附件
*
* @param req
*/
void appendAttachment(ChangeRecordAppendAttachReq req);
}

View File

@ -11,6 +11,7 @@ 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.ChangeRecordAppendAttachReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationClearReq;
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq;
@ -23,8 +24,10 @@ 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.rpc.WorkflowGateway;
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -33,6 +36,7 @@ import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.groovy.util.Maps;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -43,9 +47,11 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_ATTACH;
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;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
/**
* @author xudawei
@ -59,6 +65,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
private final ChangeRecordService changeRecordService;
private final VisaProfileGateway visaProfileGateway;
private final MsgCenterGateway msgCenterGateway;
private final WorkflowGateway workflowGateway;
/**
* 保存
@ -286,4 +293,42 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
resp.setButtonList(buttons);
return resp;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void appendAttachment(ChangeRecordAppendAttachReq req) {
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
AssertUtil.isTrue(Objects.equals(VisaStatusEnum.APPROVING, visa.getStatus())
|| Objects.equals(VisaStatusEnum.COMPLETED, visa.getStatus()), "当前单据状态下不允许操作");
AssertUtil.notNull(visa, "变洽签单据不存在");
List<ChangeRecordRelation> existsAttach = findByCondition(VisaRelationDto.builder()
.visaId(req.getVisaId())
.varName(VisaRelationFieldEnum.ATTACHMENT.name())
.build());
AssertUtil.isTrue(existsAttach.size() < 30, "已达到附件数量限制");
AssertUtil.isTrue(existsAttach.size() + req.getAttach().size() <= 30, "新增的附件数量超过限制");
List<ChangeRecordRelation> attach = req.getAttach().stream()
.map(item -> {
ChangeRecordRelation changeRecordRelation = new ChangeRecordRelation();
changeRecordRelation.setVisaId(req.getVisaId());
changeRecordRelation.setVarName(VisaRelationFieldEnum.ATTACHMENT.name());
changeRecordRelation.setVarType(VisaRelationVarTypeEnum.JSON.getType());
changeRecordRelation.setContent(JSON.toJSONString(item));
changeRecordRelation.setCreateBy(req.getOperatorPersonId());
changeRecordRelation.setUpdateBy(req.getOperatorPersonId());
return changeRecordRelation;
})
.collect(Collectors.toList());
saveBatch(attach);
if (Objects.equals(PROCESSING.getStatus(), visa.getApprovalStatus())) {
FormVariablesUpdateDTO formUpdateDto = new FormVariablesUpdateDTO();
formUpdateDto.setProcessInstanceId(visa.getApprovalId());
formUpdateDto.setFormVariables(Maps.of(FORM_FIELD_ATTACH, req.getAttach()));
workflowGateway.updateInstanceFormData(formUpdateDto);
}
}
}