From 49641fc571f8ce951d8fb39cd1bfc2c3de92a36f Mon Sep 17 00:00:00 2001 From: yinq Date: Mon, 3 Nov 2025 17:09:50 +0800 Subject: [PATCH] =?UTF-8?q?1.0.26=20=E6=8F=90=E4=BA=A4=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=B9=B6=E6=8F=90=E4=BA=A4=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CrmCustomerContactServiceImpl.java | 2 +- .../controller/ErpProjectInfoController.java | 13 ++++++ .../oa/erp/domain/bo/ErpProjectInfoBo.java | 37 +++++++++++++++++ .../erp/service/IErpProjectInfoService.java | 7 ++++ .../impl/ErpContractInfoServiceImpl.java | 3 +- .../impl/ErpProjectContractsServiceImpl.java | 3 +- .../impl/ErpProjectInfoServiceImpl.java | 41 ++++++++++++++++++- 7 files changed, 101 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java index 3f57b2ae..f675bd53 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java @@ -75,7 +75,7 @@ public class CrmCustomerContactServiceImpl implements ICrmCustomerContactService MPJLambdaWrapper lqw = JoinWrappers.lambda(CrmCustomerContact.class) .selectAll(CrmCustomerContact.class) .select(CrmCustomerInfo::getCustomerName) - .leftJoin(CrmCustomerInfo.class, CrmCustomerInfo::getCustomerId, CrmCustomerContact::getContactId) + .leftJoin(CrmCustomerInfo.class, CrmCustomerInfo::getCustomerId, CrmCustomerContact::getCustomerId) .eq(bo.getCustomerId() != null, CrmCustomerContact::getCustomerId, bo.getCustomerId()) .like(StringUtils.isNotBlank(bo.getContactName()), CrmCustomerContact::getContactName, bo.getContactName()) .eq(StringUtils.isNotBlank(bo.getSexType()), CrmCustomerContact::getSexType, bo.getSexType()) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectInfoController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectInfoController.java index 42c4b82f..c2eb1932 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectInfoController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectInfoController.java @@ -80,6 +80,19 @@ public class ErpProjectInfoController extends BaseController { return toAjax(erpProjectInfoService.insertByBo(bo)); } + /** + * 提交项目信息并提交流程 + * @param bo + * @return + */ + @SaCheckPermission("oa/erp:projectInfo:add") + @Log(title = "项目信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/submitAndFlowStart") + public R submitAndFlowStart(@Validated(AddGroup.class) @RequestBody ErpProjectInfoBo bo) { + return R.ok(erpProjectInfoService.projectSubmitAndFlowStart(bo)); + } + /** * 修改项目信息 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java index d2cdd2d7..655a6d64 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java @@ -9,6 +9,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.math.BigDecimal; +import java.util.*; +import cn.hutool.core.util.ObjectUtil; +import org.dromara.workflow.api.domain.RemoteFlowInstanceBizExt; /** * 项目信息业务对象 erp_project_info @@ -131,5 +134,39 @@ public class ErpProjectInfoBo extends BaseEntity { */ private String activeFlag; + /** + * 流程定义编码 + */ + 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/service/IErpProjectInfoService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectInfoService.java index dd879d0f..09074d6d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectInfoService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectInfoService.java @@ -66,4 +66,11 @@ public interface IErpProjectInfoService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 提交项目信息并提交流程 + * @param bo + * @return + */ + ErpProjectInfoVo projectSubmitAndFlowStart(ErpProjectInfoBo 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 fd6cdb62..20c9d5ef 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 @@ -64,7 +64,8 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { ErpContractInfoVo contractInfoVo = baseMapper.selectVoById(contractId); MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractMaterial.class) .selectAll(ErpContractMaterial.class) - .eq(contractId != null, ErpContractMaterial::getContractId, contractId); + .eq(contractId != null, ErpContractMaterial::getContractId, contractId) + .eq("t.del_flag", "0");; List contractMaterialList = contractMaterialMapper.selectCustomErpContractMaterialVoList(lqw); contractInfoVo.setContractMaterialList(contractMaterialList); return contractInfoVo; diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java index 9e7dfa6f..9eea9bd0 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java @@ -76,7 +76,8 @@ public class ErpProjectContractsServiceImpl implements IErpProjectContractsServi .eq(bo.getProjectId() != null, ErpProjectContracts::getProjectId, bo.getProjectId()) .eq(bo.getContractId() != null, ErpProjectContracts::getContractId, bo.getContractId()) .eq(bo.getSortOrder() != null, ErpProjectContracts::getSortOrder, bo.getSortOrder()) - .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpProjectContracts::getActiveFlag, bo.getActiveFlag()); + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpProjectContracts::getActiveFlag, bo.getActiveFlag()) + .eq("t.del_flag", "0"); return lqw; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectInfoServiceImpl.java index 4c79c278..797868ef 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectInfoServiceImpl.java @@ -7,7 +7,6 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.dromara.oa.erp.domain.bo.ErpProjectInfoBo; @@ -15,6 +14,11 @@ import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo; import org.dromara.oa.erp.domain.ErpProjectInfo; import org.dromara.oa.erp.mapper.ErpProjectInfoMapper; import org.dromara.oa.erp.service.IErpProjectInfoService; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.seata.spring.annotation.GlobalTransactional; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.workflow.api.RemoteWorkflowService; +import org.dromara.workflow.api.domain.RemoteStartProcess; import java.util.List; import java.util.Map; @@ -32,6 +36,9 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService { private final ErpProjectInfoMapper baseMapper; + @DubboReference(timeout = 30000) + private RemoteWorkflowService remoteWorkflowService; + /** * 查询项目信息 * @@ -70,7 +77,6 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService { } private MPJLambdaWrapper buildQueryWrapper(ErpProjectInfoBo bo) { - Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpProjectInfo.class) .selectAll(ErpProjectInfo.class) .eq(StringUtils.isNotBlank(bo.getContractFlag()), ErpProjectInfo::getContractFlag, bo.getContractFlag()) @@ -146,4 +152,35 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 提交项目信息并提交流程 + * + * @param bo + * @return + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public ErpProjectInfoVo projectSubmitAndFlowStart(ErpProjectInfoBo bo) { + ErpProjectInfo add = MapstructUtils.convert(bo, ErpProjectInfo.class); + validEntityBeforeSave(add); + if (StringUtils.isNull(bo.getProjectId())) { + this.insertByBo(bo); + } else { + this.updateByBo(bo); + } + // 后端发起需要忽略权限 + bo.getVariables().put("ignore", true); + RemoteStartProcess startProcess = new RemoteStartProcess(); + startProcess.setBusinessId(bo.getProjectId().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, ErpProjectInfoVo.class); + } }