package com.care.client.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.care.client.vo.*; import com.care.common.entity.*; import com.care.common.enums.*; import com.care.common.exception.BDException; import com.care.common.service.*; import com.care.common.vo.device.DeviceVO; import com.care.common.vo.order.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.Lists; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @Author: lilt * @Date: 2021/6/7 * @Desc: */ @Slf4j @Service public class PinanbaoService { @Resource private CareDeviceService careDeviceService; @Resource private CareEventOrderService careEventOrderService; @Resource private CareEventOrderHandleHisService careEventOrderHandleHisService; @Resource private CareHouseService careHouseService; @Resource private CareEventOrderChambService careEventOrderChambService; @Resource private CareSysUserService careSysUserService; @Resource private CareEventOrderContactStatusService careEventOrderContactStatusService; @Resource private CareEventOrderOlderService careEventOrderOlderService; /** * 查询我的的设备列表 * @param memberId * @return */ public List devList(Long memberId){ return this.careDeviceService.queryListByMemberId(memberId); } /** * 设备监测数据 * @param devId * @return */ public DeviceMonitorVO devMonitorData(Long devId){ CareDevice device = this.careDeviceService.getById(devId); DeviceMonitorVO vo = new DeviceMonitorVO(); if (device!=null){ vo.setId(devId); vo.setBreathRate(device.getBreathRate()); vo.setHeartRate(device.getHeartRate()); vo.setActivityDistance(600); vo.setActivityTimeHour(1); vo.setActivityTimeMinute(20); vo.setSleepTimeHour(8); vo.setSleepTimeMinute(7); } return vo; } /** * 查询正在进行中的事件 * @param memberId * @return */ public EventOrderVO getDoingEvent(Long memberId){ EventOrderVO vo = null; QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CareEventOrder::getMemberId,memberId).and(item-> item.eq(CareEventOrder::getStatus, OrderStatusEnum.TODO.getValue()).or(i-> i.eq(CareEventOrder::getStatus,OrderStatusEnum.DOING.getValue()) ) ).orderByAsc(CareEventOrder::getCreateTime); List list = this.careEventOrderService.list(queryWrapper); if (CollUtil.isNotEmpty(list)){ CareEventOrder order = list.get(0); vo = new EventOrderVO(); BeanUtil.copyProperties(order,vo); } return vo; } /** * 获取事件详情 * @return */ public EventDetailVO getEventInfo(Long orderId) { EventDetailVO result = new EventDetailVO(); //事件基本信息 EventOrderVO eventOrderVO = this.getOrderInfo(orderId); result.setEventOrderVO(eventOrderVO); //主管家和改派管家列表 List chambList = this.queryChambList(orderId); result.setChambList(chambList); //老人列表 List olderList = this.queryOrderOlderList(orderId); result.setOlderList(olderList); //联系人列表 List contactList = this.queryContactList(orderId); result.setContactList(contactList); //历史处理记录 List orderHandleHisVOList = queryOrderHandleHis(orderId); result.setOrderHandleHisVOList(orderHandleHisVOList); return result; } /** * 查询事件基本信息 * @param orderId * @return */ private EventOrderVO getOrderInfo(Long orderId){ EventOrderVO eventOrderVO = null; CareEventOrder order = this.careEventOrderService.getById(orderId); if (order!=null){ eventOrderVO = new EventOrderVO(); BeanUtil.copyProperties(order,eventOrderVO); eventOrderVO.setStatusName(OrderStatusEnum.getCodeToName(eventOrderVO.getStatus())); eventOrderVO.setOrderTypeName(OrderTypeEnum.getCodeToName(eventOrderVO.getOrderType())); CareHouse house = this.careHouseService.getById(order.getHouseId()); CareHouseVO houseVO = new CareHouseVO(); BeanUtil.copyProperties(house,houseVO); //houseVO.setRelationTypeDesc("屋主"); eventOrderVO.setHouse(houseVO); } return eventOrderVO; } /** * 主管家改派管家列表查询 * @param orderId * @return */ private List queryChambList(Long orderId){ List chambList = new ArrayList<>(); ChamberlainVO mainVO = null; ChamberlainVO assignVO = null; CareEventOrder order = this.careEventOrderService.getById(orderId); CareDevice dev = this.careDeviceService.getById(order.getDevId()); if(dev != null){ CareSysUser careSysUser = this.careSysUserService.getById(dev.getChambId()); if (careSysUser != null) { mainVO = new ChamberlainVO(); BeanUtil.copyProperties(careSysUser,mainVO); mainVO.setIsMain(TrueFalseEnum.TRUE.getValue()); mainVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus())); } } CareEventOrderChamb careEventOrderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderId); if(careEventOrderChamb != null) { CareSysUser careSysUser = this.careSysUserService.getById(careEventOrderChamb.getChambId()); if(careSysUser != null){ assignVO = new ChamberlainVO(); BeanUtil.copyProperties(careSysUser,assignVO); assignVO.setIsMain(TrueFalseEnum.FALSE.getValue()); assignVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus())); } } if (mainVO != null && assignVO != null) { if(mainVO.getId().equals(assignVO.getId())){ //没有指派管家 if(ChambStatusEnum.BUSY.getValue().equals(mainVO.getStatus())){ //主状态是忙碌时拆分子状态 if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){ mainVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中 } else { mainVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌 } } else {//主状态不是忙碌时设置子状态和主状态相同 mainVO.setSubStatus(mainVO.getStatus()); } mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus())); chambList.add(mainVO); } else{ //指派了管家 //设置主管家子状态和主状态相同:空闲、休假、忙碌 mainVO.setSubStatus(mainVO.getStatus()); //设置指派管家状态 if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态 if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){ assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中 } else { assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌 } } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同 assignVO.setSubStatus(assignVO.getStatus()); } mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus())); chambList.add(mainVO); assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus())); chambList.add(assignVO); } } else if(mainVO == null && assignVO != null) { //设置指派管家状态 if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态 if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){ assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中 } else { assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌 } } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同 assignVO.setSubStatus(assignVO.getStatus()); } assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus())); chambList.add(assignVO); } return chambList; } /** * 查询老人列表 * @param orderId * @return */ public List queryOrderOlderList(Long orderId){ List orderOlderVOList = Lists.newArrayList(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CareEventOrderOlder::getOrderId,orderId); List ceoos = this.careEventOrderOlderService.list(queryWrapper); if (CollUtil.isNotEmpty(ceoos)){ ceoos.forEach(item->{ OrderOlderVO orderOlderVO = new OrderOlderVO(); BeanUtil.copyProperties(item,orderOlderVO); orderOlderVO.setStatusDesc(OrderOlderStatusEnum.getCodeToName(orderOlderVO.getStatus())); orderOlderVOList.add(orderOlderVO); }); } return orderOlderVOList; } /** * 查询工单的相关联系人 * @param orderId * @return */ private List queryContactList(Long orderId){ List result = Lists.newArrayList(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CareEventOrderContactStatus::getOrderId,orderId).orderByAsc(CareEventOrderContactStatus::getContactLevel); List ceocs = this.careEventOrderContactStatusService.list(queryWrapper); if (CollUtil.isNotEmpty(ceocs)){ ceocs.forEach(item -> { OrderContactorVO contactorVO = new OrderContactorVO(); BeanUtil.copyProperties(item,contactorVO); contactorVO.setStatusDesc(ContactorStatusEnum.getCodeToName(item.getStatus())); result.add(contactorVO); }); } return result; } /** * 查询事件处理历史列表 * @param orderId * @return */ private List queryOrderHandleHis(Long orderId){ List orderHandleHisVOList = Lists.newArrayList(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CareEventOrderHandleHis::getOrderId,orderId) .orderByDesc(CareEventOrderHandleHis::getCreateTime); List datas = this.careEventOrderHandleHisService.list(queryWrapper); if (CollUtil.isNotEmpty(datas)){ datas.forEach(item ->{ OrderHandleHisVO hisVO = new OrderHandleHisVO(); BeanUtil.copyProperties(item,hisVO); orderHandleHisVOList.add(hisVO); }); } return orderHandleHisVOList; } /** * 老人 SOS呼叫 * @param member * @param file * @return */ public boolean sos(MemberInfoVO member, MultipartFile file){ // EventOrderVO orderVO = getDoingEvent(member.getHouseId()); // if (orderVO!=null){ // throw new BDException("有进行中事件,请勿重复呼叫"); // } // // Date now = DateUtil.date(); // //1. 保存文件 // String url = fileUploadService.upload(file,"sos"); // //2. 查询房屋 // CareHouse house = this.careHouseService.getById(member.getHouseId()); // //2. 生成工单 // CareEventOrder order = new CareEventOrder(); // order.setOrgId(house.getOrgId()); // order.setOrgName(this.careOrganizationService.getById(house.getOrgId()).getName()); // order.setStationId(house.getStationId()); // order.setStationName(this.careStationService.getById(house.getStationId()).getName()); // order.setHouseId(house.getId()); // order.setHouseName(house.getName()); // order.setTitle(house.getAddr()+" "+member.getName()+" 主动呼叫"); // order.setOlderId(member.getId()); // order.setOlderName(member.getName()); // order.setVoiceUrl(url); // order.setOrderType(OrderTypeEnum.ZHU_DONG_HU_JIAO.getValue()); // order.setStatus(OrderStatusEnum.TODO.getValue()); // order.setCreateTime(now); // order.setModifyTime(now); // this.careEventOrderService.saveOrder(order); return true; } /** * 老人 SOS呼叫 * @param member * @return */ public boolean sos(MemberInfoVO member){ // EventOrderVO orderVO = getDoingEvent(member.getHouseId()); // if (orderVO!=null){ // throw new BDException("有进行中事件,请勿重复呼叫"); // } // Date now = DateUtil.date(); // //2. 查询房屋 // CareHouse house = this.careHouseService.getById(member.getHouseId()); // //2. 生成工单 // CareEventOrder order = new CareEventOrder(); // order.setOrgId(house.getOrgId()); // order.setOrgName(this.careOrganizationService.getById(house.getOrgId()).getName()); // order.setStationId(house.getStationId()); // order.setStationName(this.careStationService.getById(house.getStationId()).getName()); // order.setHouseId(house.getId()); // order.setHouseName(house.getName()); // order.setTitle(house.getAddr()+" "+member.getName()+" 主动呼叫"); // order.setOlderId(member.getId()); // order.setOlderName(member.getName()); // order.setOrderType(OrderTypeEnum.ZHU_DONG_HU_JIAO.getValue()); // order.setStatus(OrderStatusEnum.TODO.getValue()); // order.setCreateTime(now); // order.setModifyTime(now); // this.careEventOrderService.saveOrder(order); return true; } /** * 获取3D监控页面URL * @return */ public String getRealTimeMonitorUrl(Long devId){ Map map = this.careDeviceService.get3dUrl(devId); return map.get("toWX"); } }