1.0.45后端:

feat(budget):完成研发项目预算保存和更新功能;
   fix(budget):预算更新时判断问题修复等
dev
xs 2 weeks ago
parent 043cdc2cf0
commit a2e9dcfc4b

@ -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;

@ -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());
}
// 处理特殊状态转换

@ -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;
}

@ -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<ErpBudgetI
.eq(StringUtils.isNotBlank(bo.getExportFlag()), ErpBudgetInfo::getExportFlag, bo.getExportFlag())
.eq(StringUtils.isNotBlank(bo.getBudgetStatus()), ErpBudgetInfo::getBudgetStatus, bo.getBudgetStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpBudgetInfo::getFlowStatus, bo.getFlowStatus())
.eq(bo.getContractId() != null, ErpBudgetInfo::getContractId, bo.getContractId());
.eq(bo.getContractId() != null, ErpBudgetInfo::getContractId, bo.getContractId())
.orderByDesc(ErpBudgetInfo::getCreateTime).orderByDesc(ErpBudgetInfo::getProjectCode);
return lqw;
}
@ -265,7 +268,6 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService<ErpBudgetI
public Boolean insertByBo(ErpBudgetInfoBo bo) {
ErpBudgetInfo add = MapstructUtils.convert(bo, ErpBudgetInfo.class);
validEntityBeforeSave(add);
add.setApprovedFlag(add.getProjectId());
add.setBudgetVersion(1L);
boolean flag = baseMapper.insert(add) > 0;
@ -692,8 +694,25 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService<ErpBudgetI
@Override
public Boolean deleteWithValidByIds(Collection<Long> 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<ErpBudgetInfo> 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;
}
}

@ -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<ErpProjectInfo> 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;

Loading…
Cancel
Save