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.highdatas.srs.entity.*;
import com.highdatas.srs.pojo.CodeMsg;
import com.highdatas.srs.pojo.Result;
import com.highdatas.srs.service.ISchemeDetailService;
import com.highdatas.srs.service.ISchemeService;
import com.highdatas.srs.service.ISysRoleMappingService;
import com.highdatas.srs.service.ISysRoleService;
import com.highdatas.srs.util.Constant;
import com.highdatas.srs.util.DbUtils;
import com.highdatas.srs.util.FileUtils;
import lombok.extern.slf4j.Slf4j;
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.util.*;
/**
*
* 前端控制器
*
*
* @author kimi
* @since 2020-01-15
*/
@RestController
@Slf4j
@RequestMapping("/detail")
public class SchemeDetailController {
@Autowired
ISchemeDetailService schemeDetailService;
@Autowired
ISchemeService schemeService;
@Autowired
ISysRoleService roleService;
@Autowired
ISysRoleMappingService roleMappingService;
@Value("{base.file.path}")
String basePath;
@RequestMapping(value = "dayTask", method = RequestMethod.GET)
public Result dayByUser(HttpServletRequest request) {
String userId = request.getParameter("userId");
Date now = new Date();
EntityWrapper schemeDetailEntityWrapper = new EntityWrapper<>();
schemeDetailEntityWrapper.le("start_time", now);
schemeDetailEntityWrapper.gt("end_time", now);
if (!StringUtils.isEmpty(userId)) {
schemeDetailEntityWrapper.eq("user_id", userId);
}
List schemeDetailList = schemeDetailService.selectList(schemeDetailEntityWrapper);
JSONArray result = new JSONArray();
Collection values = Constant.schemeDetailParentTypes.values();
Set types = new LinkedHashSet(values);
long totalCnt = 0;
long delayCnt = 0;
for (String type : types) {
long total = schemeDetailList.stream().filter(schemeDetail -> schemeDetail.getType().getParent().equalsIgnoreCase(type)).count();
long delay = schemeDetailList.stream().filter(schemeDetail -> schemeDetail.getType().getParent().equalsIgnoreCase(type))
.filter(schemeDetail -> schemeDetail.getDelay()).count();
totalCnt += total;
delayCnt += delay;
JSONObject object = new JSONObject();
object.fluentPut("type", type);
object.fluentPut("total", total);
object.fluentPut("delay", delay);
result.add(object);
}
JSONObject object = new JSONObject();
object.fluentPut("type", "我的任务");
object.fluentPut("total", totalCnt);
object.fluentPut("delay", delayCnt);
JSONArray endResult = new JSONArray();
endResult.add(object);
endResult.addAll(result);
return Result.success(endResult);
}
@RequestMapping(value = "/deal/{id}", method = RequestMethod.GET)
public Result deal(@PathVariable String id, HttpServletRequest request) {
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 eq = new EntityWrapper().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)
public Result get(@PathVariable String id) {
SchemeDetail schemeDetail = schemeDetailService.selectById(id);
return Result.success(schemeDetail);
}
@RequestMapping(value = "/getMonth", method = RequestMethod.GET)
public Result getMonth(@RequestParam Date startTime) {
Calendar instance = Calendar.getInstance();
instance.setTime(startTime);
instance.add(Calendar.MONTH,1);
Calendar start = Calendar.getInstance();
start.setTime(startTime);
Date endTime = instance.getTime();
List result = new ArrayList<>();
while (startTime.before(endTime)) {
startTime = start.getTime();
EntityWrapper schemeDetailEntityWrapper = new EntityWrapper<>();
schemeDetailEntityWrapper.le("start_time", startTime);
schemeDetailEntityWrapper.gt("end_time", startTime);
schemeDetailEntityWrapper.eq("finish", false);
schemeDetailEntityWrapper.eq("edit", false);
int cnt = schemeDetailService.selectCount(schemeDetailEntityWrapper);
if (cnt == 0) {
start.add(Calendar.DAY_OF_YEAR, 1);
continue;
}
JSONObject object = new JSONObject();
object.fluentPut("date", startTime);
object.fluentPut("task", cnt);
result.add(object);
start.add(Calendar.DAY_OF_YEAR, 1);
}
log.info(result.size() + "");
return Result.success(result);
}
@RequestMapping(value = "/getDay", method = RequestMethod.GET)
public Result getDay(@RequestParam Date startTime) {
EntityWrapper schemeDetailEntityWrapper = new EntityWrapper<>();
schemeDetailEntityWrapper.le("start_time", startTime);
schemeDetailEntityWrapper.gt("end_time", startTime);
schemeDetailEntityWrapper.eq("finish", false);
schemeDetailEntityWrapper.eq("edit", false);
List schemeDetails = schemeDetailService.selectList(schemeDetailEntityWrapper);
Set parent = new HashSet<>();
for (SchemeDetail schemeDetail : schemeDetails) {
schemeDetail.setTypeStr(schemeDetail.getType().covert());
String parentId = schemeDetail.getParentId();
Scheme scheme = schemeService.selectById(parentId);
parent.add(scheme);
}
JSONArray array = (JSONArray) JSON.toJSON(schemeDetails);
JSONArray schemeArray = (JSONArray) JSON.toJSON(parent);
array.addAll(schemeArray);
return Result.success(array);
}
@RequestMapping(value = "/parent/{id}", method = RequestMethod.GET)
public Result parent(@PathVariable String id) {
//TODO
List dealList = schemeDetailService.selectList(new EntityWrapper().eq("parent_id", id));
for (SchemeDetail detail : dealList) {
String userId = detail.getUserId();
SysRoleMapping mapping = roleMappingService.selectOne(new EntityWrapper().eq("user_id", userId));
String roleId = mapping.getRoleId();
SysRole sysRole = roleService.selectById(roleId);
detail.setRoleName(sysRole.getName());
}
return Result.success(dealList);
}
@RequestMapping(value = "/updates", method = RequestMethod.GET)
public Result updates(@RequestParam String datas) {
try {
List array = JSON.parseArray(datas, SchemeDetail.class);
for (SchemeDetail detail : array) {
SchemeDetail pre = schemeDetailService.selectById(detail.getId());
if (pre == null) {
EntityWrapper schemeDetailEntityWrapper = new EntityWrapper<>();
schemeDetailEntityWrapper.eq("parent_id", detail.getParentId());
schemeDetailEntityWrapper.eq("type", detail.getType());
pre = schemeDetailService.selectOne(schemeDetailEntityWrapper);
if (pre == null) {
detail.setId(DbUtils.getUUID());
detail.setCreateTime(new Date());
detail.insert();
continue;
}
}
if (pre.getMustAttach() != detail.getMustAttach()) {
if (detail.getMustAttach()) {
//必须传附件
Scheme scheme = schemeService.selectById(detail.getParentId());
detail.setAttachment(FileUtils.createFile(basePath, scheme.getName(), detail.getType().name()));
} else {
detail.setAttachment(null);
}
}
detail.insertOrUpdate();
}
return Result.success(CodeMsg.UPDATE_SUCCESS);
}
catch (Exception e) {
e.printStackTrace();
return Result.error(CodeMsg.UPDATE_ERROR);
}
}
}