From 0bf1c5465f1f3198c53ad02f3209148afabb2038 Mon Sep 17 00:00:00 2001
From: kimi42345 <kimi42345@outlook.com>
Date: 星期二, 17 三月 2020 11:24:45 +0800
Subject: [PATCH] Merge branch 'master' of http://highdatas.com:9000/r/~kimi/srs_spring

---
 src/main/java/com/highdatas/srs/task/DelayTimeTask.java         |   38 ++++++
 .gitignore                                                      |   63 +++++-----
 src/main/java/com/highdatas/srs/util/DbUtils.java               |   24 ++++
 src/main/java/com/highdatas/srs/web/FileController.java         |   12 +
 src/main/java/com/highdatas/srs/entity/SchemeDetail.java        |   11 +
 src/main/java/com/highdatas/srs/entity/Topic.java               |   10 +
 src/main/java/com/highdatas/srs/util/FileUtils.java             |    5 
 src/main/java/com/highdatas/srs/web/SchemeDetailController.java |   10 +
 src/main/java/com/highdatas/srs/web/SchemeController.java       |  130 ++++++++++++++++----
 src/main/java/com/highdatas/srs/web/TopicController.java        |   40 +++++-
 10 files changed, 272 insertions(+), 71 deletions(-)

diff --git a/.gitignore b/.gitignore
index a2a3040..b61d49f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,31 +1,32 @@
-HELP.md
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**
-!**/src/test/**
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-
-### VS Code ###
-.vscode/
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
+srs.zip
diff --git a/src/main/java/com/highdatas/srs/entity/SchemeDetail.java b/src/main/java/com/highdatas/srs/entity/SchemeDetail.java
index 95f104c..91545d1 100644
--- a/src/main/java/com/highdatas/srs/entity/SchemeDetail.java
+++ b/src/main/java/com/highdatas/srs/entity/SchemeDetail.java
@@ -64,6 +64,17 @@
 
     @TableField("update_time")
     private Date updateTime;
+    @TableField("finish_time")
+    private Date finishTime;
+
+    public Date getFinishTime() {
+        return finishTime;
+    }
+
+    public SchemeDetail setFinishTime(Date finishTime) {
+        this.finishTime = finishTime;
+        return this;
+    }
 
     public Boolean getEdit() {
         return edit;
diff --git a/src/main/java/com/highdatas/srs/entity/Topic.java b/src/main/java/com/highdatas/srs/entity/Topic.java
index f25aed9..10d1773 100644
--- a/src/main/java/com/highdatas/srs/entity/Topic.java
+++ b/src/main/java/com/highdatas/srs/entity/Topic.java
@@ -33,6 +33,7 @@
     private String linkId;
 
     private String attachment;
+    private Boolean examine;
 
     @TableField("create_time")
     private Date createTime;
@@ -55,6 +56,15 @@
         return this;
     }
 
+    public Boolean getExamine() {
+        return examine;
+    }
+
+    public Topic setExamine(Boolean examine) {
+        this.examine = examine;
+        return this;
+    }
+
     public String getTitle() {
         return title;
     }
diff --git a/src/main/java/com/highdatas/srs/task/DelayTimeTask.java b/src/main/java/com/highdatas/srs/task/DelayTimeTask.java
index 61b3623..9872473 100644
--- a/src/main/java/com/highdatas/srs/task/DelayTimeTask.java
+++ b/src/main/java/com/highdatas/srs/task/DelayTimeTask.java
@@ -1,11 +1,45 @@
 package com.highdatas.srs.task;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.highdatas.srs.entity.Scheme;
+import com.highdatas.srs.entity.SchemeDetail;
+import com.highdatas.srs.service.ISchemeDetailService;
+import com.highdatas.srs.service.ISchemeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
 /**
  * @author kimi
  * @description
  * @date 2020-02-12 10:40
  */
 
-
+@EnableScheduling
 public class DelayTimeTask {
-}
+    @Autowired
+    ISchemeService schemeService;
+    @Autowired
+    ISchemeDetailService schemeDetailService;
+
+    @Scheduled(cron = "0 0 0 1/1 * ?")
+    private void delayTask(){
+        Date date = new Date();
+        List<SchemeDetail> schemeDetailList = schemeDetailService.selectList(new EntityWrapper<SchemeDetail>().lt("end_time", date).eq("edit", false));
+        HashSet<String> parentIdSet = new HashSet<>();
+        for (SchemeDetail detail : schemeDetailList) {
+            parentIdSet.add(detail.getParentId());
+            detail.setDelay(true);
+            detail.updateById();
+        }
+        //椤圭洰涓煇涓妭鐐瑰彂鐢熷欢鏈熷垯椤圭洰寤舵湡  鍚庢湡鏍规嵁涓氬姟淇敼
+        List<Scheme> schemes = schemeService.selectBatchIds(parentIdSet);
+        for (Scheme scheme : schemes) {
+            scheme.setStatus("delay").updateById();
+        }
+    }
+ }
diff --git a/src/main/java/com/highdatas/srs/util/DbUtils.java b/src/main/java/com/highdatas/srs/util/DbUtils.java
index bab7ecd..bd4b04e 100644
--- a/src/main/java/com/highdatas/srs/util/DbUtils.java
+++ b/src/main/java/com/highdatas/srs/util/DbUtils.java
@@ -11,8 +11,10 @@
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.Random;
 import java.util.UUID;
 
@@ -182,6 +184,28 @@
         return sbf.toString();
     }
 
+    public static int getDayDiffer(Date startDate, Date endDate) throws ParseException {
+        //鍒ゆ柇鏄惁璺ㄥ勾
+        SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
+        String startYear = yearFormat.format(startDate);
+        String endYear = yearFormat.format(endDate);
+        if (startYear.equals(endYear)) {
+            /*  浣跨敤Calendar璺ㄥ勾鐨勬儏鍐典細鍑虹幇闂    */
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(startDate);
+            int startDay = calendar.get(Calendar.DAY_OF_YEAR);
+            calendar.setTime(endDate);
+            int endDay = calendar.get(Calendar.DAY_OF_YEAR);
+            return endDay - startDay;
+        } else {
+            /*  璺ㄥ勾涓嶄細鍑虹幇闂锛岄渶瑕佹敞鎰忎笉婊�24灏忔椂鎯呭喌锛�2016-03-18 11:59:59 鍜� 2016-03-19 00:00:01鐨勮瘽宸�间负 0锛�  */
+            //  鍙牸寮忓寲鏃ユ湡锛屾秷闄や笉婊�24灏忔椂褰卞搷
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime();
+            long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime();
+            return (int) ((endDateTime - startDateTime) / (1000 * 3600 * 24));
+        }
+    }
     public static String convert_before(long time) {
         if (time < 0)
             return String.valueOf(time);
diff --git a/src/main/java/com/highdatas/srs/util/FileUtils.java b/src/main/java/com/highdatas/srs/util/FileUtils.java
index cfe5ec0..b77c348 100644
--- a/src/main/java/com/highdatas/srs/util/FileUtils.java
+++ b/src/main/java/com/highdatas/srs/util/FileUtils.java
@@ -20,6 +20,11 @@
         File parentFile = rootFile.getParentFile();
         File[] files = rootFile.listFiles();
         ArrayList<JSONObject> fileArray = new ArrayList<>();
+        if (files == null) {
+            
+            return  fileArray;
+        }
+
         for (File one : files) {
             JSONObject object = new JSONObject();
             if (one.isDirectory()) {
diff --git a/src/main/java/com/highdatas/srs/web/FileController.java b/src/main/java/com/highdatas/srs/web/FileController.java
index 8b51497..72f86f1 100644
--- a/src/main/java/com/highdatas/srs/web/FileController.java
+++ b/src/main/java/com/highdatas/srs/web/FileController.java
@@ -13,6 +13,7 @@
 import com.highdatas.srs.util.DbUtils;
 import com.highdatas.srs.util.FileUtils;
 import lombok.extern.java.Log;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
@@ -299,11 +300,16 @@
     @RequestMapping("topicUpload")
     @ResponseBody
     public Result topicUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request){
+        String id = request.getParameter("id");
         String title = request.getParameter("title");
         String desp = request.getParameter("desp");
         String userId = request.getParameter("userId");
-
-        Topic topic = new Topic().setId(DbUtils.getUUID()).setTitle(title).setDesp(desp).setUserId(userId).setCreateTime(new Date());
+        Topic topic;
+        if (StringUtils.isEmpty(id)) {
+            topic = new Topic().setId(DbUtils.getUUID()).setTitle(title).setDesp(desp).setUserId(userId).setCreateTime(new Date());
+        } else {
+            topic = topicService.selectById(id).setTitle(title).setDesp(desp);
+        }
 
         String fileName = file.getOriginalFilename();
         int size = (int) file.getSize();
@@ -319,7 +325,7 @@
             dest.createNewFile();
             file.transferTo(dest); //淇濆瓨鏂囦欢
             topic.setAttachment(path);
-            topic.insert();
+            topic.insertOrUpdate();
             return Result.success(CodeMsg.SUCCESS);
         } catch (IllegalStateException e) {
             // TODO Auto-generated catch block
diff --git a/src/main/java/com/highdatas/srs/web/SchemeController.java b/src/main/java/com/highdatas/srs/web/SchemeController.java
index bdb329f..405a2fe 100644
--- a/src/main/java/com/highdatas/srs/web/SchemeController.java
+++ b/src/main/java/com/highdatas/srs/web/SchemeController.java
@@ -24,6 +24,9 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -154,7 +157,7 @@
     }
 
     @RequestMapping(value = "/getSchemeInfo/{id}", method = RequestMethod.GET)
-    public Result getSchemeInfo(@PathVariable String id) throws UnsupportedEncodingException {
+    public Result getSchemeInfo(@PathVariable String id) throws UnsupportedEncodingException, ParseException {
         Scheme scheme = schemeService.selectById(id);
         List<SchemeDetail> schemeDetailList = iSchemeDetailService.selectList(new EntityWrapper<SchemeDetail>().eq("parent_id", id));
         HashMap<String, SysUser> userSet = new HashMap<>();
@@ -176,37 +179,114 @@
         Calendar start = Calendar.getInstance();
         start.setTime(startTime);
 
-        List<String> time = new ArrayList<>();
-        List<Integer> totalList = new ArrayList<>();
-        List<Integer> todoList = new ArrayList<>();
-        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
-        int preTotal = 0;
-        int preTodo = 0;
+        JSONObject result = new JSONObject();
+        JSONObject option = new JSONObject();
+        // 璇︽儏
+        JSONArray array = new JSONArray();
+        long totalCnt = 0;
+        long usedCnt = 0;
+        HashMap<String, Double> detailDayBudgetMap = new HashMap<>();
+        for (SchemeDetail detail : schemeDetailList) {
+            Boolean finish = detail.getFinish();
+            int dayDiffer = DbUtils.getDayDiffer(detail.getStartTime(), detail.getEndTime());
+            BigDecimal budget = detail.getBudget();
+            totalCnt += budget.doubleValue();
+            BigDecimal oneDayBudget = budget.divide(new BigDecimal(dayDiffer).abs(), 2, BigDecimal.ROUND_HALF_UP);
+            detailDayBudgetMap.put(detail.getId(), oneDayBudget.doubleValue());
+            int days = 0;
 
+            if (finish) {
+                days = DbUtils.getDayDiffer(detail.getStartTime(), detail.getFinishTime());
+            } else if (!detail.getEdit()){
+                days = DbUtils.getDayDiffer(detail.getStartTime(), new Date());
+            }
+            double used = 0.0;
+            if (days > 0) {
+                used = oneDayBudget.multiply(new BigDecimal(days)).doubleValue();
+                usedCnt += used;
+            }
+
+            JSONObject o = (JSONObject) JSON.toJSON(detail);
+            SchemeDetailType type = detail.getType();
+            o.fluentPut("name", type.covert());
+            o.fluentPut("usedCnt", used);
+            o.fluentPut("totalCnt", budget.doubleValue());
+
+            array.add(o);
+        }
+        result.fluentPut("scheme", array);
+        result.fluentPut("totalCnt", totalCnt);
+        result.fluentPut("usedCnt", usedCnt);
+
+        List<String> time = new ArrayList<>();
+        List<Double> totalList = new ArrayList<>();
+        List<Double> todoList = new ArrayList<>();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
+        Double preTotal = 0.0;
+        Double preTodo = 0.0;
+        DecimalFormat df   =new   java.text.DecimalFormat("#.00");
         while (startTime.before(endTime)) {
             startTime = start.getTime();
             time.add(dateFormat.format(startTime));
             EntityWrapper<SchemeDetail> schemeDetailEntityWrapper = new EntityWrapper<>();
             schemeDetailEntityWrapper.le("start_time", startTime);
+            schemeDetailEntityWrapper.eq("parent_id", scheme.getId());
             schemeDetailEntityWrapper.gt("end_time", startTime);
 
             schemeDetailEntityWrapper.eq("edit", false);
-            int cnt = iSchemeDetailService.selectCount(schemeDetailEntityWrapper);
-            int totalCnt = preTotal + cnt;
-            totalList.add(totalCnt);
-            preTotal = totalCnt;
-            schemeDetailEntityWrapper.eq("finish", false);
-            int todo = iSchemeDetailService.selectCount(schemeDetailEntityWrapper);
-            int todoCnt = totalCnt - (preTodo + todo);
-            todoList.add(todoCnt);
-            preTodo = todoCnt;
+            List<SchemeDetail> schemeDetailList1 = iSchemeDetailService.selectList(schemeDetailEntityWrapper);
+            double onedayBudget = 0;
+            for (SchemeDetail detail : schemeDetailList1) {
+                String id1 = detail.getId();
+                Double oneBudget = detailDayBudgetMap.get(id1);
+                onedayBudget +=oneBudget;
+            }
+
+            Double expantCnt = totalCnt - (preTotal + onedayBudget);
+            expantCnt = new BigDecimal(expantCnt).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+            totalList.add(expantCnt > 0 ? expantCnt : 0);
+            preTotal = preTotal + onedayBudget;
+
+            int dayDiffer = DbUtils.getDayDiffer(startTime, new Date());
+            if (dayDiffer >= 0) {
+                EntityWrapper<SchemeDetail> entityWrapper1 = new EntityWrapper<>();
+                entityWrapper1.le("start_time", startTime);
+                entityWrapper1.gt("finish_time",startTime);
+                entityWrapper1.eq("parent_id", scheme.getId());
+                entityWrapper1.eq("edit", false);
+                List<SchemeDetail> schemeDetailList3 = iSchemeDetailService.selectList(entityWrapper1);
+
+                double todo = 0.0;
+                for (SchemeDetail detail : schemeDetailList3) {
+                    String id1 = detail.getId();
+                    Double oneBudget = detailDayBudgetMap.get(id1);
+                    todo +=oneBudget;
+                }
+                EntityWrapper<SchemeDetail> entityWrapper = new EntityWrapper<>();
+                entityWrapper.le("start_time", startTime);
+                entityWrapper.eq("finish", false);
+                entityWrapper.isNull("finish_time");
+                entityWrapper.eq("parent_id", scheme.getId());
+                entityWrapper.eq("edit", false);
+                List<SchemeDetail> schemeDetailList2 = iSchemeDetailService.selectList(entityWrapper);
+
+                for (SchemeDetail detail : schemeDetailList2) {
+                    String id1 = detail.getId();
+                    Double oneBudget = detailDayBudgetMap.get(id1);
+                    todo +=oneBudget;
+                }
+                double todoCnt = totalCnt - (preTodo + todo);
+                todoCnt = new BigDecimal(todoCnt).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+                todoList.add(todoCnt);
+                preTodo = preTodo + todo;
+            }
+
             start.add(Calendar.DAY_OF_YEAR, 1);
         }
-        Collections.reverse(totalList);
-        Collections.reverse(todoList);
 
-        JSONObject result = new JSONObject();
-        JSONObject option = new JSONObject();
+
         option.fluentPut("xAxis", time);
         option.fluentPut("yAxis1", todoList);
         option.fluentPut("yAxis2", totalList);
@@ -218,15 +298,7 @@
         // 浜哄憳
         result.fluentPut("users", userSet.values());
 
-        // 璇︽儏
-        JSONArray array = new JSONArray();
-        for (SchemeDetail detail : schemeDetailList) {
-            JSONObject o = (JSONObject) JSON.toJSON(detail);
-            SchemeDetailType type = detail.getType();
-            o.fluentPut("name", type.covert());
-            array.add(o);
-        }
-        result.fluentPut("scheme", array);
+
         //鐩綍
         result.fluentPut("paths",childrenFiles );
         return Result.success(result);
diff --git a/src/main/java/com/highdatas/srs/web/SchemeDetailController.java b/src/main/java/com/highdatas/srs/web/SchemeDetailController.java
index ee7df9a..9e5ca44 100644
--- a/src/main/java/com/highdatas/srs/web/SchemeDetailController.java
+++ b/src/main/java/com/highdatas/srs/web/SchemeDetailController.java
@@ -5,6 +5,7 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.highdatas.srs.entity.*;
 import com.highdatas.srs.pojo.CodeMsg;
 import com.highdatas.srs.pojo.Result;
@@ -97,8 +98,16 @@
         String desp = request.getParameter("desp");
         SchemeDetail schemeDetail = schemeDetailService.selectById(id);
         schemeDetail.setFinish(true);
+        schemeDetail.setFinishTime(new Date());
         new ProjectDeal().setId(DbUtils.getUUID()).setDesp(desp).setSchemeDetailId(id).setCreateTime(new Date()).insert();
         schemeDetail.updateById();
+        Wrapper<SchemeDetail> eq = new EntityWrapper<SchemeDetail>().eq("parent_id", schemeDetail.getParentId()).eq("finish", false);
+        int i = schemeDetailService.selectCount(eq);
+        if (i == 0) {
+            Scheme scheme = schemeService.selectById(schemeDetail.getParentId());
+            scheme.setStatus("finish");
+            scheme.updateById();
+        }
         return Result.success(schemeDetail);
     }
     @RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
@@ -188,6 +197,7 @@
                     pre = schemeDetailService.selectOne(schemeDetailEntityWrapper);
                     if (pre == null) {
                         detail.setId(DbUtils.getUUID());
+                        detail.setCreateTime(new Date());
                         detail.insert();
                         continue;
                     }
diff --git a/src/main/java/com/highdatas/srs/web/TopicController.java b/src/main/java/com/highdatas/srs/web/TopicController.java
index 49cdb0d..bd1f0b6 100644
--- a/src/main/java/com/highdatas/srs/web/TopicController.java
+++ b/src/main/java/com/highdatas/srs/web/TopicController.java
@@ -73,22 +73,50 @@
 
         return Result.success(object);
     }
+
+    @RequestMapping(value = "/exam/{id}", method = RequestMethod.GET)
+    public Result exam(@PathVariable String id)  {
+        Topic topic = topicService.selectById(id);
+        topic.setExamine(true);
+
+        boolean insert = topic.updateById();
+
+        if (insert) {
+            return Result.success(null);
+        } else {
+            return Result.error(CodeMsg.INSERT_ERROR);
+        }
+
+    }
+
     @RequestMapping(value = "/add", method = RequestMethod.GET)
     public Result add(HttpServletRequest request)  {
+        String id = request.getParameter("id");
         String title = request.getParameter("title");
         String userId = request.getParameter("userId");
         if(StringUtils.isEmpty(title)) {
             return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
         }
         String desp = request.getParameter("desp");
-        Topic topic = new Topic().setUserId(userId).setTitle(title).setDesp(desp).setCreateTime(new Date());
-        topic.setId(DbUtils.getUUID());
-        boolean insert = topic.insert();
-        if (insert) {
-            return Result.success(null);
+        if (StringUtils.isEmpty(id)) {
+            Topic topic = new Topic().setUserId(userId).setTitle(title).setDesp(desp).setCreateTime(new Date());
+            topic.setId(DbUtils.getUUID());
+            boolean insert = topic.insert();
+            if (insert) {
+                return Result.success(null);
+            } else {
+                return Result.error(CodeMsg.INSERT_ERROR);
+            }
         } else {
-            return Result.error(CodeMsg.INSERT_ERROR);
+            Topic topic = topicService.selectById(id);
+            boolean b = topic.setDesp(desp).setTitle(title).updateById();
+            if (b) {
+                return Result.success(null);
+            } else {
+                return Result.error(CodeMsg.INSERT_ERROR);
+            }
         }
 
+
     }
 }

--
Gitblit v1.8.0