.gitignore | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/entity/SchemeDetail.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/entity/Topic.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/task/DelayTimeTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/util/DbUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/util/FileUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/web/FileController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/web/SchemeController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/web/SchemeDetailController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/highdatas/srs/web/TopicController.java | ●●●●● 补丁 | 查看 | 原始文档 | 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); } } } }