package com.stylefeng.guns.modular.system.controller;
|
|
import com.alibaba.druid.support.json.JSONUtils;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.stylefeng.guns.core.base.controller.BaseController;
|
import com.stylefeng.guns.modular.system.dto.UserDataDto;
|
import com.stylefeng.guns.modular.system.dto.XDto;
|
import com.stylefeng.guns.modular.system.model.TUserDateData;
|
import com.stylefeng.guns.modular.system.model.User;
|
import com.stylefeng.guns.modular.system.service.ITUserDateDataService;
|
import com.stylefeng.guns.modular.system.service.IUserService;
|
import com.stylefeng.guns.modular.system.service.impl.UserServiceImpl;
|
import com.stylefeng.guns.modular.system.util.ExcelUtil;
|
import com.stylefeng.guns.modular.system.util.R;
|
import com.stylefeng.guns.modular.system.util.RedisService;
|
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.ui.Model;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import com.stylefeng.guns.core.log.LogObjectHolder;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import com.stylefeng.guns.modular.system.model.TUserData;
|
import com.stylefeng.guns.modular.system.service.ITUserDataService;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.OutputStream;
|
import java.text.DateFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.LocalTime;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 控制器
|
*
|
* @author fengshuonan
|
* @Date 2024-06-25 11:27:42
|
*/
|
@Controller
|
@RequestMapping("/tUserData")
|
public class TUserDataController extends BaseController {
|
|
private String PREFIX = "/system/tUserData/";
|
|
@Autowired
|
private ITUserDataService tUserDataService;
|
|
/**
|
* 跳转到首页
|
*/
|
@RequestMapping("")
|
public String index() {
|
return PREFIX + "tUserData.html";
|
}
|
|
/**
|
* 跳转到添加
|
*/
|
@RequestMapping("/tUserData_add")
|
public String tUserDataAdd() {
|
return PREFIX + "tUserData_add.html";
|
}
|
|
/**
|
* 跳转到修改
|
*/
|
@RequestMapping("/tUserData_update/{tUserDataId}")
|
public String tUserDataUpdate(@PathVariable Integer tUserDataId, Model model) {
|
TUserData tUserData = tUserDataService.selectById(tUserDataId);
|
model.addAttribute("item",tUserData);
|
LogObjectHolder.me().set(tUserData);
|
return PREFIX + "tUserData_edit.html";
|
}
|
|
@Autowired
|
private RedisService redisService;
|
|
@Autowired
|
private ITUserDateDataService dateDataService;
|
|
/**
|
* 获取列表
|
*/
|
@RequestMapping(value = "/list")
|
@ResponseBody
|
public R list(String beginTime,Integer userId,Integer night,String times) throws ParseException {
|
// List<TUserData> tUserData = redisService.getCacheList("ttt");
|
Wrapper<TUserDateData> userId1 = new EntityWrapper<TUserDateData>().eq("userId", userId).last("ORDER BY date desc,night desc limit 1");
|
if (beginTime!=null&&beginTime!=""){
|
userId1.eq("date",beginTime).eq("night",night);
|
}
|
TUserDateData tUserDateData = dateDataService.selectOne(userId1);
|
|
ObjectMapper mapper = new ObjectMapper();
|
TUserData[] tUserDataArray = new TUserData[]{};
|
try {
|
// 将JSON字符串转换为TUserData数组
|
tUserDataArray = mapper.readValue(tUserDateData.getData(), TUserData[].class);
|
|
// 打印转换后的数组,以便验证
|
System.out.println(Arrays.toString(tUserDataArray));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
List<TUserData> tUserData = Arrays.asList(tUserDataArray);
|
|
List<TUserData> tUserData1 = new ArrayList<>();
|
|
if (times!=null&×!=""){
|
String[] split = times.split(" - ");
|
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
Date time1 = sdf.parse(split[0]);
|
Date time2 = sdf.parse(split[1]);
|
String date1 = beginTime + " " + split[0];
|
String date2 = beginTime + " " + split[1];
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
Date date11 = sdf1.parse(date1);
|
Date date22 = sdf1.parse(date2);
|
|
if (time1.before(time2)){
|
System.err.println("时间1<时间2");
|
//正常筛选
|
for (TUserData tUserDatum : tUserData) {
|
if (!tUserDatum.getDetectionTime().before(date11)&&!tUserDatum.getDetectionTime().after(date22)){
|
tUserData1.add(tUserDatum);
|
}
|
}
|
|
}else {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date22);
|
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
Date date33 = calendar.getTime();
|
|
System.err.println("时间1>时间2");
|
for (TUserData tUserDatum : tUserData) {
|
if (!tUserDatum.getDetectionTime().before(date11)&&!tUserDatum.getDetectionTime().after(date33)){
|
tUserData1.add(tUserDatum);
|
}
|
}
|
|
}
|
|
//
|
//
|
//
|
//
|
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
// Date parse = sdf.parse(dateq);
|
tUserData = tUserData1;
|
|
}
|
|
|
|
List<String> xData = new ArrayList<>();
|
List<Integer> yData = new ArrayList<>();
|
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
|
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 设置时区为中国上海
|
List<String[]> arrayList = new ArrayList<>();
|
String[] strings = new String[2];
|
for (TUserData data : tUserData) {
|
xData.add(sdf.format(data.getDetectionTime()));
|
yData.add(data.getShapeVariable());
|
if (data.getShapeVariable()==0){
|
if (strings[0]==null){
|
strings[0] =(sdf.format(data.getDetectionTime()));
|
}else {
|
strings[1] =(sdf.format(data.getDetectionTime()));
|
}
|
}else {
|
if (strings[0]==null){
|
continue;
|
}else {
|
if (strings[1]==null){
|
strings[1] = strings[0];
|
}
|
arrayList.add(strings);
|
strings = new String[2];
|
}
|
}
|
}
|
if (strings[0]!=null&&strings[1]!=null){
|
arrayList.add(strings);
|
}
|
if (strings[0]!=null&&strings[1] ==null){
|
strings[1] =strings[0];
|
arrayList.add(strings);
|
}
|
|
UserDataDto userDataDto = new UserDataDto();
|
userDataDto.setXData(xData);
|
userDataDto.setYData(yData);
|
|
List<List<XDto>> zeroList = new ArrayList<>();
|
for (String[] strings1 : arrayList) {
|
List<XDto> xDtos =new ArrayList<>();
|
XDto xDto = new XDto();
|
xDto.setXAxis(strings1[0]);
|
xDtos.add(xDto);
|
XDto xDto1 = new XDto();
|
xDto1.setXAxis(strings1[1]);
|
xDtos.add(xDto1);
|
zeroList.add(xDtos);
|
}
|
|
userDataDto.setZero(zeroList);
|
return R.ok(userDataDto);
|
|
}
|
|
|
@Autowired
|
private IUserService userService;
|
@RequestMapping(value = "/export")
|
@ResponseBody
|
public void exportUserInfo(String beginTime,Integer userId,Integer night,String times, HttpServletResponse response) {
|
try {
|
|
Wrapper<TUserDateData> userId1 = new EntityWrapper<TUserDateData>().eq("userId", userId).last("ORDER BY date desc,night desc limit 1");
|
if (beginTime!=null&&beginTime!=""){
|
userId1.eq("date",beginTime).eq("night",night);
|
}
|
TUserDateData tUserDateData = dateDataService.selectOne(userId1);
|
|
ObjectMapper mapper = new ObjectMapper();
|
TUserData[] tUserDataArray = new TUserData[]{};
|
try {
|
// 将JSON字符串转换为TUserData数组
|
tUserDataArray = mapper.readValue(tUserDateData.getData(), TUserData[].class);
|
|
// 打印转换后的数组,以便验证
|
System.out.println(Arrays.toString(tUserDataArray));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
List<TUserData> tUserData = Arrays.asList(tUserDataArray);
|
|
List<TUserData> tUserData1 = new ArrayList<>();
|
|
if (times!=null&×!=""){
|
String[] split = times.split(" - ");
|
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
Date time1 = sdf.parse(split[0]);
|
Date time2 = sdf.parse(split[1]);
|
String date1 = beginTime + " " + split[0];
|
String date2 = beginTime + " " + split[1];
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
Date date11 = sdf1.parse(date1);
|
Date date22 = sdf1.parse(date2);
|
|
if (time1.before(time2)){
|
System.err.println("时间1<时间2");
|
//正常筛选
|
for (TUserData tUserDatum : tUserData) {
|
if (!tUserDatum.getDetectionTime().before(date11)&&!tUserDatum.getDetectionTime().after(date22)){
|
tUserData1.add(tUserDatum);
|
}
|
}
|
|
}else {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date22);
|
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
Date date33 = calendar.getTime();
|
|
System.err.println("时间1>时间2");
|
for (TUserData tUserDatum : tUserData) {
|
if (!tUserDatum.getDetectionTime().before(date11)&&!tUserDatum.getDetectionTime().after(date33)){
|
tUserData1.add(tUserDatum);
|
}
|
}
|
|
}
|
|
//
|
//
|
//
|
//
|
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
// Date parse = sdf.parse(dateq);
|
tUserData = tUserData1;
|
|
}
|
|
|
Date date = new Date();
|
DateFormat format = new SimpleDateFormat("yyyyMMdd");
|
// String time1 = format.format(tUserDateData.getDate());
|
User user = userService.selectById(userId);
|
String fileName =tUserDateData.getDate()+user.getName()+".xls";
|
String[] title = new String[] {"序号","时间","形变量","睡姿"};
|
// List<Map<String, Object>> users = userService.selectUsers(null, null, null, null, null,null,null,null,null,null,null);
|
String[][] values = new String[tUserData.size()][];
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // 设置日期时间格式
|
SimpleDateFormat formatter1 = new SimpleDateFormat("HH:mm:ss"); // 设置日期时间格式
|
|
for (int i = 0; i < tUserData.size(); i++) {
|
TUserData d = tUserData.get(i);
|
values[i] = new String[title.length];
|
values[i][0] = String.valueOf(i+1);
|
|
values[i][1] = formatter1.format(d.getDetectionTime());
|
// String strDate = formatter.format(d.get("birthday")); // 将Date类型转换为String
|
values[i][2] = String.valueOf(d.getShapeVariable());
|
// values[i][3] = d.get("high").toString();
|
// values[i][4] = d.get("weight").toString();
|
// values[i][5] = (String) d.get("hospital");
|
// String tagsName = (String) d.get("tagsName");
|
// String replace = tagsName.replace(",", ";");
|
// values[i][6] = replace;
|
// values[i][7] = formatter1.format(d.get("createtime")); // 将Date类型转换为String
|
// values[i][8] = formatter.format(d.get("createtime")); // 将Date类型转换为String
|
|
}
|
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("Variance"+tUserDateData.getDate(), title, values, null);
|
ExcelUtil.setResponseHeader(response, fileName);
|
OutputStream os = response.getOutputStream();
|
wb.write(os);
|
os.flush();
|
os.close();
|
}catch(Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
|
@RequestMapping(value = "/list2")
|
@ResponseBody
|
public R list2(String beginTime,Integer userId,Integer night,String times) throws ParseException {
|
// List<TUserData> tUserData = redisService.getCacheList("ttt");
|
Wrapper<TUserDateData> userId1 = new EntityWrapper<TUserDateData>().eq("userId", userId).last("ORDER BY date desc,night desc limit 1");
|
if (beginTime!=null&&beginTime!=""){
|
userId1.eq("date",beginTime).eq("night",night);
|
}
|
TUserDateData tUserDateData = dateDataService.selectOne(userId1);
|
|
ObjectMapper mapper = new ObjectMapper();
|
TUserData[] tUserDataArray = new TUserData[]{};
|
try {
|
// 将JSON字符串转换为TUserData数组
|
tUserDataArray = mapper.readValue(tUserDateData.getData(), TUserData[].class);
|
|
// 打印转换后的数组,以便验证
|
System.out.println(Arrays.toString(tUserDataArray));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
List<TUserData> tUserData = Arrays.asList(tUserDataArray);
|
|
List<TUserData> tUserData1 = new ArrayList<>();
|
|
if (times!=null&×!=""){
|
String[] split = times.split(" - ");
|
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
Date time1 = sdf.parse(split[0]);
|
Date time2 = sdf.parse(split[1]);
|
String date1 = beginTime + " " + split[0];
|
String date2 = beginTime + " " + split[1];
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
Date date11 = sdf1.parse(date1);
|
Date date22 = sdf1.parse(date2);
|
|
if (time1.before(time2)){
|
System.err.println("时间1<时间2");
|
//正常筛选
|
for (TUserData tUserDatum : tUserData) {
|
if (!tUserDatum.getDetectionTime().before(date11)&&!tUserDatum.getDetectionTime().after(date22)){
|
tUserData1.add(tUserDatum);
|
}
|
}
|
|
}else {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date22);
|
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
Date date33 = calendar.getTime();
|
|
System.err.println("时间1>时间2");
|
for (TUserData tUserDatum : tUserData) {
|
if (!tUserDatum.getDetectionTime().before(date11)&&!tUserDatum.getDetectionTime().after(date33)){
|
tUserData1.add(tUserDatum);
|
}
|
}
|
|
}
|
|
//
|
//
|
//
|
//
|
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
// Date parse = sdf.parse(dateq);
|
tUserData = tUserData1;
|
|
}
|
|
return R.ok(tUserData);
|
|
}
|
|
|
@RequestMapping(value = "/list1")
|
@ResponseBody
|
public R list1(Integer userId) {
|
// List<TUserData> tUserData = redisService.getCacheList("ttt");
|
TUserDateData tUserDateData = dateDataService.selectOne(new EntityWrapper<TUserDateData>().eq("userId",userId).last("ORDER BY date desc,night desc limit 1"));
|
|
ObjectMapper mapper = new ObjectMapper();
|
TUserData[] tUserDataArray = new TUserData[]{};
|
try {
|
// 将JSON字符串转换为TUserData数组
|
tUserDataArray = mapper.readValue(tUserDateData.getData(), TUserData[].class);
|
|
// 打印转换后的数组,以便验证
|
System.out.println(Arrays.toString(tUserDataArray));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
List<TUserData> tUserData = Arrays.asList(tUserDataArray);
|
List<String> xData = new ArrayList<>();
|
List<Integer> yData = new ArrayList<>();
|
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
|
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 设置时区为中国上海
|
List<String[]> arrayList = new ArrayList<>();
|
String[] strings = new String[2];
|
for (TUserData data : tUserData) {
|
xData.add(sdf.format(data.getDetectionTime()));
|
yData.add(data.getShapeVariable());
|
if (data.getShapeVariable()==0){
|
if (strings[0]==null){
|
strings[0] =(sdf.format(data.getDetectionTime()));
|
}else {
|
strings[1] =(sdf.format(data.getDetectionTime()));
|
}
|
}else {
|
if (strings[0]==null){
|
continue;
|
}else {
|
if (strings[1]==null){
|
strings[1] = strings[0];
|
}
|
arrayList.add(strings);
|
strings = new String[2];
|
}
|
}
|
}
|
if (strings[0]!=null&&strings[1]!=null){
|
arrayList.add(strings);
|
}
|
if (strings[0]!=null&&strings[1] ==null){
|
strings[1] =strings[0];
|
arrayList.add(strings);
|
}
|
|
UserDataDto userDataDto = new UserDataDto();
|
userDataDto.setXData(xData);
|
userDataDto.setYData(yData);
|
|
List<List<XDto>> zeroList = new ArrayList<>();
|
for (String[] strings1 : arrayList) {
|
List<XDto> xDtos =new ArrayList<>();
|
XDto xDto = new XDto();
|
xDto.setXAxis(strings1[0]);
|
xDtos.add(xDto);
|
XDto xDto1 = new XDto();
|
xDto1.setXAxis(strings1[1]);
|
xDtos.add(xDto1);
|
zeroList.add(xDtos);
|
}
|
|
userDataDto.setZero(zeroList);
|
return R.ok(userDataDto);
|
|
}
|
|
public static List<List<String>> groupConsecutiveTimes(List<String> timeList) {
|
// 使用TreeSet自动对时间进行排序
|
TreeSet<String> sortedTimes = new TreeSet<>(timeList);
|
Iterator<String> iterator = sortedTimes.iterator();
|
String previousTime = iterator.next();
|
|
List<List<String>> result = new ArrayList<>();
|
List<String> currentGroup = new ArrayList<>();
|
currentGroup.add(previousTime);
|
|
while (iterator.hasNext()) {
|
String currentTime = iterator.next();
|
// 计算两个时间的分钟差
|
int minuteDiff = calculateMinuteDifference(previousTime, currentTime);
|
if (minuteDiff == 1) {
|
// 如果连续,加入当前组
|
currentGroup.add(currentTime);
|
} else {
|
// 如果不连续,保存当前组并开始新的组
|
result.add(currentGroup);
|
currentGroup = new ArrayList<>();
|
currentGroup.add(currentTime);
|
}
|
previousTime = currentTime;
|
}
|
|
// 添加最后一个组
|
result.add(currentGroup);
|
|
// 移除只包含单个时间点的组
|
result.removeIf(List::isEmpty);
|
|
return result;
|
}
|
|
private static int calculateMinuteDifference(String startTime, String endTime) {
|
try {
|
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
Date start = sdf.parse(startTime);
|
Date end = sdf.parse(endTime);
|
long diffInMillies = Math.abs(end.getTime() - start.getTime());
|
return (int) (diffInMillies / (60 * 1000));
|
} catch (Exception e) {
|
throw new RuntimeException("Error calculating time difference", e);
|
}
|
}
|
|
/**
|
* 新增
|
*/
|
@RequestMapping(value = "/add")
|
@ResponseBody
|
public Object add(TUserData tUserData) {
|
tUserDataService.insert(tUserData);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 删除
|
*/
|
@RequestMapping(value = "/delete")
|
@ResponseBody
|
public Object delete(@RequestParam Integer tUserDataId) {
|
tUserDataService.deleteById(tUserDataId);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 修改
|
*/
|
@RequestMapping(value = "/update")
|
@ResponseBody
|
public Object update(TUserData tUserData) {
|
tUserDataService.updateById(tUserData);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 详情
|
*/
|
@RequestMapping(value = "/detail/{tUserDataId}")
|
@ResponseBody
|
public Object detail(@PathVariable("tUserDataId") Integer tUserDataId) {
|
return tUserDataService.selectById(tUserDataId);
|
}
|
}
|