Kaynağa Gözat

咨询进度表开发

anderx 1 yıl önce
ebeveyn
işleme
da25abade0

+ 2 - 0
src/main/java/com/goafanti/common/dao/TaskAnnualReportMapper.java

@@ -82,5 +82,7 @@ public interface TaskAnnualReportMapper {
     int deleteById(Integer id);
 
     TaskAnnualReport selectByTidAndYear(@Param("tid") Integer tid, @Param("year") Integer year);
+
+    List<TaskAnnualReport> selectThreeYear(@Param("tid") Integer tid, @Param("year") int year);
 }
 

+ 8 - 0
src/main/java/com/goafanti/common/mapper/TaskAnnualReportMapper.xml

@@ -170,5 +170,13 @@
         where tid = #{tid} and year = #{year}
     </select>
 
+    <select id="selectThreeYear" resultType="com.goafanti.common.model.TaskAnnualReport">
+        resultMap="TaskAnnualReportMap">
+        select
+        <include refid="TaskAnnualReportAllSql"/>
+        from task_annual_report
+        where tid = #{tid} and year in (#{year}-1,#{year}-2)
+    </select>
+
 </mapper>
 

+ 3 - 3
src/main/java/com/goafanti/common/model/TaskDetails.java

@@ -48,7 +48,7 @@ public class TaskDetails implements Serializable {
     /**
      * 年度研发预算占比
      */
-    private Integer rdBudgetRate;
+    private Double rdBudgetRate;
     /**
      * 三年研发预算占比
      */
@@ -199,11 +199,11 @@ public class TaskDetails implements Serializable {
         this.rdBudget = rdBudget;
     }
 
-    public Integer getRdBudgetRate() {
+    public Double getRdBudgetRate() {
         return rdBudgetRate;
     }
 
-    public void setRdBudgetRate(Integer rdBudgetRate) {
+    public void setRdBudgetRate(Double rdBudgetRate) {
         this.rdBudgetRate = rdBudgetRate;
     }
 

+ 44 - 16
src/main/java/com/goafanti/techproject/service/impl/TaskDetailsServiceImpl.java

@@ -1,13 +1,7 @@
 package com.goafanti.techproject.service.impl;
 
-import com.goafanti.common.dao.TOrderNewMapper;
-import com.goafanti.common.dao.TaskDetailsExtendMapper;
-import com.goafanti.common.dao.TaskDetailsMapper;
-import com.goafanti.common.dao.TaskDetailsSupplementMapper;
-import com.goafanti.common.model.TOrderNew;
-import com.goafanti.common.model.TaskDetails;
-import com.goafanti.common.model.TaskDetailsExtend;
-import com.goafanti.common.model.TaskDetailsSupplement;
+import com.goafanti.common.dao.*;
+import com.goafanti.common.model.*;
 import com.goafanti.core.mybatis.BaseMybatisDao;
 import com.goafanti.core.mybatis.page.Pagination;
 import com.goafanti.core.shiro.token.TokenManager;
@@ -19,8 +13,10 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -39,6 +35,8 @@ public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> im
     private TaskDetailsSupplementMapper taskDetailsSupplementMapper;
     @Resource
     private TOrderNewMapper tOrderNewMapper;
+    @Resource
+    private TaskAnnualReportMapper taskAnnualReportMapper;
 
 
     @Override
@@ -88,14 +86,8 @@ public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> im
         Date date = new Date();
         taskDetails.setCreateTime(date);
         taskDetails.setUpdateTime(date);
-        if (taskDetails.getWorkersNumber()!=null||
-            taskDetails.getTechnologyNumber()!=null){
-            BigDecimal wn = BigDecimal.valueOf(taskDetails.getWorkersNumber());
-            BigDecimal tn = BigDecimal.valueOf(taskDetails.getTechnologyNumber());
-            BigDecimal divide = tn.divide(wn,4, RoundingMode.HALF_UP);
-            taskDetails.setWorkersRate(divide.doubleValue());
-        }
-
+        //数据计算
+        countTaskDetails(taskDetails);
         this.taskDetailsMapper.insert(taskDetails);
         if (taskDetails.getId() != null) {
             taskDetailsExtend.setId(taskDetails.getId());
@@ -114,6 +106,42 @@ public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> im
         return taskDetailsBo;
     }
 
+    private void countTaskDetails(TaskDetails taskDetails) {
+        //计算人员占比
+        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.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());
+            //计算三年度的研发占比
+            LocalDate now = LocalDate.now();
+            int year = now.getYear();
+            List<TaskAnnualReport> taskAnnualReports = taskAnnualReportMapper.selectThreeYear(taskDetails.getTid(), year);
+            if (taskAnnualReports.size()==2){
+                BigDecimal threeYearsRdSalesAmount = rdSalesAmount;
+                BigDecimal threeYearsRdBudget = rdBudget;
+                for (TaskAnnualReport e : taskAnnualReports) {
+                    threeYearsRdBudget.add(e.getResearchAmount());
+                    threeYearsRdSalesAmount.add(e.getSalesAmount());
+                }
+                BigDecimal res2 = threeYearsRdBudget.divide(threeYearsRdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+               taskDetails.setThreeYearsRdBudgetRate(res2.doubleValue());
+            }
+
+        }
+
+    }
+
     /**
      * 修改数据
      *