Merge remote-tracking branch 'origin/feature/REQ-3581' into feature/REQ-3581
This commit is contained in:
commit
71afe9366f
@ -45,6 +45,8 @@ public class VisaRequestStampReq {
|
||||
|
||||
@NotNull(message = "操作人 personId 不能为空")
|
||||
private Long operatorPersonId;
|
||||
@NotNull(message = "操作人 ouId 不能为空")
|
||||
private Long operatorOuId;
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
|
||||
@ -125,6 +125,12 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
||||
@TableField(value = "stamp_status")
|
||||
private VisaStampStatusEnum stampStatus;
|
||||
|
||||
/**
|
||||
* 合同 ID
|
||||
*/
|
||||
@TableField(value = "contract_id")
|
||||
private String contractId;
|
||||
|
||||
/**
|
||||
* 最终审批ID
|
||||
*/
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
package cn.axzo.nanopart.visa.server.rpc;
|
||||
|
||||
import cn.axzo.nanopart.ess.api.EssApi;
|
||||
import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo;
|
||||
import cn.axzo.nanopart.ess.api.request.CreateContractByFileRequest;
|
||||
import cn.axzo.nanopart.ess.api.request.GetSealsRequest;
|
||||
import cn.axzo.nanopart.ess.api.response.CreateContractByFileResponse;
|
||||
import cn.axzo.pokonyan.util.RpcUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 腾讯电子签
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2025-02-21 10:03
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class EssGateway {
|
||||
|
||||
private final EssApi essApi;
|
||||
|
||||
public CreateContractByFileResponse createContract(CreateContractByFileRequest request) {
|
||||
return RpcUtil.rpcApiResultProcessor(() -> essApi.createContractByFile(request), "创建电子签合同", request);
|
||||
}
|
||||
|
||||
public List<EssOrgAndSealInfo> getOrgEnabledSeals(GetSealsRequest request) {
|
||||
return RpcUtil.rpcApiResultProcessor(() -> essApi.getOrgEnabledSeals(request), "查询单位已启用的印章以及授权人员列表", request);
|
||||
}
|
||||
}
|
||||
@ -7,6 +7,10 @@ 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.ess.api.domain.CreateContractByFile;
|
||||
import cn.axzo.nanopart.ess.api.domain.OperatorInfo;
|
||||
import cn.axzo.nanopart.ess.api.domain.contract.Approver;
|
||||
import cn.axzo.nanopart.ess.api.request.CreateContractByFileRequest;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||
@ -25,6 +29,7 @@ import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaLogParam;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaRelationDto;
|
||||
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordRelationDao;
|
||||
import cn.axzo.nanopart.visa.server.rpc.EssGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.MsgCenterGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.VisaProfileGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||
@ -48,7 +53,14 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@ -60,6 +72,7 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_
|
||||
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.nanopart.visa.api.constant.VisaConstant.IM_GROUP_PARTICIPATE_TIPS_OPERATED;
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.MSG_CENTER_APP_CODE;
|
||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PRINT_PDF_FILE;
|
||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
||||
@ -77,6 +90,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
||||
private final VisaProfileGateway visaProfileGateway;
|
||||
private final MsgCenterGateway msgCenterGateway;
|
||||
private final WorkflowGateway workflowGateway;
|
||||
private final EssGateway essGateway;
|
||||
private final ChangeRecordLogService changeRecordLogService;
|
||||
|
||||
/**
|
||||
@ -205,7 +219,6 @@ 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));
|
||||
@ -395,6 +408,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
||||
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
|
||||
AssertUtil.notNull(visa, "变洽签单据不存在");
|
||||
|
||||
// 用印申请信息
|
||||
List<ChangeRecordRelation> relations = req.getRequestStamps().stream().map(i -> {
|
||||
ChangeRecordRelation stamp = new ChangeRecordRelation();
|
||||
stamp.setVisaId(req.getVisaId());
|
||||
@ -408,6 +422,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
||||
return stamp;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
// 打印生成的 PDF 文件信息
|
||||
ChangeRecordRelation relation = new ChangeRecordRelation();
|
||||
relation.setVisaId(req.getVisaId());
|
||||
relation.setVarName(PRINT_PDF_FILE.name());
|
||||
@ -418,6 +433,47 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
||||
relations.add(relation);
|
||||
saveBatch(relations);
|
||||
|
||||
CreateContractByFileRequest createContractRequest = new CreateContractByFileRequest();
|
||||
CreateContractByFile pdfFile = new CreateContractByFile();
|
||||
pdfFile.setContractName(visa.getTopic());
|
||||
try {
|
||||
pdfFile.setBase64Files(Lists.newArrayList(downloadFileAndConvertToBase64(req.getPdfFile().getFileUrl())));
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException("拉取表单 PDF 文件失败");
|
||||
}
|
||||
pdfFile.setApprovers(req.getRequestStamps().stream().map(i -> {
|
||||
Approver approver = new Approver();
|
||||
approver.setSealTypes(Lists.newArrayList(i.getSealType()));
|
||||
return approver;
|
||||
}).collect(Collectors.toList()));
|
||||
|
||||
createContractRequest.setByFile(pdfFile);
|
||||
// TODO
|
||||
createContractRequest.setAppCode(MSG_CENTER_APP_CODE);
|
||||
createContractRequest.setBizCode("");
|
||||
OperatorInfo creator = new OperatorInfo();
|
||||
creator.setOuId(req.getOperatorOuId());
|
||||
creator.setPersonId(req.getOperatorPersonId());
|
||||
createContractRequest.setCreator(creator);
|
||||
|
||||
essGateway.createContract(createContractRequest);
|
||||
|
||||
}
|
||||
|
||||
public static String downloadFileAndConvertToBase64(String fileUrl) throws IOException {
|
||||
URL url = new URL(fileUrl);
|
||||
URLConnection connection = url.openConnection();
|
||||
try (InputStream inputStream = connection.getInputStream();
|
||||
BufferedInputStream bis = new BufferedInputStream(inputStream);
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
|
||||
byte[] buffer = new byte[4096];
|
||||
int bytesRead;
|
||||
while ((bytesRead = bis.read(buffer)) != -1) {
|
||||
bos.write(buffer, 0, bytesRead);
|
||||
}
|
||||
byte[] fileBytes = bos.toByteArray();
|
||||
return Base64.getEncoder().encodeToString(fileBytes);
|
||||
}
|
||||
}
|
||||
|
||||
private String createEssProcessInstance(VisaRequestStampReq.RequestStampModel model, ChangeRecord visa) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user