package com.highdatas.srs.web;
|
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.baomidou.mybatisplus.plugins.Page;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.highdatas.srs.entity.*;
|
import com.highdatas.srs.pojo.CodeMsg;
|
import com.highdatas.srs.pojo.Result;
|
import com.highdatas.srs.service.IProjectDealService;
|
import com.highdatas.srs.service.ISchemeDetailService;
|
import com.highdatas.srs.service.ISchemeService;
|
import com.highdatas.srs.service.ISysUserService;
|
import com.highdatas.srs.util.DbUtils;
|
import com.highdatas.srs.util.FileUtils;
|
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.*;
|
|
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.*;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author kimi
|
* @since 2020-01-15
|
*/
|
@RestController
|
@RequestMapping("/scheme")
|
public class SchemeController {
|
@Autowired
|
ISchemeService schemeService;
|
@Autowired
|
ISysUserService userService;
|
@Autowired
|
ISchemeDetailService iSchemeDetailService;
|
@Autowired
|
IProjectDealService projectDealService;
|
|
@Value("${base.file.path}")
|
String basePath;
|
|
@RequestMapping(value = "/daywork/{id}", method = RequestMethod.GET)
|
public Result dayByUser(@PathVariable String id, HttpServletRequest request) {
|
String userId = request.getParameter("userId");
|
|
Date now = new Date();
|
Calendar instance = Calendar.getInstance();
|
instance.setTime(now);
|
instance.set(Calendar.HOUR_OF_DAY, 0 );
|
instance.set(Calendar.MINUTE, 0 );
|
instance.set(Calendar.SECOND, 0);
|
now = instance.getTime();
|
instance.add(Calendar.DAY_OF_YEAR,-1);
|
Date yesterday = instance.getTime();
|
instance.add(Calendar.DAY_OF_YEAR,2);
|
Date tomorrow = instance.getTime();
|
EntityWrapper<SchemeDetail> schemeDetailEntityWrapper = new EntityWrapper<>();
|
EntityWrapper<SchemeDetail> dealWrapper = new EntityWrapper<>();
|
schemeDetailEntityWrapper.eq("parent_id", id);
|
dealWrapper.eq("parent_id", id);
|
dealWrapper.eq("finish",true);
|
int total = iSchemeDetailService.selectCount(schemeDetailEntityWrapper);
|
int deal = iSchemeDetailService.selectCount(dealWrapper);
|
|
EntityWrapper<SchemeDetail> yesEntityWrapper = new EntityWrapper<>();
|
EntityWrapper<SchemeDetail> yesDealWrapper = new EntityWrapper<>();
|
yesEntityWrapper.eq("parent_id", id);
|
yesDealWrapper.eq("parent_id", id);
|
yesDealWrapper.eq("finish",true);
|
|
if (!StringUtils.isEmpty(userId)) {
|
schemeDetailEntityWrapper.eq("user_id", userId);
|
dealWrapper.eq("user_id", userId);
|
yesDealWrapper.eq("user_id", userId);
|
yesEntityWrapper.eq("user_id", userId);
|
}
|
|
schemeDetailEntityWrapper.le("start_time", now);
|
schemeDetailEntityWrapper.gt("end_time", now);
|
|
dealWrapper.ge("update_time",now);
|
dealWrapper.lt("update_time",tomorrow);
|
|
int nowTotal = iSchemeDetailService.selectCount(schemeDetailEntityWrapper);
|
|
yesEntityWrapper.le("start_time", yesterday);
|
yesEntityWrapper.gt("end_time", yesterday);
|
int yesTotal = iSchemeDetailService.selectCount(yesEntityWrapper);
|
|
int nowDeal = iSchemeDetailService.selectCount(dealWrapper);
|
|
yesDealWrapper.ge("update_time",yesterday);
|
yesDealWrapper.lt("update_time",now);
|
int yestDeal = iSchemeDetailService.selectCount(yesDealWrapper);
|
JSONObject object = new JSONObject();
|
object.fluentPut("total",total);
|
object.fluentPut("nowTotal",nowTotal);
|
object.fluentPut("yesTotal",yesTotal);
|
object.fluentPut("deal",deal);
|
object.fluentPut("nowDeal",nowDeal);
|
object.fluentPut("yesDeal",yestDeal);
|
|
return Result.success(object);
|
}
|
|
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
|
public Result get(@PathVariable String id) {
|
Scheme scheme = schemeService.selectById(id);
|
return Result.success(scheme);
|
}
|
|
@RequestMapping(value = "/typesCnt", method = RequestMethod.GET)
|
public Result typesCnt() {
|
EntityWrapper<Scheme> editWrapper = new EntityWrapper<>();
|
editWrapper.eq("status", "edit");
|
int edit = schemeService.selectCount(editWrapper);
|
EntityWrapper<Scheme> workingWrapper = new EntityWrapper<>();
|
workingWrapper.eq("status", "working");
|
int working = schemeService.selectCount(workingWrapper);
|
EntityWrapper<Scheme> finishWrapper = new EntityWrapper<>();
|
finishWrapper.eq("status", "finish");
|
int finish = schemeService.selectCount(finishWrapper);
|
|
EntityWrapper<Scheme> delayWrapper = new EntityWrapper<>();
|
delayWrapper.eq("status", "delay");
|
int delay = schemeService.selectCount(delayWrapper);
|
|
int total = schemeService.selectCount(null);
|
|
|
ArrayList<Integer> result = new ArrayList<>();
|
result.add(edit);
|
result.add(working);
|
result.add(delay);
|
result.add(finish);
|
|
JSONObject object = new JSONObject();
|
object.fluentPut("total", total);
|
object.fluentPut("typeCnt", result);
|
return Result.success(object);
|
}
|
|
@RequestMapping(value = "/getSchemeInfo/{id}", method = RequestMethod.GET)
|
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<>();
|
for (SchemeDetail detail : schemeDetailList) {
|
String userId = detail.getUserId();
|
SysUser sysUser = userService.selectById(userId);
|
if (sysUser == null || userSet.containsKey(sysUser.getId())) {
|
continue;
|
}
|
|
userSet.put(sysUser.getId(), sysUser);
|
}
|
List<ProjectDeal> dealList = projectDealService.selectList(new EntityWrapper<ProjectDeal>().eq("scheme_id", id));
|
String rootPath = basePath + "/" + scheme.getName();
|
ArrayList<JSONObject> childrenFiles = FileUtils.getChildrenFiles(rootPath);
|
|
Date startTime = scheme.getStartTime();
|
Date endTime = scheme.getEndTime();
|
Calendar start = Calendar.getInstance();
|
start.setTime(startTime);
|
|
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);
|
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);
|
}
|
|
|
option.fluentPut("xAxis", time);
|
option.fluentPut("yAxis1", todoList);
|
option.fluentPut("yAxis2", totalList);
|
|
// 图
|
result.fluentPut("option", option);
|
// 记录
|
result.fluentPut("record", dealList);
|
// 人员
|
result.fluentPut("users", userSet.values());
|
|
|
//目录
|
result.fluentPut("paths",childrenFiles );
|
return Result.success(result);
|
}
|
|
|
|
@RequestMapping(value = "/working/{id}", method = RequestMethod.GET)
|
public Result working(@PathVariable String id) {
|
Scheme scheme = schemeService.selectById(id);
|
List<SchemeDetail> schemeDetailList = iSchemeDetailService.selectList(new EntityWrapper<SchemeDetail>().eq("parent_id", id));
|
for (SchemeDetail detail : schemeDetailList) {
|
detail.setEdit(false);
|
detail.updateById();
|
}
|
scheme.setStatus("working");
|
boolean b = scheme.updateById();
|
if (b) {
|
return Result.success(CodeMsg.UPDATE_SUCCESS);
|
} else {
|
return Result.error(CodeMsg.UPDATE_ERROR);
|
}
|
|
}
|
@RequestMapping(value = "/all", method = RequestMethod.GET)
|
public Result all() {
|
List<Scheme> schemes = schemeService.selectList(null);
|
return Result.success(schemes);
|
}
|
|
@RequestMapping(value = "/page/{pageNo}", method = RequestMethod.GET)
|
public Result get(@PathVariable Integer pageNo, HttpServletRequest request) {
|
String pageSize = request.getParameter("pageSize");
|
String name = request.getParameter("name");
|
String status = request.getParameter("status");
|
String type = request.getParameter("type");
|
String userId = request.getParameter("userId");
|
|
EntityWrapper<Scheme> schemeEntityWrapper = new EntityWrapper<>();
|
if (!StringUtils.isEmpty(name)) {
|
schemeEntityWrapper.like("name", name);
|
}
|
if (!StringUtils.isEmpty(userId)) {
|
schemeEntityWrapper.eq("user_id", userId);
|
}
|
if (!StringUtils.isEmpty(type)) {
|
schemeEntityWrapper.eq("reseach_type", type);
|
}
|
if (!StringUtils.isEmpty(status)) {
|
schemeEntityWrapper.eq("status", status);
|
}
|
|
Page<Scheme> schemePage;
|
|
if (StringUtils.isEmpty(pageSize)) {
|
schemePage = new Page<>(pageNo, 15);
|
}
|
else {
|
schemePage = new Page<>(pageNo, Integer.valueOf(pageSize));
|
}
|
|
Page<Scheme> page = schemeService.selectPage(schemePage, schemeEntityWrapper);
|
List<Scheme> records = page.getRecords();
|
Page<JSONObject> jsonObjectPage = new Page<>();
|
jsonObjectPage.setTotal(page.getTotal());
|
jsonObjectPage.setCurrent(page.getCurrent());
|
jsonObjectPage.setSize(page.getSize());
|
List<JSONObject> result = new ArrayList<>();
|
for (Scheme scheme : records) {
|
JSONObject json = (JSONObject) JSON.toJSON(scheme);
|
Wrapper<SchemeDetail> delayWrapper = new EntityWrapper<SchemeDetail>().eq("parent_id", scheme.getId());
|
Wrapper<SchemeDetail> finishWrapper = new EntityWrapper<SchemeDetail>().eq("parent_id", scheme.getId());
|
int total = iSchemeDetailService.selectCount(delayWrapper);
|
int delayInt = iSchemeDetailService.selectCount(delayWrapper.eq("delay", true));
|
|
int finishInt = iSchemeDetailService.selectCount(finishWrapper.eq("finish", true));
|
json.fluentPut("totalCnt", total);
|
json.fluentPut("delayCnt", delayInt);
|
json.fluentPut("finishCnt", finishInt);
|
|
result.add(json);
|
}
|
jsonObjectPage.setRecords(result);
|
return Result.success(jsonObjectPage);
|
}
|
|
@RequestMapping(value = "/addOrUpdate", method = RequestMethod.GET)
|
public Result add(@RequestParam String reseachType, @RequestParam String name, @RequestParam Date startTime, @RequestParam Date endTime, HttpServletRequest request) {
|
|
String id = request.getParameter("id");
|
String desp = request.getParameter("desp");
|
String userId = request.getParameter("userId");
|
|
Scheme scheme;
|
if (StringUtils.isEmpty(id)) {
|
scheme = new Scheme();
|
}else{
|
scheme = schemeService.selectById(id);
|
}
|
if (scheme == null) {
|
return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND);
|
}
|
// reseachType to enum
|
if (StringUtils.isEmpty(scheme.getId())) {
|
scheme.setId(DbUtils.getUUID());
|
}
|
boolean insert = scheme.setUserId(userId).setCreateTime(new Date()).setName(name).setStartTime(startTime).setEndTime(endTime)
|
.setDesp(desp).setReseachType(reseachType).insertOrUpdate();
|
if (insert) {
|
return Result.success(scheme.getId());
|
} else {
|
return Result.error(CodeMsg.INSERT_ERROR);
|
}
|
}
|
|
@RequestMapping(value = "/update/{id}", method = RequestMethod.GET)
|
public Result add(@PathVariable String id, HttpServletRequest request) throws JsonProcessingException {
|
String data = request.getParameter("data");
|
Scheme scheme = DbUtils.json2Bean(data, Scheme.class);
|
boolean b = scheme.insertOrUpdate();
|
// reseachType to enum
|
|
if (b) {
|
return Result.success(CodeMsg.UPDATE_SUCCESS);
|
} else {
|
return Result.error(CodeMsg.UPDATE_ERROR);
|
}
|
}
|
|
@RequestMapping(value = "/del/{id}", method = RequestMethod.GET)
|
public Result del(@PathVariable String id, HttpServletRequest request) throws JsonProcessingException {
|
Scheme scheme = schemeService.selectById(id);
|
boolean delete = scheme.deleteById();
|
|
if (delete) {
|
return Result.success(CodeMsg.DELETE_SUCCESS);
|
} else {
|
return Result.error(CodeMsg.DELETE_ERROR);
|
}
|
}
|
}
|