|
|
@@ -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));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|