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.text.SimpleDateFormat;
import java.util.*;
/**
*
* 前端控制器
*
*
* @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 schemeDetailEntityWrapper = new EntityWrapper<>();
EntityWrapper 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 yesEntityWrapper = new EntityWrapper<>();
EntityWrapper 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 editWrapper = new EntityWrapper<>();
editWrapper.eq("status", "edit");
int edit = schemeService.selectCount(editWrapper);
EntityWrapper workingWrapper = new EntityWrapper<>();
workingWrapper.eq("status", "working");
int working = schemeService.selectCount(workingWrapper);
EntityWrapper finishWrapper = new EntityWrapper<>();
finishWrapper.eq("status", "finish");
int finish = schemeService.selectCount(finishWrapper);
EntityWrapper delayWrapper = new EntityWrapper<>();
delayWrapper.eq("status", "delay");
int delay = schemeService.selectCount(delayWrapper);
int total = schemeService.selectCount(null);
ArrayList 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 {
Scheme scheme = schemeService.selectById(id);
List schemeDetailList = iSchemeDetailService.selectList(new EntityWrapper().eq("parent_id", id));
HashMap 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 dealList = projectDealService.selectList(new EntityWrapper().eq("scheme_id", id));
String rootPath = basePath + "/" + scheme.getName();
ArrayList childrenFiles = FileUtils.getChildrenFiles(rootPath);
Date startTime = scheme.getStartTime();
Date endTime = scheme.getEndTime();
Calendar start = Calendar.getInstance();
start.setTime(startTime);
List time = new ArrayList<>();
List totalList = new ArrayList<>();
List todoList = new ArrayList<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
int preTotal = 0;
int preTodo = 0;
while (startTime.before(endTime)) {
startTime = start.getTime();
time.add(dateFormat.format(startTime));
EntityWrapper schemeDetailEntityWrapper = new EntityWrapper<>();
schemeDetailEntityWrapper.le("start_time", startTime);
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;
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("option", option);
// 记录
result.fluentPut("record", dealList);
// 人员
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);
}
@RequestMapping(value = "/working/{id}", method = RequestMethod.GET)
public Result working(@PathVariable String id) {
Scheme scheme = schemeService.selectById(id);
List schemeDetailList = iSchemeDetailService.selectList(new EntityWrapper().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 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 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 schemePage;
if (StringUtils.isEmpty(pageSize)) {
schemePage = new Page<>(pageNo, 15);
}
else {
schemePage = new Page<>(pageNo, Integer.valueOf(pageSize));
}
Page page = schemeService.selectPage(schemePage, schemeEntityWrapper);
List records = page.getRecords();
Page jsonObjectPage = new Page<>();
jsonObjectPage.setTotal(page.getTotal());
jsonObjectPage.setCurrent(page.getCurrent());
jsonObjectPage.setSize(page.getSize());
List result = new ArrayList<>();
for (Scheme scheme : records) {
JSONObject json = (JSONObject) JSON.toJSON(scheme);
Wrapper delayWrapper = new EntityWrapper().eq("parent_id", scheme.getId());
Wrapper finishWrapper = new EntityWrapper().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);
}
}
}