Browse Source

会员进度表,所有除数和被除数新增为0的情况下百分比为0

anderx 5 months ago
parent
commit
10e0a07363

+ 52 - 21
src/main/java/com/goafanti/techproject/service/impl/TaskDetailsServiceImpl.java

@@ -320,37 +320,54 @@ public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> im
         //计算人员占比
         if (taskDetails.getWorkersNumber()!=null||
                 taskDetails.getTechnologyNumber()!=null){
-            BigDecimal wn = BigDecimal.valueOf(taskDetails.getWorkersNumber());
-            BigDecimal tn = BigDecimal.valueOf(taskDetails.getTechnologyNumber());
-            BigDecimal res = tn.divide(wn,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
-            taskDetails.setWorkersRate(res.doubleValue());
+            if(taskDetails.getWorkersNumber()==0||taskDetails.getTechnologyNumber()==0){
+                taskDetails.setWorkersRate(0.0);
+            }else{
+                BigDecimal wn = BigDecimal.valueOf(taskDetails.getWorkersNumber());
+                BigDecimal tn = BigDecimal.valueOf(taskDetails.getTechnologyNumber());
+                BigDecimal res = tn.divide(wn,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+                taskDetails.setWorkersRate(res.doubleValue());
+            }
+
         }
         //计算研发预算完成进度    已归集研发费用总额÷年度研发预算总额X100%
         if (taskDetails.getActualRdAmount()!=null &&taskDetails.getRdBudget()!=null){
-            BigDecimal multiply = taskDetails.getActualRdAmount().divide(taskDetails.getRdBudget(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
-            taskDetails.setRdCompletionProgress(multiply.doubleValue());
+            if(taskDetails.getRdBudget().compareTo(BigDecimal.ZERO)==0||taskDetails.getActualRdAmount().compareTo(BigDecimal.ZERO)==0){
+                taskDetails.setRdCompletionProgress(0.0);
+            }else {
+                BigDecimal multiply = taskDetails.getActualRdAmount().divide(taskDetails.getRdBudget(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+                taskDetails.setRdCompletionProgress(multiply.doubleValue());
+            }
         }
         //计算年度研发占比
         //计算三年度的研发占比
             if (taskDetails.getRdBudget() != null && taskDetails.getRdSalesAmount() != null){
                 BigDecimal rdBudget = taskDetails.getRdBudget();
                 BigDecimal rdSalesAmount = taskDetails.getRdSalesAmount();
-                BigDecimal res = rdBudget.divide(rdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
-                taskDetails.setRdBudgetRate(res.doubleValue());
+                if (taskDetails.getRdBudget().compareTo(BigDecimal.ZERO)==0||taskDetails.getRdSalesAmount().compareTo(BigDecimal.ZERO)==0){
+                    taskDetails.setRdBudgetRate(0.0);
+                }else {
+                    BigDecimal res = rdBudget.divide(rdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+                    taskDetails.setRdBudgetRate(res.doubleValue());
+                }
                 //计算三年度的研发占比
                 if (taskDetails.getLastRdSalesAmount()!=null && taskDetails.getLastRdBudget()!=null&&
-                taskDetails.getBeforeLastRdSalesAmount()!=null && taskDetails.getBeforeLastRdBudget()!=null){
+                        taskDetails.getBeforeLastRdSalesAmount()!=null && taskDetails.getBeforeLastRdBudget()!=null){
                     BigDecimal res2 = getBigDecimal(rdSalesAmount, rdBudget, taskDetails);
                     taskDetails.setThreeYearsRdBudgetRate(res2.doubleValue());
                 }
             }
         //计算实际研发占比
-        if(taskDetails.getActualRdNumber() !=null &&
+        if(taskDetails.getActualSalesAmount() !=null &&
                 taskDetails.getActualRdAmount() !=null){
             BigDecimal actualSalesAmount = taskDetails.getActualSalesAmount();
             BigDecimal actualRdAmount = taskDetails.getActualRdAmount();
-            BigDecimal res3 = actualRdAmount.divide(actualSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
-            taskDetails.setActualRdRate(res3.doubleValue());
+            if (taskDetails.getActualSalesAmount().compareTo(BigDecimal.ZERO)==0||taskDetails.getActualRdAmount().compareTo(BigDecimal.ZERO)==0){
+                taskDetails.setActualRdRate(0.0);
+            }else {
+                BigDecimal res3 = actualRdAmount.divide(actualSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+                taskDetails.setActualRdRate(res3.doubleValue());
+            }
             if (taskDetails.getLastRdSalesAmount()!=null && taskDetails.getLastRdBudget()!=null&&
                     taskDetails.getBeforeLastRdSalesAmount()!=null && taskDetails.getBeforeLastRdBudget()!=null){
                 BigDecimal res4 = getBigDecimal(actualRdAmount, actualSalesAmount, taskDetails);
@@ -358,10 +375,14 @@ public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> im
             }
         }
         //计算立项资料占比
-        if (taskDetails.getProjectApprovalWriteNumber()!=null){
-            BigDecimal projectApprovalWriteNumber = BigDecimal.valueOf(taskDetails.getProjectApprovalWriteNumber());
-            BigDecimal res5 = projectApprovalWriteNumber.divide(new BigDecimal(taskDetails.getProjectApprovalNumber()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
-            taskDetails.setProjectApprovalWriteRate(res5.doubleValue());
+        if (taskDetails.getProjectApprovalWriteNumber()!=null&& taskDetails.getProjectApprovalNumber()!=null){
+            if (taskDetails.getProjectApprovalWriteNumber()==0||taskDetails.getProjectApprovalNumber()==0){
+                taskDetails.setProjectApprovalWriteRate(0.0);
+            }else {
+                BigDecimal projectApprovalWriteNumber = BigDecimal.valueOf(taskDetails.getProjectApprovalWriteNumber());
+                BigDecimal res5 = projectApprovalWriteNumber.divide(new BigDecimal(taskDetails.getProjectApprovalNumber()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+                taskDetails.setProjectApprovalWriteRate(res5.doubleValue());
+            }
         }
         //计算项目会员等级
         TOrderNew tOrderNew = tOrderNewMapper.selectByTid(taskDetails.getTid());
@@ -378,11 +399,21 @@ public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> im
     }
 
     private BigDecimal getBigDecimal(BigDecimal rdSalesAmount, BigDecimal rdBudget, TaskDetails taskDetails) {
-        BigDecimal threeYearsRdSalesAmount = rdSalesAmount;
-        BigDecimal threeYearsRdBudget = rdBudget;
-        threeYearsRdSalesAmount = threeYearsRdSalesAmount.add(taskDetails.getLastRdSalesAmount()).add(taskDetails.getBeforeLastRdSalesAmount());
-        threeYearsRdBudget = threeYearsRdBudget.add(taskDetails.getLastRdBudget()).add(taskDetails.getBeforeLastRdBudget());
-        return threeYearsRdBudget.divide(threeYearsRdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+        BigDecimal threeYearsRdSalesAmount = BigDecimal.ZERO;
+        BigDecimal threeYearsRdBudget = BigDecimal.ZERO;
+        threeYearsRdSalesAmount = threeYearsRdSalesAmount
+                .add(rdSalesAmount)
+                .add(taskDetails.getLastRdSalesAmount())
+                .add(taskDetails.getBeforeLastRdSalesAmount());
+        threeYearsRdBudget = threeYearsRdBudget
+                .add(rdBudget)
+                .add(taskDetails.getLastRdBudget())
+                .add(taskDetails.getBeforeLastRdBudget());
+        if (threeYearsRdSalesAmount.compareTo(BigDecimal.ZERO)==0||threeYearsRdBudget.compareTo(BigDecimal.ZERO)==0){
+            return BigDecimal.ZERO;
+        }else {
+            return threeYearsRdBudget.divide(threeYearsRdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+        }
     }
 
     /**