Merge branch 'feature/REQ-3982'
This commit is contained in:
commit
e7a9238a43
@ -239,7 +239,7 @@ public class IndexManager {
|
|||||||
// resolve the name issue
|
// resolve the name issue
|
||||||
if (!indexSupport.childrenNameDuplicatable(rootNode))
|
if (!indexSupport.childrenNameDuplicatable(rootNode))
|
||||||
indexSupport.incrNameIfDuplicate(rootNode);
|
indexSupport.incrNameIfDuplicate(rootNode);
|
||||||
// get the coped root with full props
|
// get the copied root with full props
|
||||||
return indexNodeDao.findOrNull(rootNode.getCode());
|
return indexNodeDao.findOrNull(rootNode.getCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,220 @@
|
|||||||
|
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.NanopartApplication;
|
||||||
|
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yanglin
|
||||||
|
*/
|
||||||
|
@SpringBootTest(classes = NanopartApplication.class)
|
||||||
|
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
||||||
|
class CompleteVisaChangeStampHandlerTest {
|
||||||
|
private final CompleteVisaChangeStampHandler completeVisaChangeStampHandler;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void exec() {
|
||||||
|
ProcessInstanceDTO dto = JSON.parseObject("{\n" +
|
||||||
|
" \"businessKey\": \"904\",\n" +
|
||||||
|
" \"businessProcessInstanceName\": \"变更签证用印审批\",\n" +
|
||||||
|
" \"category\": \"bgqzyy\",\n" +
|
||||||
|
" \"currentElementKey\": \"驳回流程实例无节点信息\",\n" +
|
||||||
|
" \"initiator\": {\n" +
|
||||||
|
" \"assignee\": null,\n" +
|
||||||
|
" \"assigneeType\": null,\n" +
|
||||||
|
" \"assignerName\": \"宋爱弟\",\n" +
|
||||||
|
" \"avatar\": \"https://axzo-app.oss-cn-chengdu.aliyuncs.com/face/face_test/b048b3d99ef048739a258e48f7feb3dd.jpg\",\n" +
|
||||||
|
" \"nodeId\": null,\n" +
|
||||||
|
" \"ouId\": \"6158\",\n" +
|
||||||
|
" \"personId\": \"9000398967\",\n" +
|
||||||
|
" \"tenantId\": \"400\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"lastOperationAssigner\": {\n" +
|
||||||
|
" \"assignee\": \"2008269\",\n" +
|
||||||
|
" \"assigneeType\": \"3\",\n" +
|
||||||
|
" \"assignerName\": \"高志鹏\",\n" +
|
||||||
|
" \"avatar\": \"https://axzo-public.oss-cn-chengdu.aliyuncs.com/banner/banner_test/5c441569ee524c208295de72b64863d4.jpg\",\n" +
|
||||||
|
" \"nodeId\": null,\n" +
|
||||||
|
" \"ouId\": \"6158\",\n" +
|
||||||
|
" \"personId\": \"9000400266\",\n" +
|
||||||
|
" \"tenantId\": \"400\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"noticeConf\": {\n" +
|
||||||
|
" \"carbonCopy\": {\n" +
|
||||||
|
" \"carbonCopyMessageId\": \"8733f93de8db49699a78eda5a342763c\",\n" +
|
||||||
|
" \"viewJson\": \"{\\\"templateName\\\":\\\"审批流抄送通用模板\\\",\\\"templateCode\\\":\\\"8733f93de8db49699a78eda5a342763c\\\"}\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"notice\": {\n" +
|
||||||
|
" \"assigners\": {\n" +
|
||||||
|
" \"selected\": false,\n" +
|
||||||
|
" \"viewJson\": null\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"histories\": {\n" +
|
||||||
|
" \"selected\": false,\n" +
|
||||||
|
" \"viewJson\": null\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"initiator\": {\n" +
|
||||||
|
" \"selected\": false,\n" +
|
||||||
|
" \"viewJson\": null\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"noticeMessageId\": null,\n" +
|
||||||
|
" \"positions\": {\n" +
|
||||||
|
" \"selected\": false,\n" +
|
||||||
|
" \"viewJson\": null\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"roles\": {\n" +
|
||||||
|
" \"selected\": false,\n" +
|
||||||
|
" \"viewJson\": null\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"sendMessage\": null,\n" +
|
||||||
|
" \"triggerEvents\": []\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"pending\": {\n" +
|
||||||
|
" \"pendingMessageId\": \"95c89a0db50c48fe9956068090b63ffb\",\n" +
|
||||||
|
" \"viewJson\": \"{\\\"templateName\\\":\\\"变更签证用印审批待办\\\",\\\"templateCode\\\":\\\"95c89a0db50c48fe9956068090b63ffb\\\",\\\"category\\\":\\\"APPROVAL_PENDING_MESSAGE\\\",\\\"title\\\":\\\"变更签证用印申请\\\",\\\"content\\\":\\\"${initiatorName}发起了一个“${visaType}用印申请,请前往审批\\\",\\\"groupNodeNamePaths\\\":[\\\"SaaS待办中心/变更签证管理/用印\\\"],\\\"status\\\":\\\"ENABLE\\\",\\\"createPersonId\\\":290752,\\\"createPersonName\\\":\\\"马翔\\\",\\\"updatePersonId\\\":9100404971,\\\"updatePersonName\\\":\\\"马翔\\\",\\\"styleType\\\":{\\\"code\\\":\\\"FLOW_COMMON\\\",\\\"category\\\":\\\"APPROVAL_PENDING_MESSAGE\\\",\\\"name\\\":\\\"样式2001(审批详情页通用样式)\\\",\\\"url\\\":null},\\\"pushData\\\":{\\\"switchOn\\\":false,\\\"ability\\\":[],\\\"type\\\":\\\"\\\",\\\"voiceType\\\":\\\"\\\"}}\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"sms\": {\n" +
|
||||||
|
" \"smsId\": \"\",\n" +
|
||||||
|
" \"viewJson\": null\n" +
|
||||||
|
" }\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"processDefinitionId\": \"bgqzyy:4:202503052021100000009\",\n" +
|
||||||
|
" \"processDefinitionKey\": \"bgqzyy\",\n" +
|
||||||
|
" \"processDefinitionVersion\": 4,\n" +
|
||||||
|
" \"processInstanceId\": \"202504291615200000000\",\n" +
|
||||||
|
" \"reason\": \"\",\n" +
|
||||||
|
" \"signConf\": null,\n" +
|
||||||
|
" \"startTime\": 1745914538900,\n" +
|
||||||
|
" \"tenantId\": \"398\",\n" +
|
||||||
|
" \"type\": \"PROCESS_INSTANCE_REJECTED\",\n" +
|
||||||
|
" \"variables\": {\n" +
|
||||||
|
" \"reason\": \"123\",\n" +
|
||||||
|
" \"no\": \"123\",\n" +
|
||||||
|
" \"[_INTERNAL_INITIATOR_]\": \"{\\\"assignerName\\\":\\\"宋爱弟\\\",\\\"avatar\\\":\\\"https://axzo-app.oss-cn-chengdu.aliyuncs.com/face/face_test/b048b3d99ef048739a258e48f7feb3dd.jpg\\\",\\\"ouId\\\":\\\"6158\\\",\\\"personId\\\":\\\"9000398967\\\",\\\"tenantId\\\":\\\"400\\\"}\",\n" +
|
||||||
|
" \"initiatorUnitName\": \"四川星腾贸易有限公司\",\n" +
|
||||||
|
" \"_TASK_COMPLETE_TYPE202504291615200000053\": \"APPROVED\",\n" +
|
||||||
|
" \"[_INITIATOR_SPECIFY_]\": {\n" +
|
||||||
|
" \"node_289121268979\": [\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"assignee\": null,\n" +
|
||||||
|
" \"assigneeType\": null,\n" +
|
||||||
|
" \"assignerName\": null,\n" +
|
||||||
|
" \"avatar\": null,\n" +
|
||||||
|
" \"nodeId\": null,\n" +
|
||||||
|
" \"ouId\": \"6158\",\n" +
|
||||||
|
" \"personId\": \"9000400266\",\n" +
|
||||||
|
" \"tenantId\": \"398\"\n" +
|
||||||
|
" }\n" +
|
||||||
|
" ]\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"[_INTERNAL_PROCESS_DELETE_REASON_]\": \"\",\n" +
|
||||||
|
" \"[_ASSIGNEE_LIST_INFO_]node_289121268979\": [\n" +
|
||||||
|
" \"6158|9000400266\"\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"stampType\": \"OFFICIAL\",\n" +
|
||||||
|
" \"[_ASSIGNEE_INFO_]202504291615200000081\": \"{\\\"ouId\\\":\\\"6158\\\",\\\"personId\\\":\\\"9000400266\\\",\\\"tenantId\\\":\\\"398\\\"}\",\n" +
|
||||||
|
" \"[_INTERNAL_PROCESS_BIZ_TYPE]\": \"approval\",\n" +
|
||||||
|
" \"[_INTERNAL_PROCESS_AGENT]\": false,\n" +
|
||||||
|
" \"[_PROCESS_OWNERSHIP_APPLICATION_]\": \"nanopart\",\n" +
|
||||||
|
" \"visaTypeDesc\": \"设计变更\",\n" +
|
||||||
|
" \"[_PROCESS_CLOSING_TYPE]\": \"REJECTED\",\n" +
|
||||||
|
" \"[_INTERNAL_DELETE_PROCESS_FLAG_]\": \"[_INTERNAL_PROCESS_TYPE_REJECT_]\",\n" +
|
||||||
|
" \"[_ASSIGNEE_INFO_]202504291615200000053\": \"{\\\"assignerName\\\":\\\"宋爱弟\\\",\\\"avatar\\\":\\\"https://axzo-app.oss-cn-chengdu.aliyuncs.com/face/face_test/b048b3d99ef048739a258e48f7feb3dd.jpg\\\",\\\"ouId\\\":\\\"6158\\\",\\\"personId\\\":\\\"9000398967\\\",\\\"tenantId\\\":\\\"400\\\"}\",\n" +
|
||||||
|
" \"unitPerson\": [\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"unit\": \"四川星腾贸易有限公司(总包单位)\",\n" +
|
||||||
|
" \"person\": \"张鹏辉-职员\"\n" +
|
||||||
|
" }\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"stampOuId\": 6158,\n" +
|
||||||
|
" \"pdfFileUrl\": \"https://axzo-public.oss-cn-chengdu.aliyuncs.com/cms/cms_test/55bc64fb1a3e4185a0bb076fef0267e9.pdf\",\n" +
|
||||||
|
" \"workspaceName\": \"test-0925项目2\",\n" +
|
||||||
|
" \"attach\": \"null\",\n" +
|
||||||
|
" \"stampContractId\": \"yDtB3UUckpxbd98wUxfgmNJRzSKgRqTy\",\n" +
|
||||||
|
" \"happenTime\": \"2025.04.25\",\n" +
|
||||||
|
" \"[_ACTIVITY_INFO_SNAPSHOT_]NODE_STARTER\": [\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"assignee\": null,\n" +
|
||||||
|
" \"assigneeType\": null,\n" +
|
||||||
|
" \"assignerName\": \"宋爱弟\",\n" +
|
||||||
|
" \"avatar\": \"https://axzo-app.oss-cn-chengdu.aliyuncs.com/face/face_test/b048b3d99ef048739a258e48f7feb3dd.jpg\",\n" +
|
||||||
|
" \"nodeId\": null,\n" +
|
||||||
|
" \"ouId\": \"6158\",\n" +
|
||||||
|
" \"personId\": \"9000398967\",\n" +
|
||||||
|
" \"tenantId\": \"400\"\n" +
|
||||||
|
" }\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"[_ACTIVITY_INFO_SNAPSHOT_]node_289121268979\": [\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"assignee\": null,\n" +
|
||||||
|
" \"assigneeType\": null,\n" +
|
||||||
|
" \"assignerName\": null,\n" +
|
||||||
|
" \"avatar\": null,\n" +
|
||||||
|
" \"nodeId\": null,\n" +
|
||||||
|
" \"ouId\": \"6158\",\n" +
|
||||||
|
" \"personId\": \"9000400266\",\n" +
|
||||||
|
" \"tenantId\": \"398\"\n" +
|
||||||
|
" }\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"_TASK_COMPLETE_TYPE202504291615200000081\": \"DELETED\",\n" +
|
||||||
|
" \"relationArea\": \"\",\n" +
|
||||||
|
" \"[_SIGNATURE_COLLECTION_]\": [\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"activityId\": \"NODE_STARTER\",\n" +
|
||||||
|
" \"activityName\": \"发起人\",\n" +
|
||||||
|
" \"signatures\": []\n" +
|
||||||
|
" }\n" +
|
||||||
|
" ],\n" +
|
||||||
|
" \"visaId\": 904,\n" +
|
||||||
|
" \"[_INTERNAL_PROCESS_WORKSPACE_TYPE]\": 1,\n" +
|
||||||
|
" \"initiatorName\": \"宋爱弟\",\n" +
|
||||||
|
" \"[_CLOSE_PROCESS_ASSIGNER_]\": {\n" +
|
||||||
|
" \"assignee\": \"2008269\",\n" +
|
||||||
|
" \"assigneeType\": \"3\",\n" +
|
||||||
|
" \"assignerName\": \"高志鹏\",\n" +
|
||||||
|
" \"avatar\": \"https://axzo-public.oss-cn-chengdu.aliyuncs.com/banner/banner_test/5c441569ee524c208295de72b64863d4.jpg\",\n" +
|
||||||
|
" \"nodeId\": null,\n" +
|
||||||
|
" \"ouId\": \"6158\",\n" +
|
||||||
|
" \"personId\": \"9000400266\",\n" +
|
||||||
|
" \"tenantId\": \"400\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"[_CREATE_INSTANCE_PARAMS]\": \"{\\\"processDefinitionKey\\\":\\\"bgqzyy\\\",\\\"tenantId\\\":\\\"398\\\",\\\"specifyAssignerMap\\\":{\\\"node_289121268979\\\":[{\\\"personId\\\":\\\"9000400266\\\",\\\"tenantId\\\":\\\"398\\\",\\\"ouId\\\":\\\"6158\\\"}]},\\\"variables\\\":{\\\"visaId\\\":904,\\\"stampOuId\\\":6158,\\\"topic\\\":\\\"123123\\\",\\\"initiatorUnitName\\\":\\\"四川星腾贸易有限公司\\\",\\\"stampType\\\":\\\"OFFICIAL\\\",\\\"stampTypeDesc\\\":\\\"公章\\\",\\\"stampRecipient\\\":\\\"yDtB3UUckpxbd98vUxfgmNJ8GHnqu6Sd\\\",\\\"stampContractId\\\":\\\"yDtB3UUckpxbd98wUxfgmNJRzSKgRqTy\\\",\\\"pdfFileUrl\\\":\\\"https://axzo-public.oss-cn-chengdu.aliyuncs.com/cms/cms_test/55bc64fb1a3e4185a0bb076fef0267e9.pdf\\\",\\\"initiatorName\\\":\\\"宋爱弟\\\",\\\"visaType\\\":\\\"DESIGN_CHANGE\\\",\\\"visaTypeDesc\\\":\\\"设计变更\\\",\\\"[_INTERNAL_PROCESS_WORKSPACE_TYPE]\\\":1,\\\"[_INTERNAL_PROCESS_BIZ_TYPE]\\\":\\\"approval\\\",\\\"[_INTERNAL_INITIATOR_]\\\":\\\"{\\\\\\\"assignerName\\\\\\\":\\\\\\\"宋爱弟\\\\\\\",\\\\\\\"avatar\\\\\\\":\\\\\\\"https://axzo-app.oss-cn-chengdu.aliyuncs.com/face/face_test/b048b3d99ef048739a258e48f7feb3dd.jpg\\\\\\\",\\\\\\\"ouId\\\\\\\":\\\\\\\"6158\\\\\\\",\\\\\\\"personId\\\\\\\":\\\\\\\"9000398967\\\\\\\",\\\\\\\"tenantId\\\\\\\":\\\\\\\"400\\\\\\\"}\\\",\\\"[_BIZ_ORG_RELATION_]\\\":{},\\\"[_WORKFLOW_ENGINE_VERSION_]\\\":\\\"1.5.2\\\",\\\"[_PENDING_VARIABLES]\\\":{\\\"visaId\\\":904,\\\"stampOuId\\\":6158,\\\"topic\\\":\\\"123123\\\",\\\"initiatorUnitName\\\":\\\"四川星腾贸易有限公司\\\",\\\"stampType\\\":\\\"OFFICIAL\\\",\\\"stampTypeDesc\\\":\\\"公章\\\",\\\"stampRecipient\\\":\\\"yDtB3UUckpxbd98vUxfgmNJ8GHnqu6Sd\\\",\\\"stampContractId\\\":\\\"yDtB3UUckpxbd98wUxfgmNJRzSKgRqTy\\\",\\\"pdfFileUrl\\\":\\\"https://axzo-public.oss-cn-chengdu.aliyuncs.com/cms/cms_test/55bc64fb1a3e4185a0bb076fef0267e9.pdf\\\",\\\"initiatorName\\\":\\\"宋爱弟\\\",\\\"visaType\\\":\\\"DESIGN_CHANGE\\\",\\\"visaTypeDesc\\\":\\\"设计变更\\\"},\\\"[_INTERNAL_PROCESS_AGENT]\\\":false,\\\"[_PROCESS_OWNERSHIP_APPLICATION_]\\\":\\\"nanopart\\\",\\\"[_INITIATOR_SPECIFY_]\\\":{\\\"node_289121268979\\\":[{\\\"personId\\\":\\\"9000400266\\\",\\\"tenantId\\\":\\\"398\\\",\\\"ouId\\\":\\\"6158\\\"}]}},\\\"signVariables\\\":{},\\\"pendingVariables\\\":{\\\"visaId\\\":904,\\\"stampOuId\\\":6158,\\\"topic\\\":\\\"123123\\\",\\\"initiatorUnitName\\\":\\\"四川星腾贸易有限公司\\\",\\\"stampType\\\":\\\"OFFICIAL\\\",\\\"stampTypeDesc\\\":\\\"公章\\\",\\\"stampRecipient\\\":\\\"yDtB3UUckpxbd98vUxfgmNJ8GHnqu6Sd\\\",\\\"stampContractId\\\":\\\"yDtB3UUckpxbd98wUxfgmNJRzSKgRqTy\\\",\\\"pdfFileUrl\\\":\\\"https://axzo-public.oss-cn-chengdu.aliyuncs.com/cms/cms_test/55bc64fb1a3e4185a0bb076fef0267e9.pdf\\\",\\\"initiatorName\\\":\\\"宋爱弟\\\",\\\"visaType\\\":\\\"DESIGN_CHANGE\\\",\\\"visaTypeDesc\\\":\\\"设计变更\\\"},\\\"cooperationOrg\\\":{},\\\"businessKey\\\":\\\"904\\\",\\\"initiator\\\":{\\\"assignerName\\\":\\\"宋爱弟\\\",\\\"personId\\\":\\\"9000398967\\\",\\\"tenantId\\\":\\\"400\\\",\\\"ouId\\\":\\\"6158\\\",\\\"avatar\\\":\\\"https://axzo-app.oss-cn-chengdu.aliyuncs.com/face/face_test/b048b3d99ef048739a258e48f7feb3dd.jpg\\\"},\\\"async\\\":false,\\\"startFormVariables\\\":{\\\"no\\\":\\\"123\\\",\\\"reason\\\":\\\"123\\\",\\\"relationArea\\\":\\\"\\\",\\\"contractNo\\\":\\\"111\\\",\\\"unitPerson\\\":[{\\\"unit\\\":\\\"四川星腾贸易有限公司(总包单位)\\\",\\\"person\\\":\\\"张鹏辉-职员\\\"}],\\\"relationProfessional\\\":\\\"\\\",\\\"topic\\\":\\\"123123\\\",\\\"contextDescription\\\":[],\\\"workspaceName\\\":\\\"test-0925项目2\\\",\\\"contractName\\\":\\\"111\\\",\\\"happenTime\\\":\\\"2025.04.25\\\",\\\"relationProject\\\":\\\"0925工程\\\"}}\",\n" +
|
||||||
|
" \"visaType\": \"DESIGN_CHANGE\",\n" +
|
||||||
|
" \"[_WORKFLOW_ENGINE_VERSION_]\": \"1.5.2\",\n" +
|
||||||
|
" \"[_BIZ_ORG_RELATION_]\": {\n" +
|
||||||
|
" \"orgScopes\": [],\n" +
|
||||||
|
" \"workerTeamScopes\": []\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"stampRecipient\": \"yDtB3UUckpxbd98vUxfgmNJ8GHnqu6Sd\",\n" +
|
||||||
|
" \"stampTypeDesc\": \"公章\",\n" +
|
||||||
|
" \"relationProfessional\": \"\",\n" +
|
||||||
|
" \"contextDescription\": [],\n" +
|
||||||
|
" \"topic\": \"123123\",\n" +
|
||||||
|
" \"[_PENDING_VARIABLES]\": {\n" +
|
||||||
|
" \"visaId\": 904,\n" +
|
||||||
|
" \"stampOuId\": 6158,\n" +
|
||||||
|
" \"topic\": \"123123\",\n" +
|
||||||
|
" \"initiatorUnitName\": \"四川星腾贸易有限公司\",\n" +
|
||||||
|
" \"stampType\": \"OFFICIAL\",\n" +
|
||||||
|
" \"stampTypeDesc\": \"公章\",\n" +
|
||||||
|
" \"stampRecipient\": \"yDtB3UUckpxbd98vUxfgmNJ8GHnqu6Sd\",\n" +
|
||||||
|
" \"stampContractId\": \"yDtB3UUckpxbd98wUxfgmNJRzSKgRqTy\",\n" +
|
||||||
|
" \"pdfFileUrl\": \"https://axzo-public.oss-cn-chengdu.aliyuncs.com/cms/cms_test/55bc64fb1a3e4185a0bb076fef0267e9.pdf\",\n" +
|
||||||
|
" \"initiatorName\": \"宋爱弟\",\n" +
|
||||||
|
" \"visaType\": \"DESIGN_CHANGE\",\n" +
|
||||||
|
" \"visaTypeDesc\": \"设计变更\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"relationProject\": \"0925工程\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"workflowEngineVersion\": \"1.5.2\"\n" +
|
||||||
|
" }", ProcessInstanceDTO.class);
|
||||||
|
completeVisaChangeStampHandler.onCompleted(dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@ -17,17 +17,21 @@ import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
|||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaDetailByIdRequest;
|
import cn.axzo.nanopart.visa.api.request.VisaDetailByIdRequest;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
||||||
|
import cn.axzo.nanopart.visa.api.request.VisaPayApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
||||||
|
import cn.axzo.nanopart.visa.api.response.VisaChangeRelationOrdersResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -194,4 +198,20 @@ public interface ChangeRecordApi {
|
|||||||
@PostMapping("/api/visa/change/update")
|
@PostMapping("/api/visa/change/update")
|
||||||
ApiResult<Void> update(@RequestBody @Validated UpdateVisaChangeReq req);
|
ApiResult<Void> update(@RequestBody @Validated UpdateVisaChangeReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款表单提交创建审批
|
||||||
|
*
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/visa/pay/approveCreate")
|
||||||
|
ApiResult<Void> approveCreateVisaPay(@Validated @RequestBody VisaPayApproveCreateReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据签证id获取关联的单据信息
|
||||||
|
* @param visaId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/api/visa/change/relationOrdersById")
|
||||||
|
ApiResult<VisaChangeRelationOrdersResp> getRelationOrdersById(@RequestParam("visaId") Long visaId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -91,10 +91,29 @@ public interface VisaConstant {
|
|||||||
String FORM_FIELD_RELATION_VISA_ORDER = "relationVisaOrders";
|
String FORM_FIELD_RELATION_VISA_ORDER = "relationVisaOrders";
|
||||||
// 附件
|
// 附件
|
||||||
String FORM_FIELD_ATTACH = "attach";
|
String FORM_FIELD_ATTACH = "attach";
|
||||||
|
// 合同名称
|
||||||
|
String FORM_CONTRACT_NAME = "contractName";
|
||||||
|
// 合同编号
|
||||||
|
String FORM_CONTRACT_NO = "contractNo";
|
||||||
|
|
||||||
// ***************** IM-Group-Tips ******************
|
// ***************** IM-Group-Tips ******************
|
||||||
String IM_GROUP_OWNER_TIPS = "群成员共计%d人,收到回复%d人,其中%d人同意,%d人拒绝。";
|
String IM_GROUP_OWNER_TIPS = "群成员共计%d人,收到回复%d人,其中%d人同意,%d人拒绝。";
|
||||||
String IM_GROUP_PARTICIPATE_TIPS = "由 %s 提交的【%s】,需要你处理,是否同意?";
|
String IM_GROUP_PARTICIPATE_TIPS = "由 %s 提交的【%s】,需要你处理,是否同意?";
|
||||||
String IM_GROUP_PARTICIPATE_TIPS_OPERATED = "你已%s由 %s 提交的【%s】";
|
String IM_GROUP_PARTICIPATE_TIPS_OPERATED = "你已%s由 %s 提交的【%s】";
|
||||||
|
|
||||||
|
// ********************* 价款审批表单 ********************
|
||||||
|
// 完工确认单编号
|
||||||
|
String FORM_PAY_COMPLETE_WORKER_NO = "completeWorkNo";
|
||||||
|
|
||||||
|
// 确认事项
|
||||||
|
String FORM_PAY_CONFIRM_MATTER = "confirmMatter";
|
||||||
|
// 实际施工完工时间
|
||||||
|
String FORM_PAY_ACTUAL_CONSTRUCTION_COMPLETE_DATE = "actualConstructionCompleteDate";
|
||||||
|
// 申报金额(元)
|
||||||
|
String FORM_PAY_DECLARED_AMOUNT = "declaredAmount";
|
||||||
|
//审定金额(元)
|
||||||
|
String FORM_PAY_APPROVAL_AMOUNT = "approvalAmount";
|
||||||
|
// 价款表单附件
|
||||||
|
String FORM_PAY_COMPLETE_CONFIRM_ATTACH = "completeConfirmAttach";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,50 @@
|
|||||||
|
package cn.axzo.nanopart.visa.api.enums;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批单状态
|
||||||
|
*
|
||||||
|
* @author chenwenjian
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2025/4/18 10:06
|
||||||
|
*/
|
||||||
|
public enum VisaApprovalStatusEnum {
|
||||||
|
|
||||||
|
// 立项审批中
|
||||||
|
PROJECT_APPROVING("立项审批中"),
|
||||||
|
// 立项已驳回
|
||||||
|
PROJECT_APPROVAL_REJECTED("立项已驳回"),
|
||||||
|
// 立项已通过
|
||||||
|
PROJECT_APPROVAL_PASSED("立项已通过"),
|
||||||
|
// 价款审批中
|
||||||
|
AMOUNT_APPROVING("价款审批中"),
|
||||||
|
// 价款已驳回
|
||||||
|
AMOUNT_APPROVAL_REJECTED("价款已驳回"),
|
||||||
|
// 价款已确认
|
||||||
|
AMOUNT_APPROVAL_PASSED("价款已确认"),
|
||||||
|
;
|
||||||
|
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
public String getDesc() {
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
VisaApprovalStatusEnum(String desc) {
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static VisaApprovalStatusEnum getByName(String name) {
|
||||||
|
if (StringUtils.isBlank(name)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (VisaApprovalStatusEnum value : values()) {
|
||||||
|
if (value.name().equals(name)) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -30,9 +30,10 @@ public enum VisaButtonTypeEnum {
|
|||||||
UPDATE("update", "编辑",55),
|
UPDATE("update", "编辑",55),
|
||||||
DELETE("delete", "删除",50),
|
DELETE("delete", "删除",50),
|
||||||
FORBID("forbid", "作废",5),
|
FORBID("forbid", "作废",5),
|
||||||
EXECUTE("execute", "发起执行",40),
|
// EXECUTE("execute", "发起执行",40),
|
||||||
REDECISION("redecision", "重新发起",0),
|
REDECISION("redecision", "重新发起",0),
|
||||||
TO_APPROVE("to_approve", "提交审批",30),
|
TO_APPROVE("to_approve", "提交立项审批",30),
|
||||||
|
TO_PAY_APPROVE("to_pay_approve", "申请价款确认", 30),
|
||||||
AGAIN_TO_APPROVE("again_to_approve", "重新提交审批",20),
|
AGAIN_TO_APPROVE("again_to_approve", "重新提交审批",20),
|
||||||
AGREE("agree", "同意",0),
|
AGREE("agree", "同意",0),
|
||||||
REJECT("reject", "拒绝",0),
|
REJECT("reject", "拒绝",0),
|
||||||
@ -65,31 +66,31 @@ public enum VisaButtonTypeEnum {
|
|||||||
// 发起人不同状态按钮权限-详情页
|
// 发起人不同状态按钮权限-详情页
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.TO_REPORT.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, DELETE)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.TO_REPORT.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, DELETE)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, FORBID)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, FORBID)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, EXECUTE, TO_APPROVE, FORBID, CHAT_GROUP_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, TO_APPROVE, FORBID, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, EXECUTE, TO_APPROVE, FORBID, CHAT_GROUP_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, TO_APPROVE, FORBID, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, TO_APPROVE, FORBID, CHAT_GROUP_RECORD)));
|
// bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, TO_APPROVE, FORBID, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(UPLOAD_FILE, FORBID, CHAT_GROUP_RECORD, APPROVAL_RECORD,PRINT)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(UPLOAD_FILE, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(UPLOAD_FILE, CHAT_GROUP_RECORD, APPROVAL_RECORD,PRINT)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD, APPROVAL_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
|
|
||||||
// 决策人不同状态按钮权限-详情页
|
// 决策人不同状态按钮权限-详情页
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, CHAT_GROUP_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, CHAT_GROUP_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, CHAT_GROUP_RECORD)));
|
// bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(UPDATE, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(UPLOAD_FILE, CHAT_GROUP_RECORD, APPROVAL_RECORD,PRINT)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(UPLOAD_FILE, CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(UPLOAD_FILE, CHAT_GROUP_RECORD, APPROVAL_RECORD,PRINT)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD, APPROVAL_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
|
|
||||||
//审核人不同状态按钮权限-详情页
|
//审核人不同状态按钮权限-详情页
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.APPROVE.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(TO_HANDLE, CHAT_GROUP_RECORD,PRINT)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.APPROVE.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(TO_HANDLE, CHAT_GROUP_RECORD)));
|
||||||
|
|
||||||
//其他不同状态按钮权限-详情页
|
//其他不同状态按钮权限-详情页
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
// bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(PRINT, CHAT_GROUP_RECORD, APPROVAL_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(PRINT, CHAT_GROUP_RECORD, APPROVAL_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD, APPROVAL_RECORD)));
|
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(CHAT_GROUP_RECORD)));
|
||||||
|
|
||||||
//[打印]按钮是通过OMS统一配置,故此处不处理
|
//[打印]按钮是通过OMS统一配置,故此处不处理
|
||||||
|
|
||||||
@ -105,7 +106,7 @@ public enum VisaButtonTypeEnum {
|
|||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
// bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
@ -116,7 +117,7 @@ public enum VisaButtonTypeEnum {
|
|||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
// bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL, UPDATE)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
@ -126,7 +127,7 @@ public enum VisaButtonTypeEnum {
|
|||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
// bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.EXECUTING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.APPROVING.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.COMPLETED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.FORBIDED.name(), Sets.newLinkedHashSet(Arrays.asList(DETAIL)));
|
||||||
|
|||||||
@ -17,7 +17,8 @@ public enum VisaChangeFieldEnum {
|
|||||||
AMOUNT_CHANGE("amountChange", "金额变化"),
|
AMOUNT_CHANGE("amountChange", "金额变化"),
|
||||||
INITIATOR("initiator", "发起人"),
|
INITIATOR("initiator", "发起人"),
|
||||||
CREATE_AT("happenTime", "提出时间"),
|
CREATE_AT("happenTime", "提出时间"),
|
||||||
APPROVAL_COMPLETE_TIME("approvalCompleteTime", "审批通过时间"),
|
APPROVAL_COMPLETE_TIME("approvalCompleteTime", "立项审批通过时间"),
|
||||||
|
APPROVAL_COMPLETE_TIME_PAY("approvalCompleteTimePay,", "价款审批通过时间"),
|
||||||
RELATION_PROJECT("relationProject", "所属工程"),
|
RELATION_PROJECT("relationProject", "所属工程"),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@ -22,20 +22,21 @@ public enum VisaLogTypeEnum {
|
|||||||
EDIT_AMOUNT("edit_amount", "编辑金额变化","%s编辑金额变化","原值:金额变化:%s;<br> 新值:金额变化:%s;"),
|
EDIT_AMOUNT("edit_amount", "编辑金额变化","%s编辑金额变化","原值:金额变化:%s;<br> 新值:金额变化:%s;"),
|
||||||
UPLOAD_FILE("upload_file", "上传附件","%s上传附件","%s上传%d个附件:%s"),
|
UPLOAD_FILE("upload_file", "上传附件","%s上传附件","%s上传%d个附件:%s"),
|
||||||
DELETE_UPLOAD_FILE("delete_upload_file", "删除附件","%s删除附件","%s删除%d个附件:%s"),
|
DELETE_UPLOAD_FILE("delete_upload_file", "删除附件","%s删除附件","%s删除%d个附件:%s"),
|
||||||
TO_EXECUTE("to_execute", "发起执行","发起执行", "%s发起执行"),
|
// TO_EXECUTE("to_execute", "发起执行","发起执行", "%s发起执行"),
|
||||||
TO_APPRROVE("to_apprrove", "发起审批","发起%s审批", "%s发起%s审批"),
|
TO_APPRROVE("to_apprrove", "发起审批", "发起%s", "%s发起%s"),
|
||||||
APPROVED_AGRESS("approved_agress", "审批流:某审批人审批通过","%s审批通过", "%s审批通过"),
|
APPROVED_AGRESS("approved_agress", "审批流:某审批人审批通过", "%s审批通过", "%s:%s审批通过"),
|
||||||
FORBIDED("forbided", "单据作废","单据废止", "%s操作废止单据"),
|
FORBIDED("forbided", "单据作废","单据废止", "%s操作废止单据"),
|
||||||
REVERT_APPROVE("revert_approve", "审批流:撤回审批","审批流程撤回", "%s撤回审批流程"),
|
REVERT_APPROVE("revert_approve", "审批流:撤回审批", "%s撤回", "%s撤回%s"),
|
||||||
REJECT_APPROVE("reject_approve", "审批流:已驳回","%s驳回审批", "%s已驳回,原因为%s"),
|
REJECT_APPROVE("reject_approve", "审批流:已驳回", "%s驳回%s", "%s已驳回,原因为%s"),
|
||||||
TRANSMIT_APPROVE("transmit_approve", "审批流操作:转交","审批人变更", "%s将审批转交至%s,原因为%s"),
|
TRANSMIT_APPROVE("transmit_approve", "审批流操作:转交", "审批人变更", "%s将%s转交至%s,原因为%s"),
|
||||||
FALLBACK_APPROVE("fallback_approve", "审批流操作:回退","%s回退审批", "%s回退审批至审批节点:%s"),
|
FALLBACK_APPROVE("fallback_approve", "审批流操作:回退","%s回退审批", "%s回退审批至审批节点:%s"),
|
||||||
APPROVE_COMPLETED("approved_completed", "审批流:审批通过","%s通过", "%s流程已完成"),
|
APPROVE_COMPLETED("approved_completed", "审批流:审批通过", "%s通过", "%s已通过"),
|
||||||
REQUEST_STAMP("request_stamp", "发起用印申请", "%s发起用印申请", "%s发起电子印章用印申请"),
|
APPROVE_ABORT("approved_abort", "审批流:中止", "%s中止", "因系统原因,%s已中止"),
|
||||||
CANCEL_STAMP("stamp_canceled", "操作取消用印","%s取消用印", "%s操作取消单据用印申请"),
|
REQUEST_STAMP("request_stamp", "发起用印申请", "%s发起%s用印申请", "%s发起电子印章用印申请"),
|
||||||
|
CANCEL_STAMP("stamp_canceled", "操作取消用印","%s取消%s用印", "%s操作取消单据用印申请"),
|
||||||
TX_CANCEL_STAMP("tx_stamp_canceled", "腾讯小程序撤销合同", "签署人撤销合同", "存在签署人撤销合同,单据状态流转为“未用印”"),
|
TX_CANCEL_STAMP("tx_stamp_canceled", "腾讯小程序撤销合同", "签署人撤销合同", "存在签署人撤销合同,单据状态流转为“未用印”"),
|
||||||
COMPLETE_STAMP("stamp_complete", "操作完成用印","%s完成用印", "%s操作完成用印"),
|
COMPLETE_STAMP("stamp_complete", "操作完成用印","%s完成%s用印", "%s操作完成用印"),
|
||||||
AUTO_COMPLETE_STAMP("stamp_auto_complete", "电子签合同状态\"签署完成\"回调时","用印成功", "单据用印申请均签署通过!"),
|
AUTO_COMPLETE_STAMP("stamp_auto_complete", "电子签合同状态\"签署完成\"回调时","用印成功", "%s用印申请均签署通过!"),
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -0,0 +1,13 @@
|
|||||||
|
package cn.axzo.nanopart.visa.api.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程审批阶段 (临时方案)
|
||||||
|
*
|
||||||
|
* @author yanglin
|
||||||
|
*/
|
||||||
|
public enum VisaProcessPhase {
|
||||||
|
// 立项审批
|
||||||
|
PROJECT,
|
||||||
|
// 完工价款确认审批
|
||||||
|
PAYMENT
|
||||||
|
}
|
||||||
@ -21,17 +21,22 @@ public enum VisaRelationFieldEnum {
|
|||||||
VISA_ORDER("visa_order", "变洽签变更单"),
|
VISA_ORDER("visa_order", "变洽签变更单"),
|
||||||
ATTACHMENT("attachment", "附件"),
|
ATTACHMENT("attachment", "附件"),
|
||||||
PROCESS_INSTANCE_OF_VISA("process_instance_of_visa", "变洽签审批实例"),
|
PROCESS_INSTANCE_OF_VISA("process_instance_of_visa", "变洽签审批实例"),
|
||||||
|
PROCESS_INSTANCE_OF_PAY("process_instance_of_pay", "价款审批实例"),
|
||||||
PROCESS_INSTANCE_OF_ESS("process_instance_of_ess", "用印审批实例"),
|
PROCESS_INSTANCE_OF_ESS("process_instance_of_ess", "用印审批实例"),
|
||||||
|
PROCESS_INSTANCE_OF_ESS_PAY("process_instance_of_ess_pay", "用印审批实例"),
|
||||||
ORDER("order", "单据"),
|
ORDER("order", "单据"),
|
||||||
IM_GROUP_PARTICIPATE("im_group_participate", "im群聊参与人"),
|
IM_GROUP_PARTICIPATE("im_group_participate", "im群聊参与人"),
|
||||||
PRINT_PDF_FILE("print_pdf_file", "打印生成的PDF文件"),
|
PRINT_PDF_FILE("print_pdf_file", "打印生成的PDF文件"),
|
||||||
|
PRINT_PDF_FILE_PAY("print_pdf_file_pay", "打印生成的PDF文件"),
|
||||||
ESS_RECIPIENT_ID_MAP("ess_recipient_id_map", "电子签章单位与签证位置的映射"),
|
ESS_RECIPIENT_ID_MAP("ess_recipient_id_map", "电子签章单位与签证位置的映射"),
|
||||||
|
ESS_RECIPIENT_ID_MAP_PAY("ess_recipient_id_map_pay", "电子签章单位与签证位置的映射"),
|
||||||
;
|
;
|
||||||
private final String code;
|
private final String code;
|
||||||
private final String desc;
|
private final String desc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否附件类型
|
* 是否附件类型
|
||||||
|
*
|
||||||
* @param name 枚举的名称
|
* @param name 枚举的名称
|
||||||
* @return true:是附件类型;false:不是附件类型
|
* @return true:是附件类型;false:不是附件类型
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -22,8 +22,8 @@ public enum VisaStatusEnum {
|
|||||||
|
|
||||||
TO_REPORT("to_report", "待提报", null),
|
TO_REPORT("to_report", "待提报", null),
|
||||||
DECIDING("deciding", "决策中", VisaLogTypeEnum.CHAT_GROUP),
|
DECIDING("deciding", "决策中", VisaLogTypeEnum.CHAT_GROUP),
|
||||||
EXECUTING("executing","执行中", VisaLogTypeEnum.TO_EXECUTE),
|
// EXECUTING("executing","执行中", VisaLogTypeEnum.TO_EXECUTE),
|
||||||
APPROVING("approving","审批中", VisaLogTypeEnum.TO_APPRROVE),
|
APPROVING("approving","处理中", VisaLogTypeEnum.TO_APPRROVE),
|
||||||
COMPLETED("completed","已完成",VisaLogTypeEnum.APPROVE_COMPLETED),
|
COMPLETED("completed","已完成",VisaLogTypeEnum.APPROVE_COMPLETED),
|
||||||
FORBIDED("forbided","已废除",VisaLogTypeEnum.FORBIDED),
|
FORBIDED("forbided","已废除",VisaLogTypeEnum.FORBIDED),
|
||||||
REPORT_FROM_APPROVE("report_from_approve","待提报(审批驳回)", null),
|
REPORT_FROM_APPROVE("report_from_approve","待提报(审批驳回)", null),
|
||||||
@ -33,7 +33,8 @@ public enum VisaStatusEnum {
|
|||||||
/**
|
/**
|
||||||
* 可以编辑变更签证单的状态
|
* 可以编辑变更签证单的状态
|
||||||
*/
|
*/
|
||||||
private static Set<VisaStatusEnum> editFormStatus = Sets.newHashSet(DECIDING, EXECUTING, DECIDING_FROM_APPROVE);
|
// private static Set<VisaStatusEnum> editFormStatus = Sets.newHashSet(DECIDING, EXECUTING, DECIDING_FROM_APPROVE);
|
||||||
|
private static Set<VisaStatusEnum> editFormStatus = Sets.newHashSet(DECIDING, DECIDING_FROM_APPROVE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 无效状态集合,审批不通过到待提报/已废除
|
* 无效状态集合,审批不通过到待提报/已废除
|
||||||
|
|||||||
@ -5,6 +5,8 @@ import lombok.AccessLevel;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -17,9 +19,11 @@ import java.util.Set;
|
|||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public enum VisaTypeEnum {
|
public enum VisaTypeEnum {
|
||||||
|
|
||||||
DESIGN_CHANGE("bgqz01","design_change", "设计变更"),
|
DESIGN_CHANGE("bgqz01", "design_change", "设计变更"),
|
||||||
TECHNOLOGY_APPROVED("bgqz02","technology_approved", "技术核定"),
|
TECHNOLOGY_APPROVED("bgqz02", "technology_approved", "技术核定"),
|
||||||
PROJECT_VISA("bgqz03", "project_visa","工程签证");
|
PROJECT_VISA("bgqz03", "project_visa", "工程签证"),
|
||||||
|
PAY_CONFIRM("wgjkqr", "pay_confirm", "价款确认"),
|
||||||
|
;
|
||||||
|
|
||||||
private final String processDefinitionKey;
|
private final String processDefinitionKey;
|
||||||
private final String code;
|
private final String code;
|
||||||
@ -42,4 +46,11 @@ public enum VisaTypeEnum {
|
|||||||
public static Set<VisaTypeEnum> fetchProjectVisaSet() {
|
public static Set<VisaTypeEnum> fetchProjectVisaSet() {
|
||||||
return projectVisaSet;
|
return projectVisaSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static VisaTypeEnum valueOfProcessDefinitionKey(String processDefinitionKey) {
|
||||||
|
return Arrays.stream(VisaTypeEnum.values())
|
||||||
|
.filter(i -> Objects.equals(i.getProcessDefinitionKey(), processDefinitionKey))
|
||||||
|
.findAny()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package cn.axzo.nanopart.visa.api.request;
|
|||||||
import cn.axzo.framework.domain.ServiceException;
|
import cn.axzo.framework.domain.ServiceException;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@ -86,7 +87,7 @@ public class ChangeStatusRequest {
|
|||||||
*/
|
*/
|
||||||
private boolean editFormFlag = true;
|
private boolean editFormFlag = true;
|
||||||
|
|
||||||
|
private VisaTypeEnum visaType;
|
||||||
public void check() {
|
public void check() {
|
||||||
if (Objects.nonNull(logType) && !VisaLogTypeEnum.isApproveNotAgree(logType)) {
|
if (Objects.nonNull(logType) && !VisaLogTypeEnum.isApproveNotAgree(logType)) {
|
||||||
throw new ServiceException("不是审核不通过日志");
|
throw new ServiceException("不是审核不通过日志");
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
package cn.axzo.nanopart.visa.api.request;
|
package cn.axzo.nanopart.visa.api.request;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@ -7,8 +10,6 @@ import lombok.Data;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@ -40,6 +41,14 @@ public class UpdateVisaChangeReq {
|
|||||||
*/
|
*/
|
||||||
private String scene;
|
private String scene;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批截断. PROJECT: 立项审批, PAYMENT: 完工价款确认审批
|
||||||
|
*/
|
||||||
|
@NotNull(message = "phase不能为空")
|
||||||
|
private VisaProcessPhase phase;
|
||||||
|
|
||||||
|
private String context;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public enum VisaStampAction {
|
public enum VisaStampAction {
|
||||||
@ -48,7 +57,8 @@ public class UpdateVisaChangeReq {
|
|||||||
CANCEL("取消用印"),
|
CANCEL("取消用印"),
|
||||||
TX_CANCEL("腾讯侧撤销合同"),
|
TX_CANCEL("腾讯侧撤销合同"),
|
||||||
// 所有审批流审批完成时,自动完成审批,要区别手动完成用印操作,记录日志
|
// 所有审批流审批完成时,自动完成审批,要区别手动完成用印操作,记录日志
|
||||||
AUTO_COMPLETE("自动完成用印");
|
AUTO_COMPLETE("自动完成用印"),
|
||||||
|
ALL_PROCESS_REJECTED("用印申请全被驳回");
|
||||||
|
|
||||||
private String desc;
|
private String desc;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,11 +84,17 @@ public class VisaChangePageSearchReq {
|
|||||||
private List<Date> happenTime;
|
private List<Date> happenTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 审批完成时间区间
|
* 立项通过时间区间
|
||||||
* 0:起始时间 1:结束时间
|
* 0:起始时间 1:结束时间
|
||||||
*/
|
*/
|
||||||
private List<Date> approveCompletedDate;
|
private List<Date> approveCompletedDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款确认通过时间区间
|
||||||
|
* 0:起始时间 1:结束时间
|
||||||
|
*/
|
||||||
|
private List<Date> approvalCompleteTimePay;
|
||||||
|
|
||||||
private Long page;
|
private Long page;
|
||||||
|
|
||||||
private Long pageSize;
|
private Long pageSize;
|
||||||
|
|||||||
@ -164,6 +164,16 @@ public class VisaChangeTempCreateReq {
|
|||||||
*/
|
*/
|
||||||
private Long operatorPersonId;
|
private Long operatorPersonId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务合同名称
|
||||||
|
*/
|
||||||
|
private String contractName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务合同编号
|
||||||
|
*/
|
||||||
|
private String contractNo;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|||||||
@ -0,0 +1,88 @@
|
|||||||
|
package cn.axzo.nanopart.visa.api.request;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum;
|
||||||
|
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.hibernate.validator.constraints.Length;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款审批表单提交
|
||||||
|
*
|
||||||
|
* @author wangli
|
||||||
|
* @since 2025-04-18 17:48
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class VisaPayApproveCreateReq {
|
||||||
|
/**
|
||||||
|
* 变洽签主业务 ID
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "变洽签主业务 ID")
|
||||||
|
@NotNull(message = "变洽签业务 ID 不能为空")
|
||||||
|
private Long visaId;
|
||||||
|
/**
|
||||||
|
* 完工确认编号
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "完工确认编号不能为空")
|
||||||
|
@Length(max = 100, message = "完工确认编号最多 100 字")
|
||||||
|
private String completeWorkNo;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实际施工完成时间
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "实际施工完成时间不能为空")
|
||||||
|
private String actualConstructionCompleteDate;
|
||||||
|
/**
|
||||||
|
* 申报金额
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "申报金额不能为空")
|
||||||
|
private String declaredAmount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 确认事项
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "确认事项不能为空")
|
||||||
|
@Length(max = 100, message = "确认事项最多 100 字")
|
||||||
|
private String confirmMatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "附件")
|
||||||
|
@Size(max = 30, message = "最多支持 30个附件")
|
||||||
|
private List<UploadFieldDTO> attachments;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联的单据,key: 单据类型,value: 单据id集合
|
||||||
|
* <p>
|
||||||
|
* TASK :任务单 RECTIFY :整改单 DESIGN_VISA:变更单
|
||||||
|
* 只有变更签证类型即{@code type}为“技术核定”或“工程签证”时才可能会有关联变更单
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @see VisaBillTypeEnum
|
||||||
|
*/
|
||||||
|
private Map<String, List<VisaChangeTempCreateReq.OrderSimpleModel>> relationOrderMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人 OUID
|
||||||
|
*/
|
||||||
|
private Long operatorOuId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人 personID
|
||||||
|
*/
|
||||||
|
private Long operatorPersonId;
|
||||||
|
}
|
||||||
@ -1,5 +1,7 @@
|
|||||||
package cn.axzo.nanopart.visa.api.request;
|
package cn.axzo.nanopart.visa.api.request;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@ -7,8 +9,6 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 变洽签关联数据查询入参模型
|
* 变洽签关联数据查询入参模型
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,17 +1,21 @@
|
|||||||
package cn.axzo.nanopart.visa.api.request;
|
package cn.axzo.nanopart.visa.api.request;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
|
||||||
import cn.axzo.nanopart.ess.api.enums.EssSealType;
|
import cn.axzo.nanopart.ess.api.enums.EssSealType;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
|
||||||
import javax.validation.constraints.NotEmpty;
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用印申请入参模型
|
* 用印申请入参模型
|
||||||
*
|
*
|
||||||
@ -55,6 +59,17 @@ public class VisaRequestStampReq {
|
|||||||
*/
|
*/
|
||||||
private Long operatorOuId;
|
private Long operatorOuId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批截断. PROJECT: 立项审批, PAYMENT: 完工价款确认审批
|
||||||
|
*/
|
||||||
|
@NotNull(message = "phase不能为空")
|
||||||
|
private VisaProcessPhase phase;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return JSON.toJSONString(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package cn.axzo.nanopart.visa.api.response;
|
package cn.axzo.nanopart.visa.api.response;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaApprovalStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -58,15 +59,24 @@ public class VisaChangePageSearchResp {
|
|||||||
private Date happenTime;
|
private Date happenTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 审批实例 ID
|
* 立项审批实例 ID
|
||||||
*/
|
*/
|
||||||
private String approvalId;
|
private String approvalId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 最终审批时间
|
* 立项审批通过时间
|
||||||
*/
|
*/
|
||||||
private Date approvalCompleteTime;
|
private Date approvalCompleteTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款确认审批实例 ID
|
||||||
|
*/
|
||||||
|
private String approvalIdPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款确认审批通过时间
|
||||||
|
*/
|
||||||
|
private Date approvalCompleteTimePay;
|
||||||
/**
|
/**
|
||||||
* 单据类型
|
* 单据类型
|
||||||
* <p>
|
* <p>
|
||||||
@ -104,20 +114,39 @@ public class VisaChangePageSearchResp {
|
|||||||
*/
|
*/
|
||||||
private String statusDesc;
|
private String statusDesc;
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 用印状态
|
// * 用印状态
|
||||||
* <p>
|
// * <p>
|
||||||
* UNKNOWN:
|
// * UNKNOWN:
|
||||||
* UNPRINTED: 未用印,
|
// * UNPRINTED: 未用印,
|
||||||
* WITH_PRINT: 用印中
|
// * WITH_PRINT: 用印中
|
||||||
* USED_PRINTS: 已用印
|
// * USED_PRINTS: 已用印
|
||||||
*/
|
// */
|
||||||
private VisaStampStatusEnum stampStatus;
|
// private VisaStampStatusEnum stampStatus;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 用印状态描述
|
||||||
|
// */
|
||||||
|
// private String stampStatusDesc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用印状态描述
|
* 审批流程状态
|
||||||
|
* <p>
|
||||||
|
* PROJECT_APPROVING: 立项审批中
|
||||||
|
* PROJECT_APPROVAL_REJECTED: 立项已驳回
|
||||||
|
* PROJECT_APPROVAL_PASSED: 立项已通过
|
||||||
|
* AMOUNT_APPROVING: 价款审批中
|
||||||
|
* AMOUNT_APPROVAL_REJECTED: 价款已驳回
|
||||||
|
* AMOUNT_APPROVAL_PASSED: 价款已确认
|
||||||
|
* @see VisaApprovalStatusEnum
|
||||||
|
* <p>
|
||||||
*/
|
*/
|
||||||
private String stampStatusDesc;
|
private VisaApprovalStatusEnum visaApprovalStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批流程状态描述
|
||||||
|
*/
|
||||||
|
private String visaApprovalStatusDesc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 有符号的变更金额
|
* 有符号的变更金额
|
||||||
@ -146,12 +175,18 @@ public class VisaChangePageSearchResp {
|
|||||||
* DETAIL: 详情
|
* DETAIL: 详情
|
||||||
* UPLOAD_FILE: 上传附件
|
* UPLOAD_FILE: 上传附件
|
||||||
* APPROVE_RECORD: 查看审批记录
|
* APPROVE_RECORD: 查看审批记录
|
||||||
|
* TO_PAY_APPROVE: 申请价款确认
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @see VisaButtonTypeEnum
|
* @see VisaButtonTypeEnum
|
||||||
*/
|
*/
|
||||||
private Set<VisaButtonTypeEnum> operateBtnSet;
|
private Set<VisaButtonTypeEnum> operateBtnSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 区域集合
|
||||||
|
*/
|
||||||
|
private List<VisaDetailByIdResponse.RelationAreaDetail> relationAreaList;
|
||||||
|
|
||||||
public String getTypeDesc() {
|
public String getTypeDesc() {
|
||||||
if (Objects.isNull(type)) {
|
if (Objects.isNull(type)) {
|
||||||
return null;
|
return null;
|
||||||
@ -173,11 +208,18 @@ public class VisaChangePageSearchResp {
|
|||||||
return status.getDesc();
|
return status.getDesc();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getStampStatusDesc() {
|
// public String getStampStatusDesc() {
|
||||||
if (Objects.isNull(stampStatus)) {
|
// if (Objects.isNull(stampStatus)) {
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// return stampStatus.getDesc();
|
||||||
|
// }
|
||||||
|
|
||||||
|
public String getVisaApprovalStatusDesc() {
|
||||||
|
if (Objects.isNull(visaApprovalStatus)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return stampStatus.getDesc();
|
return visaApprovalStatus.getDesc();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
package cn.axzo.nanopart.visa.api.response;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenwenjian
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2025/4/19 10:52
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class VisaChangeRelationOrdersResp {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务单
|
||||||
|
*/
|
||||||
|
private List<VisaChangeTempCreateReq.OrderSimpleModel> relationTaskList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 整改单
|
||||||
|
*/
|
||||||
|
private List<VisaChangeTempCreateReq.OrderSimpleModel> relationRectifyList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更单
|
||||||
|
*/
|
||||||
|
private List<VisaChangeTempCreateReq.OrderSimpleModel> relationVisaList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联无效的变更单
|
||||||
|
*/
|
||||||
|
private List<String> relationInvalidVisaList;
|
||||||
|
}
|
||||||
@ -1,27 +1,35 @@
|
|||||||
package cn.axzo.nanopart.visa.api.response;
|
package cn.axzo.nanopart.visa.api.response;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum;
|
import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import cn.axzo.workflow.common.model.response.form.model.FormModelVO;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.common.collect.Sets;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import lombok.Setter;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xudawei
|
* @author xudawei
|
||||||
@ -132,7 +140,7 @@ public class VisaDetailByIdResponse {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 最终审批时间
|
* 立项审批时间
|
||||||
*/
|
*/
|
||||||
private String approvalCompleteTime;
|
private String approvalCompleteTime;
|
||||||
|
|
||||||
@ -213,10 +221,20 @@ public class VisaDetailByIdResponse {
|
|||||||
private String approvalId;
|
private String approvalId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 最终审批状态
|
* 最终审批ID
|
||||||
|
*/
|
||||||
|
private String approvalIdPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 立项审批状态
|
||||||
*/
|
*/
|
||||||
private String approvalStatus;
|
private String approvalStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款审批状态
|
||||||
|
*/
|
||||||
|
private String approvalStatusPay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前登录人的personId
|
* 当前登录人的personId
|
||||||
*/
|
*/
|
||||||
@ -227,11 +245,141 @@ public class VisaDetailByIdResponse {
|
|||||||
*/
|
*/
|
||||||
private String contractId;
|
private String contractId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同 ID
|
||||||
|
*/
|
||||||
|
private String contractIdPay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用印状态
|
* 用印状态
|
||||||
*/
|
*/
|
||||||
private VisaStampStatusEnum stampStatus;
|
private VisaStampStatusEnum stampStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用印状态
|
||||||
|
*/
|
||||||
|
private VisaStampStatusEnum stampStatusPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务合同名称
|
||||||
|
*/
|
||||||
|
private String contractName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务合同编号
|
||||||
|
*/
|
||||||
|
private String contractNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 相关审批表单
|
||||||
|
*/
|
||||||
|
private List<DetailCard> cards;
|
||||||
|
|
||||||
|
@Setter @Getter
|
||||||
|
public static class DetailCard {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变签Id
|
||||||
|
*/
|
||||||
|
private Long visaId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批实例Id
|
||||||
|
*/
|
||||||
|
private String workflowInstanceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标题
|
||||||
|
*/
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批状态. PROCESSING: 审批中, APPROVED: 已通过, REJECTED: 已驳回
|
||||||
|
*/
|
||||||
|
private String workflowStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批状态描述
|
||||||
|
*/
|
||||||
|
private String workflowStatusDesc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用印状态. UNPRINTED: 未用印, WITH_PRINT: 用印中, USED_PRINTS: 已用印
|
||||||
|
*/
|
||||||
|
private String stampStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用印状态描述
|
||||||
|
*/
|
||||||
|
private String stampStatusDesc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单模型
|
||||||
|
*/
|
||||||
|
private FormModelVO formModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按钮
|
||||||
|
*/
|
||||||
|
private List<WorkflowDetailButton> buttons;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 待办编码
|
||||||
|
*/
|
||||||
|
private String todoIdentityCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程阶段. PROJECT: 立项审批, PAYMENT: 完工价款确认审批
|
||||||
|
*/
|
||||||
|
private VisaProcessPhase phase;
|
||||||
|
|
||||||
|
public void addButton(String name, WorkflowButtonType type) {
|
||||||
|
if (buttons == null)
|
||||||
|
buttons = new ArrayList<>();
|
||||||
|
if (containsButtonOfType(type))
|
||||||
|
return;
|
||||||
|
WorkflowDetailButton workflowDetailButton = new WorkflowDetailButton();
|
||||||
|
workflowDetailButton.setName(name);
|
||||||
|
workflowDetailButton.setType(type);
|
||||||
|
buttons.add(workflowDetailButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean containsButtonOfType(WorkflowButtonType type) {
|
||||||
|
return buttons.stream().anyMatch(button -> button.type == type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeButtonsOfType(WorkflowButtonType... types) {
|
||||||
|
if (buttons == null || types.length == 0) return;
|
||||||
|
HashSet<WorkflowButtonType> typesSet = Sets.newHashSet(types);
|
||||||
|
buttons.removeIf(button -> typesSet.contains(button.type));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Setter @Getter
|
||||||
|
public static class WorkflowDetailButton {
|
||||||
|
/**
|
||||||
|
* 按钮描述
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按钮类型. 查询详情: DETAIL, PRINT_PREVIEW: 打印预览, REQUEST_STAMP: 申请用印, STAMP_PROGRESS: 用印进展, 打印(用印文件): PRINT
|
||||||
|
*/
|
||||||
|
private WorkflowButtonType type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum WorkflowButtonType {
|
||||||
|
DETAIL,
|
||||||
|
// 打印预览
|
||||||
|
PRINT_PREVIEW,
|
||||||
|
REQUEST_STAMP,
|
||||||
|
STAMP_PROGRESS,
|
||||||
|
// 打印
|
||||||
|
PRINT
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
|||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -147,8 +148,19 @@ public class VisaSearchResp {
|
|||||||
*/
|
*/
|
||||||
private String stampStatus;
|
private String stampStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用印状态
|
||||||
|
* @see VisaStampStatusEnum
|
||||||
|
*/
|
||||||
|
private String stampStatusPay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 合同id
|
* 合同id
|
||||||
*/
|
*/
|
||||||
private String contractId;
|
private String contractId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同id
|
||||||
|
*/
|
||||||
|
private String contractIdPay;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,18 @@
|
|||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>8</source>
|
||||||
|
<target>8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>visa-server</artifactId>
|
<artifactId>visa-server</artifactId>
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package cn.axzo.nanopart.visa.server.controller;
|
|||||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||||
import cn.axzo.framework.domain.web.result.PageData;
|
import cn.axzo.framework.domain.web.result.PageData;
|
||||||
|
import cn.axzo.framework.jackson.utility.JSON;
|
||||||
import cn.axzo.nanopart.visa.api.changerecord.ChangeRecordApi;
|
import cn.axzo.nanopart.visa.api.changerecord.ChangeRecordApi;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
@ -21,15 +22,19 @@ import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
|||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaDetailByIdRequest;
|
import cn.axzo.nanopart.visa.api.request.VisaDetailByIdRequest;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
||||||
|
import cn.axzo.nanopart.visa.api.request.VisaPayApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
||||||
|
import cn.axzo.nanopart.visa.api.response.VisaChangeRelationOrdersResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
||||||
|
import cn.axzo.nanopart.visa.server.dto.FetchBtnConditionDto;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordBillService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordBillService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
|
import cn.axzo.nanopart.visa.server.service.impl.DetailCardBuilder;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -63,6 +68,9 @@ public class ChangeRecordController implements ChangeRecordApi {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ChangeRecordBillService changeRecordBillService;
|
private ChangeRecordBillService changeRecordBillService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DetailCardBuilder detailCardBuilder;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<Long> tempCreateVisaChangeRecord(VisaChangeTempCreateReq req) {
|
public ApiResult<Long> tempCreateVisaChangeRecord(VisaChangeTempCreateReq req) {
|
||||||
return ApiResult.ok(changeRecordService.tempCreateVisaChangeRecord(req));
|
return ApiResult.ok(changeRecordService.tempCreateVisaChangeRecord(req));
|
||||||
@ -99,10 +107,20 @@ public class ChangeRecordController implements ChangeRecordApi {
|
|||||||
@Override
|
@Override
|
||||||
public ApiResult<VisaDetailByIdResponse> visaDetailById(@RequestBody @Valid VisaDetailByIdRequest req) {
|
public ApiResult<VisaDetailByIdResponse> visaDetailById(@RequestBody @Valid VisaDetailByIdRequest req) {
|
||||||
VisaDetailByIdResponse resp = changeRecordService.detailById(req.getVisaId());
|
VisaDetailByIdResponse resp = changeRecordService.detailById(req.getVisaId());
|
||||||
|
detailCardBuilder.populateCardTodoIdentityCode(resp.getCards(), req.getPersonId());
|
||||||
|
|
||||||
if (req.isNeedBtnList()) {
|
if (req.isNeedBtnList()) {
|
||||||
// resp.setBtnList(VisaButtonTypeEnum.sort(VisaButtonTypeEnum.all()));
|
// resp.setBtnList(VisaButtonTypeEnum.sort(VisaButtonTypeEnum.all()));
|
||||||
resp.setBtnList(changeRecordConfirmService.fetchBtnsByCondition(req.getVisaId(), req.getPersonId(), req.getOuId(), req.getWorkspaceId(), resp.getStatus(), resp.getApprovalId(), resp.getStampStatus()));
|
FetchBtnConditionDto btnConditionDto = FetchBtnConditionDto.builder()
|
||||||
|
.visaId(resp.getVisaId())
|
||||||
|
.personId(req.getPersonId())
|
||||||
|
.ouId(req.getOuId())
|
||||||
|
.workspaceId(req.getWorkspaceId())
|
||||||
|
.status(resp.getStatus())
|
||||||
|
.approvalStatus(resp.getApprovalStatus())
|
||||||
|
.approvalStatusPay(resp.getApprovalStatusPay())
|
||||||
|
.build();
|
||||||
|
resp.setBtnList(changeRecordConfirmService.fetchBtnsByCondition(btnConditionDto));
|
||||||
}
|
}
|
||||||
return ApiResult.ok(resp);
|
return ApiResult.ok(resp);
|
||||||
}
|
}
|
||||||
@ -183,6 +201,7 @@ public class ChangeRecordController implements ChangeRecordApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<Map<String, Boolean>> getBillIfRelated(GetBillIfRelatedReq req) {
|
public ApiResult<Map<String, Boolean>> getBillIfRelated(GetBillIfRelatedReq req) {
|
||||||
|
log.info("getBillIfRelated, request: {}", JSON.toJSONString(req));
|
||||||
return ApiResult.ok(changeRecordBillService.getBillIfRelated(req));
|
return ApiResult.ok(changeRecordBillService.getBillIfRelated(req));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,4 +215,15 @@ public class ChangeRecordController implements ChangeRecordApi {
|
|||||||
public ApiResult<List<BpmnTaskDelegateAssigner>> bizActivityDecisionAssignee(BizActivityAssigneeDecisionReq req) {
|
public ApiResult<List<BpmnTaskDelegateAssigner>> bizActivityDecisionAssignee(BizActivityAssigneeDecisionReq req) {
|
||||||
return ApiResult.ok(changeRecordService.bizActivityDecisionAssignee(req));
|
return ApiResult.ok(changeRecordService.bizActivityDecisionAssignee(req));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<Void> approveCreateVisaPay(VisaPayApproveCreateReq req) {
|
||||||
|
changeRecordService.approveCreateVisaPay(req);
|
||||||
|
return ApiResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<VisaChangeRelationOrdersResp> getRelationOrdersById(Long visaId) {
|
||||||
|
return ApiResult.ok(changeRecordService.getRelationOrdersById(visaId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,6 +75,7 @@ public class ChangeRecordRelationController implements ChangeRecordRelationApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<Void> requestStamp(VisaRequestStampReq req) {
|
public ApiResult<Void> requestStamp(VisaRequestStampReq req) {
|
||||||
|
log.info("requestStamp: {}", req);
|
||||||
changeRecordRelationService.requestStamp(req);
|
changeRecordRelationService.requestStamp(req);
|
||||||
return ApiResult.ok();
|
return ApiResult.ok();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,8 @@
|
|||||||
package cn.axzo.nanopart.visa.server.domain;
|
package cn.axzo.nanopart.visa.server.domain;
|
||||||
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
import java.math.BigDecimal;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import java.util.Date;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
|
||||||
import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq;
|
|
||||||
import cn.axzo.nanopart.visa.server.config.BizResultCode;
|
|
||||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.annotation.FieldStrategy;
|
import com.baomidou.mybatisplus.annotation.FieldStrategy;
|
||||||
@ -14,6 +11,14 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
|||||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||||
import com.google.common.collect.HashBasedTable;
|
import com.google.common.collect.HashBasedTable;
|
||||||
import com.google.common.collect.Table;
|
import com.google.common.collect.Table;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq;
|
||||||
|
import cn.axzo.nanopart.visa.server.config.BizResultCode;
|
||||||
|
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -21,10 +26,6 @@ import lombok.EqualsAndHashCode;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xudawei
|
* @author xudawei
|
||||||
* @date 2025/01/15
|
* @date 2025/01/15
|
||||||
@ -66,7 +67,7 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
|||||||
/**
|
/**
|
||||||
* 区域集合
|
* 区域集合
|
||||||
* 示例:
|
* 示例:
|
||||||
* <pre>
|
* <pre>
|
||||||
* [
|
* [
|
||||||
* {"areaId": 249556},
|
* {"areaId": 249556},
|
||||||
* {"areaId": 249555}
|
* {"areaId": 249555}
|
||||||
@ -150,7 +151,7 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
|||||||
/**
|
/**
|
||||||
* 最终审批时间
|
* 最终审批时间
|
||||||
*/
|
*/
|
||||||
@TableField(value = "approval_complete_time", updateStrategy = FieldStrategy.IGNORED)
|
@TableField(value = "approval_complete_time", updateStrategy = FieldStrategy.NOT_EMPTY)
|
||||||
private Date approvalCompleteTime;
|
private Date approvalCompleteTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -177,16 +178,74 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
|||||||
@TableField(value = "update_by")
|
@TableField(value = "update_by")
|
||||||
private Long updateBy;
|
private Long updateBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务合同名称
|
||||||
|
*/
|
||||||
|
@TableField(value = "contract_name")
|
||||||
|
private String contractName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务合同编号
|
||||||
|
*/
|
||||||
|
@TableField(value = "contract_no")
|
||||||
|
private String contractNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用印状态
|
||||||
|
*/
|
||||||
|
@TableField(value = "stamp_status_pay")
|
||||||
|
private VisaStampStatusEnum stampStatusPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否申请过用印
|
||||||
|
*/
|
||||||
|
@TableField(value = "applied_stamp_pay")
|
||||||
|
private Boolean appliedStampPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款电子签合同 ID
|
||||||
|
*/
|
||||||
|
@TableField(value = "contract_id_pay")
|
||||||
|
private String contractIdPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终审批ID
|
||||||
|
*/
|
||||||
|
@TableField(value = "approval_id_pay")
|
||||||
|
private String approvalIdPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终审批状态
|
||||||
|
*/
|
||||||
|
@TableField(value = "approval_status_pay")
|
||||||
|
private String approvalStatusPay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终审批时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "approval_complete_time_pay", updateStrategy = FieldStrategy.NOT_EMPTY)
|
||||||
|
private Date approvalCompleteTimePay;
|
||||||
|
|
||||||
private static final Table<VisaStampStatusEnum, UpdateVisaChangeReq.VisaStampAction, VisaStampStatusEnum> VISA_STAMP_STATUS_ACTION = HashBasedTable.create();
|
private static final Table<VisaStampStatusEnum, UpdateVisaChangeReq.VisaStampAction, VisaStampStatusEnum> VISA_STAMP_STATUS_ACTION = HashBasedTable.create();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.COMPLETE, VisaStampStatusEnum.USED_PRINTS);
|
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.COMPLETE, VisaStampStatusEnum.USED_PRINTS);
|
||||||
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.CANCEL, VisaStampStatusEnum.UNPRINTED);
|
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.CANCEL, VisaStampStatusEnum.UNPRINTED);
|
||||||
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.TX_CANCEL, VisaStampStatusEnum.UNPRINTED);
|
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.TX_CANCEL, VisaStampStatusEnum.UNPRINTED);
|
||||||
|
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.ALL_PROCESS_REJECTED, VisaStampStatusEnum.UNPRINTED);
|
||||||
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.AUTO_COMPLETE, VisaStampStatusEnum.USED_PRINTS);
|
VISA_STAMP_STATUS_ACTION.put(VisaStampStatusEnum.WITH_PRINT, UpdateVisaChangeReq.VisaStampAction.AUTO_COMPLETE, VisaStampStatusEnum.USED_PRINTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public VisaStampStatusEnum nextStampStatus(UpdateVisaChangeReq.VisaStampAction action) {
|
public VisaStampStatusEnum nextStampStatus(UpdateVisaChangeReq.VisaStampAction action, VisaProcessPhase phase) {
|
||||||
return Optional.ofNullable(VISA_STAMP_STATUS_ACTION.get(this.getStampStatus(), action)).orElseThrow(BizResultCode.VISA_STAMP_STATUS_ERROR::toException);
|
switch (action) {
|
||||||
|
case COMPLETE:
|
||||||
|
case AUTO_COMPLETE:
|
||||||
|
return VisaStampStatusEnum.USED_PRINTS;
|
||||||
|
case CANCEL:
|
||||||
|
case TX_CANCEL:
|
||||||
|
case ALL_PROCESS_REJECTED:
|
||||||
|
return VisaStampStatusEnum.UNPRINTED;
|
||||||
|
}
|
||||||
|
throw BizResultCode.VISA_STAMP_STATUS_ERROR.toException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,39 @@
|
|||||||
|
package cn.axzo.nanopart.visa.server.dto;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenwenjian
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2025/4/19 14:26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FetchBtnConditionDto {
|
||||||
|
|
||||||
|
private Long visaId;
|
||||||
|
|
||||||
|
private Long personId;
|
||||||
|
|
||||||
|
private Long ouId;
|
||||||
|
|
||||||
|
private Long workspaceId;
|
||||||
|
|
||||||
|
private VisaStatusEnum status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 立项审批状态
|
||||||
|
*/
|
||||||
|
private String approvalStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款审批状态
|
||||||
|
*/
|
||||||
|
private String approvalStatusPay;
|
||||||
|
}
|
||||||
@ -63,11 +63,17 @@ public class VisaExportDto {
|
|||||||
@ExcelProperty("提出时间")
|
@ExcelProperty("提出时间")
|
||||||
private Date happenTime;
|
private Date happenTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 立项审批时间
|
||||||
|
*/
|
||||||
|
@ExcelProperty("立项审批通过时间")
|
||||||
|
private Date approvalCompleteTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 最终审批时间
|
* 最终审批时间
|
||||||
*/
|
*/
|
||||||
@ExcelProperty("审批通过时间")
|
@ExcelProperty("价款审批通过时间")
|
||||||
private Date approvalCompleteTime;
|
private Date approvalCompleteTimePay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工程
|
* 工程
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package cn.axzo.nanopart.visa.server.dto;
|
|||||||
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
@ -86,6 +87,10 @@ public class VisaLogParam {
|
|||||||
*/
|
*/
|
||||||
private VisaStatusEnum oldStatus;
|
private VisaStatusEnum oldStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于区别原始三个单据类型和价款审批
|
||||||
|
*/
|
||||||
|
private VisaTypeEnum visaType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取删除附件信息
|
* 获取删除附件信息
|
||||||
|
|||||||
@ -1,5 +1,26 @@
|
|||||||
package cn.axzo.nanopart.visa.server.mq.listener.ess;
|
package cn.axzo.nanopart.visa.server.mq.listener.ess;
|
||||||
|
|
||||||
|
import static cn.axzo.nanopart.ess.api.enums.EssContractApproveState.ACCEPT;
|
||||||
|
import static cn.axzo.nanopart.ess.api.enums.MQEvent.ESS_CONTRACT_STATE_CHANGE;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS_PAY;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
|
||||||
import cn.axzo.apollo.workspace.api.workspace.req.GetWorkspaceDetailReq;
|
import cn.axzo.apollo.workspace.api.workspace.req.GetWorkspaceDetailReq;
|
||||||
import cn.axzo.apollo.workspace.api.workspace.res.GetWorkspaceDetailRes;
|
import cn.axzo.apollo.workspace.api.workspace.res.GetWorkspaceDetailRes;
|
||||||
import cn.axzo.basics.common.util.AssertUtil;
|
import cn.axzo.basics.common.util.AssertUtil;
|
||||||
@ -11,6 +32,8 @@ import cn.axzo.nanopart.ess.api.domain.contract.EssContractInfo;
|
|||||||
import cn.axzo.nanopart.ess.api.enums.EssContractState;
|
import cn.axzo.nanopart.ess.api.enums.EssContractState;
|
||||||
import cn.axzo.nanopart.ess.api.mq.EssContractStateChangeMessage;
|
import cn.axzo.nanopart.ess.api.mq.EssContractStateChangeMessage;
|
||||||
import cn.axzo.nanopart.ess.api.request.SaveContractSnapshotRequest;
|
import cn.axzo.nanopart.ess.api.request.SaveContractSnapshotRequest;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||||
import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq;
|
import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
||||||
@ -21,29 +44,14 @@ import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
|||||||
import cn.axzo.nanopart.visa.server.rpc.WorkspaceGateway;
|
import cn.axzo.nanopart.visa.server.rpc.WorkspaceGateway;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
|
import cn.axzo.nanopart.visa.server.service.OperateLogService;
|
||||||
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||||
import cn.azxo.framework.common.utils.StringUtils;
|
import cn.azxo.framework.common.utils.StringUtils;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static cn.axzo.nanopart.ess.api.enums.EssContractApproveState.ACCEPT;
|
|
||||||
import static cn.axzo.nanopart.ess.api.enums.MQEvent.ESS_CONTRACT_STATE_CHANGE;
|
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 腾讯电子签的处理器
|
* 腾讯电子签的处理器
|
||||||
@ -66,6 +74,8 @@ public class EssAllEventHandler implements EventHandler, InitializingBean {
|
|||||||
private ChangeRecordService changeRecordService;
|
private ChangeRecordService changeRecordService;
|
||||||
@Resource
|
@Resource
|
||||||
private ChangeRecordRelationService changeRecordRelationService;
|
private ChangeRecordRelationService changeRecordRelationService;
|
||||||
|
@Resource
|
||||||
|
private OperateLogService operateLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEvent(Event event, EventConsumer.Context context) {
|
public void onEvent(Event event, EventConsumer.Context context) {
|
||||||
@ -77,9 +87,13 @@ public class EssAllEventHandler implements EventHandler, InitializingBean {
|
|||||||
EssContractStateChangeMessage essContractStateChangeMessage = event.normalizedData(EssContractStateChangeMessage.class);
|
EssContractStateChangeMessage essContractStateChangeMessage = event.normalizedData(EssContractStateChangeMessage.class);
|
||||||
EssContractInfo contract = essContractStateChangeMessage.getContract();
|
EssContractInfo contract = essContractStateChangeMessage.getContract();
|
||||||
AssertUtil.isTrue(Objects.nonNull(contract), "腾讯电子签事件对象异常");
|
AssertUtil.isTrue(Objects.nonNull(contract), "腾讯电子签事件对象异常");
|
||||||
|
operateLogService.save("essMQ", contract.getEssContractId(), "message", essContractStateChangeMessage);
|
||||||
|
|
||||||
// 取消用印会清空合同 id,这里兼容该情况
|
// 取消用印会清空合同 id,这里兼容该情况
|
||||||
Optional<ChangeRecord> optVisa = changeRecordService.lambdaQuery().eq(ChangeRecord::getContractId, contract.getEssContractId())
|
Optional<ChangeRecord> optVisa = changeRecordService.lambdaQuery()
|
||||||
|
.eq(ChangeRecord::getContractId, contract.getEssContractId())
|
||||||
|
.or()
|
||||||
|
.eq(ChangeRecord::getContractIdPay, contract.getEssContractId())
|
||||||
.oneOpt();
|
.oneOpt();
|
||||||
|
|
||||||
if (Objects.equals(EssContractState.CANCEL, contract.getState()) && optVisa.isPresent()) {
|
if (Objects.equals(EssContractState.CANCEL, contract.getState()) && optVisa.isPresent()) {
|
||||||
@ -110,9 +124,11 @@ public class EssAllEventHandler implements EventHandler, InitializingBean {
|
|||||||
.filter(i -> Objects.equals(i.getState(), ACCEPT))
|
.filter(i -> Objects.equals(i.getState(), ACCEPT))
|
||||||
.collect(Collectors.toMap(i -> i.getSignPerson().getOuId(), Function.identity(), (s, t) -> s));
|
.collect(Collectors.toMap(i -> i.getSignPerson().getOuId(), Function.identity(), (s, t) -> s));
|
||||||
|
|
||||||
|
VisaProcessPhase phase = determinePhase(changeRecord, contract);
|
||||||
|
VisaRelationFieldEnum fieldType = phase == VisaProcessPhase.PROJECT ? PROCESS_INSTANCE_OF_ESS : PROCESS_INSTANCE_OF_ESS_PAY;
|
||||||
List<ChangeRecordRelation> essInstances = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
List<ChangeRecordRelation> essInstances = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
||||||
.visaId(changeRecord.getId())
|
.visaId(changeRecord.getId())
|
||||||
.varName(PROCESS_INSTANCE_OF_ESS.name())
|
.varName(fieldType.name())
|
||||||
.contentExt(BpmnProcessInstanceResultEnum.PROCESSING.getStatus())
|
.contentExt(BpmnProcessInstanceResultEnum.PROCESSING.getStatus())
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
@ -125,8 +141,9 @@ public class EssAllEventHandler implements EventHandler, InitializingBean {
|
|||||||
.organizationUnitId(approveDetail.getOuId())
|
.organizationUnitId(approveDetail.getOuId())
|
||||||
.type(1)
|
.type(1)
|
||||||
.build());
|
.build());
|
||||||
if (CollectionUtils.isEmpty(workspaces) || workspaces.size() != 1) {
|
if (CollectionUtils.isEmpty(workspaces)) {
|
||||||
log.error("未获取到指定单位的企业工作台信息, ouId:{}", approveDetail.getOuId());
|
log.error("未获取到指定单位的企业工作台信息, ouId:{}", approveDetail.getOuId());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
GetWorkspaceDetailRes entWorkspace = workspaces.get(0);
|
GetWorkspaceDetailRes entWorkspace = workspaces.get(0);
|
||||||
|
|
||||||
@ -154,9 +171,16 @@ public class EssAllEventHandler implements EventHandler, InitializingBean {
|
|||||||
// 撤回合同,则取消用印
|
// 撤回合同,则取消用印
|
||||||
if (Objects.equals(EssContractState.CANCEL, contract.getState()) && optVisa.isPresent()) {
|
if (Objects.equals(EssContractState.CANCEL, contract.getState()) && optVisa.isPresent()) {
|
||||||
ChangeRecord changeRecord = optVisa.get();
|
ChangeRecord changeRecord = optVisa.get();
|
||||||
|
VisaProcessPhase phase = determinePhase(changeRecord, contract);
|
||||||
|
VisaStampStatusEnum stampStatus = phase == VisaProcessPhase.PROJECT ? changeRecord.getStampStatus() : changeRecord.getStampStatusPay();
|
||||||
|
if (stampStatus == VisaStampStatusEnum.UNPRINTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
VisaRelationFieldEnum fieldType = phase == VisaProcessPhase.PROJECT ? PROCESS_INSTANCE_OF_ESS
|
||||||
|
: PROCESS_INSTANCE_OF_ESS_PAY;
|
||||||
List<ChangeRecordRelation> visaRelations = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
List<ChangeRecordRelation> visaRelations = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
||||||
.visaId(changeRecord.getId())
|
.visaId(changeRecord.getId())
|
||||||
.varName(PROCESS_INSTANCE_OF_ESS.name())
|
.varName(fieldType.name())
|
||||||
.contentExt(BpmnProcessInstanceResultEnum.PROCESSING.getStatus())
|
.contentExt(BpmnProcessInstanceResultEnum.PROCESSING.getStatus())
|
||||||
.build());
|
.build());
|
||||||
if (CollectionUtils.isNotEmpty(visaRelations)) {
|
if (CollectionUtils.isNotEmpty(visaRelations)) {
|
||||||
@ -173,10 +197,12 @@ public class EssAllEventHandler implements EventHandler, InitializingBean {
|
|||||||
// 3、修改变更签证状态
|
// 3、修改变更签证状态
|
||||||
UpdateVisaChangeReq updateVisaChangeReq = UpdateVisaChangeReq.builder()
|
UpdateVisaChangeReq updateVisaChangeReq = UpdateVisaChangeReq.builder()
|
||||||
.visaId(changeRecord.getId())
|
.visaId(changeRecord.getId())
|
||||||
|
.phase(phase)
|
||||||
.visaStampAction(UpdateVisaChangeReq.VisaStampAction.CANCEL)
|
.visaStampAction(UpdateVisaChangeReq.VisaStampAction.CANCEL)
|
||||||
.operatorId(0L)
|
.operatorId(0L)
|
||||||
.operatorName("腾讯撤销合同")
|
.operatorName("腾讯撤销合同")
|
||||||
.scene("取消用印")
|
.scene("取消用印")
|
||||||
|
.context("stamp:cancelOfEssCancelContract")
|
||||||
.build();
|
.build();
|
||||||
changeRecordService.update(updateVisaChangeReq);
|
changeRecordService.update(updateVisaChangeReq);
|
||||||
}
|
}
|
||||||
@ -208,6 +234,11 @@ public class EssAllEventHandler implements EventHandler, InitializingBean {
|
|||||||
private String findTaskId(String processInstanceId, String personId) {
|
private String findTaskId(String processInstanceId, String personId) {
|
||||||
return workflowGateway.findTaskIdByInstanceIdAndPersonId(processInstanceId, personId);
|
return workflowGateway.findTaskIdByInstanceIdAndPersonId(processInstanceId, personId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VisaProcessPhase determinePhase(ChangeRecord visa, EssContractInfo contract) {
|
||||||
|
return Objects.equals(visa.getContractId(), contract.getEssContractId()) ? VisaProcessPhase.PROJECT
|
||||||
|
: VisaProcessPhase.PAYMENT;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws Exception {
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
|||||||
@ -1,25 +1,27 @@
|
|||||||
package cn.axzo.nanopart.visa.server.mq.listener.workflow.activity;
|
package cn.axzo.nanopart.visa.server.mq.listener.workflow.activity;
|
||||||
|
|
||||||
|
import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessInstanceOfVisaAllEventHandler.SUPPORTED_DEFINITION_KEYS;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import cn.axzo.framework.jackson.utility.JSON;
|
import cn.axzo.framework.jackson.utility.JSON;
|
||||||
import cn.axzo.framework.rocketmq.Event;
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
import cn.axzo.framework.rocketmq.EventConsumer;
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
import cn.axzo.nanopart.visa.api.request.BizActivityAssigneeDecisionReq;
|
import cn.axzo.nanopart.visa.api.request.BizActivityAssigneeDecisionReq;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
|
import cn.axzo.nanopart.visa.server.service.OperateLogService;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import cn.axzo.workflow.common.model.response.mq.ProcessActivityDTO;
|
import cn.axzo.workflow.common.model.response.mq.ProcessActivityDTO;
|
||||||
import cn.axzo.workflow.starter.handler.ProcessActivityEventHandler;
|
import cn.axzo.workflow.starter.handler.ProcessActivityEventHandler;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessInstanceOfVisaAllEventHandler.SUPPORTED_DEFINITION_KEYS;
|
|
||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 签证审批第一个业务节点“业务指定审批人”配法的处理
|
* 签证审批第一个业务节点“业务指定审批人”配法的处理
|
||||||
@ -33,6 +35,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
|
|||||||
public class ProcessActivityAllEventHandler implements ProcessActivityEventHandler {
|
public class ProcessActivityAllEventHandler implements ProcessActivityEventHandler {
|
||||||
private final ChangeRecordService changeRecordService;
|
private final ChangeRecordService changeRecordService;
|
||||||
private final WorkflowGateway workflowGateway;
|
private final WorkflowGateway workflowGateway;
|
||||||
|
private final OperateLogService operateLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getOrder() {
|
public int getOrder() {
|
||||||
@ -47,6 +50,8 @@ public class ProcessActivityAllEventHandler implements ProcessActivityEventHandl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onWaitAssignee(ProcessActivityDTO dto) {
|
public void onWaitAssignee(ProcessActivityDTO dto) {
|
||||||
|
log.info("onWaitAssignee, processActivityDTO: {}", JSON.toJSONString(dto));
|
||||||
|
operateLogService.save("ProcessActivityAllEventHandler:onWaitAssignee", dto.getProcessInstanceId(), "message", dto);
|
||||||
BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(dto.getVariables().getOrDefault(INTERNAL_INITIATOR, null));
|
BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(dto.getVariables().getOrDefault(INTERNAL_INITIATOR, null));
|
||||||
if (Objects.isNull(initiator)) {
|
if (Objects.isNull(initiator)) {
|
||||||
log.error("data error ,process instance creator is null,processInstanceId: {}", dto.getProcessInstanceId());
|
log.error("data error ,process instance creator is null,processInstanceId: {}", dto.getProcessInstanceId());
|
||||||
|
|||||||
@ -1,9 +1,21 @@
|
|||||||
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
|
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
|
||||||
import cn.axzo.framework.rocketmq.Event;
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
import cn.axzo.framework.rocketmq.EventConsumer;
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
|
||||||
import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq;
|
import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq;
|
||||||
import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration;
|
import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||||
@ -15,16 +27,7 @@ import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
|||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
|
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
|
||||||
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 完成变更签证用印申请
|
* 完成变更签证用印申请
|
||||||
@ -46,8 +49,17 @@ public class CompleteVisaChangeStampHandler implements ProcessInstanceEventHandl
|
|||||||
return Objects.equals(dto.getProcessDefinitionKey(), refreshableConfiguration.getStampProcessDefinitionKey());
|
return Objects.equals(dto.getProcessDefinitionKey(), refreshableConfiguration.getStampProcessDefinitionKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRejected(ProcessInstanceDTO dto) {
|
||||||
|
process(dto, BpmnProcessInstanceResultEnum.REJECTED);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCompleted(ProcessInstanceDTO dto) {
|
public void onCompleted(ProcessInstanceDTO dto) {
|
||||||
|
process(dto, BpmnProcessInstanceResultEnum.APPROVED);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void process(ProcessInstanceDTO dto, BpmnProcessInstanceResultEnum result) {
|
||||||
Long visaId = Long.valueOf(dto.getBusinessKey());
|
Long visaId = Long.valueOf(dto.getBusinessKey());
|
||||||
log.info("CompleteVisaChangeStampHandler visaId, {}", visaId);
|
log.info("CompleteVisaChangeStampHandler visaId, {}", visaId);
|
||||||
Long operatorId = Optional.ofNullable(dto.getLastOperationAssigner())
|
Long operatorId = Optional.ofNullable(dto.getLastOperationAssigner())
|
||||||
@ -57,11 +69,15 @@ public class CompleteVisaChangeStampHandler implements ProcessInstanceEventHandl
|
|||||||
.map(BpmnTaskDelegateAssigner::getAssignerName)
|
.map(BpmnTaskDelegateAssigner::getAssignerName)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
VisaRelationDto visaRelationDto = VisaRelationDto.builder()
|
ChangeRecord changeRecord = changeRecordService.getById(visaId);
|
||||||
|
List<ChangeRecordRelation> allRecordRelations = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
||||||
.visaId(visaId)
|
.visaId(visaId)
|
||||||
.varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS.name())
|
.varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS.name())
|
||||||
.build();
|
.build());
|
||||||
List<ChangeRecordRelation> allRecordRelations = changeRecordRelationService.findByCondition(visaRelationDto);
|
allRecordRelations.addAll(changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
||||||
|
.visaId(visaId)
|
||||||
|
.varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS_PAY.name())
|
||||||
|
.build()));
|
||||||
|
|
||||||
List<ChangeRecordRelation> changeRecordRelations = allRecordRelations.stream()
|
List<ChangeRecordRelation> changeRecordRelations = allRecordRelations.stream()
|
||||||
.filter(e -> Objects.equals(JSON.parseObject(e.getContent()).getString("approvalId"), dto.getProcessInstanceId()))
|
.filter(e -> Objects.equals(JSON.parseObject(e.getContent()).getString("approvalId"), dto.getProcessInstanceId()))
|
||||||
@ -71,6 +87,15 @@ public class CompleteVisaChangeStampHandler implements ProcessInstanceEventHandl
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String varName = changeRecordRelations.get(0).getVarName();
|
||||||
|
VisaProcessPhase phase = varName.equals(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS.name())
|
||||||
|
? VisaProcessPhase.PROJECT
|
||||||
|
: VisaProcessPhase.PAYMENT;
|
||||||
|
|
||||||
|
allRecordRelations = allRecordRelations.stream()
|
||||||
|
.filter(r -> r.getVarName().equals(varName))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if (changeRecordRelations.size() > 1) {
|
if (changeRecordRelations.size() > 1) {
|
||||||
log.warn("CompleteVisaChangeStampHandler 用印审核完成数据异常,找到多条对应的用印申请记录,visaId,{}; processInstanceId,{}", visaId, dto.getProcessInstanceId());
|
log.warn("CompleteVisaChangeStampHandler 用印审核完成数据异常,找到多条对应的用印申请记录,visaId,{}; processInstanceId,{}", visaId, dto.getProcessInstanceId());
|
||||||
}
|
}
|
||||||
@ -80,31 +105,29 @@ public class CompleteVisaChangeStampHandler implements ProcessInstanceEventHandl
|
|||||||
|
|
||||||
ChangeRecordRelation update = new ChangeRecordRelation();
|
ChangeRecordRelation update = new ChangeRecordRelation();
|
||||||
update.setId(changeRecordRelation.getId());
|
update.setId(changeRecordRelation.getId());
|
||||||
update.setContentExt(BpmnProcessInstanceResultEnum.APPROVED.getStatus());
|
update.setContentExt(result.getStatus());
|
||||||
update.setUpdateBy(operatorId);
|
update.setUpdateBy(operatorId);
|
||||||
changeRecordRelationService.updateById(update);
|
changeRecordRelationService.updateById(update);
|
||||||
|
|
||||||
boolean approved = allRecordRelations.stream()
|
boolean approvedOrRejected = allRecordRelations.stream()
|
||||||
.filter(e -> !Objects.equals(e.getVarExt(), changeRecordRelation.getVarExt()))
|
.filter(e -> !Objects.equals(e.getVarExt(), changeRecordRelation.getVarExt()))
|
||||||
.collect(Collectors.groupingBy(ChangeRecordRelation::getVarExt))
|
.collect(Collectors.groupingBy(ChangeRecordRelation::getVarExt))
|
||||||
.entrySet()
|
.entrySet()
|
||||||
.stream()
|
.stream()
|
||||||
.allMatch(e -> e.getValue().stream()
|
.allMatch(e -> e.getValue().stream()
|
||||||
.anyMatch(relation -> Objects.equals(BpmnProcessInstanceResultEnum.APPROVED.getStatus(), relation.getContentExt())));
|
.anyMatch(relation -> Objects.equals(result.getStatus(), relation.getContentExt())));
|
||||||
if (approved) {
|
if (approvedOrRejected) {
|
||||||
// 有可能用户在界面手动完成用印, 这里就无法自动完成
|
boolean approved = result == BpmnProcessInstanceResultEnum.APPROVED;
|
||||||
ChangeRecord changeRecord = changeRecordService.getById(visaId);
|
|
||||||
if (Objects.isNull(changeRecord) || !Objects.equals(changeRecord.getStampStatus(), VisaStampStatusEnum.WITH_PRINT)) {
|
|
||||||
log.info("CompleteVisaChangeStampHandler changeRecord stampStatus not withPrint");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
changeRecordService.update(UpdateVisaChangeReq.builder()
|
changeRecordService.update(UpdateVisaChangeReq.builder()
|
||||||
.visaId(visaId)
|
.visaId(visaId)
|
||||||
|
.phase(phase)
|
||||||
.operatorId(operatorId)
|
.operatorId(operatorId)
|
||||||
.operatorName(operatorName)
|
.operatorName(operatorName)
|
||||||
.visaStampAction(UpdateVisaChangeReq.VisaStampAction.AUTO_COMPLETE)
|
.visaStampAction(approved
|
||||||
.scene("用印审批完成,自动完成用印申请")
|
? UpdateVisaChangeReq.VisaStampAction.AUTO_COMPLETE
|
||||||
|
: UpdateVisaChangeReq.VisaStampAction.ALL_PROCESS_REJECTED)
|
||||||
|
.scene(approved ? "用印审批完成,自动完成用印申请" : "用印审批全被驳回,设置成未用印")
|
||||||
|
.context(approved ? "stamp:autoComplete" : "stamp:allProcessRejected")
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,27 +1,31 @@
|
|||||||
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
|
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
|
||||||
import cn.axzo.framework.rocketmq.Event;
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
import cn.axzo.framework.rocketmq.EventConsumer;
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
import cn.axzo.framework.rocketmq.EventProducer;
|
import cn.axzo.framework.rocketmq.EventProducer;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||||
import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration;
|
import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration;
|
||||||
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
||||||
import cn.axzo.nanopart.visa.server.dto.RelationEssContextDto;
|
import cn.axzo.nanopart.visa.server.dto.RelationEssContextDto;
|
||||||
import cn.axzo.nanopart.visa.server.dto.VisaRelationDto;
|
import cn.axzo.nanopart.visa.server.dto.VisaRelationDto;
|
||||||
import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport;
|
import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
||||||
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||||
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
|
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
|
||||||
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工作流广播的实例维度的所有事件类型
|
* 工作流广播的实例维度的所有事件类型
|
||||||
@ -34,14 +38,17 @@ import java.util.Optional;
|
|||||||
public class ProcessInstanceOfEssAllEventHandler extends BasicLogSupport implements ProcessInstanceEventHandler {
|
public class ProcessInstanceOfEssAllEventHandler extends BasicLogSupport implements ProcessInstanceEventHandler {
|
||||||
private final RefreshableConfiguration refreshableConfiguration;
|
private final RefreshableConfiguration refreshableConfiguration;
|
||||||
private final ChangeRecordRelationService changeRecordRelationService;
|
private final ChangeRecordRelationService changeRecordRelationService;
|
||||||
|
private final ChangeRecordService changeRecordService;
|
||||||
|
|
||||||
public ProcessInstanceOfEssAllEventHandler(EventProducer eventProducer,
|
public ProcessInstanceOfEssAllEventHandler(EventProducer eventProducer,
|
||||||
VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway,
|
VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway,
|
||||||
RefreshableConfiguration refreshableConfiguration,
|
RefreshableConfiguration refreshableConfiguration,
|
||||||
ChangeRecordRelationService changeRecordRelationService) {
|
ChangeRecordRelationService changeRecordRelationService,
|
||||||
|
ChangeRecordService changeRecordService) {
|
||||||
super(eventProducer, visaOrganizationalNodeUserGateway);
|
super(eventProducer, visaOrganizationalNodeUserGateway);
|
||||||
this.refreshableConfiguration = refreshableConfiguration;
|
this.refreshableConfiguration = refreshableConfiguration;
|
||||||
this.changeRecordRelationService = changeRecordRelationService;
|
this.changeRecordRelationService = changeRecordRelationService;
|
||||||
|
this.changeRecordService = changeRecordService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -90,17 +97,26 @@ public class ProcessInstanceOfEssAllEventHandler extends BasicLogSupport impleme
|
|||||||
changeProcessInstanceOfEss(dto);
|
changeProcessInstanceOfEss(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeProcessInstanceOfEss(ProcessInstanceDTO dto) {
|
public void changeProcessInstanceOfEss(ProcessInstanceDTO dto) {
|
||||||
log.info("change process instance of ess: {}, instance result: {}", dto.getProcessInstanceId(), dto.getType().getTag());
|
log.info("change process instance of ess: {}, instance result: {}", dto.getProcessInstanceId(), dto.getType().getTag());
|
||||||
Long visaId = Long.valueOf(dto.getBusinessKey());
|
Long visaId = Long.valueOf(dto.getBusinessKey());
|
||||||
Long operatorId = Optional.ofNullable(dto.getLastOperationAssigner())
|
Long operatorId = Optional.ofNullable(dto.getLastOperationAssigner())
|
||||||
.filter(e -> StringUtils.hasText(e.getPersonId()))
|
.filter(e -> StringUtils.hasText(e.getPersonId()))
|
||||||
.map(e -> Long.valueOf(e.getPersonId()))
|
.map(e -> Long.valueOf(e.getPersonId()))
|
||||||
.orElse(0L);
|
.orElse(0L);
|
||||||
List<ChangeRecordRelation> essInstances = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
ChangeRecord visa = changeRecordService.getById(visaId);
|
||||||
.visaId(visaId)
|
if (visa == null) {
|
||||||
.varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS.name())
|
log.error("visa not found, visaId: {}", visaId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<ChangeRecordRelation> essInstances = changeRecordRelationService.findByCondition(VisaRelationDto.builder() //
|
||||||
|
.visaId(visaId) //
|
||||||
|
.varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS.name()) //
|
||||||
.build());
|
.build());
|
||||||
|
essInstances.addAll(changeRecordRelationService.findByCondition(VisaRelationDto.builder() //
|
||||||
|
.visaId(visaId) //
|
||||||
|
.varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS_PAY.name()) //
|
||||||
|
.build()));
|
||||||
essInstances.forEach(e -> {
|
essInstances.forEach(e -> {
|
||||||
String approvalId = JSON.parseObject(e.getContent(), RelationEssContextDto.class).getApprovalId();
|
String approvalId = JSON.parseObject(e.getContent(), RelationEssContextDto.class).getApprovalId();
|
||||||
e.setUpdateBy(operatorId);
|
e.setUpdateBy(operatorId);
|
||||||
@ -109,9 +125,9 @@ public class ProcessInstanceOfEssAllEventHandler extends BasicLogSupport impleme
|
|||||||
// case PROCESS_INSTANCE_COMPLETED:
|
// case PROCESS_INSTANCE_COMPLETED:
|
||||||
// e.setContentExt(BpmnProcessInstanceResultEnum.APPROVED.getStatus());
|
// e.setContentExt(BpmnProcessInstanceResultEnum.APPROVED.getStatus());
|
||||||
// break;
|
// break;
|
||||||
case PROCESS_INSTANCE_REJECTED:
|
// case PROCESS_INSTANCE_REJECTED:
|
||||||
e.setContentExt(BpmnProcessInstanceResultEnum.REJECTED.getStatus());
|
// e.setContentExt(BpmnProcessInstanceResultEnum.REJECTED.getStatus());
|
||||||
break;
|
// break;
|
||||||
case PROCESS_INSTANCE_ABORTED:
|
case PROCESS_INSTANCE_ABORTED:
|
||||||
e.setContentExt(BpmnProcessInstanceResultEnum.ABORTED.getStatus());
|
e.setContentExt(BpmnProcessInstanceResultEnum.ABORTED.getStatus());
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -20,12 +20,14 @@ import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
|||||||
import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport;
|
import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport;
|
||||||
import cn.axzo.nanopart.visa.server.mq.producer.VisaChangeLogPayload;
|
import cn.axzo.nanopart.visa.server.mq.producer.VisaChangeLogPayload;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
||||||
|
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordBillService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordBillService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
|
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
|
||||||
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
|
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
|
||||||
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
||||||
import cn.azxo.framework.common.model.CommonResponse;
|
import cn.azxo.framework.common.model.CommonResponse;
|
||||||
@ -48,10 +50,14 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_WORKSPA
|
|||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_INITIATOR_OU_ID;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_INITIATOR_OU_ID;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_INITIATOR_WORKSPACE_ID;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_INITIATOR_WORKSPACE_ID;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_VISA_TYPE_KEY;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_VISA_TYPE_KEY;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.APPROVE_ABORT;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.APPROVE_COMPLETED;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.REJECT_APPROVE;
|
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.REJECT_APPROVE;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.REVERT_APPROVE;
|
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.REVERT_APPROVE;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_PAY;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_VISA;
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_VISA;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.DESIGN_CHANGE;
|
import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.DESIGN_CHANGE;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.PAY_CONFIRM;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.PROJECT_VISA;
|
import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.PROJECT_VISA;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.TECHNOLOGY_APPROVED;
|
import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.TECHNOLOGY_APPROVED;
|
||||||
|
|
||||||
@ -68,11 +74,13 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
protected final ChangeRecordRelationService changeRecordRelationService;
|
protected final ChangeRecordRelationService changeRecordRelationService;
|
||||||
protected final ChangeRecordBillService changeRecordBillService;
|
protected final ChangeRecordBillService changeRecordBillService;
|
||||||
protected final ChangeRecordConfirmService changeRecordConfirmService;
|
protected final ChangeRecordConfirmService changeRecordConfirmService;
|
||||||
|
protected final WorkflowGateway workflowGateway;
|
||||||
protected final MessageAPIV3 noticeApi;
|
protected final MessageAPIV3 noticeApi;
|
||||||
public final static List<String> SUPPORTED_DEFINITION_KEYS = Lists.newArrayList(
|
public final static List<String> SUPPORTED_DEFINITION_KEYS = Lists.newArrayList(
|
||||||
DESIGN_CHANGE.getProcessDefinitionKey(),
|
DESIGN_CHANGE.getProcessDefinitionKey(),
|
||||||
TECHNOLOGY_APPROVED.getProcessDefinitionKey(),
|
TECHNOLOGY_APPROVED.getProcessDefinitionKey(),
|
||||||
PROJECT_VISA.getProcessDefinitionKey()
|
PROJECT_VISA.getProcessDefinitionKey(),
|
||||||
|
PAY_CONFIRM.getProcessDefinitionKey()
|
||||||
);
|
);
|
||||||
private final RefreshableConfiguration refreshableConfiguration;
|
private final RefreshableConfiguration refreshableConfiguration;
|
||||||
|
|
||||||
@ -82,6 +90,7 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
ChangeRecordRelationService changeRecordRelationService,
|
ChangeRecordRelationService changeRecordRelationService,
|
||||||
ChangeRecordBillService changeRecordBillService,
|
ChangeRecordBillService changeRecordBillService,
|
||||||
ChangeRecordConfirmService changeRecordConfirmService,
|
ChangeRecordConfirmService changeRecordConfirmService,
|
||||||
|
WorkflowGateway workflowGateway,
|
||||||
MessageAPIV3 noticeApi,
|
MessageAPIV3 noticeApi,
|
||||||
RefreshableConfiguration refreshableConfiguration) {
|
RefreshableConfiguration refreshableConfiguration) {
|
||||||
super(eventProducer, visaOrganizationalNodeUserGateway);
|
super(eventProducer, visaOrganizationalNodeUserGateway);
|
||||||
@ -89,6 +98,7 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
this.changeRecordRelationService = changeRecordRelationService;
|
this.changeRecordRelationService = changeRecordRelationService;
|
||||||
this.changeRecordBillService = changeRecordBillService;
|
this.changeRecordBillService = changeRecordBillService;
|
||||||
this.changeRecordConfirmService = changeRecordConfirmService;
|
this.changeRecordConfirmService = changeRecordConfirmService;
|
||||||
|
this.workflowGateway = workflowGateway;
|
||||||
this.noticeApi = noticeApi;
|
this.noticeApi = noticeApi;
|
||||||
this.refreshableConfiguration = refreshableConfiguration;
|
this.refreshableConfiguration = refreshableConfiguration;
|
||||||
}
|
}
|
||||||
@ -115,18 +125,25 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCompleted(ProcessInstanceDTO dto) {
|
public void onCompleted(ProcessInstanceDTO dto) {
|
||||||
String visaTypeDesc = parseVisaType(dto);
|
log.info("send complete notice, onCompleted, processInstanceDTO: {}", JSON.toJSONString(dto));
|
||||||
|
|
||||||
log.info("send complete notice");
|
|
||||||
sendCompleteNotice(dto);
|
sendCompleteNotice(dto);
|
||||||
log.info("send complete notice success");
|
log.info("send complete notice success");
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
|
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.APPROVED, processDefinition);
|
||||||
|
|
||||||
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.APPROVED);
|
if (isPayConfirm(dto)) {
|
||||||
|
changeRecordService.lambdaUpdate()
|
||||||
changeRecordService.lambdaUpdate()
|
.eq(ChangeRecord::getId, Long.valueOf(dto.getBusinessKey()))
|
||||||
.eq(ChangeRecord::getId, Long.valueOf(dto.getBusinessKey()))
|
.eq(ChangeRecord::getApprovalIdPay, dto.getProcessInstanceId())
|
||||||
.set(ChangeRecord::getStampStatus, VisaStampStatusEnum.UNPRINTED.name())
|
.set(ChangeRecord::getStampStatusPay, VisaStampStatusEnum.UNPRINTED.name())
|
||||||
.update();
|
.update();
|
||||||
|
} else {
|
||||||
|
changeRecordService.lambdaUpdate()
|
||||||
|
.eq(ChangeRecord::getId, Long.valueOf(dto.getBusinessKey()))
|
||||||
|
.eq(ChangeRecord::getApprovalId, dto.getProcessInstanceId())
|
||||||
|
.set(ChangeRecord::getStampStatus, VisaStampStatusEnum.UNPRINTED.name())
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,8 +158,10 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
String visaType = (String) variables.getOrDefault(WORKFLOW_VAR_VISA_TYPE_KEY, "");
|
String visaType = (String) variables.getOrDefault(WORKFLOW_VAR_VISA_TYPE_KEY, "");
|
||||||
String VisaTypeDesc = StringUtils.hasText(visaType) ? VisaTypeEnum.valueOf(visaType).getDesc() : "";
|
String VisaTypeDesc = StringUtils.hasText(visaType) ? VisaTypeEnum.valueOf(visaType).getDesc() : "";
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
completeNotice.setBizExtParams(new JSONObject(Maps.of(
|
completeNotice.setBizExtParams(new JSONObject(Maps.of(
|
||||||
"initiatorName", initiator.getAssignerName(),
|
"instanceName", processDefinition.getName(),
|
||||||
|
"handleUserName", initiator.getAssignerName(),
|
||||||
"topic", variables.getOrDefault(FORM_FIELD_TOPIC, ""),
|
"topic", variables.getOrDefault(FORM_FIELD_TOPIC, ""),
|
||||||
"visaTypeDesc", VisaTypeDesc,
|
"visaTypeDesc", VisaTypeDesc,
|
||||||
"workspaceName", variables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, ""),
|
"workspaceName", variables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, ""),
|
||||||
@ -178,18 +197,18 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onCancelled(ProcessInstanceDTO dto) {
|
public void onCancelled(ProcessInstanceDTO dto) {
|
||||||
|
log.info("onCancelled, processInstanceDTO: {}", JSON.toJSONString(dto));
|
||||||
BpmnTaskDelegateAssigner initiator = dto.getInitiator();
|
BpmnTaskDelegateAssigner initiator = dto.getInitiator();
|
||||||
String visaTypeDesc = parseVisaType(dto);
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
|
|
||||||
ChangeRecordLog log = ChangeRecordLog.builder()
|
ChangeRecordLog log = ChangeRecordLog.builder()
|
||||||
.visaId(Long.valueOf(dto.getBusinessKey()))
|
.visaId(Long.valueOf(dto.getBusinessKey()))
|
||||||
.action(dto.getType().getTag())
|
.action(dto.getType().getTag())
|
||||||
.title(String.format(REVERT_APPROVE.getTitle(), visaTypeDesc))
|
.title(String.format(REVERT_APPROVE.getTitle(), processDefinition.getName()))
|
||||||
.content(String.format(REVERT_APPROVE.getContent(), buildLogUserInfo(initiator)))
|
.content(String.format(REVERT_APPROVE.getContent(), buildLogUserInfo(initiator), processDefinition.getName()))
|
||||||
.build();
|
.build();
|
||||||
eventProducer.send(VisaChangeLogPayload.form(log));
|
eventProducer.send(VisaChangeLogPayload.form(log));
|
||||||
|
|
||||||
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.CANCELLED);
|
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.CANCELLED, processDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -199,20 +218,22 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onRejected(ProcessInstanceDTO dto) {
|
public void onRejected(ProcessInstanceDTO dto) {
|
||||||
|
log.info("onRejected, processInstanceDTO: {}", JSON.toJSONString(dto));
|
||||||
log.info("send reject notice");
|
log.info("send reject notice");
|
||||||
sendRejectNotice(dto);
|
sendRejectNotice(dto);
|
||||||
log.info("send reject notice success");
|
log.info("send reject notice success");
|
||||||
|
|
||||||
BpmnTaskDelegateAssigner lastOperationAssigner = dto.getLastOperationAssigner();
|
BpmnTaskDelegateAssigner lastOperationAssigner = dto.getLastOperationAssigner();
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
ChangeRecordLog log = ChangeRecordLog.builder()
|
ChangeRecordLog log = ChangeRecordLog.builder()
|
||||||
.visaId(Long.valueOf(dto.getBusinessKey()))
|
.visaId(Long.valueOf(dto.getBusinessKey()))
|
||||||
.action(dto.getType().getTag())
|
.action(dto.getType().getTag())
|
||||||
.title(String.format(REJECT_APPROVE.getTitle(), lastOperationAssigner.getAssignerName()))
|
.title(String.format(REJECT_APPROVE.getTitle(), lastOperationAssigner.getAssignerName(), processDefinition.getName()))
|
||||||
.content(String.format(REJECT_APPROVE.getContent(), buildLogUserInfo(lastOperationAssigner), dto.getReason()))
|
.content(String.format(REJECT_APPROVE.getContent(), buildLogUserInfo(lastOperationAssigner), StringUtils.hasText(dto.getReason()) ? dto.getReason() : ""))
|
||||||
.build();
|
.build();
|
||||||
eventProducer.send(VisaChangeLogPayload.form(log));
|
eventProducer.send(VisaChangeLogPayload.form(log));
|
||||||
|
|
||||||
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.REJECTED);
|
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.REJECTED, processDefinition);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,10 +246,12 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
rejectNotice.setBizEventMappingCode(refreshableConfiguration.getProcessInstanceRejectMsgEventCode());
|
rejectNotice.setBizEventMappingCode(refreshableConfiguration.getProcessInstanceRejectMsgEventCode());
|
||||||
rejectNotice.setBizCode(dto.getBusinessKey());
|
rejectNotice.setBizCode(dto.getBusinessKey());
|
||||||
|
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
String visaType = (String) variables.getOrDefault(WORKFLOW_VAR_VISA_TYPE_KEY, "");
|
String visaType = (String) variables.getOrDefault(WORKFLOW_VAR_VISA_TYPE_KEY, "");
|
||||||
String VisaTypeDesc = StringUtils.hasText(visaType) ? VisaTypeEnum.valueOf(visaType).getDesc() : "";
|
String VisaTypeDesc = StringUtils.hasText(visaType) ? VisaTypeEnum.valueOf(visaType).getDesc() : "";
|
||||||
rejectNotice.setBizExtParams(new JSONObject(Maps.of(
|
rejectNotice.setBizExtParams(new JSONObject(Maps.of(
|
||||||
"initiatorName", initiator.getAssignerName(),
|
"instanceName", processDefinition.getName(),
|
||||||
|
"handleUserName", initiator.getAssignerName(),
|
||||||
"topic", variables.getOrDefault(FORM_FIELD_TOPIC, ""),
|
"topic", variables.getOrDefault(FORM_FIELD_TOPIC, ""),
|
||||||
"visaTypeDesc", VisaTypeDesc,
|
"visaTypeDesc", VisaTypeDesc,
|
||||||
"workspaceName", variables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, ""),
|
"workspaceName", variables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, ""),
|
||||||
@ -250,27 +273,46 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAborted(ProcessInstanceDTO dto) {
|
public void onAborted(ProcessInstanceDTO dto) {
|
||||||
ProcessInstanceEventHandler.super.onAborted(dto);
|
log.info("onAborted, processInstanceDTO: {}", JSON.toJSONString(dto));
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
|
ChangeRecordLog log = ChangeRecordLog.builder()
|
||||||
|
.visaId(Long.valueOf(dto.getBusinessKey()))
|
||||||
|
.action(dto.getType().getTag())
|
||||||
|
.title(String.format(APPROVE_ABORT.getTitle(), processDefinition.getName()))
|
||||||
|
.content(String.format(APPROVE_ABORT.getContent(), processDefinition.getName()))
|
||||||
|
.build();
|
||||||
|
eventProducer.send(VisaChangeLogPayload.form(log));
|
||||||
|
|
||||||
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.ABORTED);
|
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.ABORTED, processDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateChangeRecordApprovalStatus(ProcessInstanceDTO dto, BpmnProcessInstanceResultEnum resultEnum) {
|
private void updateChangeRecordApprovalStatus(ProcessInstanceDTO dto, BpmnProcessInstanceResultEnum resultEnum, BpmnProcessDefinitionVO processDefinition) {
|
||||||
|
boolean isPayConfirm = isPayConfirm(dto);
|
||||||
// 更新主表审批状态信息
|
// 更新主表审批状态信息
|
||||||
Long visaId = Long.valueOf(dto.getBusinessKey());
|
Long visaId = Long.valueOf(dto.getBusinessKey());
|
||||||
changeRecordService.lambdaQuery()
|
changeRecordService.lambdaQuery()
|
||||||
.eq(ChangeRecord::getId, visaId)
|
.eq(ChangeRecord::getId, visaId)
|
||||||
.eq(ChangeRecord::getApprovalId, dto.getProcessInstanceId())
|
|
||||||
.eq(ChangeRecord::getIsDelete, 0)
|
.eq(ChangeRecord::getIsDelete, 0)
|
||||||
|
.or(q -> q.eq(ChangeRecord::getApprovalId, dto.getProcessInstanceId())
|
||||||
|
.eq(ChangeRecord::getApprovalIdPay, dto.getProcessInstanceId()))
|
||||||
.oneOpt()
|
.oneOpt()
|
||||||
.ifPresent(changeRecord -> {
|
.ifPresent(changeRecord -> {
|
||||||
if (Objects.equals(resultEnum, BpmnProcessInstanceResultEnum.APPROVED)) {
|
if (Objects.equals(resultEnum, BpmnProcessInstanceResultEnum.APPROVED)) {
|
||||||
changeRecord.setApprovalStatus(resultEnum.getStatus());
|
if (isPayConfirm) {
|
||||||
changeRecord.setApprovalCompleteTime(new Date());
|
changeRecord.setApprovalStatusPay(resultEnum.getStatus());
|
||||||
|
changeRecord.setApprovalCompleteTimePay(new Date());
|
||||||
|
} else {
|
||||||
|
changeRecord.setApprovalStatus(resultEnum.getStatus());
|
||||||
|
changeRecord.setApprovalCompleteTime(new Date());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
changeRecord.setApprovalId("");
|
if (isPayConfirm) {
|
||||||
changeRecord.setApprovalStatus("");
|
changeRecord.setApprovalStatusPay(resultEnum.getStatus());
|
||||||
changeRecord.setApprovalCompleteTime(null);
|
changeRecord.setApprovalCompleteTimePay(null);
|
||||||
|
} else {
|
||||||
|
changeRecord.setApprovalStatus(resultEnum.getStatus());
|
||||||
|
changeRecord.setApprovalCompleteTime(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
changeRecordService.updateById(changeRecord);
|
changeRecordService.updateById(changeRecord);
|
||||||
});
|
});
|
||||||
@ -278,7 +320,7 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
// 更新关联表审批信息
|
// 更新关联表审批信息
|
||||||
changeRecordRelationService.lambdaQuery()
|
changeRecordRelationService.lambdaQuery()
|
||||||
.eq(ChangeRecordRelation::getVisaId, visaId)
|
.eq(ChangeRecordRelation::getVisaId, visaId)
|
||||||
.eq(ChangeRecordRelation::getVarName, PROCESS_INSTANCE_OF_VISA.name())
|
.eq(ChangeRecordRelation::getVarName, isPayConfirm ? PROCESS_INSTANCE_OF_PAY.name() : PROCESS_INSTANCE_OF_VISA.name())
|
||||||
.eq(ChangeRecordRelation::getContent, dto.getProcessInstanceId())
|
.eq(ChangeRecordRelation::getContent, dto.getProcessInstanceId())
|
||||||
.oneOpt()
|
.oneOpt()
|
||||||
.ifPresent(changeRecordRelation -> {
|
.ifPresent(changeRecordRelation -> {
|
||||||
@ -289,25 +331,40 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
ChangeRecord visa = changeRecordService.getById(visaId);
|
ChangeRecord visa = changeRecordService.getById(visaId);
|
||||||
BpmnTaskDelegateAssigner lastOperationAssigner = dto.getLastOperationAssigner();
|
BpmnTaskDelegateAssigner lastOperationAssigner = dto.getLastOperationAssigner();
|
||||||
if (Objects.equals(resultEnum, BpmnProcessInstanceResultEnum.APPROVED)) {
|
if (Objects.equals(resultEnum, BpmnProcessInstanceResultEnum.APPROVED)) {
|
||||||
changeRecordService.changeStatus(ChangeStatusRequest.builder()
|
if (isPayConfirm) {
|
||||||
.visaId(visaId)
|
// 修改状态,并记录日志
|
||||||
.personId(Long.valueOf(lastOperationAssigner.getPersonId()))
|
changeRecordService.changeStatus(ChangeStatusRequest.builder()
|
||||||
.ouId(Long.valueOf(lastOperationAssigner.getOuId()))
|
.visaId(visaId)
|
||||||
.workspaceId(Long.valueOf(lastOperationAssigner.getTenantId()))
|
.personId(Long.valueOf(lastOperationAssigner.getPersonId()))
|
||||||
.updateStatus(VisaStatusEnum.COMPLETED)
|
.ouId(Long.valueOf(lastOperationAssigner.getOuId()))
|
||||||
.editFormFlag(false)
|
.workspaceId(Long.valueOf(lastOperationAssigner.getTenantId()))
|
||||||
.build());
|
.updateStatus(VisaStatusEnum.COMPLETED)
|
||||||
|
.visaType(PAY_CONFIRM)
|
||||||
|
.editFormFlag(false)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ChangeRecordLog log = ChangeRecordLog.builder()
|
||||||
|
.visaId(Long.valueOf(dto.getBusinessKey()))
|
||||||
|
.action(dto.getType().getTag())
|
||||||
|
.title(String.format(APPROVE_COMPLETED.getTitle(), processDefinition.getName()))
|
||||||
|
.content(String.format(APPROVE_COMPLETED.getContent(), processDefinition.getName()))
|
||||||
|
.build();
|
||||||
|
eventProducer.send(VisaChangeLogPayload.form(log));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 回退到待提报或决策中
|
if (!isPayConfirm) {
|
||||||
changeRecordService.changeStatus(ChangeStatusRequest.builder()
|
// 回退到待提报或决策中
|
||||||
.visaId(visaId)
|
changeRecordService.changeStatus(ChangeStatusRequest.builder()
|
||||||
.personId(Long.valueOf(lastOperationAssigner.getPersonId()))
|
.visaId(visaId)
|
||||||
.ouId(Long.valueOf(lastOperationAssigner.getOuId()))
|
.personId(Long.valueOf(StringUtils.hasText(lastOperationAssigner.getPersonId()) ? lastOperationAssigner.getPersonId() : "0"))
|
||||||
.workspaceId(Long.valueOf(lastOperationAssigner.getTenantId()))
|
.ouId(Long.valueOf(StringUtils.hasText(lastOperationAssigner.getOuId()) ? lastOperationAssigner.getOuId() : "0"))
|
||||||
.updateStatus(Objects.isNull(visa.getImGroupId()) ? VisaStatusEnum.REPORT_FROM_APPROVE : VisaStatusEnum.DECIDING_FROM_APPROVE)
|
.workspaceId(Long.valueOf(StringUtils.hasText(lastOperationAssigner.getTenantId()) ? lastOperationAssigner.getTenantId() : "0"))
|
||||||
.editFormFlag(false)
|
.updateStatus(Objects.isNull(visa.getImGroupId()) ? VisaStatusEnum.REPORT_FROM_APPROVE : VisaStatusEnum.DECIDING_FROM_APPROVE)
|
||||||
.build());
|
.editFormFlag(false)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
// 取消当前主单据关联的其他单据的关联状态
|
// 取消当前主单据关联的其他单据的关联状态
|
||||||
changeRecordBillService.billRelationStatus(visaId, false);
|
changeRecordBillService.billRelationStatus(visaId, false);
|
||||||
@ -315,4 +372,8 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
|
|||||||
changeRecordService.syncDrawAnnotationUnBindRelation(visaId);
|
changeRecordService.syncDrawAnnotationUnBindRelation(visaId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isPayConfirm(ProcessInstanceDTO dto) {
|
||||||
|
return Objects.equals(PAY_CONFIRM, VisaTypeEnum.valueOfProcessDefinitionKey(dto.getProcessDefinitionKey()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,8 +8,11 @@ import cn.axzo.nanopart.visa.server.domain.ChangeRecordLog;
|
|||||||
import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport;
|
import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport;
|
||||||
import cn.axzo.nanopart.visa.server.mq.producer.VisaChangeLogPayload;
|
import cn.axzo.nanopart.visa.server.mq.producer.VisaChangeLogPayload;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
||||||
|
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||||
|
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
|
||||||
import cn.axzo.workflow.common.model.response.mq.ProcessTaskDTO;
|
import cn.axzo.workflow.common.model.response.mq.ProcessTaskDTO;
|
||||||
import cn.axzo.workflow.starter.handler.ProcessTaskEventHandler;
|
import cn.axzo.workflow.starter.handler.ProcessTaskEventHandler;
|
||||||
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
import org.springframework.context.annotation.DependsOn;
|
import org.springframework.context.annotation.DependsOn;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ -18,6 +21,7 @@ import java.util.Objects;
|
|||||||
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.APPROVED_AGRESS;
|
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.APPROVED_AGRESS;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.TRANSMIT_APPROVE;
|
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.TRANSMIT_APPROVE;
|
||||||
import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessInstanceOfVisaAllEventHandler.SUPPORTED_DEFINITION_KEYS;
|
import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessInstanceOfVisaAllEventHandler.SUPPORTED_DEFINITION_KEYS;
|
||||||
|
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工作流广播的任务维度的所有事件类型
|
* 工作流广播的任务维度的所有事件类型
|
||||||
@ -28,9 +32,11 @@ import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessI
|
|||||||
@Component
|
@Component
|
||||||
@DependsOn("processInstanceOfVisaAllEventHandler")
|
@DependsOn("processInstanceOfVisaAllEventHandler")
|
||||||
public class ProcessTaskOfVisaAllEventHandler extends BasicLogSupport implements ProcessTaskEventHandler {
|
public class ProcessTaskOfVisaAllEventHandler extends BasicLogSupport implements ProcessTaskEventHandler {
|
||||||
|
protected final WorkflowGateway workflowGateway;
|
||||||
|
|
||||||
public ProcessTaskOfVisaAllEventHandler(EventProducer eventProducer, VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway) {
|
public ProcessTaskOfVisaAllEventHandler(EventProducer eventProducer, VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway, WorkflowGateway workflowGateway) {
|
||||||
super(eventProducer, visaOrganizationalNodeUserGateway);
|
super(eventProducer, visaOrganizationalNodeUserGateway);
|
||||||
|
this.workflowGateway = workflowGateway;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -60,17 +66,19 @@ public class ProcessTaskOfVisaAllEventHandler extends BasicLogSupport implements
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onCompleted(ProcessTaskDTO dto) {
|
public void onCompleted(ProcessTaskDTO dto) {
|
||||||
if (Objects.nonNull(dto.getApprover())
|
if (Objects.nonNull(dto.getApprover()) && !NumberUtils.isDigits(dto.getApprover().getPersonId())) {
|
||||||
&& Objects.equals(dto.getInitiator().getPersonId(), dto.getApprover().getPersonId())) {
|
return;
|
||||||
|
}
|
||||||
|
if (Objects.equals(NODE_STARTER.getType(), dto.getCurrentElementKey())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
OrgNodeUserBriefInfoResp user = getOneUserInfo(dto.getApprover());
|
OrgNodeUserBriefInfoResp user = getOneUserInfo(dto.getApprover());
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
ChangeRecordLog log = ChangeRecordLog.builder()
|
ChangeRecordLog log = ChangeRecordLog.builder()
|
||||||
.visaId(Long.valueOf(dto.getBusinessKey()))
|
.visaId(Long.valueOf(dto.getBusinessKey()))
|
||||||
.action(dto.getType().getTag())
|
.action(dto.getType().getTag())
|
||||||
.title(String.format(APPROVED_AGRESS.getTitle(), Objects.isNull(user) ? "" : user.getRealName()))
|
.title(String.format(APPROVED_AGRESS.getTitle(), Objects.isNull(user) ? "" : user.getRealName()))
|
||||||
.content(String.format(APPROVED_AGRESS.getContent(), Objects.isNull(user) ? "系统自动通过" : buildLogUserInfo(user)))
|
.content(String.format(APPROVED_AGRESS.getContent(), processDefinition.getName(), Objects.isNull(user) ? "系统自动通过" : buildLogUserInfo(user)))
|
||||||
.build();
|
.build();
|
||||||
eventProducer.send(VisaChangeLogPayload.form(log));
|
eventProducer.send(VisaChangeLogPayload.form(log));
|
||||||
}
|
}
|
||||||
@ -82,12 +90,14 @@ public class ProcessTaskOfVisaAllEventHandler extends BasicLogSupport implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTransfer(ProcessTaskDTO dto) {
|
public void onTransfer(ProcessTaskDTO dto) {
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
|
||||||
ChangeRecordLog log = ChangeRecordLog.builder()
|
ChangeRecordLog log = ChangeRecordLog.builder()
|
||||||
.visaId(Long.valueOf(dto.getBusinessKey()))
|
.visaId(Long.valueOf(dto.getBusinessKey()))
|
||||||
.action(dto.getType().getTag())
|
.action(dto.getType().getTag())
|
||||||
.title(String.format(TRANSMIT_APPROVE.getTitle()))
|
.title(String.format(TRANSMIT_APPROVE.getTitle()))
|
||||||
.content(String.format(TRANSMIT_APPROVE.getContent(),
|
.content(String.format(TRANSMIT_APPROVE.getContent(),
|
||||||
buildLogUserInfo(dto.getApprover()),
|
buildLogUserInfo(dto.getApprover()),
|
||||||
|
processDefinition.getName(),
|
||||||
buildLogUserInfo(dto.getTransferTargetApprover()),
|
buildLogUserInfo(dto.getTransferTargetApprover()),
|
||||||
dto.getAdvice()))
|
dto.getAdvice()))
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@ -1,14 +1,19 @@
|
|||||||
package cn.axzo.nanopart.visa.server.rpc;
|
package cn.axzo.nanopart.visa.server.rpc;
|
||||||
|
|
||||||
|
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
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.BpmnProcessInstanceCheckApproverDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
||||||
|
import cn.axzo.workflow.common.model.request.form.instance.FormDetailDTO;
|
||||||
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
|
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
|
||||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||||
|
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
|
||||||
import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO;
|
import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO;
|
||||||
|
import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO;
|
||||||
|
import cn.axzo.workflow.common.model.response.print.PrintModelDTO;
|
||||||
import cn.axzo.workflow.starter.api.WorkflowCoreService;
|
import cn.axzo.workflow.starter.api.WorkflowCoreService;
|
||||||
import cn.axzo.workflow.starter.api.WorkflowManageService;
|
import cn.axzo.workflow.starter.api.WorkflowManageService;
|
||||||
import cn.azxo.framework.common.logger.MethodAroundLog;
|
import cn.azxo.framework.common.logger.MethodAroundLog;
|
||||||
@ -94,4 +99,24 @@ public class WorkflowGateway {
|
|||||||
public Boolean setAssignee(BpmnActivitySetAssigneeDTO dto) {
|
public Boolean setAssignee(BpmnActivitySetAssigneeDTO dto) {
|
||||||
return workflowCoreService.sync().setAssignee(dto);
|
return workflowCoreService.sync().setAssignee(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "获取打印模板配置内容")
|
||||||
|
public PrintModelDTO getPrintTemplateConfig(PrintTemplateConfigQueryDTO request) {
|
||||||
|
return workflowManageService.getPrintTemplateConfig(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "查询指定审批实例的表单模型和数据")
|
||||||
|
public FormInstanceVO getFormInstance(FormDetailDTO request) {
|
||||||
|
return workflowManageService.getFormInstance(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "获得流程定义标识对应的激活的流程定义")
|
||||||
|
public BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(String processDefinitionKey) {
|
||||||
|
return getActiveProcessDefinitionByKey(processDefinitionKey, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "获得流程定义标识对应的激活的流程定义")
|
||||||
|
public BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(String processDefinitionKey, String workspaceId) {
|
||||||
|
return workflowManageService.getActiveProcessDefinitionByKey(processDefinitionKey, workspaceId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,12 +2,11 @@ package cn.axzo.nanopart.visa.server.service;
|
|||||||
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordConfirm;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecordConfirm;
|
||||||
|
import cn.axzo.nanopart.visa.server.dto.FetchBtnConditionDto;
|
||||||
import cn.axzo.nanopart.visa.server.dto.VisaConfirmDto;
|
import cn.axzo.nanopart.visa.server.dto.VisaConfirmDto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -59,7 +58,7 @@ public interface ChangeRecordConfirmService {
|
|||||||
* 获取按钮集合
|
* 获取按钮集合
|
||||||
* 确认人与发起人的不同的单据状态,按钮列表不相同
|
* 确认人与发起人的不同的单据状态,按钮列表不相同
|
||||||
*/
|
*/
|
||||||
List<VisaButtonTypeEnum> fetchBtnsByCondition(Long visaId, Long personId, Long ouId, Long workspaceId, VisaStatusEnum status, String approvalId, VisaStampStatusEnum stampStatus);
|
List<VisaButtonTypeEnum> fetchBtnsByCondition(FetchBtnConditionDto btnConditionDto);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限过滤
|
* 权限过滤
|
||||||
|
|||||||
@ -1,5 +1,9 @@
|
|||||||
package cn.axzo.nanopart.visa.server.service;
|
package cn.axzo.nanopart.visa.server.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import cn.axzo.framework.domain.web.result.PageData;
|
import cn.axzo.framework.domain.web.result.PageData;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.request.BizActivityAssigneeDecisionReq;
|
import cn.axzo.nanopart.visa.api.request.BizActivityAssigneeDecisionReq;
|
||||||
@ -14,18 +18,17 @@ import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
|
|||||||
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
||||||
|
import cn.axzo.nanopart.visa.api.request.VisaPayApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
||||||
|
import cn.axzo.nanopart.visa.api.response.VisaChangeRelationOrdersResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xudawei
|
* @author xudawei
|
||||||
@ -165,4 +168,16 @@ public interface ChangeRecordService extends IService<ChangeRecord> {
|
|||||||
void update(UpdateVisaChangeReq req);
|
void update(UpdateVisaChangeReq req);
|
||||||
|
|
||||||
List<BpmnTaskDelegateAssigner> bizActivityDecisionAssignee(BizActivityAssigneeDecisionReq req);
|
List<BpmnTaskDelegateAssigner> bizActivityDecisionAssignee(BizActivityAssigneeDecisionReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取关联的单据信息
|
||||||
|
*/
|
||||||
|
VisaChangeRelationOrdersResp getRelationOrdersById(Long visaId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 价款审批表单提交
|
||||||
|
*
|
||||||
|
* @param req
|
||||||
|
*/
|
||||||
|
void approveCreateVisaPay(VisaPayApproveCreateReq req);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,5 +4,11 @@ import cn.axzo.log.platform.client.model.req.LogAddReq;
|
|||||||
|
|
||||||
public interface OperateLogService {
|
public interface OperateLogService {
|
||||||
|
|
||||||
|
void saveRequest(String scene, Long tag, Object request);
|
||||||
|
|
||||||
|
void save(String scene, Long tag, Object... messages);
|
||||||
|
|
||||||
|
void save(String scene, String tag, Object... messages);
|
||||||
|
|
||||||
void save(LogAddReq param);
|
void save(LogAddReq param);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
|||||||
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||||
|
import cn.axzo.nanopart.visa.api.request.VisaPayApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordBill;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecordBill;
|
||||||
@ -37,6 +38,7 @@ import cn.axzo.nanopart.visa.server.rpc.LogApiGateway;
|
|||||||
import cn.axzo.nanopart.visa.server.rpc.OrganizationalUnitGateway;
|
import cn.axzo.nanopart.visa.server.rpc.OrganizationalUnitGateway;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.RectifyApiGateway;
|
import cn.axzo.nanopart.visa.server.rpc.RectifyApiGateway;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
||||||
|
import cn.axzo.nanopart.visa.server.rpc.VisaProfileGateway;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.VisaProjectApiGateway;
|
import cn.axzo.nanopart.visa.server.rpc.VisaProjectApiGateway;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.WorkspaceGateway;
|
import cn.axzo.nanopart.visa.server.rpc.WorkspaceGateway;
|
||||||
@ -45,6 +47,7 @@ import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
|||||||
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
||||||
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
||||||
import cn.axzo.thor.client.model.DrawingMajorResp;
|
import cn.axzo.thor.client.model.DrawingMajorResp;
|
||||||
|
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||||
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.lang.Pair;
|
import cn.hutool.core.lang.Pair;
|
||||||
@ -57,6 +60,7 @@ import com.google.common.collect.Sets;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.collections.MapUtils;
|
import org.apache.commons.collections.MapUtils;
|
||||||
|
import org.apache.commons.collections4.ListUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@ -75,6 +79,8 @@ import java.util.Set;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_CONTRACT_NAME;
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_CONTRACT_NO;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_AMOUNT_CHANGE;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_AMOUNT_CHANGE;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_ATTACH;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_ATTACH;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_CONTEXT;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_CONTEXT;
|
||||||
@ -94,7 +100,12 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_TOPIC;
|
|||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_UNIT;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_UNIT;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_UNIT_PERSON;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_UNIT_PERSON;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_WORKSPACE_NAME;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_WORKSPACE_NAME;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum.USED_PRINTS;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_PAY_ACTUAL_CONSTRUCTION_COMPLETE_DATE;
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_PAY_APPROVAL_AMOUNT;
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_PAY_COMPLETE_CONFIRM_ATTACH;
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_PAY_COMPLETE_WORKER_NO;
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_PAY_CONFIRM_MATTER;
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_PAY_DECLARED_AMOUNT;
|
||||||
import static cn.axzo.nanopart.visa.server.utils.Constants.DATE_FORMAT;
|
import static cn.axzo.nanopart.visa.server.utils.Constants.DATE_FORMAT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,6 +162,9 @@ public class VisaHelper {
|
|||||||
@Resource
|
@Resource
|
||||||
private WorkflowGateway workflowGateway;
|
private WorkflowGateway workflowGateway;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VisaProfileGateway visaProfileGateway;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态更新与添加日志,此时新增记录时状态没有维护
|
* 状态更新与添加日志,此时新增记录时状态没有维护
|
||||||
*/
|
*/
|
||||||
@ -255,7 +269,7 @@ public class VisaHelper {
|
|||||||
if (CollectionUtils.isEmpty(areaFullNameInfoByAreaId)) {
|
if (CollectionUtils.isEmpty(areaFullNameInfoByAreaId)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
Map<Long, String> areaIdAndNameMap = areaFullNameInfoByAreaId.stream().collect(Collectors.toMap(ConstructionAreaDTO::getId, ConstructionAreaDTO::getAreaFullName));
|
Map<Long, String> areaIdAndNameMap = areaFullNameInfoByAreaId.stream().collect(Collectors.toMap(ConstructionAreaDTO::getId, ConstructionAreaDTO::getAreaFullName, (v1, v2) -> v1));
|
||||||
|
|
||||||
areas.forEach(area -> {
|
areas.forEach(area -> {
|
||||||
area.setAreaName(areaIdAndNameMap.get(area.getAreaId()));
|
area.setAreaName(areaIdAndNameMap.get(area.getAreaId()));
|
||||||
@ -350,27 +364,31 @@ public class VisaHelper {
|
|||||||
ChangeRecord changeRecord = visaIdMap.get(key);
|
ChangeRecord changeRecord = visaIdMap.get(key);
|
||||||
if (Objects.nonNull(changeRecord) && Objects.nonNull(changeRecord.getStatus())) {
|
if (Objects.nonNull(changeRecord) && Objects.nonNull(changeRecord.getStatus())) {
|
||||||
Set<VisaButtonTypeEnum> buttons = VisaButtonTypeEnum.fetchBtnsByBizTypeAndStatusWhenPage(value, changeRecord.getStatus());
|
Set<VisaButtonTypeEnum> buttons = VisaButtonTypeEnum.fetchBtnsByBizTypeAndStatusWhenPage(value, changeRecord.getStatus());
|
||||||
if (Objects.equals(changeRecord.getStatus(), VisaStatusEnum.COMPLETED) && Objects.nonNull(changeRecord.getStampStatus())) {
|
// if (Objects.equals(changeRecord.getStatus(), VisaStatusEnum.COMPLETED) && Objects.nonNull(changeRecord.getStampStatus())) {
|
||||||
if (value.contains(VisaConfirmBizTypeEnum.CREATE)) {
|
// if (value.contains(VisaConfirmBizTypeEnum.CREATE)) {
|
||||||
switch (changeRecord.getStampStatus()) {
|
// switch (changeRecord.getStampStatus()) {
|
||||||
case UNPRINTED:
|
// case UNPRINTED:
|
||||||
if (StringUtils.hasText(changeRecord.getApprovalId()) && workflowGateway.hasPrintTemplate(changeRecord.getApprovalId())) {
|
// if (StringUtils.hasText(changeRecord.getApprovalId()) && workflowGateway.hasPrintTemplate(changeRecord.getApprovalId())) {
|
||||||
buttons.add(VisaButtonTypeEnum.REQUEST_STAMP);
|
// buttons.add(VisaButtonTypeEnum.REQUEST_STAMP);
|
||||||
}
|
// }
|
||||||
if (changeRecord.getAppliedStamp()) {
|
// if (changeRecord.getAppliedStamp()) {
|
||||||
buttons.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
// buttons.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
||||||
}
|
// }
|
||||||
break;
|
// break;
|
||||||
case WITH_PRINT:
|
// case WITH_PRINT:
|
||||||
buttons.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
// buttons.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
||||||
break;
|
// break;
|
||||||
default:
|
// default:
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (Objects.equals(changeRecord.getStampStatus(), USED_PRINTS)) {
|
// if (Objects.equals(changeRecord.getStampStatus(), USED_PRINTS)) {
|
||||||
buttons.add(VisaButtonTypeEnum.STAMP_FILE);
|
// buttons.add(VisaButtonTypeEnum.STAMP_FILE);
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
|
// 判断单据是否拥有【申请价款确认】按钮
|
||||||
|
if (hasBtnToPayApprove(changeRecord.getStatus(), changeRecord.getApprovalStatus(), changeRecord.getApprovalStatusPay())) {
|
||||||
|
buttons.add(VisaButtonTypeEnum.TO_PAY_APPROVE);
|
||||||
}
|
}
|
||||||
returnMap.put(key, buttons);
|
returnMap.put(key, buttons);
|
||||||
}
|
}
|
||||||
@ -378,6 +396,24 @@ public class VisaHelper {
|
|||||||
return returnMap;
|
return returnMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单据通过立项审批或完工价款确认审批被驳回/中止
|
||||||
|
*
|
||||||
|
* @param status 变洽签状态
|
||||||
|
* @param approvalStatus 立项审批状态
|
||||||
|
* @param approvalStatusPay 价款确认审批状态
|
||||||
|
* @return true - 有【申请价款确认】按钮,false - 无【申请价款确认】按钮
|
||||||
|
*/
|
||||||
|
public static boolean hasBtnToPayApprove(VisaStatusEnum status, String approvalStatus, String approvalStatusPay) {
|
||||||
|
if (Objects.equals(status, VisaStatusEnum.APPROVING)) {
|
||||||
|
return Objects.equals(approvalStatus, BpmnProcessInstanceResultEnum.APPROVED.getStatus())
|
||||||
|
&& (!StringUtils.hasText(approvalStatusPay)
|
||||||
|
|| Objects.equals(approvalStatusPay, BpmnProcessInstanceResultEnum.REJECTED.getStatus())
|
||||||
|
|| Objects.equals(approvalStatusPay, BpmnProcessInstanceResultEnum.ABORTED.getStatus()));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static String buildChangeAmount(BigDecimal changeAmount) {
|
public static String buildChangeAmount(BigDecimal changeAmount) {
|
||||||
if (Objects.isNull(changeAmount)) {
|
if (Objects.isNull(changeAmount)) {
|
||||||
return "";
|
return "";
|
||||||
@ -407,6 +443,9 @@ public class VisaHelper {
|
|||||||
formVariables.put(FORM_FIELD_RELATION_AREA, buildAreaName(req.getRelationArea()));
|
formVariables.put(FORM_FIELD_RELATION_AREA, buildAreaName(req.getRelationArea()));
|
||||||
formVariables.put(FORM_FIELD_CONTEXT_DESCRIPTION, buildContextDescription(req.getChangeContextAndDescriptionList()));
|
formVariables.put(FORM_FIELD_CONTEXT_DESCRIPTION, buildContextDescription(req.getChangeContextAndDescriptionList()));
|
||||||
formVariables.put(FORM_FIELD_UNIT_PERSON, buildUnitPerson(req.getRelationUnitAndPersonList(), req.getRelationWorkspaceId()));
|
formVariables.put(FORM_FIELD_UNIT_PERSON, buildUnitPerson(req.getRelationUnitAndPersonList(), req.getRelationWorkspaceId()));
|
||||||
|
formVariables.put(FORM_CONTRACT_NAME, req.getContractName());
|
||||||
|
formVariables.put(FORM_CONTRACT_NO, req.getContractNo());
|
||||||
|
|
||||||
|
|
||||||
// 非必填项
|
// 非必填项
|
||||||
if (Objects.nonNull(req.getAmountChange())) {
|
if (Objects.nonNull(req.getAmountChange())) {
|
||||||
@ -640,4 +679,27 @@ public class VisaHelper {
|
|||||||
}
|
}
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> buildPayStartFormVariables(VisaPayApproveCreateReq req, Long visaId) {
|
||||||
|
Map<String, Object> variables = Maps.newHashMap();
|
||||||
|
variables.put(FORM_PAY_COMPLETE_WORKER_NO, req.getCompleteWorkNo());
|
||||||
|
variables.put(FORM_PAY_CONFIRM_MATTER, req.getConfirmMatter());
|
||||||
|
variables.put(FORM_PAY_ACTUAL_CONSTRUCTION_COMPLETE_DATE, req.getActualConstructionCompleteDate());
|
||||||
|
variables.put(FORM_PAY_DECLARED_AMOUNT, req.getDeclaredAmount());
|
||||||
|
variables.put(FORM_PAY_APPROVAL_AMOUNT, null);
|
||||||
|
variables.put(FORM_PAY_COMPLETE_CONFIRM_ATTACH, ListUtils.emptyIfNull(req.getAttachments()));
|
||||||
|
|
||||||
|
VisaChangeApproveCreateReq createReq = buildVisaChangeApproveCreateReqByVisaId(visaId);
|
||||||
|
Map<String, Object> visaFormVariables = buildStartFormVariables(createReq);
|
||||||
|
variables.put(FORM_CONTRACT_NAME, createReq.getContractName());
|
||||||
|
variables.put(FORM_CONTRACT_NO, createReq.getContractNo());
|
||||||
|
variables.put(FORM_FIELD_NO, visaFormVariables.getOrDefault(FORM_FIELD_NO, null));
|
||||||
|
variables.put(FORM_FIELD_TOPIC, visaFormVariables.getOrDefault(FORM_FIELD_TOPIC, null));
|
||||||
|
variables.put(FORM_FIELD_WORKSPACE_NAME, visaFormVariables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, null));
|
||||||
|
variables.put(FORM_FIELD_RELATION_PROFESSIONAL, visaFormVariables.getOrDefault(FORM_FIELD_RELATION_PROFESSIONAL, null));
|
||||||
|
variables.put(FORM_FIELD_REASON, visaFormVariables.getOrDefault(FORM_FIELD_REASON, null));
|
||||||
|
variables.put(FORM_FIELD_UNIT_PERSON, visaFormVariables.getOrDefault(FORM_FIELD_UNIT_PERSON, null));
|
||||||
|
|
||||||
|
return variables;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|||||||
import org.apache.commons.compress.utils.Lists;
|
import org.apache.commons.compress.utils.Lists;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -63,6 +64,7 @@ public class ChangeRecordBillServiceImpl extends ServiceImpl<ChangeRecordBillDao
|
|||||||
/**
|
/**
|
||||||
* 删除
|
* 删除
|
||||||
*/
|
*/
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean deleteByVisaId(Long visaId) {
|
public Boolean deleteByVisaId(Long visaId) {
|
||||||
if (Objects.isNull(visaId)) {
|
if (Objects.isNull(visaId)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -12,13 +12,12 @@ import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO;
|
|||||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordConfirm;
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecordConfirm;
|
||||||
|
import cn.axzo.nanopart.visa.server.dto.FetchBtnConditionDto;
|
||||||
import cn.axzo.nanopart.visa.server.dto.VisaConfirmDto;
|
import cn.axzo.nanopart.visa.server.dto.VisaConfirmDto;
|
||||||
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordConfirmDao;
|
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordConfirmDao;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.DataObjectApiGateway;
|
import cn.axzo.nanopart.visa.server.rpc.DataObjectApiGateway;
|
||||||
@ -30,6 +29,7 @@ import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
|||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
|
import cn.axzo.nanopart.visa.server.service.VisaHelper;
|
||||||
import cn.axzo.nanopart.visa.server.utils.Constants;
|
import cn.axzo.nanopart.visa.server.utils.Constants;
|
||||||
import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
||||||
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
||||||
@ -44,6 +44,7 @@ import com.google.common.collect.Sets;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -53,8 +54,6 @@ import java.util.Objects;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum.USED_PRINTS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xudawei
|
* @author xudawei
|
||||||
* @date 2025/01/15
|
* @date 2025/01/15
|
||||||
@ -121,6 +120,7 @@ public class ChangeRecordConfirmServiceImpl extends ServiceImpl<ChangeRecordConf
|
|||||||
/**
|
/**
|
||||||
* 通过变更签证Id,删除变更签证确认信息
|
* 通过变更签证Id,删除变更签证确认信息
|
||||||
*/
|
*/
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean deleteByVisaId(Long visaId, List<VisaConfirmBizTypeEnum> bizTypes) {
|
public boolean deleteByVisaId(Long visaId, List<VisaConfirmBizTypeEnum> bizTypes) {
|
||||||
if (Objects.isNull(visaId)) {
|
if (Objects.isNull(visaId)) {
|
||||||
return false;
|
return false;
|
||||||
@ -136,54 +136,58 @@ public class ChangeRecordConfirmServiceImpl extends ServiceImpl<ChangeRecordConf
|
|||||||
* 确认人与发起人的不同的单据状态,按钮列表不相同
|
* 确认人与发起人的不同的单据状态,按钮列表不相同
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<VisaButtonTypeEnum> fetchBtnsByCondition(Long visaId, Long personId, Long ouId, Long workspaceId, VisaStatusEnum status, String approvalId, VisaStampStatusEnum stampStatus) {
|
public List<VisaButtonTypeEnum> fetchBtnsByCondition(FetchBtnConditionDto btnConditionDto) {
|
||||||
Set<VisaConfirmBizTypeEnum> bizTypes = fetchBizTypesByCondition(visaId, personId, ouId, workspaceId);
|
Set<VisaConfirmBizTypeEnum> bizTypes = fetchBizTypesByCondition(btnConditionDto.getVisaId(), btnConditionDto.getPersonId(), btnConditionDto.getOuId(), btnConditionDto.getWorkspaceId());
|
||||||
//添加审批人添加到集合bizTypes中
|
//添加审批人添加到集合bizTypes中
|
||||||
this.addBizTypeApprove(bizTypes, visaId, personId, ouId, workspaceId);
|
this.addBizTypeApprove(bizTypes, btnConditionDto.getVisaId(), btnConditionDto.getPersonId(), btnConditionDto.getOuId(), btnConditionDto.getWorkspaceId());
|
||||||
|
|
||||||
Set<VisaButtonTypeEnum> visaButtonTypeEnums = VisaButtonTypeEnum.fetchBtnSetByBizTypeAndStatus(bizTypes, status);
|
Set<VisaButtonTypeEnum> visaButtonTypeEnums = VisaButtonTypeEnum.fetchBtnSetByBizTypeAndStatus(bizTypes, btnConditionDto.getStatus());
|
||||||
|
// 判断单据是否拥有【申请价款确认】按钮
|
||||||
|
if (VisaHelper.hasBtnToPayApprove(btnConditionDto.getStatus(), btnConditionDto.getApprovalStatus(), btnConditionDto.getApprovalStatusPay())) {
|
||||||
|
visaButtonTypeEnums.add(VisaButtonTypeEnum.TO_PAY_APPROVE);
|
||||||
|
}
|
||||||
//没有点击[审批记录],则不展示[查看审批记录]按钮
|
//没有点击[审批记录],则不展示[查看审批记录]按钮
|
||||||
if (!changeRecordLogService.hasLogType(visaId, VisaLogTypeEnum.TO_APPRROVE)) {
|
// if (!changeRecordLogService.hasLogType(visaId, VisaLogTypeEnum.TO_APPRROVE)) {
|
||||||
visaButtonTypeEnums.remove(VisaButtonTypeEnum.APPROVAL_RECORD);
|
// visaButtonTypeEnums.remove(VisaButtonTypeEnum.APPROVAL_RECORD);
|
||||||
visaButtonTypeEnums.remove(VisaButtonTypeEnum.PRINT);
|
// visaButtonTypeEnums.remove(VisaButtonTypeEnum.PRINT);
|
||||||
} else {
|
// } else {
|
||||||
if (visaButtonTypeEnums.contains(VisaButtonTypeEnum.TO_APPROVE)) {
|
// if (visaButtonTypeEnums.contains(VisaButtonTypeEnum.TO_APPROVE)) {
|
||||||
visaButtonTypeEnums.remove(VisaButtonTypeEnum.TO_APPROVE);
|
// visaButtonTypeEnums.remove(VisaButtonTypeEnum.TO_APPROVE);
|
||||||
visaButtonTypeEnums.add(VisaButtonTypeEnum.AGAIN_TO_APPROVE);
|
// visaButtonTypeEnums.add(VisaButtonTypeEnum.AGAIN_TO_APPROVE);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (!workflowGateway.hasPrintTemplate(approvalId)) {
|
// if (!workflowGateway.hasPrintTemplate(approvalId)) {
|
||||||
visaButtonTypeEnums.remove(VisaButtonTypeEnum.PRINT);
|
// visaButtonTypeEnums.remove(VisaButtonTypeEnum.PRINT);
|
||||||
}
|
// }
|
||||||
//没有点击[发起洽商群聊],则不展示[查看洽商记录]按钮
|
//没有点击[发起洽商群聊],则不展示[查看洽商记录]按钮
|
||||||
if (!changeRecordLogService.hasLogType(visaId, VisaLogTypeEnum.CHAT_GROUP)) {
|
if (!changeRecordLogService.hasLogType(btnConditionDto.getVisaId(), VisaLogTypeEnum.CHAT_GROUP)) {
|
||||||
visaButtonTypeEnums.remove(VisaButtonTypeEnum.CHAT_GROUP_RECORD);
|
visaButtonTypeEnums.remove(VisaButtonTypeEnum.CHAT_GROUP_RECORD);
|
||||||
}
|
}
|
||||||
|
//
|
||||||
if (Objects.nonNull(stampStatus)) {
|
// if (Objects.nonNull(stampStatus)) {
|
||||||
if (bizTypes.contains(VisaConfirmBizTypeEnum.CREATE)) {
|
// if (bizTypes.contains(VisaConfirmBizTypeEnum.CREATE)) {
|
||||||
switch (stampStatus) {
|
// switch (stampStatus) {
|
||||||
case UNPRINTED:
|
// case UNPRINTED:
|
||||||
if (StringUtils.hasText(approvalId) && workflowGateway.hasPrintTemplate(approvalId)) {
|
// if (StringUtils.hasText(approvalId) && workflowGateway.hasPrintTemplate(approvalId)) {
|
||||||
visaButtonTypeEnums.add(VisaButtonTypeEnum.REQUEST_STAMP);
|
// visaButtonTypeEnums.add(VisaButtonTypeEnum.REQUEST_STAMP);
|
||||||
}
|
// }
|
||||||
ChangeRecord visa = changeRecordService.getById(visaId);
|
// ChangeRecord visa = changeRecordService.getById(visaId);
|
||||||
if (visa.getAppliedStamp()) {
|
// if (visa.getAppliedStamp()) {
|
||||||
visaButtonTypeEnums.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
// visaButtonTypeEnums.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
||||||
}
|
// }
|
||||||
break;
|
// break;
|
||||||
case WITH_PRINT:
|
// case WITH_PRINT:
|
||||||
visaButtonTypeEnums.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
// visaButtonTypeEnums.add(VisaButtonTypeEnum.STAMP_PROGRESS);
|
||||||
break;
|
// break;
|
||||||
default:
|
// default:
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (Objects.equals(stampStatus, USED_PRINTS)) {
|
// if (Objects.equals(stampStatus, USED_PRINTS)) {
|
||||||
visaButtonTypeEnums.add(VisaButtonTypeEnum.STAMP_FILE);
|
// visaButtonTypeEnums.add(VisaButtonTypeEnum.STAMP_FILE);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (CollectionUtils.isEmpty(visaButtonTypeEnums)) {
|
if (CollectionUtils.isEmpty(visaButtonTypeEnums)) {
|
||||||
return Lists.newArrayList();
|
return Lists.newArrayList();
|
||||||
|
|||||||
@ -10,12 +10,14 @@ import cn.axzo.nanopart.visa.server.dto.VisaLogDto;
|
|||||||
import cn.axzo.nanopart.visa.server.dto.VisaLogParam;
|
import cn.axzo.nanopart.visa.server.dto.VisaLogParam;
|
||||||
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordLogDao;
|
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordLogDao;
|
||||||
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
||||||
|
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
import cn.axzo.nanopart.visa.server.utils.Constants;
|
import cn.axzo.nanopart.visa.server.utils.Constants;
|
||||||
import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
||||||
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
||||||
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -32,6 +34,8 @@ import java.util.Objects;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static cn.axzo.nanopart.visa.server.utils.Constants.CHANGE_STATUS_FILE_ORDER_BY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xudawei
|
* @author xudawei
|
||||||
* @date 2025/01/15
|
* @date 2025/01/15
|
||||||
@ -39,7 +43,7 @@ import java.util.stream.Collectors;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao, ChangeRecordLog> implements ChangeRecordLogService {
|
public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao, ChangeRecordLog> implements ChangeRecordLogService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway;
|
private VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway;
|
||||||
@ -47,6 +51,9 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
@Resource
|
@Resource
|
||||||
private ChangeRecordService changeRecordService;
|
private ChangeRecordService changeRecordService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WorkflowGateway workflowGateway;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 增加操作日志
|
* 增加操作日志
|
||||||
*/
|
*/
|
||||||
@ -96,7 +103,7 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
.action(VisaLogTypeEnum.CHAT_GROUP.name())
|
.action(VisaLogTypeEnum.CHAT_GROUP.name())
|
||||||
.title(VisaLogTypeEnum.CHAT_GROUP.getTitle())
|
.title(VisaLogTypeEnum.CHAT_GROUP.getTitle())
|
||||||
.content(String.format(VisaLogTypeEnum.CHAT_GROUP.getContent(), userName))
|
.content(String.format(VisaLogTypeEnum.CHAT_GROUP.getContent(), userName))
|
||||||
.orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
.orderBy(CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
case EDIT_FORM:
|
case EDIT_FORM:
|
||||||
// 编辑表单
|
// 编辑表单
|
||||||
@ -114,7 +121,7 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.EDIT_AMOUNT.name())
|
.action(VisaLogTypeEnum.EDIT_AMOUNT.name())
|
||||||
.title(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getTitle(),userName ))
|
.title(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getTitle(), userName))
|
||||||
.content(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getContent()
|
.content(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getContent()
|
||||||
, NumberUtil.roundDown(param.getOldAmountChange(), 2).toPlainString()
|
, NumberUtil.roundDown(param.getOldAmountChange(), 2).toPlainString()
|
||||||
, NumberUtil.roundDown(param.getNewAmountChange(), 2).toPlainString()))
|
, NumberUtil.roundDown(param.getNewAmountChange(), 2).toPlainString()))
|
||||||
@ -137,76 +144,97 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.DELETE_UPLOAD_FILE.name())
|
.action(VisaLogTypeEnum.DELETE_UPLOAD_FILE.name())
|
||||||
.title(String.format(VisaLogTypeEnum.DELETE_UPLOAD_FILE.getTitle(),userName))
|
.title(String.format(VisaLogTypeEnum.DELETE_UPLOAD_FILE.getTitle(), userName))
|
||||||
.content(String.format(VisaLogTypeEnum.DELETE_UPLOAD_FILE.getContent(),userName, param.getDeleteAttach().size(), this.buildAttach(param.getDeleteAttach())))
|
.content(String.format(VisaLogTypeEnum.DELETE_UPLOAD_FILE.getContent(), userName, param.getDeleteAttach().size(), this.buildAttach(param.getDeleteAttach())))
|
||||||
.orderBy(Constants.DELETE_UPLOAD_FILE_ORDER_BY)
|
.orderBy(Constants.DELETE_UPLOAD_FILE_ORDER_BY)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TO_EXECUTE:
|
// case TO_EXECUTE:
|
||||||
// 动作:执行
|
// // 动作:执行
|
||||||
// 状态流转:[决策中|审核不通过的待提报]-->[执行中]
|
// // 状态流转:[决策中|审核不通过的待提报]-->[执行中]
|
||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
// userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
|
//
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
// logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.TO_EXECUTE.name())
|
// .action(VisaLogTypeEnum.TO_EXECUTE.name())
|
||||||
.title(VisaLogTypeEnum.TO_EXECUTE.getTitle())
|
// .title(VisaLogTypeEnum.TO_EXECUTE.getTitle())
|
||||||
.content(String.format(VisaLogTypeEnum.TO_EXECUTE.getContent(), userName))
|
// .content(String.format(VisaLogTypeEnum.TO_EXECUTE.getContent(), userName))
|
||||||
.orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
// .orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
break;
|
// break;
|
||||||
case TO_APPRROVE:
|
case TO_APPRROVE:
|
||||||
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
if (Objects.isNull(param.getVisaType())) {
|
||||||
|
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
||||||
|
param.setVisaType(changeRecord.getType());
|
||||||
|
}
|
||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
|
BpmnProcessDefinitionVO processDefinition = workflowGateway.getActiveProcessDefinitionByKey(param.getVisaType().getProcessDefinitionKey());
|
||||||
// 动作:发起审批
|
// 动作:发起审批
|
||||||
// 状态流转:[待提报|审批不通过的待提报|决策中|审批不通过的决策中|执行中]-->[审批中]
|
// 状态流转:[待提报|审批不通过的待提报|决策中|审批不通过的决策中|执行中]-->[审批中]
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.TO_APPRROVE.name())
|
.action(VisaLogTypeEnum.TO_APPRROVE.name())
|
||||||
.title(String.format(VisaLogTypeEnum.TO_APPRROVE.getTitle(), changeRecord.getType().getDesc()))
|
.title(String.format(VisaLogTypeEnum.TO_APPRROVE.getTitle(), processDefinition.getName()))
|
||||||
.content(String.format(VisaLogTypeEnum.TO_APPRROVE.getContent(), userName, changeRecord.getType().getDesc()))
|
.content(String.format(VisaLogTypeEnum.TO_APPRROVE.getContent(), userName, processDefinition.getName()))
|
||||||
.orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
.orderBy(CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
case APPROVED_AGRESS:
|
case APPROVED_AGRESS:
|
||||||
|
if (Objects.isNull(param.getVisaType())) {
|
||||||
|
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
||||||
|
param.setVisaType(changeRecord.getType());
|
||||||
|
}
|
||||||
// 动作:审批流:某审批人审批通过
|
// 动作:审批流:某审批人审批通过
|
||||||
// 状态流转:仍然是审批中 [审批中] -> [审批中]
|
// 状态流转:仍然是审批中 [审批中] -> [审批中]
|
||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
|
processDefinition = workflowGateway.getActiveProcessDefinitionByKey(param.getVisaType().getProcessDefinitionKey());
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.APPROVED_AGRESS.name())
|
.action(VisaLogTypeEnum.APPROVED_AGRESS.name())
|
||||||
.title(String.format(VisaLogTypeEnum.APPROVED_AGRESS.getTitle(), userName))
|
.title(String.format(VisaLogTypeEnum.APPROVED_AGRESS.getTitle(), userName))
|
||||||
.content(String.format(VisaLogTypeEnum.APPROVED_AGRESS.getContent(), userName))
|
.content(String.format(VisaLogTypeEnum.APPROVED_AGRESS.getContent(), processDefinition.getName(), userName))
|
||||||
.orderBy(Constants.ONE_APPROVED_ORDER_BY).build());
|
.orderBy(Constants.ONE_APPROVED_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
case REVERT_APPROVE:
|
case REVERT_APPROVE:
|
||||||
|
if (Objects.isNull(param.getVisaType())) {
|
||||||
|
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
||||||
|
param.setVisaType(changeRecord.getType());
|
||||||
|
}
|
||||||
// 动作:审批流:撤回审批
|
// 动作:审批流:撤回审批
|
||||||
// 状态流转:[审批中] -> [审批到待提报|审批到决策中]
|
// 状态流转:[审批中] -> [审批到待提报|审批到决策中] 仅限第一个立项审批
|
||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
|
processDefinition = workflowGateway.getActiveProcessDefinitionByKey(param.getVisaType().getProcessDefinitionKey());
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.REVERT_APPROVE.name())
|
.action(VisaLogTypeEnum.REVERT_APPROVE.name())
|
||||||
.title(VisaLogTypeEnum.REVERT_APPROVE.getTitle())
|
.title(String.format(VisaLogTypeEnum.REVERT_APPROVE.getTitle(), processDefinition.getName()))
|
||||||
.content(String.format(VisaLogTypeEnum.REVERT_APPROVE.getContent(), userName))
|
.content(String.format(VisaLogTypeEnum.REVERT_APPROVE.getContent(), userName, processDefinition.getName()))
|
||||||
.orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
.orderBy(CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
case REJECT_APPROVE:
|
case REJECT_APPROVE:
|
||||||
|
if (Objects.isNull(param.getVisaType())) {
|
||||||
|
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
||||||
|
param.setVisaType(changeRecord.getType());
|
||||||
|
}
|
||||||
// 动作:审批流:撤回审批
|
// 动作:审批流:撤回审批
|
||||||
// 状态流转:[审批中] -> [审批到待提报|审批到决策中]
|
// 状态流转:[审批中] -> [审批到待提报|审批到决策中] 仅限第一个立项审批
|
||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
|
processDefinition = workflowGateway.getActiveProcessDefinitionByKey(param.getVisaType().getProcessDefinitionKey());
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.REJECT_APPROVE.name())
|
.action(VisaLogTypeEnum.REJECT_APPROVE.name())
|
||||||
.title(String.format(VisaLogTypeEnum.REJECT_APPROVE.getTitle(), userName))
|
.title(String.format(VisaLogTypeEnum.REJECT_APPROVE.getTitle(), userName, processDefinition.getName()))
|
||||||
.content(String.format(VisaLogTypeEnum.REJECT_APPROVE.getContent(), userName, param.getReason()))
|
.content(String.format(VisaLogTypeEnum.REJECT_APPROVE.getContent(), userName, param.getReason()))
|
||||||
.orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
.orderBy(CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
case TRANSMIT_APPROVE:
|
case TRANSMIT_APPROVE:
|
||||||
|
if (Objects.isNull(param.getVisaType())) {
|
||||||
|
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
||||||
|
param.setVisaType(changeRecord.getType());
|
||||||
|
}
|
||||||
// 动作:审批流操作:转交
|
// 动作:审批流操作:转交
|
||||||
// 状态流转:[审批中] -> [审批到待提报|审批到决策中]
|
// 状态流转:[审批中] -> [审批到待提报|审批到决策中] 仅限第一个立项审批
|
||||||
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
userName = this.buildUserName(param.getPersonId(), param.getOuId(), param.getWorkspaceId());
|
||||||
|
processDefinition = workflowGateway.getActiveProcessDefinitionByKey(param.getVisaType().getProcessDefinitionKey());
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.TRANSMIT_APPROVE.name())
|
.action(VisaLogTypeEnum.TRANSMIT_APPROVE.name())
|
||||||
.title(VisaLogTypeEnum.TRANSMIT_APPROVE.getTitle())
|
.title(VisaLogTypeEnum.TRANSMIT_APPROVE.getTitle())
|
||||||
.content(String.format(VisaLogTypeEnum.TRANSMIT_APPROVE.getContent(), userName, param.getTransmitTo(),param.getReason()))
|
.content(String.format(VisaLogTypeEnum.TRANSMIT_APPROVE.getContent(), userName, processDefinition.getName(), param.getTransmitTo(), param.getReason()))
|
||||||
.orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
.orderBy(CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
case FORBIDED:
|
case FORBIDED:
|
||||||
// 动作:作废
|
// 动作:作废
|
||||||
@ -216,18 +244,36 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
.action(VisaLogTypeEnum.FORBIDED.name())
|
.action(VisaLogTypeEnum.FORBIDED.name())
|
||||||
.title(VisaLogTypeEnum.FORBIDED.getTitle())
|
.title(VisaLogTypeEnum.FORBIDED.getTitle())
|
||||||
.content(String.format(VisaLogTypeEnum.FORBIDED.getContent(), userName))
|
.content(String.format(VisaLogTypeEnum.FORBIDED.getContent(), userName))
|
||||||
.orderBy(Constants.CHANGE_STATUS_FILE_ORDER_BY).build());
|
.orderBy(CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
case APPROVE_COMPLETED:
|
case APPROVE_COMPLETED:
|
||||||
changeRecord = this.changeRecordService.getById(visaId);
|
if (Objects.isNull(param.getVisaType())) {
|
||||||
|
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
||||||
|
param.setVisaType(changeRecord.getType());
|
||||||
|
}
|
||||||
|
processDefinition = workflowGateway.getActiveProcessDefinitionByKey(param.getVisaType().getProcessDefinitionKey());
|
||||||
// 动作:整个审批通过
|
// 动作:整个审批通过
|
||||||
// 状态流转:[审批中]-->[已完成]
|
// 状态流转:[审批中]-->[已完成]
|
||||||
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
.action(VisaLogTypeEnum.APPROVE_COMPLETED.name())
|
.action(VisaLogTypeEnum.APPROVE_COMPLETED.name())
|
||||||
.title(String.format(VisaLogTypeEnum.APPROVE_COMPLETED.getTitle(), changeRecord.getType().getDesc()))
|
.title(String.format(VisaLogTypeEnum.APPROVE_COMPLETED.getTitle(), processDefinition.getName()))
|
||||||
.content(String.format(VisaLogTypeEnum.APPROVE_COMPLETED.getContent(), changeRecord.getType().getDesc()))
|
.content(String.format(VisaLogTypeEnum.APPROVE_COMPLETED.getContent(), processDefinition.getName()))
|
||||||
.orderBy(Constants.APPROVE_COMPLETED_ORDER_BY).build());
|
.orderBy(Constants.APPROVE_COMPLETED_ORDER_BY).build());
|
||||||
break;
|
break;
|
||||||
|
case APPROVE_ABORT:
|
||||||
|
if (Objects.isNull(param.getVisaType())) {
|
||||||
|
ChangeRecord changeRecord = this.changeRecordService.getById(visaId);
|
||||||
|
param.setVisaType(changeRecord.getType());
|
||||||
|
}
|
||||||
|
// 动作:审批过程异常,被流程引擎中止
|
||||||
|
// 状态流转:[审批中]->[审批到待提报|审批到决策中] 仅限第一个立项审批
|
||||||
|
processDefinition = workflowGateway.getActiveProcessDefinitionByKey(param.getVisaType().getProcessDefinitionKey());
|
||||||
|
logList.add(ChangeRecordLog.builder().visaId(visaId)
|
||||||
|
.action(VisaLogTypeEnum.APPROVE_ABORT.name())
|
||||||
|
.title(String.format(VisaLogTypeEnum.APPROVE_ABORT.getTitle(), processDefinition.getName()))
|
||||||
|
.content(String.format(VisaLogTypeEnum.APPROVE_ABORT.getContent(), processDefinition.getName()))
|
||||||
|
.orderBy(CHANGE_STATUS_FILE_ORDER_BY).build());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new ServiceException("变签日志类型不匹配");
|
throw new ServiceException("变签日志类型不匹配");
|
||||||
}
|
}
|
||||||
@ -267,6 +313,7 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过变签Id获取日志
|
* 通过变签Id获取日志
|
||||||
|
*
|
||||||
* @param visaId 变签Id
|
* @param visaId 变签Id
|
||||||
*/
|
*/
|
||||||
public List<FetchVisaLogByVisaIdResponse> fetchVisaLogByVisaId(Long visaId) {
|
public List<FetchVisaLogByVisaIdResponse> fetchVisaLogByVisaId(Long visaId) {
|
||||||
@ -303,7 +350,8 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过变签Id获取日志
|
* 通过变签Id获取日志
|
||||||
* @param visaId 变签Id
|
*
|
||||||
|
* @param visaId 变签Id
|
||||||
* @param logType 类型
|
* @param logType 类型
|
||||||
*/
|
*/
|
||||||
public List<ChangeRecordLog> listByVisaIdType(Long visaId, VisaLogTypeEnum logType) {
|
public List<ChangeRecordLog> listByVisaIdType(Long visaId, VisaLogTypeEnum logType) {
|
||||||
@ -334,7 +382,8 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否有日志类型
|
* 是否有日志类型
|
||||||
* @param visaId 变更签证Id
|
*
|
||||||
|
* @param visaId 变更签证Id
|
||||||
* @param logType 类型
|
* @param logType 类型
|
||||||
* @return true:有;false:没有
|
* @return true:有;false:没有
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import cn.axzo.nanopart.ess.api.request.GetSealsRequest;
|
|||||||
import cn.axzo.nanopart.ess.api.response.CreateContractByFileResponse;
|
import cn.axzo.nanopart.ess.api.response.CreateContractByFileResponse;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
||||||
@ -56,6 +57,7 @@ import cn.axzo.nanopart.visa.server.rpc.WorkspaceGateway;
|
|||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
||||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||||
|
import cn.axzo.nanopart.visa.server.service.OperateLogService;
|
||||||
import cn.axzo.nanopart.visa.server.service.VisaHelper;
|
import cn.axzo.nanopart.visa.server.service.VisaHelper;
|
||||||
import cn.axzo.nanopart.visa.server.utils.Constants;
|
import cn.axzo.nanopart.visa.server.utils.Constants;
|
||||||
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
|
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
|
||||||
@ -65,6 +67,7 @@ import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCre
|
|||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
|
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
|
||||||
import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO;
|
import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO;
|
||||||
|
import cn.axzo.workflow.common.model.response.print.PrintModelDTO;
|
||||||
import cn.hutool.core.lang.UUID;
|
import cn.hutool.core.lang.UUID;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
@ -118,8 +121,11 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_STAMP
|
|||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_STAMP_RECIPIENT;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_STAMP_RECIPIENT;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_STAMP_TYPE;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_STAMP_TYPE;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.ESS_RECIPIENT_ID_MAP;
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.ESS_RECIPIENT_ID_MAP;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.ESS_RECIPIENT_ID_MAP_PAY;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PRINT_PDF_FILE;
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PRINT_PDF_FILE;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PRINT_PDF_FILE_PAY;
|
||||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS;
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS_PAY;
|
||||||
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.REQUEST_STAMP;
|
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.REQUEST_STAMP;
|
||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
|
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
|
||||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
||||||
@ -143,6 +149,8 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
private final RefreshableConfiguration refreshableConfiguration;
|
private final RefreshableConfiguration refreshableConfiguration;
|
||||||
private final VisaCooperateShipGateway visaCooperateShipGateway;
|
private final VisaCooperateShipGateway visaCooperateShipGateway;
|
||||||
private final OrganizationalUnitGateway organizationalUnitGateway;
|
private final OrganizationalUnitGateway organizationalUnitGateway;
|
||||||
|
private final PrintModelService printModelService;
|
||||||
|
private final OperateLogService operateLogService;
|
||||||
@Resource
|
@Resource
|
||||||
@Lazy
|
@Lazy
|
||||||
private VisaHelper visaHelper;
|
private VisaHelper visaHelper;
|
||||||
@ -203,6 +211,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean deleteByVisaId(Long visaId, List<VisaRelationFieldEnum> relationTypes) {
|
public boolean deleteByVisaId(Long visaId, List<VisaRelationFieldEnum> relationTypes) {
|
||||||
if (NumberUtil.isNotPositiveNumber(visaId)) {
|
if (NumberUtil.isNotPositiveNumber(visaId)) {
|
||||||
return false;
|
return false;
|
||||||
@ -336,28 +345,10 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
.name(VisaButtonTypeEnum.TO_APPROVE.getDesc())
|
.name(VisaButtonTypeEnum.TO_APPROVE.getDesc())
|
||||||
.type(VisaButtonTypeEnum.TO_APPROVE.name())
|
.type(VisaButtonTypeEnum.TO_APPROVE.name())
|
||||||
.build());
|
.build());
|
||||||
buttons.add(ImGroupButton.builder()
|
//buttons.add(ImGroupButton.builder()
|
||||||
.name(VisaButtonTypeEnum.EXECUTE.getDesc())
|
// .name(VisaButtonTypeEnum.EXECUTE.getDesc())
|
||||||
.type(VisaButtonTypeEnum.EXECUTE.name())
|
// .type(VisaButtonTypeEnum.EXECUTE.name())
|
||||||
.build());
|
// .build());
|
||||||
} else {
|
|
||||||
buttons.add(ImGroupButton.builder()
|
|
||||||
.name(VisaButtonTypeEnum.FORBID.getDesc())
|
|
||||||
.type(VisaButtonTypeEnum.FORBID.name())
|
|
||||||
.build());
|
|
||||||
buttons.add(ImGroupButton.builder()
|
|
||||||
.name(VisaButtonTypeEnum.REDECISION.getDesc())
|
|
||||||
.type(VisaButtonTypeEnum.REDECISION.name())
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EXECUTING:
|
|
||||||
if (req.getGroupTotalPersonCount() - 1 == agreeCount) {
|
|
||||||
// 全部同意
|
|
||||||
buttons.add(ImGroupButton.builder()
|
|
||||||
.name(VisaButtonTypeEnum.TO_APPROVE.getDesc())
|
|
||||||
.type(VisaButtonTypeEnum.TO_APPROVE.name())
|
|
||||||
.build());
|
|
||||||
} else {
|
} else {
|
||||||
buttons.add(ImGroupButton.builder()
|
buttons.add(ImGroupButton.builder()
|
||||||
.name(VisaButtonTypeEnum.FORBID.getDesc())
|
.name(VisaButtonTypeEnum.FORBID.getDesc())
|
||||||
@ -369,11 +360,29 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
//case EXECUTING:
|
||||||
|
// if (req.getGroupTotalPersonCount() - 1 == agreeCount) {
|
||||||
|
// // 全部同意
|
||||||
|
// buttons.add(ImGroupButton.builder()
|
||||||
|
// .name(VisaButtonTypeEnum.TO_APPROVE.getDesc())
|
||||||
|
// .type(VisaButtonTypeEnum.TO_APPROVE.name())
|
||||||
|
// .build());
|
||||||
|
// } else {
|
||||||
|
// buttons.add(ImGroupButton.builder()
|
||||||
|
// .name(VisaButtonTypeEnum.FORBID.getDesc())
|
||||||
|
// .type(VisaButtonTypeEnum.FORBID.name())
|
||||||
|
// .build());
|
||||||
|
// buttons.add(ImGroupButton.builder()
|
||||||
|
// .name(VisaButtonTypeEnum.REDECISION.getDesc())
|
||||||
|
// .type(VisaButtonTypeEnum.REDECISION.name())
|
||||||
|
// .build());
|
||||||
|
// }
|
||||||
|
// break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (Objects.equals(VisaStatusEnum.DECIDING, record.getStatus())
|
} else if (Objects.equals(VisaStatusEnum.DECIDING, record.getStatus())
|
||||||
|| Objects.equals(VisaStatusEnum.EXECUTING, record.getStatus())) {
|
/*|| Objects.equals(VisaStatusEnum.EXECUTING, record.getStatus())*/) {
|
||||||
// IM 群中非群主的人
|
// IM 群中非群主的人
|
||||||
Optional<ChangeRecordRelation> any = imGroupParticipate.stream()
|
Optional<ChangeRecordRelation> any = imGroupParticipate.stream()
|
||||||
.filter(i -> Objects.equals(i.getCreateBy(), req.getPersonId()))
|
.filter(i -> Objects.equals(i.getCreateBy(), req.getPersonId()))
|
||||||
@ -490,10 +499,11 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
AssertUtil.isTrue(Objects.nonNull(req.getOperatorOuId()) && Objects.nonNull(req.getOperatorPersonId()), "操作人信息不能为空");
|
AssertUtil.isTrue(Objects.nonNull(req.getOperatorOuId()) && Objects.nonNull(req.getOperatorPersonId()), "操作人信息不能为空");
|
||||||
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
|
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
|
||||||
AssertUtil.notNull(visa, "变洽签单据不存在");
|
AssertUtil.notNull(visa, "变洽签单据不存在");
|
||||||
|
operateLogService.saveRequest("requestStamp", visa.getId(), req);
|
||||||
|
|
||||||
final boolean addLog = !StringUtils.hasText(visa.getContractId());
|
final boolean addLog = !StringUtils.hasText(visa.getContractId()) || !StringUtils.hasText(visa.getContractIdPay());
|
||||||
// 移除上一次申请
|
// 移除上一次申请
|
||||||
removeLastRequest(visa);
|
removeLastRequest(visa, req.getPhase());
|
||||||
// 或者指定单位下的签章人作为审批人
|
// 或者指定单位下的签章人作为审批人
|
||||||
Map<Long, List<EssSealPersonInfo>> stampUserMap = listOuAssignees(req);
|
Map<Long, List<EssSealPersonInfo>> stampUserMap = listOuAssignees(req);
|
||||||
// 创建电子签合同
|
// 创建电子签合同
|
||||||
@ -513,7 +523,10 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
List<ChangeRecordRelation> relations = req.getRequestStamps().stream().map(i -> {
|
List<ChangeRecordRelation> relations = req.getRequestStamps().stream().map(i -> {
|
||||||
ChangeRecordRelation stamp = new ChangeRecordRelation();
|
ChangeRecordRelation stamp = new ChangeRecordRelation();
|
||||||
stamp.setVisaId(req.getVisaId());
|
stamp.setVisaId(req.getVisaId());
|
||||||
stamp.setVarName(PROCESS_INSTANCE_OF_ESS.name());
|
if (req.getPhase() == VisaProcessPhase.PROJECT)
|
||||||
|
stamp.setVarName(PROCESS_INSTANCE_OF_ESS.name());
|
||||||
|
else
|
||||||
|
stamp.setVarName(PROCESS_INSTANCE_OF_ESS_PAY.name());
|
||||||
stamp.setVarExt(String.valueOf(i.getOuId()));
|
stamp.setVarExt(String.valueOf(i.getOuId()));
|
||||||
stamp.setVarType(VisaRelationVarTypeEnum.JSON.getType());
|
stamp.setVarType(VisaRelationVarTypeEnum.JSON.getType());
|
||||||
stamp.setContent(JSON.toJSONString(RelationEssContextDto.builder()
|
stamp.setContent(JSON.toJSONString(RelationEssContextDto.builder()
|
||||||
@ -530,21 +543,35 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
return stamp;
|
return stamp;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
if (Objects.nonNull(essRecipientIdMap) && CollectionUtils.isEmpty(findByVisaAndVarName(visa.getId(), ESS_RECIPIENT_ID_MAP.name()))) {
|
if (Objects.nonNull(essRecipientIdMap)) {
|
||||||
// 记录单位与其在合同中的签章位置
|
if (req.getPhase() == VisaProcessPhase.PROJECT && CollectionUtils.isEmpty(findByVisaAndVarName(visa.getId(), ESS_RECIPIENT_ID_MAP.name()))) {
|
||||||
ChangeRecordRelation recipientRelation = new ChangeRecordRelation();
|
// 记录单位与其在合同中的签章位置
|
||||||
recipientRelation.setVisaId(visa.getId());
|
ChangeRecordRelation recipientRelation = new ChangeRecordRelation();
|
||||||
recipientRelation.setVarName(ESS_RECIPIENT_ID_MAP.name());
|
recipientRelation.setVisaId(visa.getId());
|
||||||
recipientRelation.setVarType(VisaRelationVarTypeEnum.JSON.getType());
|
recipientRelation.setVarName(ESS_RECIPIENT_ID_MAP.name());
|
||||||
recipientRelation.setContent(JSON.toJSONString(essRecipientIdMap));
|
recipientRelation.setVarType(VisaRelationVarTypeEnum.JSON.getType());
|
||||||
relations.add(recipientRelation);
|
recipientRelation.setContent(JSON.toJSONString(essRecipientIdMap));
|
||||||
|
relations.add(recipientRelation);
|
||||||
|
}
|
||||||
|
if (req.getPhase() == VisaProcessPhase.PAYMENT && CollectionUtils.isEmpty(findByVisaAndVarName(visa.getId(), ESS_RECIPIENT_ID_MAP_PAY.name()))) {
|
||||||
|
// 记录单位与其在合同中的签章位置
|
||||||
|
ChangeRecordRelation recipientRelation = new ChangeRecordRelation();
|
||||||
|
recipientRelation.setVisaId(visa.getId());
|
||||||
|
recipientRelation.setVarName(ESS_RECIPIENT_ID_MAP_PAY.name());
|
||||||
|
recipientRelation.setVarType(VisaRelationVarTypeEnum.JSON.getType());
|
||||||
|
recipientRelation.setContent(JSON.toJSONString(essRecipientIdMap));
|
||||||
|
relations.add(recipientRelation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 打印生成的 PDF 文件信息
|
// 打印生成的 PDF 文件信息
|
||||||
if (Objects.nonNull(req.getPdfFile())) {
|
if (Objects.nonNull(req.getPdfFile())) {
|
||||||
ChangeRecordRelation relation = new ChangeRecordRelation();
|
ChangeRecordRelation relation = new ChangeRecordRelation();
|
||||||
relation.setVisaId(req.getVisaId());
|
relation.setVisaId(req.getVisaId());
|
||||||
relation.setVarName(PRINT_PDF_FILE.name());
|
VisaRelationFieldEnum filedType = req.getPhase() == VisaProcessPhase.PROJECT //
|
||||||
|
? PRINT_PDF_FILE
|
||||||
|
: PRINT_PDF_FILE_PAY;
|
||||||
|
relation.setVarName(filedType.name());
|
||||||
relation.setVarType(VisaRelationVarTypeEnum.JSON.getType());
|
relation.setVarType(VisaRelationVarTypeEnum.JSON.getType());
|
||||||
relation.setContent(JSON.toJSONString(req.getPdfFile()));
|
relation.setContent(JSON.toJSONString(req.getPdfFile()));
|
||||||
relation.setCreateBy(req.getOperatorPersonId());
|
relation.setCreateBy(req.getOperatorPersonId());
|
||||||
@ -556,15 +583,19 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
|
|
||||||
if (addLog) {
|
if (addLog) {
|
||||||
// 仅完全重新发起时,才记录日志
|
// 仅完全重新发起时,才记录日志
|
||||||
insertLog(UpdateVisaChangeReq.builder()
|
insertLog(visa, UpdateVisaChangeReq.builder()
|
||||||
.visaId(visa.getId())
|
.visaId(visa.getId())
|
||||||
|
.phase(req.getPhase())
|
||||||
.operatorId(req.getOperatorPersonId())
|
.operatorId(req.getOperatorPersonId())
|
||||||
.operatorName(req.getOperatorPersonName())
|
.operatorName(req.getOperatorPersonName())
|
||||||
.visaStampAction(REQUEST_STAMP)
|
.visaStampAction(REQUEST_STAMP)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
visa.setAppliedStamp(true);
|
if (req.getPhase() == VisaProcessPhase.PROJECT)
|
||||||
|
visa.setAppliedStamp(true);
|
||||||
|
else
|
||||||
|
visa.setAppliedStampPay(true);
|
||||||
changeRecordService.updateById(visa);
|
changeRecordService.updateById(visa);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -585,12 +616,13 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertLog(UpdateVisaChangeReq req) {
|
private void insertLog(ChangeRecord visa, UpdateVisaChangeReq req) {
|
||||||
|
PrintModelDTO printModel = printModelService.getPrintTemplateConfig(visa, req.getPhase());
|
||||||
if (Objects.equals(req.getVisaStampAction(), REQUEST_STAMP)) {
|
if (Objects.equals(req.getVisaStampAction(), REQUEST_STAMP)) {
|
||||||
changeRecordLogService.addLog(ChangeRecordLog.builder()
|
changeRecordLogService.addLog(ChangeRecordLog.builder()
|
||||||
.visaId(req.getVisaId())
|
.visaId(req.getVisaId())
|
||||||
.action(VisaLogTypeEnum.REQUEST_STAMP.name())
|
.action(VisaLogTypeEnum.REQUEST_STAMP.name())
|
||||||
.title(String.format(VisaLogTypeEnum.REQUEST_STAMP.getTitle(), req.getOperatorName()))
|
.title(String.format(VisaLogTypeEnum.REQUEST_STAMP.getTitle(), req.getOperatorName(), printModel.getPrintFileName()))
|
||||||
.content(String.format(VisaLogTypeEnum.REQUEST_STAMP.getContent(), req.getOperatorName()))
|
.content(String.format(VisaLogTypeEnum.REQUEST_STAMP.getContent(), req.getOperatorName()))
|
||||||
.orderBy(Constants.APPROVE_ORDER_BY)
|
.orderBy(Constants.APPROVE_ORDER_BY)
|
||||||
.build());
|
.build());
|
||||||
@ -625,11 +657,13 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
return stampUserMap;
|
return stampUserMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeLastRequest(ChangeRecord visa) {
|
private void removeLastRequest(ChangeRecord visa, VisaProcessPhase phase) {
|
||||||
if (StringUtils.hasText(visa.getContractId())) {
|
if (phase == VisaProcessPhase.PROJECT && !StringUtils.hasText(visa.getContractId())) {
|
||||||
return;
|
deleteByVisaId(visa.getId(), Lists.newArrayList(PRINT_PDF_FILE, PROCESS_INSTANCE_OF_ESS, ESS_RECIPIENT_ID_MAP));
|
||||||
|
}
|
||||||
|
if (phase == VisaProcessPhase.PAYMENT && !StringUtils.hasText(visa.getContractIdPay())) {
|
||||||
|
deleteByVisaId(visa.getId(), Lists.newArrayList(PRINT_PDF_FILE_PAY, PROCESS_INSTANCE_OF_ESS_PAY, ESS_RECIPIENT_ID_MAP_PAY));
|
||||||
}
|
}
|
||||||
deleteByVisaId(visa.getId(), Lists.newArrayList(PRINT_PDF_FILE, PROCESS_INSTANCE_OF_ESS, ESS_RECIPIENT_ID_MAP));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<Long, String> listCooperateShipTypes(VisaRequestStampReq req, ChangeRecord visa) {
|
private Map<Long, String> listCooperateShipTypes(VisaRequestStampReq req, ChangeRecord visa) {
|
||||||
@ -644,11 +678,16 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, String> createContract(VisaRequestStampReq req, ChangeRecord visa, Map<Long, List<EssSealPersonInfo>> stampUserMap) {
|
private Map<String, String> createContract(VisaRequestStampReq req, ChangeRecord visa, Map<Long, List<EssSealPersonInfo>> stampUserMap) {
|
||||||
if (StringUtils.hasText(visa.getContractId())) {
|
if (req.getPhase() == VisaProcessPhase.PROJECT && StringUtils.hasText(visa.getContractId())) {
|
||||||
List<ChangeRecordRelation> recipientIds = findByVisaAndVarName(visa.getId(), ESS_RECIPIENT_ID_MAP.name());
|
List<ChangeRecordRelation> recipientIds = findByVisaAndVarName(visa.getId(), ESS_RECIPIENT_ID_MAP.name());
|
||||||
AssertUtil.notEmpty(recipientIds, "未找到签章位置信息");
|
AssertUtil.notEmpty(recipientIds, "未找到签章位置信息");
|
||||||
return JSON.parseObject(recipientIds.get(0).getContent(), Map.class);
|
return JSON.parseObject(recipientIds.get(0).getContent(), Map.class);
|
||||||
}
|
}
|
||||||
|
if (req.getPhase() == VisaProcessPhase.PAYMENT && StringUtils.hasText(visa.getContractIdPay())) {
|
||||||
|
List<ChangeRecordRelation> recipientIds = findByVisaAndVarName(visa.getId(), ESS_RECIPIENT_ID_MAP_PAY.name());
|
||||||
|
AssertUtil.notEmpty(recipientIds, "未找到签章位置信息");
|
||||||
|
return JSON.parseObject(recipientIds.get(0).getContent(), Map.class);
|
||||||
|
}
|
||||||
CreateContractByFileRequest createContractRequest = new CreateContractByFileRequest();
|
CreateContractByFileRequest createContractRequest = new CreateContractByFileRequest();
|
||||||
CreateContractByFile pdfFile = new CreateContractByFile();
|
CreateContractByFile pdfFile = new CreateContractByFile();
|
||||||
pdfFile.setContractName(visa.getTopic());
|
pdfFile.setContractName(visa.getTopic());
|
||||||
@ -665,7 +704,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
|
|
||||||
createContractRequest.setByFile(pdfFile);
|
createContractRequest.setByFile(pdfFile);
|
||||||
createContractRequest.setAppCode(MSG_CENTER_APP_CODE);
|
createContractRequest.setAppCode(MSG_CENTER_APP_CODE);
|
||||||
createContractRequest.setBizCode(String.valueOf(visa.getId()));
|
createContractRequest.setBizCode(String.format("%s:%s", visa.getId(), req.getPhase()));
|
||||||
|
|
||||||
List<EssSealPersonInfo> mergedList = stampUserMap.values().stream()
|
List<EssSealPersonInfo> mergedList = stampUserMap.values().stream()
|
||||||
.flatMap(Collection::stream)
|
.flatMap(Collection::stream)
|
||||||
@ -679,8 +718,13 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
|
|
||||||
CreateContractByFileResponse contract = essGateway.createContract(createContractRequest);
|
CreateContractByFileResponse contract = essGateway.createContract(createContractRequest);
|
||||||
AssertUtil.notNull(contract, "腾讯电子签合同创建失败");
|
AssertUtil.notNull(contract, "腾讯电子签合同创建失败");
|
||||||
visa.setContractId(contract.getEssContractId());
|
if (req.getPhase() == VisaProcessPhase.PROJECT) {
|
||||||
visa.setStampStatus(VisaStampStatusEnum.WITH_PRINT);
|
visa.setContractId(contract.getEssContractId());
|
||||||
|
visa.setStampStatus(VisaStampStatusEnum.WITH_PRINT);
|
||||||
|
} else {
|
||||||
|
visa.setContractIdPay(contract.getEssContractId());
|
||||||
|
visa.setStampStatusPay(VisaStampStatusEnum.WITH_PRINT);
|
||||||
|
}
|
||||||
changeRecordService.updateById(visa);
|
changeRecordService.updateById(visa);
|
||||||
|
|
||||||
Map<String, String> essRecipientIdMap = new HashMap<>();
|
Map<String, String> essRecipientIdMap = new HashMap<>();
|
||||||
@ -740,7 +784,8 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
AssertUtil.notNull(createReq, "未找到变洽签单据");
|
AssertUtil.notNull(createReq, "未找到变洽签单据");
|
||||||
|
|
||||||
if (Objects.isNull(req.getPdfFile())) {
|
if (Objects.isNull(req.getPdfFile())) {
|
||||||
List<ChangeRecordRelation> pdfs = findByVisaAndVarName(visa.getId(), PRINT_PDF_FILE.name());
|
VisaRelationFieldEnum type = req.getPhase() == VisaProcessPhase.PROJECT ? PRINT_PDF_FILE : PRINT_PDF_FILE_PAY;
|
||||||
|
List<ChangeRecordRelation> pdfs = findByVisaAndVarName(visa.getId(), type.name());
|
||||||
AssertUtil.notEmpty(pdfs, "数据异常,未找到变洽签 PDF 文件");
|
AssertUtil.notEmpty(pdfs, "数据异常,未找到变洽签 PDF 文件");
|
||||||
req.setPdfFile(JSON.parseObject(pdfs.get(0).getContent(), UploadFieldDTO.class));
|
req.setPdfFile(JSON.parseObject(pdfs.get(0).getContent(), UploadFieldDTO.class));
|
||||||
}
|
}
|
||||||
@ -754,7 +799,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
|||||||
WORKFLOW_VAR_STAMP_TYPE, model.getSealType().name(),
|
WORKFLOW_VAR_STAMP_TYPE, model.getSealType().name(),
|
||||||
WORKFLOW_PENDING_STAMP_TYPE_DESC, model.getSealType().getDescription(),
|
WORKFLOW_PENDING_STAMP_TYPE_DESC, model.getSealType().getDescription(),
|
||||||
WORKFLOW_VAR_STAMP_RECIPIENT, MapUtils.emptyIfNull(essRecipientIdMap).getOrDefault(String.valueOf(model.getOuId()), ""),
|
WORKFLOW_VAR_STAMP_RECIPIENT, MapUtils.emptyIfNull(essRecipientIdMap).getOrDefault(String.valueOf(model.getOuId()), ""),
|
||||||
WORKFLOW_VAR_STAMP_CONTRACT_ID, visa.getContractId(),
|
WORKFLOW_VAR_STAMP_CONTRACT_ID, req.getPhase() == VisaProcessPhase.PROJECT ? visa.getContractId() : visa.getContractIdPay(),
|
||||||
WORKFLOW_PENDING_PDF_FILE_URL, req.getPdfFile().getFileUrl(),
|
WORKFLOW_PENDING_PDF_FILE_URL, req.getPdfFile().getFileUrl(),
|
||||||
WORKFLOW_PENDING_INITIATOR_NAME, profile.getRealName(),
|
WORKFLOW_PENDING_INITIATOR_NAME, profile.getRealName(),
|
||||||
IM_GROUP_BIZ_INFO_VISA_TYPE, visa.getType(),
|
IM_GROUP_BIZ_INFO_VISA_TYPE, visa.getType(),
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package cn.axzo.nanopart.visa.server.service.impl;
|
package cn.axzo.nanopart.visa.server.service.impl;
|
||||||
|
|
||||||
import cn.axzo.apollo.api.req.QueryOrderToBasicReq;
|
import cn.axzo.apollo.api.req.QueryOrderToBasicReq;
|
||||||
|
import cn.axzo.apollo.api.res.ConstructionAreaDTO;
|
||||||
import cn.axzo.apollo.api.res.ConstructionAreaInfo;
|
import cn.axzo.apollo.api.res.ConstructionAreaInfo;
|
||||||
import cn.axzo.apollo.api.res.TaskOrderToBasicRes;
|
import cn.axzo.apollo.api.res.TaskOrderToBasicRes;
|
||||||
import cn.axzo.apollo.workspace.api.workspace.req.QueryProjectApiReq;
|
import cn.axzo.apollo.workspace.api.workspace.req.QueryProjectApiReq;
|
||||||
@ -28,7 +29,6 @@ import cn.axzo.im.center.api.vo.req.SendChatMessageRequest;
|
|||||||
import cn.axzo.im.center.api.vo.resp.GroupCreateResponse;
|
import cn.axzo.im.center.api.vo.resp.GroupCreateResponse;
|
||||||
import cn.axzo.im.center.common.enums.AppTypeEnum;
|
import cn.axzo.im.center.common.enums.AppTypeEnum;
|
||||||
import cn.axzo.im.center.common.enums.GroupType;
|
import cn.axzo.im.center.common.enums.GroupType;
|
||||||
import cn.axzo.log.platform.client.model.req.LogAddReq;
|
|
||||||
import cn.axzo.maokai.api.vo.request.CooperateShipQueryReq;
|
import cn.axzo.maokai.api.vo.request.CooperateShipQueryReq;
|
||||||
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
|
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
|
||||||
import cn.axzo.maokai.api.vo.response.CooperateShipResp;
|
import cn.axzo.maokai.api.vo.response.CooperateShipResp;
|
||||||
@ -37,13 +37,16 @@ import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO;
|
|||||||
import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum;
|
import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum;
|
||||||
import cn.axzo.msg.center.service.dto.PeerPerson;
|
import cn.axzo.msg.center.service.dto.PeerPerson;
|
||||||
import cn.axzo.msg.center.service.pending.request.CardSendRequest;
|
import cn.axzo.msg.center.service.pending.request.CardSendRequest;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaApprovalStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaChangeFieldEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaChangeFieldEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
import cn.axzo.nanopart.visa.api.request.BizActivityAssigneeDecisionReq;
|
import cn.axzo.nanopart.visa.api.request.BizActivityAssigneeDecisionReq;
|
||||||
@ -60,10 +63,12 @@ import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
|
|||||||
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
||||||
|
import cn.axzo.nanopart.visa.api.request.VisaPayApproveCreateReq;
|
||||||
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
import cn.axzo.nanopart.visa.api.request.VisaSearchReq;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeDiscussCreateResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
||||||
|
import cn.axzo.nanopart.visa.api.response.VisaChangeRelationOrdersResp;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||||
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
|
||||||
import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration;
|
import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration;
|
||||||
@ -102,10 +107,12 @@ import cn.axzo.nanopart.visa.server.utils.Constants;
|
|||||||
import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
||||||
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
|
||||||
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||||
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
|
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
|
import cn.axzo.workflow.common.model.response.print.PrintModelDTO;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
@ -150,10 +157,12 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_
|
|||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_INITIATOR_WORKSPACE_ID;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_INITIATOR_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_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.IM_GROUP_BIZ_INFO_VISA_TYPE;
|
||||||
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_VISA_TYPE_DESC;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.MSG_CENTER_APP_CODE;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.MSG_CENTER_APP_CODE;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_PENDING_INITIATOR_NAME;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_PENDING_INITIATOR_NAME;
|
||||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_PENDING_TOPIC;
|
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;
|
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_VISA_TYPE_KEY;
|
||||||
|
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.ALL_PROCESS_REJECTED;
|
||||||
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.AUTO_COMPLETE;
|
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.AUTO_COMPLETE;
|
||||||
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.CANCEL;
|
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.CANCEL;
|
||||||
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.COMPLETE;
|
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.COMPLETE;
|
||||||
@ -161,7 +170,10 @@ import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAct
|
|||||||
import static cn.axzo.nanopart.visa.server.config.BizResultCode.CHANGE_RECORD_NOT_FOUND;
|
import static cn.axzo.nanopart.visa.server.config.BizResultCode.CHANGE_RECORD_NOT_FOUND;
|
||||||
import static cn.axzo.nanopart.visa.server.utils.Constants.DATE_FORMAT;
|
import static cn.axzo.nanopart.visa.server.utils.Constants.DATE_FORMAT;
|
||||||
import static cn.axzo.nanopart.visa.server.utils.Constants.FORM_FIELD_BILL_NAME;
|
import static cn.axzo.nanopart.visa.server.utils.Constants.FORM_FIELD_BILL_NAME;
|
||||||
|
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.ABORTED;
|
||||||
|
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED;
|
||||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
||||||
|
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.REJECTED;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xudawei
|
* @author xudawei
|
||||||
@ -238,6 +250,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
private ApolloTaskOrderApiGateway taskOrderApiGateway;
|
private ApolloTaskOrderApiGateway taskOrderApiGateway;
|
||||||
@Resource
|
@Resource
|
||||||
private DrawingAnnotationApiGateway drawingAnnotationApiGateway;
|
private DrawingAnnotationApiGateway drawingAnnotationApiGateway;
|
||||||
|
@Resource
|
||||||
|
private PrintModelService printModelService;
|
||||||
|
@Resource
|
||||||
|
private DetailCardBuilder detailCardBuilder;
|
||||||
@Value("${permission.data.flag:true}")
|
@Value("${permission.data.flag:true}")
|
||||||
private boolean permissionDataFlag;
|
private boolean permissionDataFlag;
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -267,7 +283,9 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.newAmountChange(request.getNewAmountChange())
|
.newAmountChange(request.getNewAmountChange())
|
||||||
.oldAmountChange(request.getOldAmountChange())
|
.oldAmountChange(request.getOldAmountChange())
|
||||||
.uploadAttach(VisaLogParam.uploadAttachWithObject(request.getNewAttach(), request.getOldAttach()))
|
.uploadAttach(VisaLogParam.uploadAttachWithObject(request.getNewAttach(), request.getOldAttach()))
|
||||||
.deleteAttach(VisaLogParam.deleteAttachWithObject(request.getOldAttach(), request.getNewAttach())).build());
|
.deleteAttach(VisaLogParam.deleteAttachWithObject(request.getOldAttach(), request.getNewAttach()))
|
||||||
|
.visaType(request.getVisaType())
|
||||||
|
.build());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,15 +353,16 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
// 状态流转:[待提报|审核不通过的待提报]-->[决策中]
|
// 状态流转:[待提报|审核不通过的待提报]-->[决策中]
|
||||||
preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE);
|
preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE);
|
||||||
break;
|
break;
|
||||||
case EXECUTING:
|
// case EXECUTING:
|
||||||
// 动作:执行
|
// // 动作:执行
|
||||||
// 状态流转:[决策中|审核不通过的待提报]-->[执行中]
|
// // 状态流转:[决策中|审核不通过的待提报]-->[执行中]
|
||||||
preStatusList = Lists.newArrayList(VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE);
|
// preStatusList = Lists.newArrayList(VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE);
|
||||||
break;
|
// break;
|
||||||
case APPROVING:
|
case APPROVING:
|
||||||
// 动作:发起审批
|
// 动作:发起审批
|
||||||
// 状态流转:[待提报|审批不通过的待提报|决策中|审批不通过的决策中|执行中]-->[审批中]
|
// 状态流转:[待提报|审批不通过的待提报|决策中|审批不通过的决策中|执行中]-->[审批中]
|
||||||
preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE, VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE, VisaStatusEnum.EXECUTING);
|
// preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE, VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE, VisaStatusEnum.EXECUTING);
|
||||||
|
preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE, VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE);
|
||||||
break;
|
break;
|
||||||
case REPORT_FROM_APPROVE:
|
case REPORT_FROM_APPROVE:
|
||||||
// 动作:审批不通过(已驳回/已撤回/已中止)
|
// 动作:审批不通过(已驳回/已撤回/已中止)
|
||||||
@ -356,7 +375,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
case FORBIDED:
|
case FORBIDED:
|
||||||
// 动作:作废
|
// 动作:作废
|
||||||
// 状态流转:[待提报|审核不通过的待提报|决策中|审核不通过的决策中|执行中|审批中]-->[审核不通过的决策中]
|
// 状态流转:[待提报|审核不通过的待提报|决策中|审核不通过的决策中|执行中|审批中]-->[审核不通过的决策中]
|
||||||
preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE, VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE, VisaStatusEnum.EXECUTING, VisaStatusEnum.APPROVING);
|
// preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE, VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE, VisaStatusEnum.EXECUTING, VisaStatusEnum.APPROVING);
|
||||||
|
preStatusList = Lists.newArrayList(VisaStatusEnum.TO_REPORT, VisaStatusEnum.REPORT_FROM_APPROVE, VisaStatusEnum.DECIDING, VisaStatusEnum.DECIDING_FROM_APPROVE, VisaStatusEnum.APPROVING);
|
||||||
break;
|
break;
|
||||||
case COMPLETED:
|
case COMPLETED:
|
||||||
// 动作:整个审批通过
|
// 动作:整个审批通过
|
||||||
@ -405,6 +425,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
|
|
||||||
return VisaDetailByIdResponse.builder()
|
return VisaDetailByIdResponse.builder()
|
||||||
.visaId(visaId)
|
.visaId(visaId)
|
||||||
|
.cards(detailCardBuilder.build(visa))
|
||||||
.no(visa.getNo()) //单号
|
.no(visa.getNo()) //单号
|
||||||
.type(visa.getType()) //单据类型,DESIGN_CHANGE:设计变更,TECHNOLOGY_APPROVED:技术核定,PROJECT_VISA:工程签证
|
.type(visa.getType()) //单据类型,DESIGN_CHANGE:设计变更,TECHNOLOGY_APPROVED:技术核定,PROJECT_VISA:工程签证
|
||||||
.reason(visa.getReason()) //发生原因
|
.reason(visa.getReason()) //发生原因
|
||||||
@ -439,11 +460,17 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.statusDesc(visa.getStatus().getDesc())
|
.statusDesc(visa.getStatus().getDesc())
|
||||||
.attach(this.buildAttachUploadFile(visaId)) // 附件
|
.attach(this.buildAttachUploadFile(visaId)) // 附件
|
||||||
.imGroupId(visa.getImGroupId()) // 群组ID
|
.imGroupId(visa.getImGroupId()) // 群组ID
|
||||||
.approvalId(visa.getApprovalId()) //最终审批ID
|
.approvalId(visa.getApprovalId()) //立项审批ID
|
||||||
.approvalStatus(visa.getApprovalStatus()) //最终审批状态
|
.approvalIdPay(visa.getApprovalIdPay()) //立项审批ID
|
||||||
|
.approvalStatus(visa.getApprovalStatus()) //立项审批状态
|
||||||
|
.approvalStatusPay(visa.getApprovalStatusPay()) // 价款审批状态
|
||||||
.topic(visa.getTopic()) // 主题
|
.topic(visa.getTopic()) // 主题
|
||||||
.contractId(visa.getContractId())
|
.contractId(visa.getContractId())
|
||||||
|
.contractIdPay(visa.getContractIdPay())
|
||||||
.stampStatus(visa.getStampStatus())
|
.stampStatus(visa.getStampStatus())
|
||||||
|
.stampStatusPay(visa.getStampStatusPay())
|
||||||
|
.contractName(visa.getContractName())
|
||||||
|
.contractNo(visa.getContractNo())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -786,7 +813,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
AssertUtil.isTrue(StringUtils.hasText(processInstanceId), "创建审批异常");
|
AssertUtil.isTrue(StringUtils.hasText(processInstanceId), "创建审批异常");
|
||||||
|
|
||||||
// 更新主表中的审批字段,记录变量表的审批的信息
|
// 更新主表中的审批字段,记录变量表的审批的信息
|
||||||
updateApprovalInfo(visaId, processInstanceId, req.getOperatorPersonId());
|
updateApprovalInfo(visaId, processInstanceId, req.getOperatorPersonId(), changeRecord.getType());
|
||||||
|
|
||||||
this.changeStatusWhenApproveCreate(visaId, req, oldChangeRecord, visaUploadFiles);
|
this.changeStatusWhenApproveCreate(visaId, req, oldChangeRecord, visaUploadFiles);
|
||||||
|
|
||||||
@ -866,18 +893,27 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
* @param processInstanceId
|
* @param processInstanceId
|
||||||
* @param personId
|
* @param personId
|
||||||
*/
|
*/
|
||||||
private void updateApprovalInfo(Long visaId, String processInstanceId, Long personId) {
|
private void updateApprovalInfo(Long visaId, String processInstanceId, Long personId, VisaTypeEnum visaType) {
|
||||||
// 主表更新审批信息
|
|
||||||
ChangeRecord changeRecord = new ChangeRecord();
|
ChangeRecord changeRecord = new ChangeRecord();
|
||||||
changeRecord.setId(visaId);
|
changeRecord.setId(visaId);
|
||||||
changeRecord.setApprovalId(processInstanceId);
|
if (Objects.equals(VisaTypeEnum.PAY_CONFIRM, visaType)) {
|
||||||
changeRecord.setApprovalStatus(PROCESSING.getStatus());
|
changeRecord.setApprovalIdPay(processInstanceId);
|
||||||
|
changeRecord.setApprovalStatusPay(PROCESSING.getStatus());
|
||||||
|
} else {
|
||||||
|
// 原三种单据类型主表更新审批信息
|
||||||
|
changeRecord.setApprovalId(processInstanceId);
|
||||||
|
changeRecord.setApprovalStatus(PROCESSING.getStatus());
|
||||||
|
}
|
||||||
updateById(changeRecord);
|
updateById(changeRecord);
|
||||||
|
|
||||||
// 设置关联表的审批信息
|
// 设置关联表的审批信息
|
||||||
ChangeRecordRelation processRelation = new ChangeRecordRelation();
|
ChangeRecordRelation processRelation = new ChangeRecordRelation();
|
||||||
processRelation.setVisaId(visaId);
|
processRelation.setVisaId(visaId);
|
||||||
processRelation.setVarName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_VISA.name());
|
if (Objects.equals(VisaTypeEnum.PAY_CONFIRM, visaType)) {
|
||||||
|
processRelation.setVarName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_PAY.name());
|
||||||
|
} else {
|
||||||
|
processRelation.setVarName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_VISA.name());
|
||||||
|
}
|
||||||
processRelation.setVarType(VisaRelationVarTypeEnum.STRING.getType());
|
processRelation.setVarType(VisaRelationVarTypeEnum.STRING.getType());
|
||||||
processRelation.setContent(processInstanceId);
|
processRelation.setContent(processInstanceId);
|
||||||
processRelation.setContentExt(PROCESSING.getStatus());
|
processRelation.setContentExt(PROCESSING.getStatus());
|
||||||
@ -1054,7 +1090,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.relationProject(CollUtil.isNotEmpty(projectInfoMapById) ? projectInfoMapById.getOrDefault(item.getRelationProject(), "") : "")
|
.relationProject(CollUtil.isNotEmpty(projectInfoMapById) ? projectInfoMapById.getOrDefault(item.getRelationProject(), "") : "")
|
||||||
.happenTime(item.getHappenTime())
|
.happenTime(item.getHappenTime())
|
||||||
.amountChange(item.getAmountChange())
|
.amountChange(item.getAmountChange())
|
||||||
.approvalCompleteTime(Objects.equals(VisaStatusEnum.COMPLETED, item.getStatus()) ? item.getApprovalCompleteTime() : null)
|
.approvalCompleteTime(item.getApprovalCompleteTime())
|
||||||
|
.approvalCompleteTimePay(item.getApprovalCompleteTimePay())
|
||||||
.initiator(CollUtil.isNotEmpty(initiatorMap) ? initiatorMap.getOrDefault(item.getCreateBy(), OrgNodeUserBriefInfoResp.builder().build()).getRealName() : "")
|
.initiator(CollUtil.isNotEmpty(initiatorMap) ? initiatorMap.getOrDefault(item.getCreateBy(), OrgNodeUserBriefInfoResp.builder().build()).getRealName() : "")
|
||||||
.build())
|
.build())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
@ -1112,6 +1149,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(filter.getApproveCompletedDate())) {
|
if (CollectionUtils.isNotEmpty(filter.getApproveCompletedDate())) {
|
||||||
queryChainWrapper.between(ChangeRecord::getApprovalCompleteTime, filter.getApproveCompletedDate().get(0), filter.getApproveCompletedDate().get(1));
|
queryChainWrapper.between(ChangeRecord::getApprovalCompleteTime, filter.getApproveCompletedDate().get(0), filter.getApproveCompletedDate().get(1));
|
||||||
|
queryChainWrapper.eq(ChangeRecord::getApprovalStatus, BpmnProcessInstanceResultEnum.APPROVED.getStatus());
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isNotEmpty(filter.getApprovalCompleteTimePay())) {
|
||||||
|
queryChainWrapper.between(ChangeRecord::getApprovalCompleteTimePay, filter.getApprovalCompleteTimePay().get(0), filter.getApprovalCompleteTimePay().get(1));
|
||||||
queryChainWrapper.eq(ChangeRecord::getStatus, VisaStatusEnum.COMPLETED);
|
queryChainWrapper.eq(ChangeRecord::getStatus, VisaStatusEnum.COMPLETED);
|
||||||
}
|
}
|
||||||
if (Objects.nonNull(filter) && Objects.nonNull(filter.getCurrentPersonId()) && !Objects.equals(filter.getCurrentPersonId(), 0L)) {
|
if (Objects.nonNull(filter) && Objects.nonNull(filter.getCurrentPersonId()) && !Objects.equals(filter.getCurrentPersonId(), 0L)) {
|
||||||
@ -1248,6 +1289,9 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
// 操作列按钮
|
// 操作列按钮
|
||||||
Map<Long, Set<VisaButtonTypeEnum>> operateBtnMap = visaHelper.fetchBtnsByBizTypeAndStatus(records, req.getCurrentPersonId(), req.getCurrentOuId(), req.getCurrentWorkspaceId());
|
Map<Long, Set<VisaButtonTypeEnum>> operateBtnMap = visaHelper.fetchBtnsByBizTypeAndStatus(records, req.getCurrentPersonId(), req.getCurrentOuId(), req.getCurrentWorkspaceId());
|
||||||
|
|
||||||
|
// 发生区域
|
||||||
|
Map<Long, List<VisaDetailByIdResponse.RelationAreaDetail>> visaIdAreaMap = buildRelationArea(records);
|
||||||
|
|
||||||
/*组装信息*/
|
/*组装信息*/
|
||||||
return records.stream()
|
return records.stream()
|
||||||
.map(r -> {
|
.map(r -> {
|
||||||
@ -1260,11 +1304,66 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
resp.setIsRelated(req.getNeedRelatedBill() ? CollUtil.isNotEmpty(billIfRelated) && billIfRelated.get(String.valueOf(r.getId())) : null);
|
resp.setIsRelated(req.getNeedRelatedBill() ? CollUtil.isNotEmpty(billIfRelated) && billIfRelated.get(String.valueOf(r.getId())) : null);
|
||||||
// 操作列按钮
|
// 操作列按钮
|
||||||
resp.setOperateBtnSet(CollUtil.isNotEmpty(operateBtnMap) ? operateBtnMap.get(r.getId()) : null);
|
resp.setOperateBtnSet(CollUtil.isNotEmpty(operateBtnMap) ? operateBtnMap.get(r.getId()) : null);
|
||||||
|
// 审批流程状态
|
||||||
|
resp.setVisaApprovalStatus(buildApprovalStatus(r));
|
||||||
|
// 发生区域
|
||||||
|
resp.setRelationAreaList(visaIdAreaMap.getOrDefault(r.getId(), Collections.emptyList()));
|
||||||
return resp;
|
return resp;
|
||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<Long, List<VisaDetailByIdResponse.RelationAreaDetail>> buildRelationArea(List<ChangeRecord> records) {
|
||||||
|
Map<Long, List<VisaDetailByIdResponse.RelationAreaDetail>> visaIdAreaMap = records.stream()
|
||||||
|
.collect(Collectors.toMap(ChangeRecord::getId, r -> VisaDetailByIdResponse.RelationAreaDetail.buildAreaWithObject(r.getRelationArea())));
|
||||||
|
List<ConstructionAreaDTO> areaFullNameInfoByAreaId = apolloConstructionAreaGateway.getAreaFullNameInfoByAreaId(visaIdAreaMap.values().stream()
|
||||||
|
.flatMap(Collection::stream)
|
||||||
|
.map(VisaDetailByIdResponse.RelationAreaDetail::getAreaId)
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
if (CollectionUtils.isNotEmpty(areaFullNameInfoByAreaId)) {
|
||||||
|
Map<Long, String> areaIdAndNameMap = areaFullNameInfoByAreaId.stream()
|
||||||
|
.collect(Collectors.toMap(ConstructionAreaDTO::getId, ConstructionAreaDTO::getAreaFullName, (v1, v2) -> v1));
|
||||||
|
visaIdAreaMap.forEach((visaId, areas) -> {
|
||||||
|
if (CollUtil.isNotEmpty(areaIdAndNameMap) && CollUtil.isNotEmpty(areas)) {
|
||||||
|
areas.forEach(area -> {
|
||||||
|
area.setAreaName(areaIdAndNameMap.get(area.getAreaId()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return visaIdAreaMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 立项审批和价款审批状态联合决定审批状态
|
||||||
|
*
|
||||||
|
* @param r 变洽签单据
|
||||||
|
* @return 审批状态
|
||||||
|
*/
|
||||||
|
private VisaApprovalStatusEnum buildApprovalStatus(ChangeRecord r) {
|
||||||
|
if (Objects.equals(r.getApprovalStatus(), PROCESSING.getStatus())) {
|
||||||
|
return VisaApprovalStatusEnum.PROJECT_APPROVING;
|
||||||
|
}
|
||||||
|
if (Objects.equals(r.getApprovalStatus(), REJECTED.getStatus()) || Objects.equals(r.getApprovalStatus(), ABORTED.getStatus())) {
|
||||||
|
return VisaApprovalStatusEnum.PROJECT_APPROVAL_REJECTED;
|
||||||
|
}
|
||||||
|
if (Objects.equals(r.getApprovalStatus(), APPROVED.getStatus())) {
|
||||||
|
if (org.apache.commons.lang3.StringUtils.isNotBlank(r.getApprovalStatusPay())) {
|
||||||
|
if (Objects.equals(r.getApprovalStatusPay(), PROCESSING.getStatus())) {
|
||||||
|
return VisaApprovalStatusEnum.AMOUNT_APPROVING;
|
||||||
|
} else if (Objects.equals(r.getApprovalStatusPay(), REJECTED.getStatus())
|
||||||
|
|| Objects.equals(r.getApprovalStatusPay(), ABORTED.getStatus())) {
|
||||||
|
return VisaApprovalStatusEnum.AMOUNT_APPROVAL_REJECTED;
|
||||||
|
} else if (Objects.equals(r.getApprovalStatusPay(), APPROVED.getStatus())) {
|
||||||
|
return VisaApprovalStatusEnum.AMOUNT_APPROVAL_PASSED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return VisaApprovalStatusEnum.PROJECT_APPROVAL_PASSED;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private Map<Long, String> getProjectInfoMapById(List<Long> projectIdList) {
|
private Map<Long, String> getProjectInfoMapById(List<Long> projectIdList) {
|
||||||
QueryProjectApiReq req = QueryProjectApiReq.builder()
|
QueryProjectApiReq req = QueryProjectApiReq.builder()
|
||||||
.ids(projectIdList)
|
.ids(projectIdList)
|
||||||
@ -1322,6 +1421,16 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
req.getApproveCompletedDate().set(0, DateUtil.beginOfDay(start));
|
req.getApproveCompletedDate().set(0, DateUtil.beginOfDay(start));
|
||||||
req.getApproveCompletedDate().set(1, DateUtil.endOfDay(end));
|
req.getApproveCompletedDate().set(1, DateUtil.endOfDay(end));
|
||||||
}
|
}
|
||||||
|
if (CollectionUtils.isNotEmpty(req.getApprovalCompleteTimePay())) {
|
||||||
|
AssertUtil.isFalse(req.getApprovalCompleteTimePay().size() < 2, "请填写价款审批完成时间范围");
|
||||||
|
Date start = req.getApprovalCompleteTimePay().get(0);
|
||||||
|
Date end = req.getApprovalCompleteTimePay().get(1);
|
||||||
|
AssertUtil.isTrue(Objects.nonNull(start) && Objects.nonNull(end), "请填写价款审批完成时间范围");
|
||||||
|
AssertUtil.isTrue(start.compareTo(end) <= 0, "价款审批完成结束时间不能小于开始时间");
|
||||||
|
// 时间修正,补充时分秒数据,起始时间为00:00:00:00,结束时间为23:59:59
|
||||||
|
req.getApprovalCompleteTimePay().set(0, DateUtil.beginOfDay(start));
|
||||||
|
req.getApprovalCompleteTimePay().set(1, DateUtil.endOfDay(end));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static VisaConfirmDto buildCreateVisaConfirmDto(VisaChangeTempCreateReq req, ChangeRecord changeRecord) {
|
private static VisaConfirmDto buildCreateVisaConfirmDto(VisaChangeTempCreateReq req, ChangeRecord changeRecord) {
|
||||||
@ -1415,8 +1524,12 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
AssertUtil.isTrue(req.getAmountChange().compareTo(maxAmount) <= 0 && req.getAmountChange().compareTo(minAmount) >= 0, "金额变化超出范围");
|
AssertUtil.isTrue(req.getAmountChange().compareTo(maxAmount) <= 0 && req.getAmountChange().compareTo(minAmount) >= 0, "金额变化超出范围");
|
||||||
}
|
}
|
||||||
// 关联单据合法性
|
// 关联单据合法性
|
||||||
if (CollUtil.isNotEmpty(req.getRelationOrderMap())) {
|
validRelationOrder(req.getRelationOrderMap(), req.getRelationWorkspaceId(), req.getType(), req.getId());
|
||||||
req.getRelationOrderMap().forEach((key, value) -> {
|
}
|
||||||
|
|
||||||
|
private void validRelationOrder(Map<String, List<VisaChangeTempCreateReq.OrderSimpleModel>> relationOrderMap, Long workspaceId, VisaTypeEnum type, Long visaId) {
|
||||||
|
if (CollUtil.isNotEmpty(relationOrderMap)) {
|
||||||
|
relationOrderMap.forEach((key, value) -> {
|
||||||
if (CollectionUtils.isNotEmpty(value)) {
|
if (CollectionUtils.isNotEmpty(value)) {
|
||||||
// 关联单据数量限制
|
// 关联单据数量限制
|
||||||
AssertUtil.isTrue(value.size() <= refreshableConfiguration.getVerifyVisaLimit(),
|
AssertUtil.isTrue(value.size() <= refreshableConfiguration.getVerifyVisaLimit(),
|
||||||
@ -1430,13 +1543,13 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
if (CollUtil.isNotEmpty(taskNos)) {
|
if (CollUtil.isNotEmpty(taskNos)) {
|
||||||
// 存在性
|
// 存在性
|
||||||
QueryOrderToBasicReq queryOrderToBasicReq = new QueryOrderToBasicReq();
|
QueryOrderToBasicReq queryOrderToBasicReq = new QueryOrderToBasicReq();
|
||||||
queryOrderToBasicReq.setWorkspaceId(req.getRelationWorkspaceId());
|
queryOrderToBasicReq.setWorkspaceId(workspaceId);
|
||||||
queryOrderToBasicReq.setTaskNos(taskNos);
|
queryOrderToBasicReq.setTaskNos(taskNos);
|
||||||
queryOrderToBasicReq.setPage(1);
|
queryOrderToBasicReq.setPage(1);
|
||||||
queryOrderToBasicReq.setPageSize(taskNos.size());
|
queryOrderToBasicReq.setPageSize(taskNos.size());
|
||||||
List<TaskOrderToBasicRes> taskOrders = taskOrderApiGateway.pageOrderByForBasic(queryOrderToBasicReq).getData();
|
List<TaskOrderToBasicRes> taskOrders = taskOrderApiGateway.pageOrderByForBasic(queryOrderToBasicReq).getData();
|
||||||
AssertUtil.isTrue(CollectionUtils.isNotEmpty(taskOrders) && taskOrders.size() == taskNos.size(), "关联任务单单据不存在,请检查后重试");
|
AssertUtil.isTrue(CollectionUtils.isNotEmpty(taskOrders) && taskOrders.size() == taskNos.size(), "关联任务单单据不存在,请检查后重试");
|
||||||
validTaskBillIfRelated(taskNos, req.getType());
|
validTaskBillIfRelated(taskNos, type, visaId);
|
||||||
}
|
}
|
||||||
} else if (Objects.equals(VisaBillTypeEnum.RECTIFY.name(), key)) {
|
} else if (Objects.equals(VisaBillTypeEnum.RECTIFY.name(), key)) {
|
||||||
/*整改单*/
|
/*整改单*/
|
||||||
@ -1451,11 +1564,11 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.build();
|
.build();
|
||||||
List<RectifyOrderResp> rectifyOrders = rectifyApiGateway.listRectifyOrders(rectifyOrderReq);
|
List<RectifyOrderResp> rectifyOrders = rectifyApiGateway.listRectifyOrders(rectifyOrderReq);
|
||||||
AssertUtil.isTrue(CollectionUtils.isNotEmpty(rectifyOrders) && rectifyOrders.size() == billIds.size(), "关联整改单单据不存在,请检查后重试");
|
AssertUtil.isTrue(CollectionUtils.isNotEmpty(rectifyOrders) && rectifyOrders.size() == billIds.size(), "关联整改单单据不存在,请检查后重试");
|
||||||
validBillIfRelated(VisaBillTypeEnum.RECTIFY, billIds, req.getType());
|
validBillIfRelated(VisaBillTypeEnum.RECTIFY, billIds, type, visaId);
|
||||||
}
|
}
|
||||||
} else if (Objects.equals(VisaBillTypeEnum.DESIGN_VISA.name(), key)) {
|
} else if (Objects.equals(VisaBillTypeEnum.DESIGN_VISA.name(), key)) {
|
||||||
/*变更单*/
|
/*变更单*/
|
||||||
AssertUtil.isTrue(VisaTypeEnum.TECHNOLOGY_APPROVED.equals(req.getType()) || VisaTypeEnum.PROJECT_VISA.equals(req.getType()), "变更单关联单据仅支持技术核定/工程签证");
|
AssertUtil.isTrue(VisaTypeEnum.TECHNOLOGY_APPROVED.equals(type) || VisaTypeEnum.PROJECT_VISA.equals(type), "变更单关联单据仅支持技术核定/工程签证");
|
||||||
// 关联单据合法性,是否存在,状态是否合法
|
// 关联单据合法性,是否存在,状态是否合法
|
||||||
List<String> billIds = value.stream()
|
List<String> billIds = value.stream()
|
||||||
.map(v -> String.valueOf(v.getId()))
|
.map(v -> String.valueOf(v.getId()))
|
||||||
@ -1465,10 +1578,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
List<ChangeRecord> relationVisa = listByIds(billIds);
|
List<ChangeRecord> relationVisa = listByIds(billIds);
|
||||||
AssertUtil.isTrue(CollectionUtils.isNotEmpty(relationVisa) && relationVisa.size() == billIds.size(), "关联的变更单单据不存在,请检查后重试");
|
AssertUtil.isTrue(CollectionUtils.isNotEmpty(relationVisa) && relationVisa.size() == billIds.size(), "关联的变更单单据不存在,请检查后重试");
|
||||||
relationVisa.forEach(r -> {
|
relationVisa.forEach(r -> {
|
||||||
AssertUtil.isTrue(Objects.equals(r.getRelationWorkspaceId(), req.getRelationWorkspaceId()), "关联的单据所属项目不匹配");
|
AssertUtil.isTrue(Objects.equals(r.getRelationWorkspaceId(), workspaceId), "关联的单据所属项目不匹配");
|
||||||
AssertUtil.isTrue(VisaStatusEnum.COMPLETED.equals(r.getStatus()), String.format("%s单据%s状态为%s,不允许被关联", VisaBillTypeEnum.DESIGN_VISA.getDesc(), r.getNo(), r.getStatus().getDesc()));
|
AssertUtil.isTrue(VisaStatusEnum.COMPLETED.equals(r.getStatus()), String.format("%s单据%s状态为%s,不允许被关联", VisaBillTypeEnum.DESIGN_VISA.getDesc(), r.getNo(), r.getStatus().getDesc()));
|
||||||
});
|
});
|
||||||
validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, billIds, req.getType());
|
validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, billIds, type, visaId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new ServiceException("不支持的关联单据类型");
|
throw new ServiceException("不支持的关联单据类型");
|
||||||
@ -1486,12 +1599,13 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.one();
|
.one();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validBillIfRelated(VisaBillTypeEnum billType, List<String> value, VisaTypeEnum visaType) {
|
private void validBillIfRelated(VisaBillTypeEnum billType, List<String> value, VisaTypeEnum visaType, Long visaId) {
|
||||||
AssertUtil.notNull(billType, "关联单据类型不能为空");
|
AssertUtil.notNull(billType, "关联单据类型不能为空");
|
||||||
AssertUtil.notEmpty(value, "关联单据Id不能为空");
|
AssertUtil.notEmpty(value, "关联单据Id不能为空");
|
||||||
AssertUtil.notNull(visaType, "单据类型不能为空");
|
AssertUtil.notNull(visaType, "单据类型不能为空");
|
||||||
List<ChangeRecordBill> mainBill = changeRecordBillService.getRelatedMainBill(billType, value);
|
List<ChangeRecordBill> mainBill = changeRecordBillService.getRelatedMainBill(billType, value);
|
||||||
mainBill.stream()
|
mainBill.stream()
|
||||||
|
.filter(i -> !Objects.equals(visaId, i.getVisaId()))
|
||||||
.collect(Collectors.groupingBy(ChangeRecordBill::getBillId))
|
.collect(Collectors.groupingBy(ChangeRecordBill::getBillId))
|
||||||
.forEach((k, v) -> v.stream()
|
.forEach((k, v) -> v.stream()
|
||||||
.filter(m -> Objects.equals(m.getVisaType(), visaType))
|
.filter(m -> Objects.equals(m.getVisaType(), visaType))
|
||||||
@ -1502,7 +1616,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validTaskBillIfRelated(List<String> taskNos, VisaTypeEnum visaType) {
|
private void validTaskBillIfRelated(List<String> taskNos, VisaTypeEnum visaType, Long visaId) {
|
||||||
AssertUtil.notEmpty(taskNos, "关联单据Id不能为空");
|
AssertUtil.notEmpty(taskNos, "关联单据Id不能为空");
|
||||||
AssertUtil.notNull(visaType, "单据类型不能为空");
|
AssertUtil.notNull(visaType, "单据类型不能为空");
|
||||||
List<ChangeRecordBill> mainBill = changeRecordBillService.getRelatedMainBill(VisaBillTypeEnum.TASK, taskNos);
|
List<ChangeRecordBill> mainBill = changeRecordBillService.getRelatedMainBill(VisaBillTypeEnum.TASK, taskNos);
|
||||||
@ -1510,6 +1624,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mainBill.stream()
|
mainBill.stream()
|
||||||
|
.filter(i -> !Objects.equals(visaId, i.getVisaId()))
|
||||||
.collect(Collectors.groupingBy(ChangeRecordBill::getBillNo))
|
.collect(Collectors.groupingBy(ChangeRecordBill::getBillNo))
|
||||||
.forEach((k, v) -> v.stream()
|
.forEach((k, v) -> v.stream()
|
||||||
.filter(m -> Objects.equals(m.getVisaType(), visaType))
|
.filter(m -> Objects.equals(m.getVisaType(), visaType))
|
||||||
@ -1676,7 +1791,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
|
|
||||||
String processInstanceId = createProcessInstance(createReq, req.getVisaId());
|
String processInstanceId = createProcessInstance(createReq, req.getVisaId());
|
||||||
// 更新主表中的审批字段,记录变量表的审批的信息
|
// 更新主表中的审批字段,记录变量表的审批的信息
|
||||||
updateApprovalInfo(visa.getId(), processInstanceId, req.getOperatorPersonId());
|
updateApprovalInfo(visa.getId(), processInstanceId, req.getOperatorPersonId(), visa.getType());
|
||||||
return req.getVisaId();
|
return req.getVisaId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1748,7 +1863,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.personId(req.getOperatorPersonId())
|
.personId(req.getOperatorPersonId())
|
||||||
.ouId(req.getOperatorOuId())
|
.ouId(req.getOperatorOuId())
|
||||||
.workspaceId(req.getOperatorWorkspaceId())
|
.workspaceId(req.getOperatorWorkspaceId())
|
||||||
.updateStatus(VisaStatusEnum.EXECUTING)
|
// .updateStatus(VisaStatusEnum.EXECUTING)
|
||||||
.editFormFlag(false)
|
.editFormFlag(false)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
@ -1837,6 +1952,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
visaSearchResp.setRelationProfessional(VisaDetailByIdResponse.RelationProfessionalDetail.buildProfessionWithObject(item.getRelationProfessional()));
|
visaSearchResp.setRelationProfessional(VisaDetailByIdResponse.RelationProfessionalDetail.buildProfessionWithObject(item.getRelationProfessional()));
|
||||||
visaSearchResp.setAmountChange(Objects.nonNull(item.getAmountChange()) ? item.getAmountChange().toPlainString() : "");
|
visaSearchResp.setAmountChange(Objects.nonNull(item.getAmountChange()) ? item.getAmountChange().toPlainString() : "");
|
||||||
visaSearchResp.setStampStatus(item.getStampStatus().name());
|
visaSearchResp.setStampStatus(item.getStampStatus().name());
|
||||||
|
visaSearchResp.setStampStatusPay(item.getStampStatusPay().name());
|
||||||
return visaSearchResp;
|
return visaSearchResp;
|
||||||
}).collect(Collectors.toList()))
|
}).collect(Collectors.toList()))
|
||||||
.build();
|
.build();
|
||||||
@ -1873,16 +1989,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
// 在某些用印操作时,需要记录recordLog,用于详情展示,因为以前详情展示的操作日志是使用的recordLog
|
// 在某些用印操作时,需要记录recordLog,用于详情展示,因为以前详情展示的操作日志是使用的recordLog
|
||||||
insertRecordLog(req);
|
insertRecordLog(req);
|
||||||
|
|
||||||
operateLogService.save(LogAddReq.builder()
|
operateLogService.save(req.getContext(), req.getVisaId(), //
|
||||||
.scene("UPSERT_CHANGE_RECORD")
|
"request", req, //
|
||||||
.level("INFO")
|
"oldValue", oldValue, //
|
||||||
.tags(Lists.newArrayList(req.getVisaId().toString()))
|
"newValue", this.getById(req.getVisaId()));
|
||||||
.message(new JSONObject()
|
|
||||||
.fluentPut("param", req)
|
|
||||||
.fluentPut("oldValue", oldValue)
|
|
||||||
.fluentPut("newValue", this.getById(req.getVisaId()))
|
|
||||||
.toJSONString())
|
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeRecord toUpdate(UpdateVisaChangeReq req, ChangeRecord oldValue) {
|
public ChangeRecord toUpdate(UpdateVisaChangeReq req, ChangeRecord oldValue) {
|
||||||
@ -1893,12 +2003,20 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
result.setId(req.getVisaId());
|
result.setId(req.getVisaId());
|
||||||
|
|
||||||
if (Objects.nonNull(req.getVisaStampAction())) {
|
if (Objects.nonNull(req.getVisaStampAction())) {
|
||||||
result.setStampStatus(oldValue.nextStampStatus(req.getVisaStampAction()));
|
VisaStampStatusEnum nextStampStatus = oldValue.nextStampStatus(req.getVisaStampAction(), req.getPhase());
|
||||||
|
if (req.getPhase() == VisaProcessPhase.PROJECT)
|
||||||
|
result.setStampStatus(nextStampStatus);
|
||||||
|
else
|
||||||
|
result.setStampStatusPay(nextStampStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 取消用印默认把合同id清空掉,后续如果有多种case,可以默认就清空,使用流程编排重构进行扩展
|
// 取消用印默认把合同id清空掉,后续如果有多种case,可以默认就清空,使用流程编排重构进行扩展
|
||||||
if (Objects.equals(req.getVisaStampAction(), CANCEL) || Objects.equals(req.getVisaStampAction(), TX_CANCEL)) {
|
if (Objects.equals(req.getVisaStampAction(), CANCEL) || Objects.equals(req.getVisaStampAction(), TX_CANCEL)
|
||||||
result.setContractId("");
|
|| Objects.equals(req.getVisaStampAction(), ALL_PROCESS_REJECTED)) {
|
||||||
|
if (req.getPhase() == VisaProcessPhase.PROJECT)
|
||||||
|
result.setContractId("");
|
||||||
|
else
|
||||||
|
result.setContractIdPay("");
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -1908,12 +2026,13 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
if (Objects.isNull(req.getVisaStampAction())) {
|
if (Objects.isNull(req.getVisaStampAction())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
PrintModelDTO printModel = printModelService.getPrintTemplateConfig(getById(req.getVisaId()), req.getPhase());
|
||||||
|
|
||||||
if (Objects.equals(req.getVisaStampAction(), COMPLETE)) {
|
if (Objects.equals(req.getVisaStampAction(), COMPLETE)) {
|
||||||
changeRecordLogService.addLog(ChangeRecordLog.builder()
|
changeRecordLogService.addLog(ChangeRecordLog.builder()
|
||||||
.visaId(req.getVisaId())
|
.visaId(req.getVisaId())
|
||||||
.action(VisaLogTypeEnum.COMPLETE_STAMP.name())
|
.action(VisaLogTypeEnum.COMPLETE_STAMP.name())
|
||||||
.title(String.format(VisaLogTypeEnum.COMPLETE_STAMP.getTitle(), req.getOperatorName()))
|
.title(String.format(VisaLogTypeEnum.COMPLETE_STAMP.getTitle(), req.getOperatorName(), printModel.getPrintFileName()))
|
||||||
.content(String.format(VisaLogTypeEnum.COMPLETE_STAMP.getContent(), req.getOperatorName()))
|
.content(String.format(VisaLogTypeEnum.COMPLETE_STAMP.getContent(), req.getOperatorName()))
|
||||||
.orderBy(Constants.APPROVE_ORDER_BY)
|
.orderBy(Constants.APPROVE_ORDER_BY)
|
||||||
.build());
|
.build());
|
||||||
@ -1923,7 +2042,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
changeRecordLogService.addLog(ChangeRecordLog.builder()
|
changeRecordLogService.addLog(ChangeRecordLog.builder()
|
||||||
.visaId(req.getVisaId())
|
.visaId(req.getVisaId())
|
||||||
.action(VisaLogTypeEnum.CANCEL_STAMP.name())
|
.action(VisaLogTypeEnum.CANCEL_STAMP.name())
|
||||||
.title(String.format(VisaLogTypeEnum.CANCEL_STAMP.getTitle(), req.getOperatorName()))
|
.title(String.format(VisaLogTypeEnum.CANCEL_STAMP.getTitle(), req.getOperatorName(), printModel.getPrintFileName()))
|
||||||
.content(String.format(VisaLogTypeEnum.CANCEL_STAMP.getContent(), req.getOperatorName()))
|
.content(String.format(VisaLogTypeEnum.CANCEL_STAMP.getContent(), req.getOperatorName()))
|
||||||
.orderBy(Constants.APPROVE_ORDER_BY)
|
.orderBy(Constants.APPROVE_ORDER_BY)
|
||||||
.build());
|
.build());
|
||||||
@ -1944,7 +2063,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.visaId(req.getVisaId())
|
.visaId(req.getVisaId())
|
||||||
.action(VisaLogTypeEnum.AUTO_COMPLETE_STAMP.name())
|
.action(VisaLogTypeEnum.AUTO_COMPLETE_STAMP.name())
|
||||||
.title(VisaLogTypeEnum.AUTO_COMPLETE_STAMP.getTitle())
|
.title(VisaLogTypeEnum.AUTO_COMPLETE_STAMP.getTitle())
|
||||||
.content(VisaLogTypeEnum.AUTO_COMPLETE_STAMP.getContent())
|
.content(String.format(VisaLogTypeEnum.AUTO_COMPLETE_STAMP.getContent(), printModel.getPrintFileName()))
|
||||||
.orderBy(Constants.APPROVE_ORDER_BY)
|
.orderBy(Constants.APPROVE_ORDER_BY)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
@ -2017,6 +2136,66 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void approveCreateVisaPay(VisaPayApproveCreateReq req) {
|
||||||
|
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
|
||||||
|
AssertUtil.notNull(visa, "未找到变洽签单据");
|
||||||
|
check(req, visa);
|
||||||
|
|
||||||
|
// 更新主业务单据中的相关数据数据
|
||||||
|
changeRecordBillService.deleteByVisaId(visa.getId());
|
||||||
|
// 保存关联单据
|
||||||
|
if (CollUtil.isNotEmpty(req.getRelationOrderMap())) {
|
||||||
|
VisaChangeTempCreateReq build = VisaChangeTempCreateReq.builder().build();
|
||||||
|
build.setRelationOrderMap(req.getRelationOrderMap());
|
||||||
|
changeRecordBillService.addBill(buildVisaBillDto(build, visa));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取主业务数据,传入审批的流程审批
|
||||||
|
BpmnProcessInstanceCreateDTO creator = BpmnProcessInstanceCreateDTO.builder().build();
|
||||||
|
creator.setProcessDefinitionKey(VisaTypeEnum.PAY_CONFIRM.getProcessDefinitionKey());
|
||||||
|
creator.setTenantId(String.valueOf(visa.getRelationWorkspaceId()));
|
||||||
|
creator.setBusinessKey(String.valueOf(visa.getId()));
|
||||||
|
creator.setCooperationOrg(new CooperationOrgDTO());
|
||||||
|
Map<String, Object> startFormVariables = visaHelper.buildPayStartFormVariables(req, visa.getId());
|
||||||
|
creator.setStartFormVariables(startFormVariables);
|
||||||
|
Map<String, Object> pendingVariables = new HashMap<>();
|
||||||
|
pendingVariables.put(IM_GROUP_BIZ_INFO_VISA_ID, visa.getId());
|
||||||
|
pendingVariables.put(IM_GROUP_BIZ_INFO_VISA_TYPE_DESC, visa.getType().getDesc());
|
||||||
|
pendingVariables.put(FORM_FIELD_TOPIC, visa.getTopic());
|
||||||
|
pendingVariables.put(FORM_FIELD_WORKSPACE_NAME, startFormVariables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, null));
|
||||||
|
creator.setPendingVariables(pendingVariables);
|
||||||
|
creator.setInitiator(BpmnTaskDelegateAssigner.builder()
|
||||||
|
.tenantId(String.valueOf(visa.getRelationWorkspaceId()))
|
||||||
|
.ouId(String.valueOf(req.getOperatorOuId()))
|
||||||
|
.personId(String.valueOf(req.getOperatorPersonId()))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
String processInstanceId = workflowGateway.processInstanceCreate(creator);
|
||||||
|
AssertUtil.isTrue(StringUtils.hasText(processInstanceId), "创建审批异常");
|
||||||
|
|
||||||
|
// 更新主表中的审批字段,记录变量表的审批的信息
|
||||||
|
updateApprovalInfo(visa.getId(), processInstanceId, req.getOperatorPersonId(), VisaTypeEnum.PAY_CONFIRM);
|
||||||
|
|
||||||
|
// 写入发起审批的日志
|
||||||
|
changeRecordLogService.batchAddLog(changeRecordLogService.buildLogList(visa.getId(), VisaLogTypeEnum.TO_APPRROVE, VisaLogParam.builder()
|
||||||
|
.ouId(req.getOperatorOuId())
|
||||||
|
.personId(req.getOperatorPersonId())
|
||||||
|
.workspaceId(visa.getRelationWorkspaceId())
|
||||||
|
.visaType(VisaTypeEnum.PAY_CONFIRM)
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void check(VisaPayApproveCreateReq req, ChangeRecord visa) {
|
||||||
|
// 验证单据
|
||||||
|
validRelationOrder(req.getRelationOrderMap(), visa.getRelationWorkspaceId(), visa.getType(), visa.getId());
|
||||||
|
// 校验是否已经发起过价款申请,审批中和已通过
|
||||||
|
List<BpmnProcessInstanceResultEnum> checkResults = Lists.newArrayList(PROCESSING, APPROVED);
|
||||||
|
boolean checkResult = StringUtils.hasText(visa.getApprovalIdPay()) && checkResults.contains(BpmnProcessInstanceResultEnum.valueOfStatus(visa.getApprovalStatusPay()));
|
||||||
|
AssertUtil.isFalse(checkResult, "完工价款确认审批已发起");
|
||||||
|
}
|
||||||
|
|
||||||
private List<BpmnTaskDelegateAssigner> getDefaultAssignee(BizActivityAssigneeDecisionReq req) {
|
private List<BpmnTaskDelegateAssigner> getDefaultAssignee(BizActivityAssigneeDecisionReq req) {
|
||||||
PersonProfileDto profile = visaProfileGateway.getProfile(req.getOperatorPersonId());
|
PersonProfileDto profile = visaProfileGateway.getProfile(req.getOperatorPersonId());
|
||||||
return Lists.newArrayList(BpmnTaskDelegateAssigner.builder()
|
return Lists.newArrayList(BpmnTaskDelegateAssigner.builder()
|
||||||
@ -2026,4 +2205,28 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
|||||||
.avatar(profile.getAvatarUrl())
|
.avatar(profile.getAvatarUrl())
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VisaChangeRelationOrdersResp getRelationOrdersById(Long visaId) {
|
||||||
|
List<ChangeRecordBill> changeRecordBills = changeRecordBillService.listById(visaId);
|
||||||
|
if (CollectionUtils.isNotEmpty(changeRecordBills)) {
|
||||||
|
Map<VisaBillTypeEnum, List<VisaChangeTempCreateReq.OrderSimpleModel>> billMap = changeRecordBills.stream()
|
||||||
|
.collect(Collectors.groupingBy(ChangeRecordBill::getBillType
|
||||||
|
, Collectors.mapping(item -> VisaChangeTempCreateReq.OrderSimpleModel.builder()
|
||||||
|
.id(item.getBillId())
|
||||||
|
.no(item.getBillNo())
|
||||||
|
.name(item.getBillName())
|
||||||
|
.build(), Collectors.toList())));
|
||||||
|
return VisaChangeRelationOrdersResp.builder()
|
||||||
|
.relationTaskList(CollectionUtils.isEmpty(billMap.get(VisaBillTypeEnum.TASK)) ? Lists.newArrayList() : billMap.get(VisaBillTypeEnum.TASK)) // 关联任务单
|
||||||
|
.relationRectifyList(CollectionUtils.isEmpty(billMap.get(VisaBillTypeEnum.RECTIFY)) ? Lists.newArrayList() : billMap.get(VisaBillTypeEnum.RECTIFY)) //关联整改单
|
||||||
|
.relationVisaList(CollectionUtils.isEmpty(billMap.get(VisaBillTypeEnum.DESIGN_VISA)) ? Lists.newArrayList() : billMap.get(VisaBillTypeEnum.DESIGN_VISA)) // 关联变更单
|
||||||
|
.relationInvalidVisaList(this.detailPageInvalidVisaIdList(billMap.getOrDefault(VisaBillTypeEnum.DESIGN_VISA, Lists.newArrayList())
|
||||||
|
.stream()
|
||||||
|
.map(item -> String.valueOf(item.getId()))
|
||||||
|
.collect(Collectors.toList())))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,144 @@
|
|||||||
|
|
||||||
|
package cn.axzo.nanopart.visa.server.service.impl;
|
||||||
|
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS_PAY;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_PAY;
|
||||||
|
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_VISA;
|
||||||
|
import static java.util.stream.Collectors.groupingBy;
|
||||||
|
import static java.util.stream.Collectors.toList;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import cn.axzo.msg.center.service.pending.client.PendingMessageClient;
|
||||||
|
import cn.axzo.msg.center.service.pending.request.PendingMessageByBizCodeRequest;
|
||||||
|
import cn.axzo.msg.center.service.pending.response.PendingMessageSimpleDTO;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
|
||||||
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse.DetailCard;
|
||||||
|
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse.WorkflowButtonType;
|
||||||
|
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.rpc.WorkflowGateway;
|
||||||
|
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
||||||
|
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||||
|
import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO;
|
||||||
|
import cn.axzo.workflow.common.model.response.print.PrintModelDTO;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yanglin
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class DetailCardBuilder {
|
||||||
|
|
||||||
|
private final PrintModelService printModelService;
|
||||||
|
private final ChangeRecordRelationService changeRecordRelationService;
|
||||||
|
private final PendingMessageClient pendingMessageClient;
|
||||||
|
private final WorkflowGateway workflowGateway;
|
||||||
|
|
||||||
|
List<DetailCard> build(ChangeRecord visa) {
|
||||||
|
ArrayList<DetailCard> details = new ArrayList<>();
|
||||||
|
Consumer<VisaProcessPhase> builder = (phase) -> {
|
||||||
|
VisaRelationFieldEnum workflowField = phase == VisaProcessPhase.PROJECT ? PROCESS_INSTANCE_OF_VISA
|
||||||
|
: PROCESS_INSTANCE_OF_PAY;
|
||||||
|
ChangeRecordRelation workflowRelation = changeRecordRelationService.lambdaQuery() //
|
||||||
|
.eq(ChangeRecordRelation::getVisaId, visa.getId()) //
|
||||||
|
.eq(ChangeRecordRelation::getVarName, workflowField.name()) //
|
||||||
|
.orderByDesc(ChangeRecordRelation::getId) //
|
||||||
|
.last("LIMIT 1") //
|
||||||
|
.one();
|
||||||
|
if (workflowRelation == null)
|
||||||
|
return;
|
||||||
|
DetailCard detail = new DetailCard();
|
||||||
|
detail.setVisaId(visa.getId());
|
||||||
|
detail.setPhase(phase);
|
||||||
|
detail.setWorkflowInstanceId(workflowRelation.getContent());
|
||||||
|
FormInstanceVO formInstance = printModelService.getFormInstance(workflowRelation.getContent());
|
||||||
|
if (formInstance != null)
|
||||||
|
detail.setFormModel(formInstance.getFormModel());
|
||||||
|
BpmnProcessInstanceResultEnum workflowStatus = BpmnProcessInstanceResultEnum.valueOfStatus(
|
||||||
|
workflowRelation.getContentExt());
|
||||||
|
|
||||||
|
PrintModelDTO printModel = printModelService.getPrintTemplateConfig(visa, phase);
|
||||||
|
detail.setTitle(printModel.getPrintFileName());
|
||||||
|
if (workflowStatus != null) {
|
||||||
|
detail.setWorkflowStatus(workflowStatus.getStatus());
|
||||||
|
String prefix = phase == VisaProcessPhase.PROJECT ? "立项" : "价款";
|
||||||
|
detail.setWorkflowStatusDesc(prefix + workflowStatus.getDesc());
|
||||||
|
}
|
||||||
|
VisaStampStatusEnum stampStatus = phase == VisaProcessPhase.PROJECT ? visa.getStampStatus()
|
||||||
|
: visa.getStampStatusPay();
|
||||||
|
if (stampStatus != null && stampStatus != VisaStampStatusEnum.UNKNOWN) {
|
||||||
|
detail.setStampStatus(stampStatus.name());
|
||||||
|
detail.setStampStatusDesc(stampStatus.getDesc());
|
||||||
|
}
|
||||||
|
detail.addButton("查看详情", WorkflowButtonType.DETAIL);
|
||||||
|
if (workflowStatus == BpmnProcessInstanceResultEnum.APPROVED) {
|
||||||
|
if (stampStatus == VisaStampStatusEnum.USED_PRINTS)
|
||||||
|
detail.addButton("打印", WorkflowButtonType.PRINT);
|
||||||
|
else if (stampStatus == VisaStampStatusEnum.UNPRINTED || stampStatus == VisaStampStatusEnum.WITH_PRINT)
|
||||||
|
detail.addButton("打印预览", WorkflowButtonType.PRINT_PREVIEW);
|
||||||
|
if (stampStatus == VisaStampStatusEnum.UNPRINTED)
|
||||||
|
detail.addButton("申请用印", WorkflowButtonType.REQUEST_STAMP);
|
||||||
|
else if (stampStatus == VisaStampStatusEnum.WITH_PRINT)
|
||||||
|
detail.addButton("用印进展", WorkflowButtonType.STAMP_PROGRESS);
|
||||||
|
// 未用印,但有历史被驳回的用印
|
||||||
|
if (stampStatus == VisaStampStatusEnum.UNPRINTED
|
||||||
|
&& !detail.containsButtonOfType(WorkflowButtonType.STAMP_PROGRESS)) {
|
||||||
|
VisaRelationFieldEnum fieldType = phase == VisaProcessPhase.PROJECT ? PROCESS_INSTANCE_OF_ESS : PROCESS_INSTANCE_OF_ESS_PAY;
|
||||||
|
List<ChangeRecordRelation> essInstances = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
||||||
|
.visaId(visa.getId())
|
||||||
|
.varName(fieldType.name())
|
||||||
|
.contentExt(BpmnProcessInstanceResultEnum.REJECTED.getStatus())
|
||||||
|
.build());
|
||||||
|
if (CollectionUtils.isNotEmpty(essInstances))
|
||||||
|
detail.addButton("用印进展", WorkflowButtonType.STAMP_PROGRESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!workflowGateway.hasPrintTemplate(detail.getWorkflowInstanceId())) {
|
||||||
|
log.info("没有打印模版, 去掉打印/用印相关按钮. workflowInstanceId={}", detail.getWorkflowInstanceId());
|
||||||
|
detail.removeButtonsOfType(WorkflowButtonType.PRINT, //
|
||||||
|
WorkflowButtonType.PRINT_PREVIEW, //
|
||||||
|
WorkflowButtonType.STAMP_PROGRESS, //
|
||||||
|
WorkflowButtonType.REQUEST_STAMP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
details.add(detail);
|
||||||
|
};
|
||||||
|
builder.accept(VisaProcessPhase.PROJECT);
|
||||||
|
builder.accept(VisaProcessPhase.PAYMENT);
|
||||||
|
return details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void populateCardTodoIdentityCode(List<DetailCard> cards, Long personId) {
|
||||||
|
if (cards == null)
|
||||||
|
return;
|
||||||
|
List<String> bizCodes = cards.stream().map(DetailCard::getWorkflowInstanceId).collect(toList());
|
||||||
|
PendingMessageByBizCodeRequest request = new PendingMessageByBizCodeRequest();
|
||||||
|
request.setBizCodes(bizCodes);
|
||||||
|
request.setOperatorPersonId(personId);
|
||||||
|
Map<String, List<PendingMessageSimpleDTO>> biz2Todos = pendingMessageClient //
|
||||||
|
.getLatestByBizCode(request).getData().stream() //
|
||||||
|
.collect(groupingBy(PendingMessageSimpleDTO::getBizCode));
|
||||||
|
for (DetailCard card : cards) {
|
||||||
|
List<PendingMessageSimpleDTO> todos = biz2Todos.getOrDefault(card.getWorkflowInstanceId(),
|
||||||
|
Collections.emptyList());
|
||||||
|
if (!todos.isEmpty())
|
||||||
|
card.setTodoIdentityCode(todos.get(0).getIdentityCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,15 +1,22 @@
|
|||||||
package cn.axzo.nanopart.visa.server.service.impl;
|
package cn.axzo.nanopart.visa.server.service.impl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import cn.axzo.framework.domain.ServiceException;
|
||||||
import cn.axzo.framework.jackson.utility.JSON;
|
import cn.axzo.framework.jackson.utility.JSON;
|
||||||
import cn.axzo.log.platform.client.feign.LogApi;
|
import cn.axzo.log.platform.client.feign.LogApi;
|
||||||
import cn.axzo.log.platform.client.model.req.LogAddReq;
|
import cn.axzo.log.platform.client.model.req.LogAddReq;
|
||||||
import cn.axzo.nanopart.visa.server.service.OperateLogService;
|
import cn.axzo.nanopart.visa.server.service.OperateLogService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@ -23,8 +30,40 @@ public class OperateLogServiceImpl implements OperateLogService {
|
|||||||
private ExecutorService asyncExecutor;
|
private ExecutorService asyncExecutor;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(LogAddReq param) {
|
public void saveRequest(String scene, Long tag, Object request) {
|
||||||
|
save(scene, tag, "request", JSON.toJSONString(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(String scene, Long tag, Object... arguments) {
|
||||||
|
save(scene, String.valueOf(tag), arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(String scene, String tag, Object... arguments) {
|
||||||
|
if (arguments.length % 2 != 0)
|
||||||
|
throw new ServiceException("messages length is not even");
|
||||||
|
JSONObject message = new JSONObject();
|
||||||
|
for (int i = 0; i < arguments.length; i += 2)
|
||||||
|
message.put(String.valueOf(arguments[i]), arguments[i + 1]);
|
||||||
|
save(LogAddReq.builder()
|
||||||
|
.scene(scene)
|
||||||
|
.level("INFO")
|
||||||
|
.tags(Lists.newArrayList(tag))
|
||||||
|
.message(message.toJSONString())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(LogAddReq param) {
|
||||||
|
List<String> tags = param.getTags();
|
||||||
|
if (tags == null)
|
||||||
|
tags = new ArrayList<>();
|
||||||
|
else
|
||||||
|
tags = new ArrayList<>(tags);
|
||||||
|
tags.add("nanopart");
|
||||||
|
tags.add("visa");
|
||||||
|
param.setTags(tags);
|
||||||
try {
|
try {
|
||||||
// 目前操作日志的记录,不是核心流程,这个方法,不抛出异常,以免影响正常业务流程。
|
// 目前操作日志的记录,不是核心流程,这个方法,不抛出异常,以免影响正常业务流程。
|
||||||
// 异步处理
|
// 异步处理
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
package cn.axzo.nanopart.visa.server.service.impl;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaProcessPhase;
|
||||||
|
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||||
|
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||||
|
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||||
|
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO;
|
||||||
|
import cn.axzo.workflow.common.model.request.form.instance.FormDetailDTO;
|
||||||
|
import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO;
|
||||||
|
import cn.axzo.workflow.common.model.response.print.PrintModelDTO;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yanglin
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class PrintModelService {
|
||||||
|
|
||||||
|
private final WorkflowGateway workflowGateway;
|
||||||
|
|
||||||
|
public PrintModelDTO getPrintTemplateConfig(ChangeRecord visa, VisaProcessPhase phase) {
|
||||||
|
String tenantId = phase == VisaProcessPhase.PROJECT ? visa.getApprovalId() : visa.getApprovalIdPay();
|
||||||
|
PrintTemplateConfigQueryDTO request = new PrintTemplateConfigQueryDTO();
|
||||||
|
request.setProcessDefinitionKey(
|
||||||
|
phase == VisaProcessPhase.PROJECT ? visa.getType().getProcessDefinitionKey()
|
||||||
|
: VisaTypeEnum.PAY_CONFIRM.getProcessDefinitionKey());
|
||||||
|
request.setTenantId(tenantId);
|
||||||
|
return workflowGateway.getPrintTemplateConfig(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FormInstanceVO getFormInstance(String approvalId) {
|
||||||
|
FormDetailDTO request = new FormDetailDTO();
|
||||||
|
request.setProcessInstanceId(approvalId);
|
||||||
|
return workflowGateway.getFormInstance(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user