Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

liuyc 2 лет назад
Родитель
Сommit
557e5cd631
14 измененных файлов с 143 добавлено и 13 удалено
  1. 7 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  2. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AllProjectStatsVO.java
  3. 22 4
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java
  4. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  5. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  6. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  7. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  8. 20 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  9. 12 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  10. 51 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java
  11. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java
  12. 7 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java
  13. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java
  14. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

+ 7 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -79,7 +79,7 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "预算备注")
     private String budgetRemark;
 
-    @ApiModelProperty(value = "之前是否审批通过")
+    @ApiModelProperty(value = "成本测算是否审批通过")
     private String approve;
 
     @ApiModelProperty(value = "计划任务类型")
@@ -116,6 +116,12 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "计划天数")
     private BigDecimal planDays;
 
+    @ApiModelProperty(value = "实际任务天数")
+    private BigDecimal practicalTaskDays;
+
+    @ApiModelProperty(value = "任务完成后是否审批通过")
+    private String taskApprove;
+
     @ApiModelProperty(value = "关联回款")
     @JsonSerialize(nullsUsing = NullSerializer.class)
     private Long contractReturnedId;

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

@@ -33,7 +33,7 @@ public class AllProjectStatsVO {
     @ApiModelProperty(value = "预算成本")
     private BigDecimal budgetCost;
 
-    @ApiModelProperty(value = "实际已支出成本")
+    @ApiModelProperty(value = "实际已支出成本")
     private BigDecimal practicalPayCost;
 
     @ApiModelProperty(value = "实际已回款")

+ 22 - 4
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java

@@ -5,6 +5,10 @@ import jdk.net.SocketFlow;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.control.entity.ProjectProcess;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @Param
@@ -18,15 +22,29 @@ public class ProjectProcessVO extends ProjectProcess {
     private String statusValue;
 
     @ApiModelProperty(value = "是否参与")
-    private String isParticipate;
+    private Integer isParticipate;
 
     @ApiModelProperty(value = "成本支出")
-    private String costIncome;
+    private BigDecimal costDisburse;
 
     @ApiModelProperty(value = "时间成本")
-    private String timeCost;
+    private BigDecimal timeCost;
 
     @ApiModelProperty(value = "人员投入")
-    private String staffTotal;
+    private Integer staffTotal;
+
+    @ApiModelProperty(value = "明细")
+    private List<costDetail> costDetails;
+
+    @Data
+    public static class costDetail {
+        @ApiModelProperty(value = "费用类型")
+        private String costTypeValue;
+
+        @ApiModelProperty(value = "费用")
+        private BigDecimal price;
 
+        @ApiModelProperty(value = "总计")
+        private BigDecimal total;
+    }
 }

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

@@ -51,4 +51,8 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     Integer getPostMoney(@Param("type") Integer postType);
 
     List<ProjectCostBudget> getAllBudgetByProjectId(@Param("id") Long id);
+
+    List<ProjectCostBudget> getProjectAllFinishedTask(@Param("projectId") Long projectId,@Param("costType") Integer costType);
+
+    List<ProjectCostBudget> getAllPracticalBudgetByProjectId(@Param("projectId") Long projectId);
 }

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

@@ -121,6 +121,13 @@
     <select id="getAllBudgetByProjectId" resultType="org.springblade.control.entity.ProjectCostBudget">
         select * from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = #{id} and pcb.parent_id = 0
     </select>
+    <select id="getProjectAllFinishedTask" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select * from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = #{projectId} and cost_type = #{costType} and pcb.task_approve = 1
+    </select>
+    <select id="getAllPracticalBudgetByProjectId"
+            resultType="org.springblade.control.entity.ProjectCostBudget">
+        select * from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = #{projectId} and pcb.task_approve = 1
+    </select>
 
 
 </mapper>

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -57,6 +57,7 @@
         select
             (select sum(cci.contract_money)  from c_control_contract_info cci WHERE cci.is_deleted = 0) as allContractMoney,
             (select SUM(cbs.project_cost_total)  from c_project_cost_budget_stats cbs WHERE cbs.is_deleted = 0) as allProjectCost,
+            (select SUM(pcb.actual_total_money)  from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.task_approve = 1)as "allPracticalDisburse",
             (select SUM(cri.practical_returned_money)  from c_contract_returned_info cri WHERE cri.is_deleted = 0) as allReturned
     </select>
     <select id="ProjectListStats" resultType="org.springblade.control.vo.AllProjectStatsVO">
@@ -64,6 +65,7 @@
             cpi.name as 'projectName',
             cci.contract_money  as 'contractMoney',
                 (select cbs.project_cost_total from c_project_cost_budget_stats cbs WHERE cpi.id = cbs.project_id  and cbs.is_deleted = 0) as 'budgetCost',
+                (select SUM(pcb.actual_total_money)  from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = cpi.id and pcb.task_approve = 1)as "practicalPayCost",
                 (select SUM(cri.practical_returned_money)  from c_contract_returned_info cri WHERE cpi.id = cri.project_id and cri.is_deleted = 0) as 'ReturnedMoney',
                 (cci.contract_money - IFNULL((select SUM(cri.practical_returned_money) from c_contract_returned_info cri WHERE cri.contract_id = cci.id and cri.is_deleted = 0),0)) as 'unreturnedMoney'
         from c_control_project_info cpi left join c_control_contract_info cci on cpi.id = cci.project_id and cci.is_deleted = 0

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

@@ -54,4 +54,8 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<Map<String,List<Integer>>> MonthOfYearPlanOverview();
 
     List<ProjectCostBudget> getAllBudgetByProjectId(Long id);
+
+    List<ProjectCostBudget> getProjectAllFinishedTask(Long projectId,Integer costType);
+
+    List<ProjectCostBudget> getAllPracticalBudgetByProjectId(Long projectId);
 }

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

@@ -385,6 +385,26 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return baseMapper.getAllBudgetByProjectId(id);
     }
 
+    /**
+     * 获取当前项目所有预算已闭环的任务
+     * @param projectId
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudget> getProjectAllFinishedTask(Long projectId,Integer costType) {
+        return baseMapper.getProjectAllFinishedTask(projectId,costType);
+    }
+
+    /**
+     * 获取项目的所有实际费用
+     * @param id
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudget> getAllPracticalBudgetByProjectId(Long projectId) {
+        return baseMapper.getAllPracticalBudgetByProjectId(projectId);
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 12 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -164,6 +164,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         List<DictInfo> costTypeDict = baseMapper.getCostTypeDict();
         //获取项目所有预算
         List<ProjectCostBudget> budgets = budgetService.getAllBudgetByProjectId(id);
+        //获取项目所有实际费用
+        List<ProjectCostBudget> practicalList = budgetService.getAllPracticalBudgetByProjectId(id);
         if (budgets != null && budgets.size() > 0){
             Map<Integer, List<ProjectCostBudget>> budgetMap = budgets.parallelStream()
                     .collect(Collectors.groupingBy(ProjectCostBudget::getCostType));
@@ -179,6 +181,16 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
                     }
                 }
                 vo.setBudgetCost(bigDecimal);
+                //设置费用分类实际费用,目前只设置人工
+                BigDecimal practicalCost = new BigDecimal(0);
+                if (practicalList != null && practicalList.size() > 0){
+                    for (ProjectCostBudget budget : practicalList) {
+                        if (budget.getCostType() == i){
+                            practicalCost = practicalCost.add(budget.getActualTotalMoney());
+                        }
+                    }
+                }
+                vo.setPracticalCost(practicalCost);
                 list.add(vo);
             }
             return list;

+ 51 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java

@@ -4,16 +4,24 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ProjectCostBudget;
 import org.springblade.control.entity.ProjectProcess;
 import org.springblade.control.mapper.ProjectProcessMapper;
+import org.springblade.control.service.IProjectCostBudgetService;
 import org.springblade.control.service.IProjectProcessService;
 import org.springblade.control.vo.ProjectProcessVO;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.entity.TopMenu;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @Param
@@ -24,6 +32,7 @@ import java.util.List;
 @AllArgsConstructor
 public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMapper, ProjectProcess> implements IProjectProcessService {
     private final ProjectProcessMapper processMapper;
+    private final IProjectCostBudgetService budgetService;
 
     /**
      * 新增项目时保存进程
@@ -109,6 +118,48 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
      */
     @Override
     public List<ProjectProcessVO> processService(Long projectId, Integer costType) {
+        //获取当前项目所有项目环节
+        List<ProjectProcessVO> list = processMapper.getProjectProcess(projectId);
+        //获取项目具体部门所有已闭环的任务
+        List<ProjectCostBudget> budgets = budgetService.getProjectAllFinishedTask(projectId,costType);
+        if (budgets != null || budgets.size() > 0){
+            //获取项目环节的set集合
+            Set<Long> set = budgets.stream().map(l -> l.getProjectProcess()).collect(Collectors.toSet());
+            //根据项目环节分组
+            Map<Long, List<ProjectCostBudget>> map = budgets.parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudget::getProjectProcess));
+            //包含此环节就统计,不包含就跳出
+            for (ProjectProcessVO vo : list) {
+                if (set.contains(vo.getId())){
+                    //设置参与
+                    vo.setIsParticipate(1);
+                    //时间成本统计总天数,人员投入统计总人数,成本支出统计当前环节总支出
+                    List<ProjectCostBudget> budgetList = map.get(vo.getId());
+                    BigDecimal costDisburse = new BigDecimal(0);
+                    BigDecimal timeCost = new BigDecimal(0);
+                    int staffTotal = budgetList.size();
+                    for (ProjectCostBudget budget : budgetList) {
+                        costDisburse = costDisburse.add(budget.getActualTotalMoney());
+                        timeCost = timeCost.add(budget.getPracticalTaskDays());
+                    }
+                    //设置费用明细
+                    List<ProjectProcessVO.costDetail> details = new ArrayList<>();
+                    ProjectProcessVO.costDetail costDetail = new ProjectProcessVO.costDetail();
+                    costDetail.setCostTypeValue("人工成本");
+                    costDetail.setPrice(costDisburse);
+                    costDetail.setTotal(costDisburse);
+                    details.add(costDetail);
+                    //目前环节费用的成本支出只统计了人工成本
+                    vo.setCostDisburse(costDisburse);
+                    vo.setTimeCost(timeCost);
+                    vo.setStaffTotal(staffTotal);
+                    vo.setCostDetails(details);
+                }else {
+                    vo.setIsParticipate(0);
+                }
+            }
+            return list;
+        }
         return null;
     }
 }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java

@@ -158,14 +158,14 @@ public class WbsParamController {
                     for (WbsParamBean b : updateList) {
                         WbsParam old = this.service.getById(b.getId());
                         if (pb.isCommon()) {
-                            if (old != null && (!old.getV().equals(b.getV())||StringUtils.isNotEquals(old.getRemark(),b.getRemark()))) {
+                            if (old != null && (StringUtils.isNotEquals(old.getK(),b.getK())||StringUtils.isNotEquals(old.getRemark(),b.getRemark()))) {
                                 /*只有公式内容变化的时候才需要更新*/
                                 old.setIsDeleted(0);
                                 BeanUtils.copyProperties(b, old);
                                 ul.add(old);
                             }
                         } else {
-                            if (old != null && (!old.getV().equals(b.getV())||StringUtils.isNotEquals(old.getRemark(),b.getRemark()))) {
+                            if (old != null && (StringUtils.isNotEquals(old.getV(),b.getV())||StringUtils.isNotEquals(old.getRemark(),b.getRemark()))) {
                                 /*只有公式内容变化的时候才需要更新*/
                                 old.setIsDeleted(0);
                                 BeanUtils.copyProperties(b, old);

+ 7 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -8,6 +8,7 @@ import org.springblade.manager.formula.impl.TableElementConverter;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.ThreadLocalRandom;
 import java.util.stream.Collectors;
 
 import static com.mixsmart.utils.CustomFunction.rangeList;
@@ -20,9 +21,10 @@ import static org.springblade.manager.formula.TurnPoint.*;
 public interface ITurnPointCalculator {
 
 
-    static List<TurnPoint> create(List<Map<String, Object>> data, LinkedHashMap<String, String> configMap) {
+    static List<TurnPoint> create(List<Map<String, Object>> data, LinkedHashMap<String, String> configMap,String g8pcfw) {
         if (Func.isNotEmpty(data) && configMap != null) {
             LevelInfo levelInfo = new LevelInfo();
+            levelInfo.setDx(g8pcfw);
             List<TurnPoint> tmp = new ArrayList<>();
             for (int i = 0; i < data.size(); i++) {
                 Map<String, Object> dm = data.get(i);
@@ -89,7 +91,8 @@ public interface ITurnPointCalculator {
                         TurnPoint close = new TurnPoint(levelInfo, new HashMap<>());
                         close.setName(levelInfo.getBmdName());
                         close.setSj(levelInfo.getBmdSj());
-                        double ldx = Double.parseDouble(rangeList(1, 0, levelInfo.getDx(), 0.001, 3, 1).get(0).toString());
+                        /*闭合点的偏差范围是±3mm*/
+                        double ldx=Arrays.asList(-3,-2,-1,1,2,3).get(ThreadLocalRandom.current().nextInt(6));
                         close.setSc(close.getSj0L() + ldx);
                         close.setDx(ldx);
                         close.setType(TurnPoint.CLOSE);
@@ -113,6 +116,8 @@ public interface ITurnPointCalculator {
         return Collections.emptyList();
     }
 
+
+
     static List<TurnPoint> fill(List<TurnPoint> turnPointList) {
         if (ListUtils.isNotEmpty(turnPointList)) {
             Random rd = new Random();

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -60,6 +60,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
                     return;
                 }
             }
+            String g8pcfw =Expression.parse("WP['g8pcfw']").calculate(tec.getConstantMap());
             CompositeDataAccess cda = new CompositeDataAccess(dataSourceMap);
             List<Map<String, Object>> tableData = new ArrayList<>();
             /*用来映射元素*/
@@ -88,7 +89,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
             }
             @SuppressWarnings("unchecked")
             Map<String, Object> g8 = (Map<String, Object>) tec.getConstantMap().computeIfAbsent("G8", k -> new HashMap<>());
-            List<TurnPoint> result = ITurnPointCalculator.create(tableData, configMap);
+            List<TurnPoint> result = ITurnPointCalculator.create(tableData, configMap,g8pcfw);
             /*V判断*/
             forG8(result, g8,tec);
             List<Object> data= result.stream().map(TurnPoint::getDataMap).flatMap(m -> {

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1607,10 +1607,10 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                                      data=result.get(1);
                              }
                          }
-
-                         f = f.replace(m.group(),putDataWithKey(data));
+                         f = f.replace(m.group(),putDataWithKey(BaseUtils.isNumber(data)?Double.parseDouble(data.toString()):data));
                      }
                      fd.getFormula().setFormula(f);
+                     formula.setScale(1);
                  }
                  formula.setFormula(f);
              }catch (Exception e){