فهرست منبع

项目成本测算模块

qianxb 2 سال پیش
والد
کامیت
a818321c1a
22فایلهای تغییر یافته به همراه861 افزوده شده و 10 حذف شده
  1. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ContractReturnedInfoDTO.java
  2. 27 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ProjectCostBudgetDTO.java
  3. 28 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ProjectCostBudgetStatsDTO.java
  4. 78 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  5. 48 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudgetStats.java
  6. 8 7
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java
  7. 40 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetStatsVO.java
  8. 35 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java
  9. 2 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java
  10. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractInfoController.java
  11. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractReturnedInfoController.java
  12. 30 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  13. 99 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetStatsController.java
  14. 12 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  15. 29 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  16. 36 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  17. 26 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetStatsMapper.java
  18. 24 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetStatsMapper.xml
  19. 33 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  20. 30 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetStatsService.java
  21. 146 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  22. 120 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetStatsServiceImpl.java

+ 1 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ContractReturnedInfoDTO.java

@@ -15,6 +15,6 @@ import java.util.List;
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class ContractReturnedInfoDTO extends ContractReturnedInfo{
-    @ApiModelProperty(value = "项目进程集合")
+    @ApiModelProperty(value = "合同回款集合")
     private List<ContractReturnedInfo> list;
 }

+ 27 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ProjectCostBudgetDTO.java

@@ -0,0 +1,27 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.control.entity.ProjectCostBudget;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/7 18:12
+ **/
+@Data
+public class ProjectCostBudgetDTO {
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "施工单位预算集合")
+    private List<ProjectCostBudget> buildUnit;
+
+    @ApiModelProperty(value = "监理单位预算集合")
+    private List<ProjectCostBudget> supervisorUnit;
+
+    @ApiModelProperty(value = "建设单位预算集合")
+    private List<ProjectCostBudget> constructUnit;
+}

+ 28 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ProjectCostBudgetStatsDTO.java

@@ -0,0 +1,28 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/7 18:12
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProjectCostBudgetStatsDTO extends ProjectCostBudgetStats {
+
+    @ApiModelProperty(value = "施工单位预算集合")
+    private List<ProjectCostBudget> buildUnit;
+
+    @ApiModelProperty(value = "监理单位预算集合")
+    private List<ProjectCostBudget> supervisorUnit;
+
+    @ApiModelProperty(value = "建设单位预算集合")
+    private List<ProjectCostBudget> constructUnit;
+}

+ 78 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -0,0 +1,78 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:21
+ **/
+@Data
+@TableName("c_project_cost_budget")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "项目成本测算表", description = "项目成本测算表")
+public class ProjectCostBudget extends BaseEntity {
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "单位类型1施工2监理3建设")
+    private Integer unitType;
+
+    @ApiModelProperty(value = "费用类型")
+    private Integer costType;
+
+    @ApiModelProperty(value = "项目环节")
+    private Long projectProcess;
+
+    @ApiModelProperty(value = "预算类型")
+    private Integer budgetType;
+
+    @ApiModelProperty(value = "任务类型")
+    private Integer taskDetail;
+
+    @ApiModelProperty(value = "预计天数")
+    private BigDecimal budgetDays;
+
+    @ApiModelProperty(value = "岗位类型")
+    private Integer postType;
+
+    @ApiModelProperty(value = "投入人员数量")
+    private BigDecimal staffCount;
+
+    @ApiModelProperty(value = "预计人工成本")
+    private BigDecimal budgetStaffCost;
+
+    @ApiModelProperty(value = "预计差旅费")
+    private BigDecimal budgetTravelExpense;
+
+    @ApiModelProperty(value = "外包单价")
+    private BigDecimal outsourceUnitPrice;
+
+    @ApiModelProperty(value = "外包人员数量")
+    private BigDecimal outsourcePeopleCount;
+
+    @ApiModelProperty(value = "外包总金额")
+    private BigDecimal outsourceCountMoney;
+
+    @ApiModelProperty(value = "其他预算金额")
+    private BigDecimal otherBudgetMoney;
+
+    @ApiModelProperty(value = "总预算金额")
+    private BigDecimal budgetCountMoney;
+
+    @ApiModelProperty(value = "预算备注")
+    private String budgetRemark;
+
+
+
+}

+ 48 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudgetStats.java

@@ -0,0 +1,48 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:21
+ **/
+@Data
+@TableName("c_project_cost_budget_stats")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "项目成本测算统计表", description = "项目成本测算统计表")
+public class ProjectCostBudgetStats extends BaseEntity {
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "项目成本总金额")
+    private BigDecimal projectCostTotal;
+
+    @ApiModelProperty(value = "研发部总金额")
+    private BigDecimal devCostTotal;
+
+    @ApiModelProperty(value = "业务部总金额")
+    private BigDecimal businessCostTotal;
+
+    @ApiModelProperty(value = "市场部总金额")
+    private BigDecimal marketCostTotal;
+
+    @ApiModelProperty(value = "维护部总金额")
+    private BigDecimal maintainCostTotal;
+
+    @ApiModelProperty(value = "外包总金额")
+    private BigDecimal outsourceCostTotal;
+
+    @ApiModelProperty(value = "管理总金额")
+    private BigDecimal manageCostTotal;
+
+
+
+}

+ 8 - 7
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java

@@ -1,5 +1,6 @@
 package org.springblade.control.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.control.entity.ControlProjectInfo;
@@ -15,18 +16,18 @@ import java.util.List;
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class ControlProjectInfoVO extends ControlProjectInfo {
-    //项目类型值
+    @ApiModelProperty(value = "项目类型值")
     private String projectTypeValue;
-    //项目服务类型值
+    @ApiModelProperty(value = "项目服务类型值")
     private String projectServerTypeValue;
-    //合同金额
+    @ApiModelProperty(value = "合同金额")
     private BigDecimal contractMoney;
-    //项目负责人名称
+    @ApiModelProperty(value = "项目负责人名称")
     private String projectPrincipalName;
-    //实施负责人名称
+    @ApiModelProperty(value = "实施负责人名称")
     private String implementPrincipalName;
-    //维护负责人名称
+    @ApiModelProperty(value = "维护负责人名称")
     private String maintainPrincipalName;
-    //项目进程集合
+    @ApiModelProperty(value = "项目进程集合")
     private List<ProjectProcessVO> projectProcessList;
 }

+ 40 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetStatsVO.java

@@ -0,0 +1,40 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/8 10:30
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProjectCostBudgetStatsVO extends ProjectCostBudgetStats {
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "预览总成本")
+    private BigDecimal previewTotalCost;
+
+    @ApiModelProperty(value = "状态值")
+    private String statusValue;
+
+    @ApiModelProperty(value = "预览成本明细集合")
+    private List<ProjectCostBudgetVO> previewList;
+
+    @ApiModelProperty(value = "施工单位预算集合")
+    private List<ProjectCostBudget> buildUnit;
+
+    @ApiModelProperty(value = "监理单位预算集合")
+    private List<ProjectCostBudget> supervisorUnit;
+
+    @ApiModelProperty(value = "建设单位预算集合")
+    private List<ProjectCostBudget> constructUnit;
+}

+ 35 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java

@@ -0,0 +1,35 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ProjectCostBudget;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/8 10:30
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProjectCostBudgetVO extends ProjectCostBudget {
+
+    @ApiModelProperty(value = "费用分类值")
+    private String costTypeValue;
+
+    @ApiModelProperty(value = "项目环节名称")
+    private String projectProcessValue;
+
+    @ApiModelProperty(value = "预算类型值")
+    private String budgetTypeValue;
+
+    @ApiModelProperty(value = "任务明细值")
+    private String taskDetailValue;
+
+    @ApiModelProperty(value = "岗位类型值")
+    private String postTypeValue;
+
+}

+ 2 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java

@@ -1,5 +1,6 @@
 package org.springblade.control.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import jdk.net.SocketFlow;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -13,6 +14,6 @@ import org.springblade.control.entity.ProjectProcess;
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class ProjectProcessVO extends ProjectProcess {
-    //进程状态值
+    @ApiModelProperty(value = "进程状态值")
     private String statusValue;
 }

+ 8 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractInfoController.java

@@ -2,6 +2,8 @@ package org.springblade.control.controller;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.control.dto.ControlContractInfoDTO;
@@ -42,6 +44,9 @@ public class ContractInfoController {
     @GetMapping("/deleteContractInfoById")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "删除合同")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "合同id", required = true),
+    })
     public R deleteContractInfoById(Long id) {
         contractInfoService.deleteContractInfoById(id);
         return R.success("删除成功");
@@ -64,6 +69,9 @@ public class ContractInfoController {
     @GetMapping("/getContractInfoById")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "查询单个合同信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "合同id", required = true),
+    })
     public R getContractInfoById(Long id) {
         return R.data(contractInfoService.getContractInfoById(id));
     }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractReturnedInfoController.java

@@ -43,7 +43,7 @@ public class ContractReturnedInfoController {
      */
     @GetMapping("/getContractReturnList")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "获取合同回款列表")
+    @ApiOperation(value = "根据合同ID获取合同回款列表")
     public R getContractReturnList(Long contractId){
         return R.data(contractReturnedInfoService.getContractReturnList(contractId));
     }

+ 30 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java

@@ -0,0 +1,30 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/7 17:46
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/projectCostBudget")
+@Api(value = "项目成本测算接口", tags = "项目成本测算接口")
+public class ProjectCostBudgetController {
+
+    private final IProjectCostBudgetService budgetService;
+
+}

+ 99 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetStatsController.java

@@ -0,0 +1,99 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.control.service.IProjectCostBudgetStatsService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/7 17:46
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/projectCostBudgetStats")
+@Api(value = "项目成本测算统计接口", tags = "项目成本测算统计接口")
+public class ProjectCostBudgetStatsController {
+
+    private final IProjectCostBudgetStatsService budgetStatsService;
+
+    /**
+     * 新增或修改项目成本预算
+     */
+    @PostMapping("/AddOrUpdate")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "新增或修改")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+    })
+    public R AddOrUpdate(@RequestBody ProjectCostBudgetStatsDTO dto) {
+        budgetStatsService.AddOrUpdate(dto);
+        return R.success("保存成功");
+    }
+
+    /**
+     * 编辑返回单个信息
+     */
+    @GetMapping("/getBudgetStatsById")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "编辑返回单个信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "成本预算统计id", required = true),
+    })
+    public R getBudgetStatsById(Long id) {
+        return R.data(budgetStatsService.getBudgetStatsById(id));
+    }
+
+    /**
+     * 删除项目预算
+     */
+    @GetMapping("/deleteByStatsId")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "删除项目预算")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "成本预算统计id", required = true),
+    })
+    public R deleteByStatsId(Long id) {
+        budgetStatsService.deleteByProjectId(id);
+        return R.success("删除成功");
+    }
+
+    /**
+     * 分页获取列表
+     */
+    @GetMapping("/page")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "分页获取列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "queryValue", value = "搜索值", required = false),
+    })
+    public R page(String queryValue, Query query){
+        return R.data(budgetStatsService.page(queryValue,query));
+    }
+
+    /**
+     * 查询预览预算,默认显示所有
+     */
+    @GetMapping("/budgetList")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "查询预览预算,默认显示所有")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+            @ApiImplicitParam(name = "costType", value = "费用类型", required = false),
+            @ApiImplicitParam(name = "unitType", value = "单位类型1施工2监理3建设", required = false),
+    })
+    public R budgetList(ProjectCostBudget costBudget) {
+        return R.data(budgetStatsService.budgetList(costBudget));
+    }
+}

+ 12 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java

@@ -2,6 +2,8 @@ package org.springblade.control.controller;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -30,6 +32,10 @@ public class ProjectInfoController {
     @GetMapping("/page")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "分页查询项目列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "current", value = "当前页", required = true),
+            @ApiImplicitParam(name = "size", value = "每页的数量", required = true),
+    })
     public R page(ControlProjectInfoDTO dto, Query query) {
         return R.data(projectInfoService.page(dto, query));
     }
@@ -62,6 +68,9 @@ public class ProjectInfoController {
     @GetMapping("removeProjectInfo")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "删除项目")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "项目id", required = true),
+    })
     public R removeProjectInfo(Long id) {
         projectInfoService.removeProjectInfo(id);
         return R.success("删除成功");
@@ -73,6 +82,9 @@ public class ProjectInfoController {
     @GetMapping("/getProjectInfoById")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "编辑-根据id获取项目和流程")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "项目id", required = true),
+    })
     public R getProjectInfoById(Long id) {
         return R.data(projectInfoService.getProjectInfoById(id));
     }

+ 29 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -0,0 +1,29 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.MapKey;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.control.dto.ControlContractInfoDTO;
+import org.springblade.control.entity.*;
+import org.springblade.control.vo.ControlContractInfoVO;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
+
+
+    void removeOldBudget(@Param("projectId") Long projectId);
+
+    List<ProjectCostBudgetVO> budgetList(@Param("budget") ProjectCostBudget costBudget);
+
+    ProjectCostBudgetStats getBudgetTotalByProjectId(@Param("projectId") Long projectId);
+
+}

+ 36 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.control.mapper.ProjectCostBudgetMapper">
+
+
+    <delete id="removeOldBudget">
+        delete from c_project_cost_budget
+        where project_id = #{projectId}
+    </delete>
+
+    <select id="budgetList" resultType="org.springblade.control.vo.ProjectCostBudgetVO">
+        select
+            pcb.*
+        from c_project_cost_budget pcb
+        where pcb.project_id = #{budget.projectId}
+        <if test="budget.costType != null and budget.costType != ''">
+            and pcb.cost_type = #{budget.costType}
+        </if>
+        <if test="budget.unitType != null and budget.unitType != ''">
+            and pcb.unit_type = #{budget.unitType}
+        </if>
+    </select>
+    <select id="getBudgetTotalByProjectId" resultType="org.springblade.control.entity.ProjectCostBudgetStats">
+        select
+                (select name from c_control_project_info WHERE id = #{projectId}) as projectName,
+                (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId} and cost_type = 1) as marketCostTotal,
+                (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId} and cost_type = 2) as devCostTotal,
+                (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId} and cost_type = 3) as businessCostTotal,
+                (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId} and cost_type = 4) as maintainCostTotal,
+                (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId} and cost_type = 5) as manageCostTotal,
+                (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId} and cost_type = 6) as outsourceCostTotal,
+                (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId}) as projectCostTotal
+    </select>
+
+
+</mapper>

+ 26 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetStatsMapper.java

@@ -0,0 +1,26 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.vo.ProjectCostBudgetStatsVO;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface ProjectCostBudgetStatsMapper extends BaseMapper<ProjectCostBudgetStats> {
+
+
+    ProjectCostBudgetStatsVO getBudgetStatsById(@Param("id") Long id);
+
+    void deleteByProjectId(@Param("id") Long id);
+
+    List<ProjectCostBudgetStatsVO> page(IPage page,@Param("queryValue") String queryValue);
+}

+ 24 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetStatsMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.control.mapper.ProjectCostBudgetStatsMapper">
+    <delete id="deleteByProjectId">
+        delete from bladex.c_project_cost_budget_stats
+        where id = #{id}
+    </delete>
+
+    <select id="getBudgetStatsById" resultType="org.springblade.control.vo.ProjectCostBudgetStatsVO">
+        select
+            cbs.*,
+            (select name from c_control_project_info WHERE id = cbs.project_id ) as projectName
+        from c_project_cost_budget_stats cbs WHERE cbs.id = #{id}
+    </select>
+
+    <select id="page" resultType="org.springblade.control.vo.ProjectCostBudgetStatsVO">
+        SELECT cbs.*,cpi.name as projectName,CASE cbs.status WHEN '0' THEN '未上报' WHEN '1' THEN '已上报' WHEN '2' THEN '已审批' ELSE '已驳回' END as statusValue
+        from c_project_cost_budget_stats cbs left join bladex.c_control_project_info cpi on cbs.project_id = cpi.id
+        where 1=1
+        <if test="queryValue != null and queryValue != ''">
+            and cpi.name like concat('%', #{queryValue}, '%')
+        </if>
+    </select>
+</mapper>

+ 33 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -0,0 +1,33 @@
+package org.springblade.control.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:41
+ **/
+public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget> {
+
+    ProjectCostBudgetStats batchAddOrUpdate(ProjectCostBudgetStatsDTO dto);
+
+    List<ProjectCostBudgetVO> budgetList(ProjectCostBudget costBudget);
+
+    List<ProjectCostBudget> budgetListByProjectId(Long projectId);
+
+    void deleteByProjectId(Long projectId);
+}

+ 30 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetStatsService.java

@@ -0,0 +1,30 @@
+package org.springblade.control.service;
+
+import org.springblade.control.dto.ProjectCostBudgetDTO;
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.vo.ProjectCostBudgetStatsVO;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:41
+ **/
+public interface IProjectCostBudgetStatsService extends BaseService<ProjectCostBudgetStats> {
+
+    void AddOrUpdate(ProjectCostBudgetStatsDTO dto);
+
+    ProjectCostBudgetStatsVO getBudgetStatsById(Long id);
+
+    void deleteByProjectId(Long id);
+
+    List<ProjectCostBudgetStatsVO> page(String queryValue, Query query);
+
+    ProjectCostBudgetStatsVO budgetList(ProjectCostBudget costBudget);
+}

+ 146 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -0,0 +1,146 @@
+package org.springblade.control.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.mapper.ProjectCostBudgetMapper;
+import org.springblade.control.mapper.ProjectInfoMapper;
+import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.control.service.IProjectInfoService;
+import org.springblade.control.service.IProjectProcessService;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Query;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:43
+ **/
+@Service
+@AllArgsConstructor
+public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBudgetMapper, ProjectCostBudget> implements IProjectCostBudgetService {
+
+    /**
+     * 批量新增或修改预算
+     * @param dto
+     */
+    @Override
+    @Transactional
+    public ProjectCostBudgetStats batchAddOrUpdate(ProjectCostBudgetStatsDTO dto) {
+        List<ProjectCostBudget> allBudget = new ArrayList<>();
+        //施工单位
+        if (dto.getBuildUnit() != null && dto.getBuildUnit().size() > 0){
+            dto.getBuildUnit().stream().forEach(l->{
+              l.setProjectId(dto.getProjectId());
+              l.setUnitType(1);
+              countMoney(l);
+            });
+            allBudget.addAll(dto.getBuildUnit());
+        }
+        //监理单位
+        if (dto.getSupervisorUnit() != null && dto.getSupervisorUnit().size() > 0){
+            dto.getSupervisorUnit().stream().forEach(l->{
+                l.setProjectId(dto.getProjectId());
+                l.setUnitType(2);
+                countMoney(l);
+            });
+            allBudget.addAll(dto.getSupervisorUnit());
+        }
+        //建设单位
+        if (dto.getConstructUnit() != null && dto.getConstructUnit().size() > 0){
+            dto.getConstructUnit().stream().forEach(l->{
+                l.setProjectId(dto.getProjectId());
+                l.setUnitType(3);
+                countMoney(l);
+            });
+            allBudget.addAll(dto.getConstructUnit());
+        }
+        baseMapper.removeOldBudget(dto.getProjectId());
+        this.saveOrUpdateBatch(allBudget);
+        //计算保存完,统计总和,修改统计表
+        ProjectCostBudgetStats budgetStats = baseMapper.getBudgetTotalByProjectId(dto.getProjectId());
+        return budgetStats;
+    }
+
+    /**
+     * 项目预算列表,默认所有
+     * @param costBudget
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudgetVO> budgetList(ProjectCostBudget costBudget) {
+        return baseMapper.budgetList(costBudget);
+    }
+
+    /**
+     * 查询项目下所有预算明细
+     * @param projectId
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudget> budgetListByProjectId(Long projectId) {
+        return this.list(new LambdaQueryWrapper<ProjectCostBudget>().eq(ProjectCostBudget::getProjectId,projectId));
+
+    }
+
+
+    /**
+     * 根据项目id删除项目
+     * @param projectId
+     */
+    @Override
+    public void deleteByProjectId(Long projectId) {
+        baseMapper.removeOldBudget(projectId);
+    }
+
+    /**
+     * 统计一行的几个总金额
+     */
+    public static void countMoney(ProjectCostBudget budget){
+        BigDecimal postMoney = new BigDecimal("100");
+        //人工成本 = 人员数量 * 单价 * 天数
+        if (budget.getStaffCount() != null && budget.getBudgetDays() != null) {
+            budget.setBudgetStaffCost(budget.getStaffCount().multiply(postMoney).multiply(budget.getBudgetDays()));
+        }else {
+            budget.setBudgetStaffCost(new BigDecimal("0"));
+        }
+        //外包金额 = 外包单价 * 外包数量
+        if (budget.getOutsourcePeopleCount() != null && budget.getOutsourceUnitPrice() != null) {
+            budget.setOutsourceCountMoney(budget.getOutsourceUnitPrice().multiply(budget.getOutsourcePeopleCount()));
+        }else {
+            budget.setOutsourceCountMoney(new BigDecimal("0"));
+        }
+        //判断差旅费
+        if (budget.getBudgetTravelExpense() == null){
+            budget.setBudgetTravelExpense(new BigDecimal("0"));
+        }
+        //判断其他预算金额
+        if (budget.getOtherBudgetMoney() == null){
+            budget.setOtherBudgetMoney(new BigDecimal("0"));
+        }
+        //总预算 = 人工成本 + 外包金额 + 差旅费 + 其他费用
+        budget.setBudgetCountMoney(budget.getBudgetStaffCost().add(budget.getBudgetTravelExpense())
+                .add(budget.getOutsourceCountMoney()).add(budget.getOtherBudgetMoney()));
+
+    }
+
+}

+ 120 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetStatsServiceImpl.java

@@ -0,0 +1,120 @@
+package org.springblade.control.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.mapper.ProjectCostBudgetMapper;
+import org.springblade.control.mapper.ProjectCostBudgetStatsMapper;
+import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.control.service.IProjectCostBudgetStatsService;
+import org.springblade.control.service.IProjectInfoService;
+import org.springblade.control.vo.ProjectCostBudgetStatsVO;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Query;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:43
+ **/
+@Service
+@AllArgsConstructor
+public class ProjectCostBudgetStatsServiceImpl extends BaseServiceImpl<ProjectCostBudgetStatsMapper, ProjectCostBudgetStats> implements IProjectCostBudgetStatsService {
+    private final IProjectCostBudgetService budgetService;
+    private final IProjectInfoService projectInfoService;
+
+    /**
+     * 新增项目成本预算
+     * @param dto
+     */
+    @Override
+    @Transactional
+    public void AddOrUpdate(ProjectCostBudgetStatsDTO dto) {
+        //先新增或保存项目成本明细,返回统计后的数据
+        ProjectCostBudgetStats budgetStats = budgetService.batchAddOrUpdate(dto);
+        if (dto.getId() != null){
+            budgetStats.setId(dto.getId());
+        }
+        budgetStats.setProjectId(dto.getProjectId());
+        budgetStats.setStatus(0);
+        this.saveOrUpdate(budgetStats);
+    }
+
+    /**
+     * 根据id查询项目成本和具体明细
+     * @param id
+     * @return
+     */
+    @Override
+    public ProjectCostBudgetStatsVO getBudgetStatsById(Long id) {
+        //查询项目成本统计
+        ProjectCostBudgetStatsVO vo = baseMapper.getBudgetStatsById(id);
+        //查询具体明细并分组存入
+        List<ProjectCostBudget> list = budgetService.budgetListByProjectId(vo.getProjectId());
+        Map<Integer, List<ProjectCostBudget>> map = list.parallelStream().collect(Collectors.groupingBy(ProjectCostBudget::getUnitType));
+        vo.setBuildUnit(map.get(1));
+        vo.setSupervisorUnit(map.get(2));
+        vo.setConstructUnit(map.get(3));
+        return vo;
+    }
+
+    /**
+     * 根据id删除项目统计和详情
+     * @param id
+     */
+    @Override
+    @Transactional
+    public void deleteByProjectId(Long id) {
+        ProjectCostBudgetStats stats = this.getById(id);
+        //先删除成本详情
+        budgetService.deleteByProjectId(stats.getProjectId());
+        //再删除成本统计
+        baseMapper.deleteByProjectId(id);
+    }
+
+    /**
+     * 分页获取列表
+     * @param queryValue
+     * @param query
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudgetStatsVO> page(String queryValue, Query query) {
+        IPage page = new Page(query.getCurrent(), query.getSize());
+        return baseMapper.page(page,queryValue);
+    }
+
+    /**
+     * 查询预览预算,默认显示所有
+     */
+    @Override
+    public ProjectCostBudgetStatsVO budgetList(ProjectCostBudget costBudget) {
+        ProjectCostBudgetStatsVO vo = new ProjectCostBudgetStatsVO();
+        ControlProjectInfo projectInfo = projectInfoService.getById(costBudget.getProjectId());
+        vo.setProjectName(projectInfo.getName());
+        List<ProjectCostBudgetVO> list = budgetService.budgetList(costBudget);
+        BigDecimal bigDecimal = new BigDecimal("0");
+        for (ProjectCostBudgetVO l : list) {
+            bigDecimal = bigDecimal.add(l.getBudgetCountMoney());
+        }
+        vo.setPreviewTotalCost(bigDecimal);
+        vo.setPreviewList(list);
+        return vo;
+    }
+}