package com.ltkj.web.controller.system; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.core.domain.entity.SysDept; import com.ltkj.common.core.domain.entity.SysUser; import com.ltkj.common.core.redis.RedisCache; import com.ltkj.common.utils.DateUtils; import com.ltkj.hosp.domain.*; import com.ltkj.hosp.dto.TjChartVo; import com.ltkj.hosp.service.*; import com.ltkj.hosp.vodomain.*; import com.ltkj.system.service.ISysDeptService; import com.ltkj.system.service.ISysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.models.auth.In; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * @Author: 西安路泰科技有限公司/赵佳豪 * @Date: 2022/12/14 13:50 */ @RestController @RequestMapping("/home/page") @Api(tags = "体检后台管理端首页面数据汇总") public class TjHomePageController { @Resource private ITjOrderService orderService; @Resource private ITjOrderDetailService detailService; @Resource private ITjCustomerService customerService; @Resource private ITjProjectService projectService; @Resource private RedisCache redisCache; @Resource private TjAsyncService asyncService; @Resource private ISysDeptService deptService; @Resource private ISysUserService userService; @Resource private ITjOrderRemarkService remarkService; @Resource private ITjFlowingWaterService tjFlowingWaterService; @Resource private LtkjHysqdService hysqdService; @GetMapping("/GetChartByDate") @ApiOperation(value = "条形统计时间段内个人和团队体检数") // @PreAuthorize("@ss.hasPermi('home:page:GetChartByDate')") public List> GetChartByDate(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) throws ParseException { List> list = new ArrayList<>(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); if (startDate != null & endDate != null) { for (String date : findDates(startDate, endDate)) { ChartVO chartVO = new ChartVO(); Map result = new HashMap<>(); Date beginTime = DateUtils.parseDate(date + " 00:00:00"); Date endTime = DateUtils.parseDate(date + " 23:59:59"); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.ge("create_time", beginTime); queryWrapper1.lt("create_time", endTime); queryWrapper1.eq("tj_type", 2); Integer personCount = orderService.count(queryWrapper1); QueryWrapper queryWrapper2 = new QueryWrapper<>(); queryWrapper2.ge("create_time", beginTime); queryWrapper2.lt("create_time", endTime); queryWrapper2.eq("tj_type", 1); Integer teamCount = orderService.count(queryWrapper2); chartVO.setPersonNum(personCount); chartVO.setTeamNum(teamCount); result.put("date", date); result.put("num", chartVO); list.add(result); } return list; } else { for (int i = 7; i >= 0; i--) { ChartVO chartVO = new ChartVO(); Map result = new HashMap<>(); String formatdate = dateFormat.format(getFrontDay(new Date(), i)); Date beginTime = DateUtils.parseDate(formatdate + " 00:00:00"); Date endTime = DateUtils.parseDate(formatdate + " 23:59:59"); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.ge("create_time", beginTime); queryWrapper1.lt("create_time", endTime); queryWrapper1.eq("tj_type", 2); Integer personCount = orderService.count(queryWrapper1); QueryWrapper queryWrapper2 = new QueryWrapper<>(); queryWrapper2.ge("create_time", beginTime); queryWrapper2.lt("create_time", endTime); queryWrapper2.eq("tj_type", 1); Integer teamCount = orderService.count(queryWrapper2); chartVO.setPersonNum(personCount); chartVO.setTeamNum(teamCount); result.put("date", formatdate); result.put("num", chartVO); list.add(result); } return list; } } //传参数 开始日期和结束日期 将中间的日期放入list集合 public static List findDates(String beginTime, String endTime) throws ParseException { List allDate = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dBegin = sdf.parse(beginTime); Date dEnd = sdf.parse(endTime); allDate.add(sdf.format(dBegin)); Calendar calBegin = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())) { // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calBegin.add(Calendar.DAY_OF_MONTH, 1); allDate.add(sdf.format(calBegin.getTime())); } return allDate; } //返回某个日期前几天的日期 public static Date getFrontDay(Date date, int i) { Calendar cal = new GregorianCalendar(); cal.setTime(date); cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i); return cal.getTime(); } @GetMapping("/GetAbnormalData") @ApiOperation(value = "体检结果异常数据统计分析") // @PreAuthorize("@ss.hasPermi('home:page:GetAbnormalData')") public List GetAbnormalData(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) { List list = new ArrayList<>(); List list1 = detailService.getTjOrderDetailList(startDate,endDate); Set abProLists = new HashSet<>(); Set ll = new HashSet<>(); for (TjOrderDetail tjOrderDetail : list1) { TjProject one = projectService.selectTjProjectByProId(tjOrderDetail.getProId()); tjOrderDetail.setProject(one); abProLists.add(one); } for (TjProject abProList : abProLists) { if (abProList!=null){ if (abProList.getProParentId() != 0) { TjProject one = projectService.selectTjProjectByProId(abProList.getProParentId()); ll.add(one); } else { ll.add(abProList); } } } for (TjProject abProList : ll) { Set lll = new HashSet<>(); AbnormalVO abnormalVO = new AbnormalVO(); int TjPersonNum = 0; int AbPersonNum = 0; Integer AbManNum = 0; Integer AbWomanNum = 0; Integer AbThNum = 0; Integer AbThSeNum = 0; Integer AbSeNum = 0; for (TjOrderDetail tjOrderDetail : list1) { if (tjOrderDetail.getProject().getProParentId().equals(abProList.getProId())) { lll.add(tjOrderDetail.getOrderId()); AbPersonNum = lll.size(); } abnormalVO.setAbPersonNum(AbPersonNum); } abnormalVO.setAbProName(abProList.getProName()); for (Long aLong : lll) { TjOrder one = orderService.selectTjOrderByOrderId(aLong); Long userId = one.getUserId(); TjCustomer one1 = customerService.selectTjCustomerByCusId(userId); if (one1.getCusSex() == 0) { AbManNum++; } else { AbWomanNum++; } if (DateUtil.ageOfNow(one1.getCusBrithday()) < 3) { AbThNum++; } else if (DateUtil.ageOfNow(one1.getCusBrithday()) >= 3 && DateUtil.ageOfNow(one1.getCusBrithday()) <= 70) { AbThSeNum++; } else if (DateUtil.ageOfNow(one1.getCusBrithday()) > 70) { AbSeNum++; } abnormalVO.setAbManNum(AbManNum); abnormalVO.setAbWomanNum(AbWomanNum); abnormalVO.setAbSeNum(AbSeNum); abnormalVO.setAbThNum(AbThNum); abnormalVO.setAbThSeNum(AbThSeNum); } List list3 = projectService.getTjProjectListBySoneId(String.valueOf(abProList.getProId())); Set l = new HashSet<>(); for (TjProject tjProject : list3) { for (TjOrderDetail tjOrderDetail : detailService.list()) { if (tjProject.getProId().equals(tjOrderDetail.getProId())) { l.add(tjOrderDetail.getOrderId()); TjPersonNum = l.size(); } } } abnormalVO.setTjPersonNum(TjPersonNum); list.add(abnormalVO); } return list; } @GetMapping("/getDiseaseList") @ApiOperation("根据疾病名称查询相关人员信息接口") // @PreAuthorize("@ss.hasPermi('home:page:getDiseaseList')") public AjaxResult getDiseaseList(@ApiParam(value = "疾病名称") @RequestParam String disesseName, @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime, @ApiParam(value = "结束时间") @RequestParam(required = false) String endTime) { if (null == disesseName) { return AjaxResult.error("请输入要查询的内容"); } List diseaseVos = new ArrayList<>(); LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); wq0.like(TjOrderRemark::getRemark, disesseName); if (null != beginTime && null != endTime) { wq0.between(TjOrderRemark::getCreateTime, beginTime, endTime); } List remarkList = remarkService.list(wq0); if (null != remarkList && remarkList.size() > 0) { for (TjOrderRemark orderRemark : remarkList) { LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjOrder::getTjNumber, orderRemark.getTjNumber()); TjOrder tjOrder = orderService.getOne(wq1); if (null != tjOrder) { DiseaseVo diseaseVo = new DiseaseVo(); TjCustomer customer = customerService.getById(tjOrder.getUserId()); diseaseVo.setName(customer.getCusName()); diseaseVo.setAge(DateUtil.ageOfNow(customer.getCusBrithday())); diseaseVo.setSex(Math.toIntExact(customer.getCusSex())); diseaseVo.setPhone(customer.getCusPhone()); diseaseVo.setTjTime(tjOrder.getFinishTime()); if(tjOrder.getIsReturn()==0){ diseaseVo.setType("已复检"); }else { diseaseVo.setType("未复检"); } diseaseVos.add(diseaseVo); } } return AjaxResult.success(diseaseVos); } return AjaxResult.success("暂时没有数据"); } /** * 首页折线图数据 */ @GetMapping("/getLineChart") @ApiOperation(value = "首页折线图数据") public AjaxResult getLineChart() { // asyncService.getLineChart(); // if(redisCache.hasKey("getLineChart")){ // return redisCache.getCacheObject("getLineChart"); // } return getResult(); } private AjaxResult getResult() { // List> line = orderService.getLine(); List line = orderService.getLine(); Collections.reverse(line); return AjaxResult.success("折线图数据", line); } @GetMapping("/getPieChart") @ApiOperation(value = "首页饼状图登记人数接口") public AjaxResult getPieChart() { // asyncService.getPieChart(); // if(redisCache.hasKey("getPieChart")){ // return redisCache.getCacheObject("getPieChart"); // } return getAjaxResult(); } private AjaxResult getAjaxResult() { Map map = new HashMap<>(); Date date=new Date(); //获取体检登记数 LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); wq0.between(TjOrder::getCreateTime,DateUtil.offsetMonth(date,-1),date); List orderCountList = orderService.list(wq0); if (null != orderCountList && !orderCountList.isEmpty()) { List pieChartVoList = getTjorderCountMap(); map.put("tjdj", pieChartVoList); } else { map.put("tjdj", 0); } //获取体检异常数 LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.between(TjOrder::getCreateTime,DateUtil.offsetMonth(date,-1),date); // wq1.isNotNull(TjOrder::getFinishTime); // wq1.eq(TjOrder::getCheckStatus, 1); List orderList = orderService.list(wq1); if (null !=orderList && !orderList.isEmpty()) { // List orderList = orderAbnormalCountList.stream().distinct().collect(Collectors.toList()); List pieChartVoList = getTjorderAbnormalCountMap(); map.put("tjyc", pieChartVoList); } else { map.put("tjyc", 0); } return AjaxResult.success(map); } //获取体检登记数 private List getTjorderCountMap() { int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; Map map = new HashMap<>(); Date date=new Date(); List customers = hysqdService.getCgYcXmList(DateUtil.offsetMonth(date, -1), date); if (null != customers && !customers.isEmpty()) { for (TjCustomer customer : customers) { int age = DateUtil.ageOfNow(customer.getCusBrithday()); if (age >= 0 && age <= 3) { a += 1; } else if (age > 3 && age <= 16) { b += 1; } else if (age > 16 && age <= 40) { c += 1; } else if (age > 40 && age <= 60) { d += 1; } else { e += 1; } } } map.put("0-3岁", a); map.put("3-16岁", b); map.put("16-40岁", c); map.put("40-60岁", d); map.put("60岁以上", e); List pieChartVoList = new ArrayList<>(); for (Map.Entry entry : map.entrySet()) { PieChartVo pieChartVo = new PieChartVo(); pieChartVo.setName(entry.getKey()); pieChartVo.setCount((Integer) entry.getValue()); pieChartVoList.add(pieChartVo); } return pieChartVoList; } //获取体检异常数 private List getTjorderAbnormalCountMap() { int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; Map map = new HashMap<>(); Date date=new Date(); List customers = hysqdService.getHyYcXmList(DateUtil.offsetMonth(date, -1), date); if (null != customers && !customers.isEmpty()) { for (TjCustomer customer : customers) { int age = DateUtil.ageOfNow(customer.getCusBrithday()); if (age >= 0 && age <= 3) { a += 1; } else if (age > 3 && age <= 16) { b += 1; } else if (age > 16 && age <= 40) { c += 1; } else if (age > 40 && age <= 60) { d += 1; } else { e += 1; } } } map.put("0-3岁", a); map.put("3-16岁", b); map.put("16-40岁", c); map.put("40-60岁", d); map.put("60岁以上", e); List pieChartVoList = new ArrayList<>(); for (Map.Entry entry : map.entrySet()) { PieChartVo pieChartVo = new PieChartVo(); pieChartVo.setName(entry.getKey()); pieChartVo.setCount((Integer) entry.getValue()); pieChartVoList.add(pieChartVo); } return pieChartVoList; } /** * 查询今日待检 * * @return */ @GetMapping("/tobeToday") @ApiOperation(value = "查询今日待检") public Integer ToBeToday() { //当前日期拼接开始和结束时间 //时间字符串类型转换时间类型 return orderService.count(new QueryWrapper() .between("create_time", DateUtil.beginOfDay(new Date()), DateUtil.endOfDay(new Date())) .isNotNull("finish_time") .eq("check_status", 0) .ne("tj_category","13")); } /** * 查询今日已检 * * @return */ @GetMapping("/checkedToday") @ApiOperation(value = "查询今日已检") public Integer checkedToday() { //当前日期拼接开始和结束时间 //时间字符串类型转换时间类型 return orderService.count(new QueryWrapper() .isNotNull("finish_time") .between("create_time", DateUtil.beginOfDay(new Date()), DateUtil.endOfDay(new Date())) .last("and (check_status=1 OR tj_category=13)")); } /** * 查询今日报告 */ @GetMapping("/reportToday") @ApiOperation(value = "查询今日报告") public Integer ReportToday() { //当前日期拼接开始和结束时间 //时间字符串类型转换时间类型 return orderService.count(new QueryWrapper() .isNotNull("report_time") .between("create_time", DateUtil.beginOfDay(new Date()), DateUtil.endOfDay(new Date()))); } /** * 查询今日登记 * * @return */ @GetMapping("/registerToday") @ApiOperation(value = "查询今日登记") public Integer RegisterToday() { return orderService.count(new QueryWrapper() .between("create_time", DateUtil.beginOfDay(new Date()), DateUtil.endOfDay(new Date()))); } @GetMapping("/getChartByDeptId") @ApiOperation("根据部门查询体检统计") public AjaxResult getChartByDeptId(@RequestParam Long deptId, @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime, @ApiParam(value = "结束时间") @RequestParam(required = false) String endTime) { List res=new ArrayList(); LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); wq0.eq(TjOrderRemark::getDeptId, deptId); List remarkList = remarkService.list(wq0); List proIdList = remarkList.stream().map(TjOrderRemark::getProId).distinct().collect(Collectors.toList()); for (Long aLong : proIdList) { LambdaQueryWrapper wq00 = new LambdaQueryWrapper<>(); wq00.eq(TjOrderRemark::getDeptId, deptId); List remarkList1 = remarkService.list(wq00); Integer num1=0; Integer num2=0; Integer num3=0; Integer num4=0; TjChartVo chartVo=new TjChartVo(); chartVo.setDeptId(deptId); chartVo.setDeptName(deptService.getById(deptId).getDeptName()); for (TjOrderRemark tjOrderRemark : remarkList1) { if (tjOrderRemark.getType()==1){ num1+=1; }else if (tjOrderRemark.getType()==0){ num1+=1; }else if (tjOrderRemark.getType()==3){ num1+=1; }else if (tjOrderRemark.getType()==2){ num1+=1; } } chartVo.setYijianNum(String.valueOf(num1)); chartVo.setWeijianNum(String.valueOf(num2)); chartVo.setYanqiNum(String.valueOf(num3)); chartVo.setQijianNum(String.valueOf(num4)); res.add(chartVo); } return AjaxResult.success(res); } @GetMapping("/getTiaoByDeptId") @ApiOperation("根据部门和时间段查询体检统计图表") public AjaxResult getTiaoByDeptId(@RequestParam Long deptId, @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime, @ApiParam(value = "结束时间") @RequestParam(required = false) String endTime) { return AjaxResult.success(); } @GetMapping("/getTiaoNumsByDate") @ApiOperation("根据时间查询体检统计图表") public AjaxResult getTiaoNumsByDate(@ApiParam(value = "开始时间")String beginTime, @ApiParam(value = "结束时间") String endTime) { TjChartVo chartVo=new TjChartVo(); LambdaQueryWrapper wqq = new LambdaQueryWrapper<>(); wqq.gt(TjOrder::getStatus,200); if (null != beginTime && null != endTime) { wqq.between(TjOrder::getCreateTime, beginTime, endTime); } final List list = orderService.list(wqq); chartVo.setTijianNum(list.size()); Integer boys=0; Integer girls=0; Integer person=0; Integer tuan=0; BigDecimal shouyi=new BigDecimal(0); for (TjOrder tjOrder : list) { TjCustomer customer = customerService.getById(tjOrder.getUserId()); if(null !=customer){ if (customer.getCusSex()==0){ boys+=1; }else if (customer.getCusSex()==1){ girls+=1; } } if ("2".equals(tjOrder.getTjType())){ person+=1; } else if ("1".equals(tjOrder.getTjType())) { tuan+=1; } //计算收益 LambdaQueryWrapper wqqq=new LambdaQueryWrapper<>(); wqqq.eq(TjFlowingWater::getOrderId,tjOrder.getOrderId()); final List list1 = tjFlowingWaterService.list(wqqq); for (TjFlowingWater tjFlowingWater : list1) { if(null !=tjFlowingWater.getPaidIn()){ shouyi.add(tjFlowingWater.getPaidIn()); } } } chartVo.setBoysNum(boys); chartVo.setGirlsNum(girls); chartVo.setPersonNum(person); chartVo.setTuanDuiNum(tuan); chartVo.setMoneysNum(shouyi); return AjaxResult.success(chartVo); } @GetMapping("/getListByTjNumber") @ApiOperation("根据体检号下的项目列表") public AjaxResult getListByTjNumber(@RequestParam String tjNumber) { LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); wq0.eq(TjOrderRemark::getTjNumber, tjNumber); List remarkList = remarkService.list(wq0); return AjaxResult.success(remarkList); } }