From 043cdc2cf0b1517fc91b607f676f567136ee702f Mon Sep 17 00:00:00 2001 From: yinq Date: Tue, 2 Dec 2025 16:18:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.0.42=20=E9=A1=B9=E7=9B=AE=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=96=B0=E5=A2=9E=E9=99=84=E4=BB=B6=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/oa/erp/domain/ErpProjectInfo.java | 5 +++++ .../dromara/oa/erp/domain/bo/ErpProjectInfoBo.java | 6 +++++- .../dromara/oa/erp/domain/vo/ErpProjectInfoVo.java | 6 ++++++ .../erp/service/impl/ErpProjectInfoServiceImpl.java | 12 ++++++------ .../resources/mapper/oa/erp/ErpProjectInfoMapper.xml | 1 + 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpProjectInfo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpProjectInfo.java index 891e4d52..4f2a1671 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpProjectInfo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpProjectInfo.java @@ -128,6 +128,11 @@ public class ErpProjectInfo extends TenantEntity { */ private String activeFlag; + /** + * 附件ID + */ + private String ossId; + /** * 删除标志(0代表存在 1代表删除) */ 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 655a6d64..bc86e29c 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 @@ -50,7 +50,6 @@ public class ErpProjectInfoBo extends BaseEntity { /** * 业务方向(1智能轮胎 2轮胎工厂 3快递物流 4锂电 5工业软件 6智能制造 7新行业及零售) */ - @NotBlank(message = "业务方向(1智能轮胎 2轮胎工厂 3快递物流 4锂电 5工业软件 6智能制造 7新行业及零售)不能为空", groups = { AddGroup.class, EditGroup.class }) private String businessDirection; /** @@ -134,6 +133,11 @@ public class ErpProjectInfoBo extends BaseEntity { */ private String activeFlag; + /** + * 附件ID + */ + private String ossId; + /** * 流程定义编码 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpProjectInfoVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpProjectInfoVo.java index badc9e93..b64f45c0 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpProjectInfoVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpProjectInfoVo.java @@ -161,6 +161,12 @@ public class ErpProjectInfoVo implements Serializable { @ExcelDictFormat(dictType = "active_flag") private String activeFlag; + /** + * 附件ID + */ + @ExcelProperty(value = "附件ID") + private String ossId; + /** * 项目类型名称 */ 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 0ea99429..14d9b08b 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 @@ -1,12 +1,8 @@ package org.dromara.oa.erp.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.map.MapUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.OAStatusEnum; import org.dromara.common.core.utils.MapstructUtils; @@ -62,7 +58,11 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService { */ @Override public ErpProjectInfoVo queryById(Long projectId) { - return baseMapper.selectVoById(projectId); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpProjectInfo.class) + .eq(ErpProjectInfo::getProjectId, projectId) + .eq("t.del_flag", "0"); + List list = baseMapper.selectCustomErpProjectInfoVoList(lqw); + return !list.isEmpty() ? list.get(0) : null; } /** @@ -206,7 +206,7 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService { * * @param processEvent 参数 */ - @EventListener(condition = "#processEvent.flowCode =='xmsq'") + @EventListener(condition = "#processEvent.flowCode.startsWith('xmsq')") public void processHandler(ProcessEvent processEvent) { TenantHelper.dynamic(processEvent.getTenantId(), () -> { log.info("当前任务执行了{}", processEvent.toString()); diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpProjectInfoMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpProjectInfoMapper.xml index 49228186..9cdcb092 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpProjectInfoMapper.xml +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpProjectInfoMapper.xml @@ -29,6 +29,7 @@ t.contract_id, t.remark, t.active_flag, + t.oss_id, t.del_flag, t.create_dept, t.create_by, From a2e9dcfc4b90300e894e85bd758202ec30f671f3 Mon Sep 17 00:00:00 2001 From: xs Date: Wed, 3 Dec 2025 13:42:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1.0.45=E5=90=8E=E7=AB=AF=EF=BC=9A=20=20=20?= =?UTF-8?q?=20feat(budget):=E5=AE=8C=E6=88=90=E7=A0=94=E5=8F=91=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E9=A2=84=E7=AE=97=E4=BF=9D=E5=AD=98=E5=92=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD;=20=20=20=20fix(budget):=E9=A2=84?= =?UTF-8?q?=E7=AE=97=E6=9B=B4=E6=96=B0=E6=97=B6=E5=88=A4=E6=96=AD=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/enums/FlowConfigEnum.java | 15 +++++--- .../event/AbstractProcessEventHandler.java | 2 ++ .../impl/BaseMaterialInfoServiceImpl.java | 5 +-- .../impl/ErpBudgetInfoServiceImpl.java | 35 ++++++++++++++----- .../impl/ErpProjectInfoServiceImpl.java | 21 ++++++----- 5 files changed, 54 insertions(+), 24 deletions(-) diff --git a/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/enums/FlowConfigEnum.java b/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/enums/FlowConfigEnum.java index 464379f0..f4e785e1 100644 --- a/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/enums/FlowConfigEnum.java +++ b/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/enums/FlowConfigEnum.java @@ -4,10 +4,9 @@ import lombok.Getter; import org.dromara.common.core.enums.OAStatusEnum; /** - * @description - * 流程配置枚举 - * 定义流程编码与业务实体的映射关系 * @author xins + * @description 流程配置枚举 + * 定义流程编码与业务实体的映射关系 * @date 2025/11/4 9:41 */ @Getter @@ -16,7 +15,7 @@ public enum FlowConfigEnum { /** * 预算流程 */ - BUDGET("HWOABudget", "erp_budget_info", "budget_status", OAStatusEnum.COMPLETED.getStatus(), "flow_status","预算审批","budget_id"); + BUDGET("HWOABudget", "erp_budget_info", "budget_status", OAStatusEnum.COMPLETED.getStatus(), OAStatusEnum.DRAFT.getStatus(), "flow_status", "预算审批", "budget_id"); /** @@ -39,6 +38,11 @@ public enum FlowConfigEnum { */ private final String completedBusinessStatus; + /** + * 流程暂存时状态值 + */ + private final String draftBusinessStatus; + /** * 流程状态字段名 */ @@ -57,11 +61,12 @@ public enum FlowConfigEnum { FlowConfigEnum(String flowCode, String tableName, String businessStatusField, - String completedBusinessStatus, String flowStatusField, String businessTitle, String businessPk) { + String completedBusinessStatus, String draftBusinessStatus, String flowStatusField, String businessTitle, String businessPk) { this.flowCode = flowCode; this.tableName = tableName; this.businessStatusField = businessStatusField; this.completedBusinessStatus = completedBusinessStatus; + this.draftBusinessStatus = draftBusinessStatus; this.flowStatusField = flowStatusField; this.businessTitle = businessTitle; this.businessPk = businessPk; diff --git a/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/event/AbstractProcessEventHandler.java b/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/event/AbstractProcessEventHandler.java index 07b10229..b3ef75a4 100644 --- a/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/event/AbstractProcessEventHandler.java +++ b/ruoyi-common/hwbm-common-workflow/src/main/java/org/dromara/workflow/event/AbstractProcessEventHandler.java @@ -95,6 +95,8 @@ public abstract class AbstractProcessEventHandler implements IProcessEventHandle // 如果流程完成,更新业务状态 if (BusinessStatusEnum.FINISH.getStatus().equals(processEvent.getStatus())) { setFields.put(flowConfig.getBusinessStatusField(), flowConfig.getCompletedBusinessStatus()); + } else if (BusinessStatusEnum.BACK.getStatus().equals(processEvent.getStatus())) { + setFields.put(flowConfig.getBusinessStatusField(), flowConfig.getDraftBusinessStatus()); } // 处理特殊状态转换 diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/impl/BaseMaterialInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/impl/BaseMaterialInfoServiceImpl.java index d29a8ac6..b1ef5353 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/impl/BaseMaterialInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/impl/BaseMaterialInfoServiceImpl.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.dromara.oa.base.domain.BaseUnitInfo; import org.springframework.stereotype.Service; @@ -85,7 +84,9 @@ public class BaseMaterialInfoServiceImpl implements IBaseMaterialInfoService { .eq(bo.getPurchasePrice() != null, BaseMaterialInfo::getPurchasePrice, bo.getPurchasePrice()) .eq(bo.getForeignPrice() != null, BaseMaterialInfo::getForeignPrice, bo.getForeignPrice()) .eq(bo.getStockingPeriod() != null, BaseMaterialInfo::getStockingPeriod, bo.getStockingPeriod()) - .eq(StringUtils.isNotBlank(bo.getActiveFlag()), BaseMaterialInfo::getActiveFlag, bo.getActiveFlag()); + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), BaseMaterialInfo::getActiveFlag, bo.getActiveFlag()) + .eq("t.del_flag", "0") + .orderByDesc(BaseMaterialInfo::getCreateTime); return lqw; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java index 97c669d1..bae87a5a 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java @@ -1,9 +1,12 @@ package org.dromara.oa.erp.service.impl; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.seata.spring.annotation.GlobalTransactional; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.OAStatusEnum; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; @@ -14,6 +17,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.oa.erp.domain.*; import org.dromara.oa.erp.enums.ProjectCategoryEnum; import org.dromara.oa.erp.enums.RdBudgetCostEnums; @@ -21,6 +25,7 @@ import org.dromara.oa.erp.mapper.*; import org.dromara.oa.workflow.strategy.BudgetWorkflowStrategy; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; +import org.dromara.workflow.enums.FlowConfigEnum; import org.dromara.workflow.strategy.AbstractWorkflowService; import org.springframework.stereotype.Service; import org.dromara.oa.erp.domain.bo.ErpBudgetInfoBo; @@ -29,10 +34,7 @@ import org.dromara.oa.erp.service.IErpBudgetInfoService; import org.dromara.workflow.strategy.WorkflowStrategy; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; import java.util.function.Consumer; import java.util.function.Function; @@ -250,7 +252,8 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService 0; @@ -692,8 +694,25 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService ids, Boolean isValid) { if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + ids.forEach(id->{ + ErpBudgetInfo erpBudgetInfo = baseMapper.selectById(id); + if(!erpBudgetInfo.getBudgetStatus().equals(OAStatusEnum.DRAFT.getStatus()) + || !erpBudgetInfo.getFlowStatus().equals(BusinessStatusEnum.DRAFT.getStatus())){ + throw new ServiceException("此项目预算已进入审批,不能删除!"); + } + + LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); +// luw.set(ObjectUtil.isNull(config.getPrefix()), SysOssConfig::getPrefix, ""); + luw.set(ErpBudgetInfo::getBudgetVersion,null); + luw.set(ErpBudgetInfo::getDelFlag,"1"); + luw.set(ErpBudgetInfo::getUpdateBy, LoginHelper.getUserId()); + luw.set(ErpBudgetInfo::getUpdateTime,new Date()); + luw.eq(ErpBudgetInfo::getBudgetId, erpBudgetInfo.getBudgetId()); + boolean flag = baseMapper.update(null, luw) > 0; + + }); } - return baseMapper.deleteByIds(ids) > 0; + return true; +// return baseMapper.deleteByIds(ids) > 0; } } 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 14d9b08b..ddf6cd8c 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 @@ -222,10 +222,10 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService { } else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.FINISH.getStatus())) { projectInfo.setProjectStatus(OAStatusEnum.COMPLETED.getStatus()); } else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.INVALID.getStatus()) - || Objects.equals(processEvent.getStatus(), BusinessStatusEnum.TERMINATION.getStatus())) { + || Objects.equals(processEvent.getStatus(), BusinessStatusEnum.TERMINATION.getStatus())) { projectInfo.setProjectStatus(OAStatusEnum.INVALID.getStatus()); } else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.BACK.getStatus()) - || Objects.equals(processEvent.getStatus(), BusinessStatusEnum.CANCEL.getStatus())) { + || Objects.equals(processEvent.getStatus(), BusinessStatusEnum.CANCEL.getStatus())) { projectInfo.setProjectStatus(OAStatusEnum.DRAFT.getStatus()); } baseMapper.updateById(projectInfo); @@ -252,17 +252,20 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService { MPJLambdaWrapper wrapper = JoinWrappers.lambda(ErpProjectInfo.class); wrapper.like(StringUtils.isNotBlank(bo.getProjectCode()), ErpProjectInfo::getProjectCode, bo.getProjectCode()) .like(StringUtils.isNotBlank(bo.getProjectName()), ErpProjectInfo::getProjectName, bo.getProjectName()) + .eq(StringUtils.isNotBlank(bo.getProjectStatus()), ErpProjectInfo::getProjectStatus, bo.getProjectStatus()) + .eq("t.del_flag", "0") .and(w -> { - if(StringUtils.isNotBlank(bo.getProjectCategory()) && bo.getProjectCategory().equals(ProjectCategoryEnum.MARKET.getCode())){ - w.eq(StringUtils.isNotBlank(bo.getProjectCategory()) ,ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.MARKET.getCode()) - .or().eq(StringUtils.isNotBlank(bo.getProjectCategory()) ,ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.MARKET_PART.getCode()); - }else if(StringUtils.isNotBlank(bo.getProjectCategory()) && bo.getProjectCategory().equals(ProjectCategoryEnum.RD.getCode())){ - w.eq(StringUtils.isNotBlank(bo.getProjectCategory()) ,ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.RD.getCode()) - .or().eq(StringUtils.isNotBlank(bo.getProjectCategory()) ,ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.PRE_PRODUCTION.getCode()); + if (StringUtils.isNotBlank(bo.getProjectCategory()) && bo.getProjectCategory().equals(ProjectCategoryEnum.MARKET.getCode())) { + w.eq(StringUtils.isNotBlank(bo.getProjectCategory()), ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.MARKET.getCode()) + .or().eq(StringUtils.isNotBlank(bo.getProjectCategory()), ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.MARKET_PART.getCode()); + } else if (StringUtils.isNotBlank(bo.getProjectCategory()) && bo.getProjectCategory().equals(ProjectCategoryEnum.RD.getCode())) { + w.eq(StringUtils.isNotBlank(bo.getProjectCategory()), ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.RD.getCode()) + .or().eq(StringUtils.isNotBlank(bo.getProjectCategory()), ErpProjectInfo::getProjectCategory, ProjectCategoryEnum.PRE_PRODUCTION.getCode()); } - }).orderByDesc(ErpProjectInfo::getCreateTime);; + }).orderByDesc(ErpProjectInfo::getCreateTime); + ; return wrapper;