Browse Source

门户的支出跨年跨月问题

qianxb 2 năm trước cách đây
mục cha
commit
143bb26a90

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

@@ -162,7 +162,7 @@
         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}
+        select * from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = #{projectId}  and (select cdi.dict_value from c_dict_info cdi WHERE cdi.id = pcb.plan_task_type) = 1
         <if test="costType != null and costType != ''">
             and cost_type = #{costType}
         </if>

+ 37 - 5
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -549,8 +549,25 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                 BigDecimal big = new BigDecimal(0);
                 if (budgets != null && budgets.size() > 0) {
                     for (ProjectCostBudget budget : budgets) {
-                        if (budget.getPracticalFinishTime().getMonthValue() == i) {
-                            big = big.add(budget.getActualTotalMoney());
+                        //计算人工支出
+                        if (budget.getRealPlanStartTime().getYear() != y || budget.getPracticalFinishTime().getYear() != y){
+                            if (budget.getIsTwoMonth() != 1){
+                                throw new ServiceException("计划年份异常2");
+                            }
+                            if (budget.getPracticalFinishTime().getYear() != y){
+                                //如果结束时间不是今年,则使用开始金额
+                                if (budget.getRealPlanStartTime().getMonthValue() == i) {
+                                    big = big.add(budget.getPracticalStartMoney());
+                                }
+                            }else {
+                                if (budget.getPracticalFinishTime().getMonthValue() == i) {
+                                    big = big.add(budget.getPracticalEndMoney());
+                                }
+                            }
+                        }else {
+                            if (budget.getPracticalFinishTime().getMonthValue() == i) {
+                                big = big.add(budget.getActualTotalMoney());
+                            }
                         }
                     }
                 }
@@ -713,6 +730,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
      */
     @Override
     public List<ProjectIncomeCostRatioVO> portalProjectCostRatio(String date) {
+        int y = Integer.parseInt(date.substring(0,4));
 //        if ("汇总所有".equals(date)){
 //            date = "";
 //        }
@@ -735,7 +753,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }
         List<ProjectIncomeCostRatioVO> vos = new ArrayList<>();
         //按年获取闭环任务,根据项目分组
-        List<ProjectCostBudget> costByMonth = budgetService.getPlanPracticalCostByMonth(date.substring(0,4));
+        List<ProjectCostBudget> costByMonth = budgetService.getBudgetByYear(y);
         if (costByMonth == null || costByMonth.size() <= 0){
             //没有闭环任务,为每个项目设置为0
             for (ControlProjectInfo info : list) {
@@ -763,7 +781,21 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             List<ProjectCostBudget> budgets = map.get(info.getId());
             if (budgets != null && budgets.size() > 0){
                 for (ProjectCostBudget budget : budgets) {
-                    big = big.add(budget.getActualTotalMoney());
+//                    big = big.add(budget.getActualTotalMoney());
+                    if (budget.getRealPlanStartTime().getYear() != y || budget.getPracticalFinishTime().getYear() != y){
+                        if (budget.getIsTwoMonth() != 1){
+                            throw new ServiceException("计划年份异常3");
+                        }
+                        if (budget.getPracticalFinishTime().getYear() != y){
+                            //如果结束时间不是今年,则使用开始金额
+                            big = big.add(budget.getPracticalStartMoney());
+                        }else {
+                            big = big.add(budget.getPracticalEndMoney());
+                        }
+                    }else {
+                        big = big.add(budget.getActualTotalMoney());
+                    }
+
                 }
             }
             //维护支出
@@ -845,7 +877,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }else {
             isPlan2 = false;
         }
-        //获取项目所有已经闭环的计划
+        //获取项目所有已经闭环的固定计划
         List<ProjectCostBudget> finishedTask = budgetService.getProjectAllFinishedTask(projectId, null);
         Map<Long, List<ProjectCostBudget>> collect = new HashMap<>();
         boolean isPlan = true ;

+ 23 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -933,11 +933,30 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
      */
     @Override
     public BigDecimal getYearStaffDisburse(int year) {
-        BigDecimal yearStaffDisburse = baseMapper.getYearStaffDisburse(year);
-        if (yearStaffDisburse == null){
-            return new BigDecimal(0);
+        //不直接获取总金额,因为要跨年
+        //BigDecimal yearStaffDisburse = baseMapper.getYearStaffDisburse(year);
+        //获取实际开始完成时间有今年的临时计划
+        List<ProjectCostBudget> list = baseMapper.getBudgetByYear(year);
+        if (list != null && list.size() > 0){
+            BigDecimal big = new BigDecimal(0);
+            for (ProjectCostBudget budget : list) {
+                if (budget.getRealPlanStartTime().getYear() != year || budget.getPracticalFinishTime().getYear() != year){
+                    if (budget.getIsTwoMonth() != 1){
+                        throw new ServiceException("计划年份异常");
+                    }
+                    if (budget.getPracticalFinishTime().getYear() != year){
+                        //如果结束时间不是今年,则使用开始金额
+                        big = big.add(budget.getPracticalStartMoney());
+                    }else {
+                        big = big.add(budget.getPracticalEndMoney());
+                    }
+                }else {
+                    big = big.add(budget.getActualTotalMoney());
+                }
+            }
+            return big;
         }
-        return yearStaffDisburse;
+        return new BigDecimal(0);
     }
 
     /**