PinanbaoService.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. package com.care.client.service;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.date.DateUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.care.client.vo.*;
  7. import com.care.common.entity.*;
  8. import com.care.common.enums.*;
  9. import com.care.common.service.*;
  10. import com.care.common.vo.device.DeviceVO;
  11. import com.care.common.vo.order.*;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.apache.commons.compress.utils.Lists;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import javax.annotation.Resource;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.List;
  20. import java.util.Map;
  21. /**
  22. * @Author: lilt
  23. * @Date: 2021/6/7
  24. * @Desc:
  25. */
  26. @Slf4j
  27. @Service
  28. public class PinanbaoService {
  29. @Resource
  30. private CareDeviceService careDeviceService;
  31. @Resource
  32. private CareEventOrderService careEventOrderService;
  33. @Resource
  34. private CareEventOrderHandleHisService careEventOrderHandleHisService;
  35. @Resource
  36. private CareHouseService careHouseService;
  37. @Resource
  38. private CareEventOrderChambService careEventOrderChambService;
  39. @Resource
  40. private CareSysUserService careSysUserService;
  41. @Resource
  42. private CareEventOrderContactStatusService careEventOrderContactStatusService;
  43. @Resource
  44. private CareEventOrderOlderService careEventOrderOlderService;
  45. @Resource
  46. private CareBedroomInbedDetailService careBedroomInbedDetailService;
  47. @Resource
  48. private CareToiletInoutDetailService careToiletInoutDetailService;
  49. @Resource
  50. private CareWalkingDistanceDetailService careWalkingDistanceDetailService;
  51. @Resource
  52. private CareBedroomInbedHourStaService careBedroomInbedHourStaService;
  53. @Resource
  54. private CareToiletInoutHourStaService careToiletInoutHourStaService;
  55. @Resource
  56. private CareWalkingDistanceHourStaService careWalkingDistanceHourStaService;
  57. /**
  58. * 查询我的的设备列表
  59. * @param memberId
  60. * @return
  61. */
  62. public List<DeviceVO> devList(Long memberId){
  63. return this.careDeviceService.queryListByMemberId(memberId);
  64. }
  65. /**
  66. * 设备监测数据
  67. * @param devId
  68. * @return
  69. */
  70. public DeviceMonitorVO devMonitorData(Long devId){
  71. CareDevice device = this.careDeviceService.getById(devId);
  72. DeviceMonitorVO vo = new DeviceMonitorVO();
  73. if (device!=null){
  74. vo.setId(devId);
  75. //场景
  76. vo.setDevScene(device.getDevScene());
  77. vo.setDevSceneName(DeviceSceneEnum.getCodeToName(device.getDevScene()));
  78. //心率和呼吸
  79. vo.setBreathRate(device.getBreathRate());
  80. vo.setHeartRate(device.getHeartRate());
  81. //活动状态
  82. vo.setMoveStatu(device.getMoveStatus());
  83. vo.setMoveStatuName(DeviceMoveStateEnum.getCodeToName(device.getMoveStatus()));
  84. //在床状态
  85. vo.setInbedStatus(device.getInbedStatus());
  86. vo.setInbedStatusName(DeviceInbedStateEnum.getCodeToName(device.getInbedStatus()));
  87. //睡眠时间
  88. DeviceMonitorVO vo1 = careBedroomInbedDetailService.selectSleepTime(devId);
  89. if(vo1 != null) {
  90. vo.setSleepTimeHour(vo1.getSleepTimeHour());
  91. vo.setSleepTimeMinute(vo1.getSleepTimeMinute());
  92. }
  93. //卫生间进出次数
  94. DeviceMonitorVO vo2 = careToiletInoutDetailService.selectToiletInoutFrequency(devId);
  95. if(vo2 != null) {
  96. vo.setToiletInoutFrequency(vo2.getToiletInoutFrequency());
  97. }
  98. //活动距离和时长
  99. DeviceMonitorVO vo3 = careWalkingDistanceDetailService.selectWalking(devId);
  100. if(vo3 != null) {
  101. vo.setActivityDistance(vo3.getActivityDistance());
  102. vo.setActivityTimeHour(vo3.getActivityTimeHour());
  103. vo.setActivityTimeMinute(vo3.getActivityTimeMinute());
  104. }
  105. }
  106. return vo;
  107. }
  108. /**
  109. * 在床时间chart
  110. * @param devId
  111. * @return
  112. */
  113. public List<CareBedroomInbedHourSta> getInbedTimeChartList(Long devId){
  114. String beginHour = DateUtil.format(new Date(),"yyyyMMddHH");
  115. QueryWrapper<CareBedroomInbedHourSta> queryWrapper = new QueryWrapper<>();
  116. queryWrapper.lambda().eq(CareBedroomInbedHourSta::getDevId,devId).gt(CareBedroomInbedHourSta::getDataHour,beginHour).orderByAsc(CareBedroomInbedHourSta::getDataHour);
  117. List<CareBedroomInbedHourSta> list = this.careBedroomInbedHourStaService.list(queryWrapper);
  118. return list;
  119. }
  120. /**
  121. * 卫生间进出统计chart
  122. * @param devId
  123. * @return
  124. */
  125. public List<CareToiletInoutHourSta> getToiletInoutChartList(Long devId){
  126. String beginHour = DateUtil.format(new Date(),"yyyyMMddHH");
  127. QueryWrapper<CareToiletInoutHourSta> queryWrapper = new QueryWrapper<>();
  128. queryWrapper.lambda().eq(CareToiletInoutHourSta::getDevId,devId).gt(CareToiletInoutHourSta::getDataHour,beginHour).orderByAsc(CareToiletInoutHourSta::getDataHour);
  129. List<CareToiletInoutHourSta> list = this.careToiletInoutHourStaService.list(queryWrapper);
  130. return list;
  131. }
  132. /**
  133. * 活动统计chart
  134. * @param devId
  135. * @return
  136. */
  137. public List<CareWalkingDistanceHourSta> getActivityChartList(Long devId){
  138. String beginHour = DateUtil.format(new Date(),"yyyyMMddHH");
  139. QueryWrapper<CareWalkingDistanceHourSta> queryWrapper = new QueryWrapper<>();
  140. queryWrapper.lambda().eq(CareWalkingDistanceHourSta::getDevId,devId).gt(CareWalkingDistanceHourSta::getDataHour,beginHour).orderByAsc(CareWalkingDistanceHourSta::getDataHour);
  141. List<CareWalkingDistanceHourSta> list = this.careWalkingDistanceHourStaService.list(queryWrapper);
  142. return list;
  143. }
  144. /**
  145. * 查询正在进行中的事件
  146. * @param memberId
  147. * @return
  148. */
  149. public EventOrderVO getDoingEvent(Long memberId){
  150. EventOrderVO vo = null;
  151. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  152. queryWrapper.lambda().eq(CareEventOrder::getMemberId,memberId).and(item->
  153. item.eq(CareEventOrder::getStatus, OrderStatusEnum.TODO.getValue()).or(i->
  154. i.eq(CareEventOrder::getStatus,OrderStatusEnum.DOING.getValue())
  155. )
  156. ).orderByAsc(CareEventOrder::getCreateTime);
  157. List<CareEventOrder> list = this.careEventOrderService.list(queryWrapper);
  158. if (CollUtil.isNotEmpty(list)){
  159. CareEventOrder order = list.get(0);
  160. vo = new EventOrderVO();
  161. BeanUtil.copyProperties(order,vo);
  162. }
  163. return vo;
  164. }
  165. /**
  166. * 获取事件详情
  167. * @return
  168. */
  169. public EventDetailVO getEventInfo(Long orderId) {
  170. EventDetailVO result = new EventDetailVO();
  171. //事件基本信息
  172. EventOrderVO eventOrderVO = this.getOrderInfo(orderId);
  173. result.setEventOrderVO(eventOrderVO);
  174. //主管家和改派管家列表
  175. List<ChamberlainVO> chambList = this.queryChambList(orderId);
  176. result.setChambList(chambList);
  177. //老人列表
  178. List<OrderOlderVO> olderList = this.queryOrderOlderList(orderId);
  179. result.setOlderList(olderList);
  180. //联系人列表
  181. List<OrderContactorVO> contactList = this.queryContactList(orderId);
  182. result.setContactList(contactList);
  183. //历史处理记录
  184. List<OrderHandleHisVO> orderHandleHisVOList = queryOrderHandleHis(orderId);
  185. result.setOrderHandleHisVOList(orderHandleHisVOList);
  186. return result;
  187. }
  188. /**
  189. * 查询事件基本信息
  190. * @param orderId
  191. * @return
  192. */
  193. private EventOrderVO getOrderInfo(Long orderId){
  194. EventOrderVO eventOrderVO = null;
  195. CareEventOrder order = this.careEventOrderService.getById(orderId);
  196. if (order!=null){
  197. eventOrderVO = new EventOrderVO();
  198. BeanUtil.copyProperties(order,eventOrderVO);
  199. eventOrderVO.setStatusName(OrderStatusEnum.getCodeToName(eventOrderVO.getStatus()));
  200. eventOrderVO.setOrderTypeName(OrderTypeEnum.getCodeToName(eventOrderVO.getOrderType()));
  201. CareHouse house = this.careHouseService.getById(order.getHouseId());
  202. CareHouseVO houseVO = new CareHouseVO();
  203. BeanUtil.copyProperties(house,houseVO);
  204. //houseVO.setRelationTypeDesc("屋主");
  205. eventOrderVO.setHouse(houseVO);
  206. }
  207. return eventOrderVO;
  208. }
  209. /**
  210. * 主管家改派管家列表查询
  211. * @param orderId
  212. * @return
  213. */
  214. private List<ChamberlainVO> queryChambList(Long orderId){
  215. List<ChamberlainVO> chambList = new ArrayList<>();
  216. ChamberlainVO mainVO = null;
  217. ChamberlainVO assignVO = null;
  218. CareEventOrder order = this.careEventOrderService.getById(orderId);
  219. CareDevice dev = this.careDeviceService.getById(order.getDevId());
  220. if(dev != null){
  221. CareSysUser careSysUser = this.careSysUserService.getById(dev.getChambId());
  222. if (careSysUser != null) {
  223. mainVO = new ChamberlainVO();
  224. BeanUtil.copyProperties(careSysUser,mainVO);
  225. mainVO.setIsMain(TrueFalseEnum.TRUE.getValue());
  226. mainVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
  227. }
  228. }
  229. CareEventOrderChamb careEventOrderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderId);
  230. if(careEventOrderChamb != null) {
  231. CareSysUser careSysUser = this.careSysUserService.getById(careEventOrderChamb.getChambId());
  232. if(careSysUser != null){
  233. assignVO = new ChamberlainVO();
  234. BeanUtil.copyProperties(careSysUser,assignVO);
  235. assignVO.setIsMain(TrueFalseEnum.FALSE.getValue());
  236. assignVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
  237. }
  238. }
  239. if (mainVO != null && assignVO != null) {
  240. if(mainVO.getId().equals(assignVO.getId())){ //没有指派管家
  241. if(ChambStatusEnum.BUSY.getValue().equals(mainVO.getStatus())){ //主状态是忙碌时拆分子状态
  242. if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){
  243. mainVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  244. } else {
  245. mainVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  246. }
  247. } else {//主状态不是忙碌时设置子状态和主状态相同
  248. mainVO.setSubStatus(mainVO.getStatus());
  249. }
  250. mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus()));
  251. chambList.add(mainVO);
  252. } else{ //指派了管家
  253. //设置主管家子状态和主状态相同:空闲、休假、忙碌
  254. mainVO.setSubStatus(mainVO.getStatus());
  255. //设置指派管家状态
  256. if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
  257. if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){
  258. assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  259. } else {
  260. assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  261. }
  262. } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
  263. assignVO.setSubStatus(assignVO.getStatus());
  264. }
  265. mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus()));
  266. chambList.add(mainVO);
  267. assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus()));
  268. chambList.add(assignVO);
  269. }
  270. } else if(mainVO == null && assignVO != null) {
  271. //设置指派管家状态
  272. if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
  273. if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){
  274. assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  275. } else {
  276. assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  277. }
  278. } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
  279. assignVO.setSubStatus(assignVO.getStatus());
  280. }
  281. assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus()));
  282. chambList.add(assignVO);
  283. }
  284. return chambList;
  285. }
  286. /**
  287. * 查询老人列表
  288. * @param orderId
  289. * @return
  290. */
  291. public List<OrderOlderVO> queryOrderOlderList(Long orderId){
  292. List<OrderOlderVO> orderOlderVOList = Lists.newArrayList();
  293. QueryWrapper<CareEventOrderOlder> queryWrapper = new QueryWrapper<>();
  294. queryWrapper.lambda().eq(CareEventOrderOlder::getOrderId,orderId);
  295. List<CareEventOrderOlder> ceoos = this.careEventOrderOlderService.list(queryWrapper);
  296. if (CollUtil.isNotEmpty(ceoos)){
  297. ceoos.forEach(item->{
  298. OrderOlderVO orderOlderVO = new OrderOlderVO();
  299. BeanUtil.copyProperties(item,orderOlderVO);
  300. orderOlderVO.setStatusDesc(OrderOlderStatusEnum.getCodeToName(orderOlderVO.getStatus()));
  301. orderOlderVOList.add(orderOlderVO);
  302. });
  303. }
  304. return orderOlderVOList;
  305. }
  306. /**
  307. * 查询工单的相关联系人
  308. * @param orderId
  309. * @return
  310. */
  311. private List<OrderContactorVO> queryContactList(Long orderId){
  312. List<OrderContactorVO> result = Lists.newArrayList();
  313. QueryWrapper<CareEventOrderContactStatus> queryWrapper = new QueryWrapper<>();
  314. queryWrapper.lambda().eq(CareEventOrderContactStatus::getOrderId,orderId).orderByAsc(CareEventOrderContactStatus::getContactLevel);
  315. List<CareEventOrderContactStatus> ceocs = this.careEventOrderContactStatusService.list(queryWrapper);
  316. if (CollUtil.isNotEmpty(ceocs)){
  317. ceocs.forEach(item -> {
  318. OrderContactorVO contactorVO = new OrderContactorVO();
  319. BeanUtil.copyProperties(item,contactorVO);
  320. contactorVO.setStatusDesc(ContactorStatusEnum.getCodeToName(item.getStatus()));
  321. result.add(contactorVO);
  322. });
  323. }
  324. return result;
  325. }
  326. /**
  327. * 查询事件处理历史列表
  328. * @param orderId
  329. * @return
  330. */
  331. private List<OrderHandleHisVO> queryOrderHandleHis(Long orderId){
  332. List<OrderHandleHisVO> orderHandleHisVOList = Lists.newArrayList();
  333. QueryWrapper<CareEventOrderHandleHis> queryWrapper = new QueryWrapper<>();
  334. queryWrapper.select("distinct org_id,station_id,house_id,order_id,log_type,order_type,log_object_id,log_object_name,log_result," +
  335. "op_user_role,op_user_id,op_user_name,create_time,relation_type_desc,call_result_id").lambda().eq(CareEventOrderHandleHis::getOrderId,orderId)
  336. .orderByDesc(CareEventOrderHandleHis::getCreateTime);
  337. List<CareEventOrderHandleHis> datas = this.careEventOrderHandleHisService.list(queryWrapper);
  338. if (CollUtil.isNotEmpty(datas)){
  339. datas.forEach(item ->{
  340. OrderHandleHisVO hisVO = new OrderHandleHisVO();
  341. BeanUtil.copyProperties(item,hisVO);
  342. orderHandleHisVOList.add(hisVO);
  343. });
  344. }
  345. return orderHandleHisVOList;
  346. }
  347. /**
  348. * 老人 SOS呼叫
  349. * @param member
  350. * @param file
  351. * @return
  352. */
  353. public boolean sos(MemberInfoVO member, MultipartFile file){
  354. // EventOrderVO orderVO = getDoingEvent(member.getHouseId());
  355. // if (orderVO!=null){
  356. // throw new BDException("有进行中事件,请勿重复呼叫");
  357. // }
  358. //
  359. // Date now = DateUtil.date();
  360. // //1. 保存文件
  361. // String url = fileUploadService.upload(file,"sos");
  362. // //2. 查询房屋
  363. // CareHouse house = this.careHouseService.getById(member.getHouseId());
  364. // //2. 生成工单
  365. // CareEventOrder order = new CareEventOrder();
  366. // order.setOrgId(house.getOrgId());
  367. // order.setOrgName(this.careOrganizationService.getById(house.getOrgId()).getName());
  368. // order.setStationId(house.getStationId());
  369. // order.setStationName(this.careStationService.getById(house.getStationId()).getName());
  370. // order.setHouseId(house.getId());
  371. // order.setHouseName(house.getName());
  372. // order.setTitle(house.getAddr()+" "+member.getName()+" 主动呼叫");
  373. // order.setOlderId(member.getId());
  374. // order.setOlderName(member.getName());
  375. // order.setVoiceUrl(url);
  376. // order.setOrderType(OrderTypeEnum.ZHU_DONG_HU_JIAO.getValue());
  377. // order.setStatus(OrderStatusEnum.TODO.getValue());
  378. // order.setCreateTime(now);
  379. // order.setModifyTime(now);
  380. // this.careEventOrderService.saveOrder(order);
  381. return true;
  382. }
  383. /**
  384. * 老人 SOS呼叫
  385. * @param member
  386. * @return
  387. */
  388. public boolean sos(MemberInfoVO member){
  389. // EventOrderVO orderVO = getDoingEvent(member.getHouseId());
  390. // if (orderVO!=null){
  391. // throw new BDException("有进行中事件,请勿重复呼叫");
  392. // }
  393. // Date now = DateUtil.date();
  394. // //2. 查询房屋
  395. // CareHouse house = this.careHouseService.getById(member.getHouseId());
  396. // //2. 生成工单
  397. // CareEventOrder order = new CareEventOrder();
  398. // order.setOrgId(house.getOrgId());
  399. // order.setOrgName(this.careOrganizationService.getById(house.getOrgId()).getName());
  400. // order.setStationId(house.getStationId());
  401. // order.setStationName(this.careStationService.getById(house.getStationId()).getName());
  402. // order.setHouseId(house.getId());
  403. // order.setHouseName(house.getName());
  404. // order.setTitle(house.getAddr()+" "+member.getName()+" 主动呼叫");
  405. // order.setOlderId(member.getId());
  406. // order.setOlderName(member.getName());
  407. // order.setOrderType(OrderTypeEnum.ZHU_DONG_HU_JIAO.getValue());
  408. // order.setStatus(OrderStatusEnum.TODO.getValue());
  409. // order.setCreateTime(now);
  410. // order.setModifyTime(now);
  411. // this.careEventOrderService.saveOrder(order);
  412. return true;
  413. }
  414. /**
  415. * 获取3D监控页面URL
  416. * @return
  417. */
  418. public String getRealTimeMonitorUrl(Long devId){
  419. Map<String,String> map = this.careDeviceService.get3dUrl(devId);
  420. return map.get("toWX");
  421. }
  422. }