diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/config/RdBudgetDefinitionConfig.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/config/RdBudgetDefinitionConfig.java new file mode 100644 index 00000000..32287d62 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/config/RdBudgetDefinitionConfig.java @@ -0,0 +1,153 @@ +package org.dromara.oa.erp.config; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.dromara.oa.erp.domain.dto.BudgetDefinitionDTO; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author xins + * @Date 2025/12/25 15:28 + * @Description:预算科目配置类 - 支持Nacos动态刷新 + * * 使用@RefreshScope注解实现配置热更新 + */ + +@Slf4j +@Component +@RefreshScope // 重要:支持配置动态刷新 +@ConfigurationProperties(prefix = "budget") +@Data +public class RdBudgetDefinitionConfig { + + /** + * 预算科目列表 + */ + private List subjects = new ArrayList<>(); + + /** + * 科目名称映射缓存(按序号) + */ + private Map subjectNameMap; + + /** + * 科目定义映射缓存(按序号) + */ + private Map subjectDefinitionMap; + + /** + * 科目标识映射缓存(按序号) + */ + private Map subjectFlagMap; + + /** + * 完整科目映射缓存(按序号) + */ + private Map subjectMap; + + /** + * 初始化缓存 + */ + @PostConstruct + public void initCache() { + refreshCache(); + log.info("预算科目配置初始化完成,共 {} 条记录", subjects.size()); + } + + /** + * 刷新缓存(配置变更时调用) + */ + public void refreshCache() { + // 按序号排序 + subjects.sort((a, b) -> a.getSerialNumber().compareTo(b.getSerialNumber())); + + // 构建缓存 + subjectNameMap = subjects.stream() + .collect(Collectors.toMap( + BudgetDefinitionDTO::getSerialNumber, + BudgetDefinitionDTO::getSubjectName, + (v1, v2) -> v1 + )); + + subjectDefinitionMap = subjects.stream() + .collect(Collectors.toMap( + BudgetDefinitionDTO::getSerialNumber, + BudgetDefinitionDTO::getSubjectDefinition, + (v1, v2) -> v1 + )); + + subjectFlagMap = subjects.stream() + .collect(Collectors.toMap( + BudgetDefinitionDTO::getSerialNumber, + BudgetDefinitionDTO::getSubjectFlag, + (v1, v2) -> v1 + )); + + subjectMap = subjects.stream() + .collect(Collectors.toMap( + BudgetDefinitionDTO::getSerialNumber, + dto -> dto, + (v1, v2) -> v1 + )); + + log.debug("预算科目缓存已刷新,当前数量:{}", subjects.size()); + } + + /** + * 获取所有科目(排序后) + */ + public List getAllSubjects() { + return new ArrayList<>(subjects); // 返回副本 + } + + /** + * 根据序号获取科目 + */ + public BudgetDefinitionDTO getSubjectByNumber(Integer serialNumber) { + return subjectMap.get(serialNumber); + } + + /** + * 根据名称获取科目 + */ + public BudgetDefinitionDTO getSubjectByName(String subjectName) { + return subjects.stream() + .filter(subject -> subject.getSubjectName().equals(subjectName)) + .findFirst() + .orElse(null); + } + + /** + * 获取科目名称 + */ + public String getSubjectName(Integer serialNumber) { + return subjectNameMap.get(serialNumber); + } + + /** + * 获取科目定义 + */ + public String getSubjectDefinition(Integer serialNumber) { + return subjectDefinitionMap.get(serialNumber); + } + + /** + * 获取科目标识 + */ + public String getSubjectFlag(Integer serialNumber) { + return subjectFlagMap.get(serialNumber); + } + + /** + * 验证科目是否存在 + */ + public boolean exists(Integer serialNumber) { + return subjectMap.containsKey(serialNumber); + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java index 6c366385..2b1da0ce 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java @@ -11,6 +11,7 @@ import org.dromara.oa.base.domain.bo.BaseMaterialInfoBo; import org.dromara.oa.base.domain.vo.BaseMaterialInfoVo; import org.dromara.oa.base.service.IBaseMaterialInfoService; import org.dromara.oa.erp.domain.bo.ErpProjectInfoBo; +import org.dromara.oa.erp.domain.dto.BudgetDefinitionDTO; import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo; import org.dromara.oa.erp.service.IErpProjectInfoService; import org.springframework.http.MediaType; @@ -183,4 +184,14 @@ public class ErpBudgetInfoController extends BaseController { return baseMaterialInfoService.queryPageList(bo, pageQuery); } + + /** + * 下拉框查询项目预算列表 + */ + @GetMapping("/getRdBudgetDefinitionList") + public R> getRdBudgetDefinitionList() { + List list = erpBudgetInfoService.getBudgetDefinitionList(); + return R.ok(list); + } + } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetDetail.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetDetail.java index 4086037a..6009eb7c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetDetail.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetDetail.java @@ -62,5 +62,8 @@ public class ErpBudgetDetail{ */ private String referenceProjectName; - + /** + * 数据来源 + */ + private String detailSource; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java index 3ebdb88b..6134d415 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java @@ -4,9 +4,11 @@ import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; +import org.dromara.oa.erp.domain.dto.BudgetDefinitionDTO; import java.io.Serial; import java.math.BigDecimal; +import java.util.Date; import java.util.List; /** @@ -70,22 +72,22 @@ public class ErpBudgetInfo extends TenantEntity { private String managerName; /** - * 产品经理,关联sys_user + * 市场预算产品经理(研发预算部门负责人),关联sys_user */ private Long productManagerId; /** - * 产品经理姓名 + * 市场预算产品经理姓名(研发预算部门负责人) */ private String productManagerName; /** - * 审核(评审组长)ID,关联sys_user + * 市场预算审核(评审组长)ID(研发预算财务负责人),关联sys_user */ private Long approveUserId; /** - * 审核(评审组长)姓名 + * 市场预算审核(评审组长)(研发预算财务负责人)姓名 */ private String approveUserName; @@ -159,6 +161,11 @@ public class ErpBudgetInfo extends TenantEntity { */ private String remark; + /** + * 编制日期 + */ + private Date preparationDate; + /** * 删除标志(0代表存在 1代表删除) */ @@ -200,8 +207,6 @@ public class ErpBudgetInfo extends TenantEntity { private List toDeletedOtherCostIdList; - @TableField(exist = false) - private List erpRdBudgetEquipmentCostList; @TableField(exist = false) private List erpRdBudgetMaterialCostList; @@ -209,52 +214,30 @@ public class ErpBudgetInfo extends TenantEntity { @TableField(exist = false) private List erpRdBudgetTravelCostList; - @TableField(exist = false) - private List erpRdBudgetMeetingCostList; - - @TableField(exist = false) - private List erpRdBudgetExchangeCostList; - @TableField(exist = false) private List erpRdBudgetTechCostList; @TableField(exist = false) private List erpRdBudgetLaborCostList; - @TableField(exist = false) - private List erpRdBudgetLiteratureCostList; - @TableField(exist = false) private List erpRdBudgetTestingCostList; @TableField(exist = false) private List erpRdBudgetOtherCostList; - - @TableField(exist = false) - private List toDeletedRdEquipmentCostIdList; - @TableField(exist = false) private List toDeletedRdMaterialCostIdList; @TableField(exist = false) private List toDeletedRdTravelCostIdList; - @TableField(exist = false) - private List toDeletedRdMeetingCostIdList; - - @TableField(exist = false) - private List toDeletedRdExchangeCostIdList; - @TableField(exist = false) private List toDeletedRdTechCostIdList; @TableField(exist = false) private List toDeletedRdLaborCostIdList; - @TableField(exist = false) - private List toDeletedRdLiteratureCostIdList; - @TableField(exist = false) private List toDeletedRdTestingCostIdList; diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTechCost.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTechCost.java index f1b8fbe6..25c87626 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTechCost.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTechCost.java @@ -43,6 +43,11 @@ public class ErpRdBudgetTechCost extends TenantEntity { */ private String techType; + /** + * 专业方向 + */ + private String professionalDirection; + /** * 内容 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTravelCost.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTravelCost.java index 749591f2..ac58342c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTravelCost.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpRdBudgetTravelCost.java @@ -38,6 +38,11 @@ public class ErpRdBudgetTravelCost extends TenantEntity { */ private Long projectId; + /** + * 类型(1差旅费,2交通费) + */ + private String tripType; + /** * 出差地点 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetDetailBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetDetailBo.java index 2839bdcd..5572bd8f 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetDetailBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetDetailBo.java @@ -65,5 +65,8 @@ public class ErpBudgetDetailBo { */ private String referenceProjectName; - + /** + * 数据来源 + */ + private String detailSource; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java index 3b99509b..53545e4d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java @@ -9,8 +9,10 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import org.dromara.oa.erp.domain.dto.BudgetDefinitionDTO; import java.math.BigDecimal; +import java.util.Date; import java.util.List; /** @@ -75,22 +77,22 @@ public class ErpBudgetInfoBo extends BaseEntity { private String managerName; /** - * 产品经理,关联sys_user + * 市场预算产品经理(研发预算部门负责人),关联sys_user */ private Long productManagerId; /** - * 产品经理姓名 + * 市场预算产品经理姓名(研发预算部门负责人) */ private String productManagerName; /** - * 审核(评审组长)ID,关联sys_user + * 市场预算审核(评审组长)ID(研发预算财务负责人),关联sys_user */ private Long approveUserId; /** - * 审核(评审组长)姓名 + * 市场预算审核(评审组长)(研发预算财务负责人)姓名 */ private String approveUserName; @@ -164,6 +166,11 @@ public class ErpBudgetInfoBo extends BaseEntity { */ private String remark; + /** + * 编制日期 + */ + private Date preparationDate; + private List erpBudgetDetailList; private List erpBudgetMaterialCostList; @@ -183,43 +190,26 @@ public class ErpBudgetInfoBo extends BaseEntity { private List toDeletedOtherCostIdList; - private List erpRdBudgetEquipmentCostList; - private List erpRdBudgetMaterialCostList; private List erpRdBudgetTravelCostList; - private List erpRdBudgetMeetingCostList; - - private List erpRdBudgetExchangeCostList; - private List erpRdBudgetTechCostList; private List erpRdBudgetLaborCostList; - private List erpRdBudgetLiteratureCostList; - private List erpRdBudgetTestingCostList; private List erpRdBudgetOtherCostList; - - private List toDeletedRdEquipmentCostIdList; - private List toDeletedRdMaterialCostIdList; private List toDeletedRdTravelCostIdList; - private List toDeletedRdMeetingCostIdList; - - private List toDeletedRdExchangeCostIdList; - private List toDeletedRdTechCostIdList; private List toDeletedRdLaborCostIdList; - private List toDeletedRdLiteratureCostIdList; - private List toDeletedRdTestingCostIdList; private List toDeletedRdOtherCostIdList; diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTechCostBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTechCostBo.java index a97eeb07..f35e5e56 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTechCostBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTechCostBo.java @@ -45,6 +45,11 @@ public class ErpRdBudgetTechCostBo extends BaseEntity { @NotBlank(message = "技术服务费类型(1、技术咨询开发,2、专家咨询-会议形式,3、专家咨询-通讯形式)不能为空", groups = { AddGroup.class, EditGroup.class }) private String techType; + /** + * 专业方向 + */ + private String professionalDirection; + /** * 内容 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTravelCostBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTravelCostBo.java index 4458136c..de904442 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTravelCostBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpRdBudgetTravelCostBo.java @@ -39,6 +39,11 @@ public class ErpRdBudgetTravelCostBo extends BaseEntity { */ private Long projectId; + /** + * 类型(1差旅费,2交通费) + */ + private String tripType; + /** * 出差地点 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/dto/BudgetDefinitionDTO.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/dto/BudgetDefinitionDTO.java new file mode 100644 index 00000000..ed1337c7 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/dto/BudgetDefinitionDTO.java @@ -0,0 +1,56 @@ +package org.dromara.oa.erp.domain.dto; +import lombok.Data; +import java.io.Serializable; + + +/** + * @Author xins + * @Date 2025/12/25 15:29 + * @Description:预算科目说明信息封装类,用于前后端数据传输和Excel导出 + */ +@Data +public class BudgetDefinitionDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 序号 + */ + private Integer serialNumber; + + /** + * 预算科目名称 + */ + private String subjectName; + + /** + * 预算科目定义 + */ + private String subjectDefinition; + + /** + * 预算科目标识(1正常 2红色) + */ + private String subjectFlag; + + /** + * 无参构造器 + */ + public BudgetDefinitionDTO() { + } + + /** + * 全参构造器 + * @param serialNumber 序号 + * @param subjectName 科目名称 + * @param subjectDefinition 科目定义 + * @param subjectFlag 科目标识 + */ + public BudgetDefinitionDTO(Integer serialNumber, String subjectName, String subjectDefinition,String subjectFlag) { + this.serialNumber = serialNumber; + this.subjectName = subjectName; + this.subjectDefinition = subjectDefinition; + this.subjectFlag = subjectFlag; + } + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetDetailVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetDetailVo.java index 43b9f8c7..69ffeb1c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetDetailVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetDetailVo.java @@ -77,5 +77,8 @@ public class ErpBudgetDetailVo implements Serializable { @ExcelProperty(value = "参考项目名称") private String referenceProjectName; - + /** + * 数据来源 + */ + private String detailSource; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java index 4839c374..09708385 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java @@ -7,6 +7,7 @@ import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.oa.erp.domain.dto.BudgetDefinitionDTO; import java.io.Serial; import java.io.Serializable; @@ -86,27 +87,23 @@ public class ErpBudgetInfoVo implements Serializable { private String managerName; /** - * 产品经理,关联sys_user + * 市场预算产品经理(研发预算部门负责人),关联sys_user */ - @ExcelProperty(value = "产品经理,关联sys_user") private Long productManagerId; /** - * 产品经理姓名 + * 市场预算产品经理姓名(研发预算部门负责人) */ - @ExcelProperty(value = "产品经理姓名") private String productManagerName; /** - * 审核(评审组长)ID,关联sys_user + * 市场预算审核(评审组长)ID(研发预算财务负责人),关联sys_user */ - @ExcelProperty(value = "审核(评审组长)ID,关联sys_user") private Long approveUserId; /** - * 审核(评审组长)姓名 + * 市场预算审核(评审组长)(研发预算财务负责人)姓名 */ - @ExcelProperty(value = "审核(评审组长)姓名") private String approveUserName; /** @@ -195,6 +192,11 @@ public class ErpBudgetInfoVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 编制日期 + */ + private Date preparationDate; + private List erpBudgetDetailList; @@ -208,23 +210,17 @@ public class ErpBudgetInfoVo implements Serializable { private List erpBudgetOtherCostList; - private List erpRdBudgetEquipmentCostList; - private List erpRdBudgetMaterialCostList; private List erpRdBudgetTravelCostList; - private List erpRdBudgetMeetingCostList; - - private List erpRdBudgetExchangeCostList; - private List erpRdBudgetTechCostList; private List erpRdBudgetLaborCostList; - private List erpRdBudgetLiteratureCostList; - private List erpRdBudgetTestingCostList; private List erpRdBudgetOtherCostList; + + private List budgetDefinitionDTOList; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTechCostVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTechCostVo.java index 7c41eded..dadba138 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTechCostVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTechCostVo.java @@ -53,6 +53,11 @@ public class ErpRdBudgetTechCostVo implements Serializable { @ExcelProperty(value = "技术服务费类型(1、技术咨询开发,2、专家咨询-会议形式,3、专家咨询-通讯形式)") private String techType; + /** + * 专业方向 + */ + private String professionalDirection; + /** * 内容 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTravelCostVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTravelCostVo.java index d8792a5c..1e537cf6 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTravelCostVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpRdBudgetTravelCostVo.java @@ -47,6 +47,11 @@ public class ErpRdBudgetTravelCostVo implements Serializable { @ExcelProperty(value = "项目ID") private Long projectId; + /** + * 类型(1差旅费,2交通费) + */ + private String tripType; + /** * 出差地点 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java index 066ce9c1..c072cb8d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java @@ -1,6 +1,7 @@ package org.dromara.oa.erp.service; import org.dromara.oa.erp.domain.ErpBudgetInfo; +import org.dromara.oa.erp.domain.dto.BudgetDefinitionDTO; import org.dromara.oa.erp.domain.vo.ErpBudgetInfoVo; import org.dromara.oa.erp.domain.bo.ErpBudgetInfoBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -82,4 +83,10 @@ public interface IErpBudgetInfoService { * @return excel下载 */ public byte[] exportBudgetInfo(Long budgetId); + + /** + * 获取研发预算标准标识说明 + * @return List + */ + public List getBudgetDefinitionList(); } 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 a40c4b7c..a805f714 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 @@ -19,7 +19,9 @@ 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.config.RdBudgetDefinitionConfig; import org.dromara.oa.erp.domain.*; +import org.dromara.oa.erp.domain.dto.BudgetDefinitionDTO; import org.dromara.oa.erp.enums.ProjectCategoryEnum; import org.dromara.oa.erp.enums.RdBudgetCostEnums; import org.dromara.oa.erp.mapper.*; @@ -90,6 +92,8 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService subjects = rdBudgetDefinitionConfig.getAllSubjects(); + erpBudgetInfoVo.setBudgetDefinitionDTOList(subjects); + return erpBudgetInfoVo; } @@ -185,22 +194,14 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService { - deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdEquipmentCostIdList(), - erpRdBudgetEquipmentCostMapper::deleteByIds, "设备成本"); deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdMaterialCostIdList(), erpRdBudgetMaterialCostMapper::deleteByIds, "材料成本"); deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdTravelCostIdList(), erpRdBudgetTravelCostMapper::deleteByIds, "差旅成本"); - deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdMeetingCostIdList(), - erpRdBudgetMeetingCostMapper::deleteByIds, "会议成本"); - deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdExchangeCostIdList(), - erpRdBudgetExchangeCostMapper::deleteByIds, "交流成本"); deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdTechCostIdList(), erpRdBudgetTechCostMapper::deleteByIds, "技术成本"); deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdLaborCostIdList(), erpRdBudgetLaborCostMapper::deleteByIds, "人工成本"); - deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdLiteratureCostIdList(), - erpRdBudgetLiteratureCostMapper::deleteByIds, "文献成本"); deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdTestingCostIdList(), erpRdBudgetTestingCostMapper::deleteByIds, "测试成本"); deleteIfNotEmpty(erpBudgetInfo.getToDeletedRdOtherCostIdList(), @@ -653,22 +646,14 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService { - processCostList(erpBudgetInfo.getErpRdBudgetEquipmentCostList(), budgetId, projectId, - erpRdBudgetEquipmentCostMapper::insertOrUpdateBatch, ErpRdBudgetEquipmentCost.class); processCostList(erpBudgetInfo.getErpRdBudgetMaterialCostList(), budgetId, projectId, erpRdBudgetMaterialCostMapper::insertOrUpdateBatch, ErpRdBudgetMaterialCost.class); processCostList(erpBudgetInfo.getErpRdBudgetTravelCostList(), budgetId, projectId, erpRdBudgetTravelCostMapper::insertOrUpdateBatch, ErpRdBudgetTravelCost.class); - processCostList(erpBudgetInfo.getErpRdBudgetMeetingCostList(), budgetId, projectId, - erpRdBudgetMeetingCostMapper::insertOrUpdateBatch, ErpRdBudgetMeetingCost.class); - processCostList(erpBudgetInfo.getErpRdBudgetExchangeCostList(), budgetId, projectId, - erpRdBudgetExchangeCostMapper::insertOrUpdateBatch, ErpRdBudgetExchangeCost.class); processCostList(erpBudgetInfo.getErpRdBudgetTechCostList(), budgetId, projectId, erpRdBudgetTechCostMapper::insertOrUpdateBatch, ErpRdBudgetTechCost.class); processCostList(erpBudgetInfo.getErpRdBudgetLaborCostList(), budgetId, projectId, erpRdBudgetLaborCostMapper::insertOrUpdateBatch, ErpRdBudgetLaborCost.class); - processCostList(erpBudgetInfo.getErpRdBudgetLiteratureCostList(), budgetId, projectId, - erpRdBudgetLiteratureCostMapper::insertOrUpdateBatch, ErpRdBudgetLiteratureCost.class); processCostList(erpBudgetInfo.getErpRdBudgetTestingCostList(), budgetId, projectId, erpRdBudgetTestingCostMapper::insertOrUpdateBatch, ErpRdBudgetTestingCost.class); processCostList(erpBudgetInfo.getErpRdBudgetOtherCostList(), budgetId, projectId, @@ -772,7 +757,6 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService + */ + @Override + public List getBudgetDefinitionList(){ + return rdBudgetDefinitionConfig.getAllSubjects(); + } } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/RdProjectBudgetExcelExporter.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/RdProjectBudgetExcelExporter.java index a423a508..03e323c6 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/RdProjectBudgetExcelExporter.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/RdProjectBudgetExcelExporter.java @@ -532,12 +532,7 @@ public class RdProjectBudgetExcelExporter extends BaseExcelExporter { private int createEquipmentDataRows(Sheet sheet, ErpBudgetInfoVo budget, int startRowNum) { int rowNum = startRowNum; - if (budget.getErpRdBudgetEquipmentCostList() != null) { - for (int i = 0; i < budget.getErpRdBudgetEquipmentCostList().size(); i++) { - var detail = budget.getErpRdBudgetEquipmentCostList().get(i); - rowNum = createEquipmentDataRow(sheet, detail, rowNum); - } - } + return rowNum; } @@ -985,12 +980,12 @@ public class RdProjectBudgetExcelExporter extends BaseExcelExporter { private int createMeetingDataRows(Sheet sheet, ErpBudgetInfoVo budget, int startRowNum) { int rowNum = startRowNum; - if (budget.getErpRdBudgetMeetingCostList() != null) { - for (int i = 0; i < budget.getErpRdBudgetMeetingCostList().size(); i++) { - ErpRdBudgetMeetingCost detail = budget.getErpRdBudgetMeetingCostList().get(i); - rowNum = createMeetingDataRow(sheet, detail, rowNum); - } - } +// if (budget.getErpRdBudgetMeetingCostList() != null) { +// for (int i = 0; i < budget.getErpRdBudgetMeetingCostList().size(); i++) { +// ErpRdBudgetMeetingCost detail = budget.getErpRdBudgetMeetingCostList().get(i); +// rowNum = createMeetingDataRow(sheet, detail, rowNum); +// } +// } return rowNum; } @@ -1032,22 +1027,22 @@ public class RdProjectBudgetExcelExporter extends BaseExcelExporter { * 创建空会议费行 */ private int createEmptyMeetingRow(Sheet sheet, int rowNum, ErpBudgetInfoVo budget) { - List erpRdBudgetMeetingCostList = budget.getErpRdBudgetMeetingCostList() == null ? new ArrayList<>() : - budget.getErpRdBudgetMeetingCostList(); - - int rdBudgetMeetingFillRowNum = rowNum + (4 - erpRdBudgetMeetingCostList.size()); - while (rowNum <= rdBudgetMeetingFillRowNum) { - Row emptyRow = sheet.createRow(rowNum++); - createCell(emptyRow, 1, "", dataStyle); - createMergedCell(sheet, emptyRow, 2, 4, "", dataStyle); - for (int i = 5; i < 11; i++) { - Double value = null; - createNumericCell(emptyRow, i, value, dataStyle); - } - Cell meetingCostCell = emptyRow.createCell(11); - meetingCostCell.setCellFormula("ROUND(((F" + (rowNum) + "+G" + (rowNum) + ")*H" + (rowNum) + "+I" + (rowNum) + "+J" + (rowNum) + "*K" + (rowNum) + ")/10000,2)"); - meetingCostCell.setCellStyle(formulaStyle); - } +// List erpRdBudgetMeetingCostList = budget.getErpRdBudgetMeetingCostList() == null ? new ArrayList<>() : +// budget.getErpRdBudgetMeetingCostList(); +// +// int rdBudgetMeetingFillRowNum = rowNum + (4 - erpRdBudgetMeetingCostList.size()); +// while (rowNum <= rdBudgetMeetingFillRowNum) { +// Row emptyRow = sheet.createRow(rowNum++); +// createCell(emptyRow, 1, "", dataStyle); +// createMergedCell(sheet, emptyRow, 2, 4, "", dataStyle); +// for (int i = 5; i < 11; i++) { +// Double value = null; +// createNumericCell(emptyRow, i, value, dataStyle); +// } +// Cell meetingCostCell = emptyRow.createCell(11); +// meetingCostCell.setCellFormula("ROUND(((F" + (rowNum) + "+G" + (rowNum) + ")*H" + (rowNum) + "+I" + (rowNum) + "+J" + (rowNum) + "*K" + (rowNum) + ")/10000,2)"); +// meetingCostCell.setCellStyle(formulaStyle); +// } return rowNum; } @@ -1112,12 +1107,12 @@ public class RdProjectBudgetExcelExporter extends BaseExcelExporter { private int createInternationalDataRows(Sheet sheet, ErpBudgetInfoVo budget, int startRowNum) { int rowNum = startRowNum; - if (budget.getErpRdBudgetExchangeCostList() != null) { - for (int i = 0; i < budget.getErpRdBudgetExchangeCostList().size(); i++) { - ErpRdBudgetExchangeCost detail = budget.getErpRdBudgetExchangeCostList().get(i); - rowNum = createInternationalDataRow(sheet, detail, rowNum); - } - } +// if (budget.getErpRdBudgetExchangeCostList() != null) { +// for (int i = 0; i < budget.getErpRdBudgetExchangeCostList().size(); i++) { +// ErpRdBudgetExchangeCost detail = budget.getErpRdBudgetExchangeCostList().get(i); +// rowNum = createInternationalDataRow(sheet, detail, rowNum); +// } +// } return rowNum; } @@ -1154,28 +1149,28 @@ public class RdProjectBudgetExcelExporter extends BaseExcelExporter { * 创建空国际交流费行 */ private int createEmptyInternationalRow(Sheet sheet, int rowNum, ErpBudgetInfoVo budget) { - List erpRdBudgetExchangeCostList = budget.getErpRdBudgetExchangeCostList() == null ? new ArrayList<>() : - budget.getErpRdBudgetExchangeCostList(); - - int rdBudgetInternationalFillRowNum = rowNum + (4 - erpRdBudgetExchangeCostList.size()); - while (rowNum <= rdBudgetInternationalFillRowNum) { - Row emptyRow = sheet.createRow(rowNum++); - createCell(emptyRow, 1, "", dataStyle); - createCell(emptyRow, 2, "", dataStyle); - createMergedCell(sheet, emptyRow, 3, 4, "", dataStyle); - createMergedCell(sheet, emptyRow, 5, 6, "", dataStyle); - for (int i = 7; i < 10; i++) { - Double value = null; - createNumericCell(emptyRow, i, value, dataStyle); - } - Cell subsidyCell = emptyRow.createCell(10); - subsidyCell.setCellFormula("IF(C" + (rowNum) + "=\"出国考察\",40*I" + (rowNum) + "*H" + (rowNum) + ",0)"); - subsidyCell.setCellStyle(formulaStyle); - - Cell subtotalCell = emptyRow.createCell(11); - subtotalCell.setCellFormula("ROUND((K" + (rowNum) + "+J" + (rowNum) + ")/10000,2)"); - subtotalCell.setCellStyle(formulaStyle); - } +// List erpRdBudgetExchangeCostList = budget.getErpRdBudgetExchangeCostList() == null ? new ArrayList<>() : +// budget.getErpRdBudgetExchangeCostList(); +// +// int rdBudgetInternationalFillRowNum = rowNum + (4 - erpRdBudgetExchangeCostList.size()); +// while (rowNum <= rdBudgetInternationalFillRowNum) { +// Row emptyRow = sheet.createRow(rowNum++); +// createCell(emptyRow, 1, "", dataStyle); +// createCell(emptyRow, 2, "", dataStyle); +// createMergedCell(sheet, emptyRow, 3, 4, "", dataStyle); +// createMergedCell(sheet, emptyRow, 5, 6, "", dataStyle); +// for (int i = 7; i < 10; i++) { +// Double value = null; +// createNumericCell(emptyRow, i, value, dataStyle); +// } +// Cell subsidyCell = emptyRow.createCell(10); +// subsidyCell.setCellFormula("IF(C" + (rowNum) + "=\"出国考察\",40*I" + (rowNum) + "*H" + (rowNum) + ",0)"); +// subsidyCell.setCellStyle(formulaStyle); +// +// Cell subtotalCell = emptyRow.createCell(11); +// subtotalCell.setCellFormula("ROUND((K" + (rowNum) + "+J" + (rowNum) + ")/10000,2)"); +// subtotalCell.setCellStyle(formulaStyle); +// } return rowNum; } @@ -1811,7 +1806,7 @@ public class RdProjectBudgetExcelExporter extends BaseExcelExporter { Sheet sheet = workbook.createSheet(SHEET_DOCUMENT); // 准备数据 - List literatureCostList = prepareLiteratureCostData(budget); + List literatureCostList = null; int rowNum = 0; @@ -1842,15 +1837,6 @@ public class RdProjectBudgetExcelExporter extends BaseExcelExporter { return rowNum; } - /** - * 准备资料文献费数据 - */ - private List prepareLiteratureCostData(ErpBudgetInfoVo budget) { - List literatureCostList = budget.getErpRdBudgetLiteratureCostList() == null ? - new ArrayList<>() : budget.getErpRdBudgetLiteratureCostList(); - return literatureCostList; - } - /** * 创建资料/文献费表头 */