kimi42345
2020-03-17 0bf1c5465f1f3198c53ad02f3209148afabb2038
Merge branch 'master' of http://highdatas.com:9000/r/~kimi/srs_spring

# Conflicts:
# src/main/resources/application-prod.yml
10个文件已修改
265 ■■■■ 已修改文件
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/entity/SchemeDetail.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/entity/Topic.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/task/DelayTimeTask.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/util/DbUtils.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/util/FileUtils.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/web/FileController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/web/SchemeController.java 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/web/SchemeDetailController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/highdatas/srs/web/TopicController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -29,3 +29,4 @@
### VS Code ###
.vscode/
srs.zip
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;
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;
    }
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();
        }
    }
}
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);
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()) {
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
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);
            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 = 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);
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;
                    }
src/main/java/com/highdatas/srs/web/TopicController.java
@@ -73,14 +73,32 @@
        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");
        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();
@@ -89,6 +107,16 @@
        } else {
            return Result.error(CodeMsg.INSERT_ERROR);
        }
        } else {
            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);
            }
        }
    }
}