package com.stylefeng.guns.modular.system.controller; 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.core.log.LogObjectHolder; import com.stylefeng.guns.modular.system.dto.UserDataDto; import com.stylefeng.guns.modular.system.dto.XDto; import com.stylefeng.guns.modular.system.model.TUserData; import com.stylefeng.guns.modular.system.model.TUserDateData; import com.stylefeng.guns.modular.system.model.User; import com.stylefeng.guns.modular.system.service.ITUserDataService; import com.stylefeng.guns.modular.system.service.ITUserDateDataService; import com.stylefeng.guns.modular.system.service.IUserService; 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 org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 控制器 * * @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 = redisService.getCacheList("ttt"); Wrapper userId1 = new EntityWrapper().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 = Arrays.asList(tUserDataArray); List 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"); if (night==1){ //将date11和date22增加一天 Calendar calendar = Calendar.getInstance(); calendar.setTime(date11); calendar.add(Calendar.DATE, 1); date11 = calendar.getTime(); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date22); calendar1.add(Calendar.DATE, 1); date22 = calendar1.getTime(); } //正常筛选 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 xData = new ArrayList<>(); List yData = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 设置时区为中国上海 List 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> zeroList = new ArrayList<>(); for (String[] strings1 : arrayList) { List 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 userId1 = new EntityWrapper().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 = Arrays.asList(tUserDataArray); List 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> 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 = redisService.getCacheList("ttt"); Wrapper userId1 = new EntityWrapper().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 = Arrays.asList(tUserDataArray); List 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 = redisService.getCacheList("ttt"); TUserDateData tUserDateData = dateDataService.selectOne(new EntityWrapper().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 = Arrays.asList(tUserDataArray); List xData = new ArrayList<>(); List yData = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 设置时区为中国上海 List 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> zeroList = new ArrayList<>(); for (String[] strings1 : arrayList) { List 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> groupConsecutiveTimes(List timeList) { // 使用TreeSet自动对时间进行排序 TreeSet sortedTimes = new TreeSet<>(timeList); Iterator iterator = sortedTimes.iterator(); String previousTime = iterator.next(); List> result = new ArrayList<>(); List 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); } }