| | |
| | | |
| | | 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.*; |
| | | |
| | |
| | | } |
| | | |
| | | @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<>(); |
| | |
| | | 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); |
| | |
| | | // 人员 |
| | | 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); |