diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractInfoController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractInfoController.java index 9adc17ce..d168c722 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractInfoController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractInfoController.java @@ -80,6 +80,19 @@ public class ErpContractInfoController extends BaseController { return R.ok(erpContractInfoService.insertByBo(bo)); } + /** + * 提交合同信息并提交流程 + * @param bo + * @return + */ + @SaCheckPermission("oa/erp:contractInfo:add") + @Log(title = "合同信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/contractSubmitAndFlowStart") + public R contractSubmitAndFlowStart(@Validated(AddGroup.class) @RequestBody ErpContractInfoBo bo) { + return R.ok(erpContractInfoService.contractSubmitAndFlowStart(bo)); + } + /** * 修改合同信息 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java index 58da769c..a41afda7 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java @@ -1,5 +1,6 @@ package org.dromara.oa.erp.domain.bo; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.oa.erp.domain.ErpContractInfo; import org.dromara.common.mybatis.core.domain.BaseEntity; @@ -10,11 +11,11 @@ import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; +import java.util.*; import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.oa.erp.domain.ErpContractMaterial; +import org.dromara.workflow.api.domain.RemoteFlowInstanceBizExt; /** * 合同信息业务对象 erp_contract_info @@ -198,4 +199,38 @@ public class ErpContractInfoBo extends BaseEntity { */ private String deptName; + /** + * 流程定义编码 + */ + private String flowCode; + + /** + * 办理人(可不填 用于覆盖当前节点办理人) + */ + private String handler; + + /** + * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}} + */ + private Map variables; + + /** + * 流程业务扩展信息 + */ + private RemoteFlowInstanceBizExt bizExt; + + public Map getVariables() { + if (variables == null) { + return new HashMap<>(16); + } + variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); + return variables; + } + + public RemoteFlowInstanceBizExt getBizExt() { + if (ObjectUtil.isNull(bizExt)) { + bizExt = new RemoteFlowInstanceBizExt(); + } + return bizExt; + } } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java index a9ac7557..1122d73f 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java @@ -27,8 +27,8 @@ public interface ErpContractInfoMapper extends BaseMapperPlus selectCustomErpContractInfoVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); @@ -38,6 +38,10 @@ public interface ErpContractInfoMapper extends BaseMapperPlus selectCustomErpContractInfoVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractInfoService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractInfoService.java index e46c0fb5..d30ab633 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractInfoService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractInfoService.java @@ -66,4 +66,11 @@ public interface IErpContractInfoService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 提交合同信息并提交流程 + * @param bo + * @return + */ + ErpContractInfoVo contractSubmitAndFlowStart(ErpContractInfoBo bo); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java index cd343d20..d9d605f5 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java @@ -1,5 +1,7 @@ package org.dromara.oa.erp.service.impl; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.seata.spring.annotation.GlobalTransactional; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -11,6 +13,8 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; import org.dromara.oa.erp.domain.ErpContractMaterial; import org.dromara.oa.erp.mapper.ErpContractMaterialMapper; +import org.dromara.workflow.api.RemoteWorkflowService; +import org.dromara.workflow.api.domain.RemoteStartProcess; import org.springframework.stereotype.Service; import org.dromara.oa.erp.domain.bo.ErpContractInfoBo; import org.dromara.oa.erp.domain.vo.ErpContractInfoVo; @@ -39,6 +43,9 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { private final ErpContractMaterialMapper contractMaterialMapper; + @DubboReference(timeout = 30000) + private RemoteWorkflowService remoteWorkflowService; + /** * 查询合同信息 * @@ -102,7 +109,8 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { .eq(StringUtils.isNotBlank(bo.getPaymentMethod()), ErpContractInfo::getPaymentMethod, bo.getPaymentMethod()) .eq(bo.getSignatureAppendix() != null, ErpContractInfo::getSignatureAppendix, bo.getSignatureAppendix()) .eq(bo.getTaxRate() != null, ErpContractInfo::getTaxRate, bo.getTaxRate()) - .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractInfo::getActiveFlag, bo.getActiveFlag()); + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractInfo::getActiveFlag, bo.getActiveFlag()) + .orderByDesc(ErpContractInfo::getCreateTime); return lqw; } @@ -185,4 +193,42 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 提交合同信息并提交流程 + * + * @param bo + * @return + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public ErpContractInfoVo contractSubmitAndFlowStart(ErpContractInfoBo bo) { + ErpContractInfo add = MapstructUtils.convert(bo, ErpContractInfo.class); + validEntityBeforeSave(add); + List contractMaterialList = bo.getContractMaterialList(); + boolean flag = baseMapper.insert(add) > 0; + if (flag && contractMaterialList != null && !contractMaterialList.isEmpty()) { + bo.setContractId(add.getContractId()); + for (ErpContractMaterial erpContractMaterial : contractMaterialList) { + erpContractMaterial.setContractId(add.getContractId()); + contractMaterialMapper.insert(erpContractMaterial); + } + } + if (flag) { + // 后端发起需要忽略权限 + bo.getVariables().put("ignore", true); + RemoteStartProcess startProcess = new RemoteStartProcess(); + startProcess.setBusinessId(bo.getContractId().toString()); + startProcess.setFlowCode(bo.getFlowCode()); + startProcess.setVariables(bo.getVariables()); + startProcess.setBizExt(bo.getBizExt()); + bo.getBizExt().setBusinessId(startProcess.getBusinessId()); + boolean flagOne = remoteWorkflowService.startCompleteTask(startProcess); + if (!flagOne) { + throw new ServiceException("流程发起异常"); + } + } + return MapstructUtils.convert(add, ErpContractInfoVo.class); + } + }