BmsEventOrderService.java 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725
  1. package com.care.bms.service;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.date.DateUtil;
  5. import cn.hutool.core.util.RandomUtil;
  6. import cn.hutool.core.util.StrUtil;
  7. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  8. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  9. import com.baomidou.mybatisplus.core.metadata.IPage;
  10. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  11. import com.care.bigscreen.service.BigScreenService;
  12. import com.care.common.cache.RedisKeyConstant;
  13. import com.care.common.cache.RedisUtil;
  14. import com.care.common.entity.*;
  15. import com.care.common.enums.*;
  16. import com.care.common.exception.BDException;
  17. import com.care.common.service.*;
  18. import com.care.common.vo.PageReqVO;
  19. import com.care.common.vo.UserLogindConvertVO;
  20. import com.care.common.vo.order.*;
  21. import com.care.common.vo.outcall.CcCallResultVO;
  22. import org.apache.commons.compress.utils.Lists;
  23. import org.springframework.beans.BeanUtils;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import javax.annotation.Resource;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.Map;
  30. /**
  31. * 事件定单表(CareEventOrder)表服务实现类
  32. *
  33. * @author makejava
  34. * @since 2021-05-21 00:08:29
  35. */
  36. @Service
  37. @Transactional(rollbackFor = Exception.class)
  38. public class BmsEventOrderService {
  39. @Resource
  40. RedisUtil redisUtil;
  41. @Resource
  42. private CareEventOrderService careEventOrderService;
  43. @Resource
  44. private CareSysUserService careSysUserService;
  45. @Resource
  46. private CareEventOrderOlderService careEventOrderOlderService;
  47. @Resource
  48. private CareEventOrderChambService careEventOrderChambService;
  49. @Resource
  50. private CareEventOrderContactStatusService careEventOrderContactStatusService;
  51. @Resource
  52. private CareEventOrderHandleHisService careEventOrderHandleHisService;
  53. @Resource
  54. private CareEventOrderKeyApplyService careEventOrderKeyApplyService;
  55. @Resource
  56. private CcCallResultService ccCallResultService;
  57. @Resource
  58. private CareHouseService careHouseService;
  59. @Resource
  60. private CareHouseContactService careHouseContactService;
  61. @Resource
  62. private CareOlderService careOlderService;
  63. @Resource
  64. private SmsSendService smsSendService;
  65. @Resource
  66. private BigScreenService bigScreenService;
  67. @Resource
  68. private CareDeviceService careDeviceService;
  69. /**
  70. * 工单查询
  71. * @param orderStatus
  72. * @param olderName
  73. * @param loginUser
  74. * @param pageReqVo
  75. * @return
  76. */
  77. public IPage<EventOrderVO> listEvent(String orderStatus, String olderName, UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
  78. IPage<CareEventOrder> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  79. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  80. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus),CareEventOrder::getStatus, orderStatus)
  81. .like(StrUtil.isNotEmpty(olderName),CareEventOrder::getOlderName,olderName)
  82. .eq(CareEventOrder::getOrgId,loginUser.getOrgId())
  83. .eq(loginUser.getStationId()!=null,CareEventOrder::getStationId,loginUser.getStationId())
  84. .orderByAsc(CareEventOrder::getCreateTime);
  85. IPage<CareEventOrder> pageRes = this.careEventOrderService.page(page, queryWrapper);
  86. IPage<EventOrderVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
  87. if(CollUtil.isNotEmpty(pageRes.getRecords())){
  88. List<EventOrderVO> list = new ArrayList<>();
  89. pageRes.getRecords().forEach(item -> {
  90. EventOrderVO resVO = new EventOrderVO();
  91. BeanUtils.copyProperties(item,resVO);
  92. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  93. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  94. list.add(resVO);
  95. });
  96. results.setRecords(list);
  97. }
  98. return results;
  99. }
  100. /**
  101. * 工单查询
  102. * @param orderStatus
  103. * @param olderName
  104. * @param loginUser
  105. * @return
  106. */
  107. public List<EventOrderVO> listTodoOrder(String orderStatus, String olderName, UserLogindConvertVO loginUser) {
  108. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  109. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus),CareEventOrder::getStatus, orderStatus)
  110. .like(StrUtil.isNotEmpty(olderName),CareEventOrder::getOlderName,olderName)
  111. .eq(CareEventOrder::getOrgId,loginUser.getOrgId())
  112. .eq(loginUser.getStationId()!=null,CareEventOrder::getStationId,loginUser.getStationId())
  113. //.last("limit 100")
  114. .orderByAsc(CareEventOrder::getCreateTime);
  115. List<CareEventOrder> datas = this.careEventOrderService.list(queryWrapper);
  116. List<EventOrderVO> results = Lists.newArrayList();
  117. if(CollUtil.isNotEmpty(datas)){
  118. datas.forEach(item -> {
  119. EventOrderVO resVO = new EventOrderVO();
  120. BeanUtils.copyProperties(item,resVO);
  121. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  122. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  123. results.add(resVO);
  124. });
  125. }
  126. return results;
  127. }
  128. /**
  129. *
  130. * 工单数量查询
  131. * @param orderStatus
  132. * @param olderName
  133. * @param loginUser
  134. * @return
  135. */
  136. public Integer getTodoOrderCount(String orderStatus, String olderName, UserLogindConvertVO loginUser) {
  137. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  138. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus),CareEventOrder::getStatus, orderStatus)
  139. .like(StrUtil.isNotEmpty(olderName),CareEventOrder::getOlderName,olderName)
  140. .eq(CareEventOrder::getOrgId,loginUser.getOrgId())
  141. .eq(loginUser.getStationId()!=null,CareEventOrder::getStationId,loginUser.getStationId());
  142. int count = this.careEventOrderService.count(queryWrapper);
  143. return count;
  144. }
  145. /**
  146. * 我的处理事件 - 坐席
  147. *
  148. * @param orderStatus
  149. * @param olderName
  150. * @param loginUser
  151. * @param pageReqVo
  152. * @return
  153. */
  154. public IPage<EventOrderVO> listEvent4MyDo(String orderStatus, String olderName, UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
  155. IPage<CareEventOrder> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  156. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  157. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus),CareEventOrder::getStatus, orderStatus)
  158. .like(StrUtil.isNotEmpty(olderName),CareEventOrder::getOlderName,olderName)
  159. .eq(CareEventOrder::getOrgId,loginUser.getOrgId())
  160. .eq(CareEventOrder::getSeatId,loginUser.getId())
  161. .orderByAsc(CareEventOrder::getCreateTime);
  162. IPage<CareEventOrder> pageRes = this.careEventOrderService.page(page, queryWrapper);
  163. IPage<EventOrderVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
  164. if(CollUtil.isNotEmpty(pageRes.getRecords())){
  165. List<EventOrderVO> list = new ArrayList<>();
  166. pageRes.getRecords().forEach(item -> {
  167. EventOrderVO resVO = new EventOrderVO();
  168. BeanUtils.copyProperties(item,resVO);
  169. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  170. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  171. QueryWrapper<CareEventOrderHandleHis> queryWrapper2 = new QueryWrapper<>();
  172. queryWrapper2.lambda().eq(CareEventOrderHandleHis::getOrderId,item.getId()).eq(CareEventOrderHandleHis::getLogType,LogTypeEnum.DEV_EVENT.getValue());
  173. resVO.setWarnCount(careEventOrderHandleHisService.count(queryWrapper2));
  174. list.add(resVO);
  175. });
  176. results.setRecords(list);
  177. }
  178. return results;
  179. }
  180. /**
  181. * 历史告警查询
  182. *
  183. * @return
  184. */
  185. public List<OrderHandleHisVO> listHisWarn(Long orderId) {
  186. CareEventOrder order = this.careEventOrderService.getById(orderId);
  187. QueryWrapper<CareEventOrderHandleHis> queryWrapper = new QueryWrapper<>();
  188. queryWrapper.lambda().eq(CareEventOrderHandleHis::getOrderId,order.getId()).eq(CareEventOrderHandleHis::getLogType,LogTypeEnum.DEV_EVENT).orderByDesc(CareEventOrderHandleHis::getCreateTime);
  189. List<CareEventOrderHandleHis> list = careEventOrderHandleHisService.list(queryWrapper);
  190. List<OrderHandleHisVO> listHisWarn = new ArrayList<>();
  191. if(CollUtil.isNotEmpty(list)){
  192. list.forEach(item -> {
  193. OrderHandleHisVO vo = new OrderHandleHisVO();
  194. BeanUtil.copyProperties(item,vo);
  195. vo.setOrderTypeName(OrderTypeEnum.getCodeToName(vo.getOrderType()));
  196. listHisWarn.add(vo);
  197. });
  198. }
  199. return listHisWarn;
  200. }
  201. /**
  202. * 近期事件查询
  203. * @param orderStatus
  204. * @param loginUser
  205. * @return
  206. */
  207. public List<EventOrderVO> listRecentHandle(String orderStatus, UserLogindConvertVO loginUser) {
  208. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  209. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus),CareEventOrder::getStatus, orderStatus)
  210. .eq(CareEventOrder::getOrgId,loginUser.getOrgId())
  211. .eq(loginUser.getStationId()!=null,CareEventOrder::getStationId,loginUser.getStationId())
  212. .eq(CareEventOrder::getSeatId,loginUser.getId())
  213. .orderByAsc(CareEventOrder::getCreateTime);
  214. List<CareEventOrder> datas = this.careEventOrderService.list(queryWrapper);
  215. List<EventOrderVO> results = Lists.newArrayList();
  216. if(CollUtil.isNotEmpty(datas)){
  217. datas.forEach(item -> {
  218. EventOrderVO resVO = new EventOrderVO();
  219. BeanUtils.copyProperties(item,resVO);
  220. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  221. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  222. results.add(resVO);
  223. });
  224. }
  225. return results;
  226. }
  227. /**
  228. * 处理工单
  229. * 使用分布式锁
  230. *
  231. * @param orderId
  232. * @param loginUser
  233. */
  234. public void receiveOrder(Long orderId, UserLogindConvertVO loginUser) {
  235. String key = RedisKeyConstant.DO_ORDER+":"+orderId;
  236. boolean result = redisUtil.tryLock(key,3000);
  237. try{
  238. if (result){
  239. CareEventOrder order = this.careEventOrderService.getById(orderId);
  240. //1.判断工单的状态,如果不是未处理状态,则不能处理
  241. if (OrderStatusEnum.TODO.getValue().equals(order.getStatus())){
  242. UpdateWrapper<CareEventOrder> updateWrapper = new UpdateWrapper<>();
  243. updateWrapper.lambda().eq(CareEventOrder::getId,orderId)
  244. .set(CareEventOrder::getStatus,OrderStatusEnum.DOING.getValue())
  245. .set(CareEventOrder::getSeatId,loginUser.getId())
  246. .set(CareEventOrder::getSeatName,loginUser.getName())
  247. .set(CareEventOrder::getModifyTime,DateUtil.date());
  248. this.careEventOrderService.update(updateWrapper);
  249. }else{
  250. throw new BDException("该工单状态已变化,请刷新");
  251. }
  252. }else {
  253. throw new BDException("该工单已经再被处理");
  254. }
  255. }finally {
  256. redisUtil.releaseLock(key);
  257. }
  258. }
  259. /**
  260. *
  261. * @param orderId
  262. * @return
  263. */
  264. public EventOrderVO getOrderInfo(Long orderId){
  265. EventOrderVO eventOrderVO = null;
  266. CareEventOrder order = this.careEventOrderService.getById(orderId);
  267. if (order!=null){
  268. eventOrderVO = new EventOrderVO();
  269. BeanUtil.copyProperties(order,eventOrderVO);
  270. eventOrderVO.setStatusName(OrderStatusEnum.getCodeToName(eventOrderVO.getStatus()));
  271. eventOrderVO.setOrderTypeName(OrderTypeEnum.getCodeToName(eventOrderVO.getOrderType()));
  272. CareHouse house = this.careHouseService.getById(order.getHouseId());
  273. CareHouseVO houseVO = new CareHouseVO();
  274. BeanUtil.copyProperties(house,houseVO);
  275. //houseVO.setRelationTypeDesc("屋主");
  276. eventOrderVO.setHouse(houseVO);
  277. }
  278. return eventOrderVO;
  279. }
  280. /**
  281. * 主管家改派管家列表查询
  282. * @param orderId
  283. * @return
  284. */
  285. public List<ChamberlainVO> queryChambList(Long orderId){
  286. List<ChamberlainVO> chambList = new ArrayList<>();
  287. ChamberlainVO mainVO = null;
  288. ChamberlainVO assignVO = null;
  289. CareEventOrder order = this.careEventOrderService.getById(orderId);
  290. CareDevice dev = this.careDeviceService.getById(order.getDevId());
  291. if(dev != null){
  292. CareSysUser careSysUser = this.careSysUserService.getById(dev.getChambId());
  293. if (careSysUser != null) {
  294. mainVO = new ChamberlainVO();
  295. BeanUtil.copyProperties(careSysUser,mainVO);
  296. mainVO.setIsMain(TrueFalseEnum.TRUE.getValue());
  297. mainVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
  298. }
  299. }
  300. CareEventOrderChamb careEventOrderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderId);
  301. if(careEventOrderChamb != null) {
  302. CareSysUser careSysUser = this.careSysUserService.getById(careEventOrderChamb.getChambId());
  303. if(careSysUser != null){
  304. assignVO = new ChamberlainVO();
  305. BeanUtil.copyProperties(careSysUser,assignVO);
  306. assignVO.setIsMain(TrueFalseEnum.FALSE.getValue());
  307. assignVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
  308. }
  309. }
  310. if (mainVO != null && assignVO != null) {
  311. if(mainVO.getId().equals(assignVO.getId())){ //没有指派管家
  312. if(ChambStatusEnum.BUSY.getValue().equals(mainVO.getStatus())){ //主状态是忙碌时拆分子状态
  313. if(ChambOrderStatusEnum.DOING.equals(careEventOrderChamb.getStatus())){
  314. mainVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  315. } else {
  316. mainVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  317. }
  318. } else {//主状态不是忙碌时设置子状态和主状态相同
  319. mainVO.setSubStatus(mainVO.getStatus());
  320. }
  321. mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus()));
  322. chambList.add(mainVO);
  323. } else{ //指派了管家
  324. //设置主管家子状态和主状态相同:空闲、休假、忙碌
  325. mainVO.setSubStatus(mainVO.getStatus());
  326. //设置指派管家状态
  327. if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
  328. if(ChambOrderStatusEnum.DOING.equals(careEventOrderChamb.getStatus())){
  329. assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  330. } else {
  331. assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  332. }
  333. } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
  334. assignVO.setSubStatus(assignVO.getStatus());
  335. }
  336. mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus()));
  337. chambList.add(mainVO);
  338. assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus()));
  339. chambList.add(assignVO);
  340. }
  341. } else if(mainVO == null && assignVO != null) {
  342. //设置指派管家状态
  343. if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
  344. if(ChambOrderStatusEnum.DOING.equals(careEventOrderChamb.getStatus())){
  345. assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  346. } else {
  347. assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  348. }
  349. } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
  350. assignVO.setSubStatus(assignVO.getStatus());
  351. }
  352. assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus()));
  353. chambList.add(assignVO);
  354. }
  355. return chambList;
  356. }
  357. /**
  358. * 查询老人列表
  359. * @param orderId
  360. * @return
  361. */
  362. public List<OrderOlderVO> queryOrderOlderList(Long orderId){
  363. List<OrderOlderVO> orderOlderVOList = Lists.newArrayList();
  364. // CareEventOrder order = this.careEventOrderService.getById(orderId);
  365. QueryWrapper<CareEventOrderOlder> queryWrapper = new QueryWrapper<>();
  366. queryWrapper.lambda().eq(CareEventOrderOlder::getOrderId,orderId);
  367. List<CareEventOrderOlder> ceoos = this.careEventOrderOlderService.list(queryWrapper);
  368. if (CollUtil.isNotEmpty(ceoos)){
  369. // ChamberlainVO chamberlainVO = new ChamberlainVO();
  370. // CareHouse house = this.careHouseService.getById(order.getHouseId());
  371. // if (house!=null){
  372. // CareSysUser user = this.careSysUserService.getById(house.getChambId());
  373. // if (user!= null){
  374. // BeanUtil.copyProperties(user,chamberlainVO);
  375. // }
  376. // }
  377. ceoos.forEach(item->{
  378. OrderOlderVO orderOlderVO = new OrderOlderVO();
  379. BeanUtil.copyProperties(item,orderOlderVO);
  380. orderOlderVO.setStatusDesc(OrderOlderStatusEnum.getCodeToName(orderOlderVO.getStatus()));
  381. //orderOlderVO.setChamberlain(chamberlainVO);
  382. orderOlderVOList.add(orderOlderVO);
  383. });
  384. }
  385. return orderOlderVOList;
  386. }
  387. /**
  388. * 查询事件处理历史
  389. * @param orderId
  390. * @return
  391. */
  392. public List<OrderHandleHisVO> queryOrderHandleHis(Long orderId){
  393. List<OrderHandleHisVO> result = Lists.newArrayList();
  394. QueryWrapper<CareEventOrderHandleHis> queryWrapper = new QueryWrapper<>();
  395. queryWrapper.lambda().eq(CareEventOrderHandleHis::getOrderId,orderId)
  396. .orderByDesc(CareEventOrderHandleHis::getCreateTime);
  397. List<CareEventOrderHandleHis> datas = this.careEventOrderHandleHisService.list(queryWrapper);
  398. if (CollUtil.isNotEmpty(datas)){
  399. datas.forEach(item ->{
  400. OrderHandleHisVO hisVO = new OrderHandleHisVO();
  401. BeanUtil.copyProperties(item,hisVO);
  402. hisVO.setHasAudioUrl(false);
  403. if(hisVO.getCallResultId() != null){
  404. CcCallResultVO callResultVO = this.ccCallResultService.getCallResult(hisVO.getCallResultId());
  405. if (StrUtil.isNotEmpty(callResultVO.getAudioUrl())){
  406. hisVO.setHasAudioUrl(true);
  407. }
  408. }
  409. result.add(hisVO);
  410. });
  411. }
  412. return result;
  413. }
  414. /**
  415. * 查询工单的相关联系人
  416. * @param orderId
  417. * @return
  418. */
  419. public List<OrderContactorVO> queryContactList(Long orderId){
  420. List<OrderContactorVO> result = Lists.newArrayList();
  421. QueryWrapper<CareEventOrderContactStatus> queryWrapper = new QueryWrapper<>();
  422. queryWrapper.lambda().eq(CareEventOrderContactStatus::getOrderId,orderId).orderByAsc(CareEventOrderContactStatus::getContactLevel);
  423. List<CareEventOrderContactStatus> ceocs = this.careEventOrderContactStatusService.list(queryWrapper);
  424. if (CollUtil.isNotEmpty(ceocs)){
  425. ceocs.forEach(item -> {
  426. OrderContactorVO contactorVO = new OrderContactorVO();
  427. BeanUtil.copyProperties(item,contactorVO);
  428. contactorVO.setStatusDesc(ContactorStatusEnum.getCodeToName(item.getStatus()));
  429. result.add(contactorVO);
  430. });
  431. }
  432. return result;
  433. }
  434. /**
  435. * 更新工单状态
  436. * @param orderId
  437. * @param orderStatusEnum
  438. */
  439. public void updateOrderStatus(Long orderId,OrderStatusEnum orderStatusEnum){
  440. CareEventOrder order = this.careEventOrderService.getById(orderId);
  441. UpdateWrapper<CareEventOrder> updateWrapper = new UpdateWrapper<>();
  442. updateWrapper.lambda().eq(CareEventOrder::getId,orderId)
  443. .set(CareEventOrder::getStatus,orderStatusEnum.getValue())
  444. .set(CareEventOrder::getModifyTime,DateUtil.date());
  445. this.careEventOrderService.update(updateWrapper);
  446. this.bigScreenService.pushRtEventFlag(order.getStationId().toString(),orderId.toString(),"bigscreenRefresh");
  447. }
  448. /**
  449. * 获取钥匙请求历史
  450. * @param orderId
  451. * @return
  452. */
  453. public List<OrderKeyApplyVO> queryKeyAuthList(Long orderId){
  454. List<OrderKeyApplyVO> result = Lists.newArrayList();
  455. QueryWrapper<CareEventOrderKeyApply> queryWrapper = new QueryWrapper<>();
  456. queryWrapper.lambda().eq(CareEventOrderKeyApply::getOrderId,orderId).orderByDesc(CareEventOrderKeyApply::getCreateTime);
  457. List<CareEventOrderKeyApply> ceocs = this.careEventOrderKeyApplyService.list(queryWrapper);
  458. if (CollUtil.isNotEmpty(ceocs)){
  459. ceocs.forEach(item -> {
  460. OrderKeyApplyVO keyApplyVO = new OrderKeyApplyVO();
  461. BeanUtil.copyProperties(item,keyApplyVO);
  462. result.add(keyApplyVO);
  463. });
  464. }
  465. return result;
  466. }
  467. /**
  468. * 钥匙授权
  469. * @param applyId
  470. * @return
  471. */
  472. public boolean keyAuth(Long applyId ,UserLogindConvertVO loginUser){
  473. CareEventOrderKeyApply apply = this.careEventOrderKeyApplyService.getById(applyId);
  474. UpdateWrapper<CareEventOrderKeyApply> updateWrapper = new UpdateWrapper<>();
  475. updateWrapper.lambda().eq(CareEventOrderKeyApply::getId,applyId)
  476. .set(CareEventOrderKeyApply::getKeyPass,RandomUtil.randomNumbers(6))
  477. .set(CareEventOrderKeyApply::getStatus,KeyAuthEnum.AUTHED.getValue());
  478. CareEventOrderHandleHis his = new CareEventOrderHandleHis();
  479. his.setOrgId(apply.getOrgId());
  480. his.setStationId(apply.getStationId());
  481. his.setOrderId(apply.getOrderId());
  482. his.setLogType(LogTypeEnum.KEY.getValue());
  483. his.setLogObjectId(apply.getApplyUserId());
  484. his.setLogObjectName(apply.getApplyUserName());
  485. his.setLogResult("获得钥匙");
  486. his.setOpUserRole(UserRoleEnum.SEAT.getValue());
  487. his.setOpUserId(loginUser.getId());
  488. his.setOpUserName(loginUser.getName());
  489. his.setCreateTime(DateUtil.date());
  490. his.setRelationTypeDesc(apply.getRelationTypeDesc());
  491. this.careEventOrderHandleHisService.save(his);
  492. return this.careEventOrderKeyApplyService.update(updateWrapper);
  493. }
  494. /**
  495. * 修改联系人状态
  496. * @param orderContactId
  497. * @param status
  498. * @return
  499. */
  500. public boolean updateOrderContactStatus(Long orderContactId,Integer status,UserLogindConvertVO loginUser){
  501. CareEventOrderContactStatus contact = this.careEventOrderContactStatusService.getById(orderContactId);
  502. UpdateWrapper<CareEventOrderContactStatus> updateWrapper = new UpdateWrapper<>();
  503. updateWrapper.lambda().eq(CareEventOrderContactStatus::getId,orderContactId)
  504. .set(CareEventOrderContactStatus::getStatus,status);
  505. CareEventOrderHandleHis his = new CareEventOrderHandleHis();
  506. his.setOrgId(contact.getOrgId());
  507. his.setStationId(contact.getStationId());
  508. his.setOrderId(contact.getOrderId());
  509. his.setLogType(LogTypeEnum.OUT_CALL.getValue());
  510. his.setLogObjectId(contact.getContactId());
  511. his.setLogObjectName(contact.getContactName());
  512. his.setLogResult(ContactorStatusEnum.getCodeToName(status));
  513. his.setOpUserRole(UserRoleEnum.SEAT.getValue());
  514. his.setOpUserId(loginUser.getId());
  515. his.setOpUserName(loginUser.getName());
  516. his.setCreateTime(DateUtil.date());
  517. his.setRelationTypeDesc(contact.getRelationTypeDesc());
  518. this.careEventOrderHandleHisService.save(his);
  519. return this.careEventOrderContactStatusService.update(updateWrapper);
  520. }
  521. /**
  522. * 获取通话结果
  523. * @param hisId
  524. */
  525. public CcCallResultVO getCallRadio(Long hisId){
  526. CareEventOrderHandleHis his = this.careEventOrderHandleHisService.getById(hisId);
  527. if (his.getCallResultId()!= null){
  528. return this.ccCallResultService.getCallResult(his.getCallResultId());
  529. }else {
  530. return null;
  531. }
  532. }
  533. public void insertTestData(){
  534. List<CareHouse> houses = Lists.newArrayList();
  535. CareHouse house = new CareHouse();
  536. house.setId(1L);
  537. house.setName("201室");
  538. house.setAddr("北太平庄21号院1单元201室");
  539. houses.add(house);
  540. CareEventOrder order = new CareEventOrder();
  541. order.setOrgId(1L);
  542. order.setOrgName("测试机构");
  543. order.setStationId(1L);
  544. order.setStationName("站点1");
  545. order.setHouseId(1L);
  546. order.setDevId(1L);
  547. order.setDevName("卧室");
  548. order.setHouseName(house.getName());
  549. order.setTitle(house.getAddr());
  550. order.setOrderType(OrderTypeEnum.values()[RandomUtil.randomInt(0,4)].getValue());
  551. order.setStatus("0");
  552. order.setCreateTime(DateUtil.date());
  553. order.setModifyTime(DateUtil.date());
  554. this.careEventOrderService.saveOrder(order);
  555. }
  556. /**
  557. * 发送短信接口
  558. * @param orderContactId
  559. * @return
  560. */
  561. public boolean sendSmsToLianxiren(Long orderContactId){
  562. CareEventOrderContactStatus contactStatus = this.careEventOrderContactStatusService.getById(orderContactId);
  563. if (contactStatus!=null){
  564. CareEventOrder order = this.careEventOrderService.getById(contactStatus.getOrderId());
  565. CareHouse house = this.careHouseService.getById(contactStatus.getHouseId());
  566. boolean smsResult = smsSendService.sendSmsToLianxiren(order.getOrderType(),contactStatus.getContactPhone(),house.getName());
  567. if (smsResult){
  568. CareEventOrderHandleHis his = new CareEventOrderHandleHis();
  569. his.setOrgId(contactStatus.getOrgId());
  570. his.setStationId(contactStatus.getStationId());
  571. his.setOrderId(contactStatus.getOrderId());
  572. his.setLogType(LogTypeEnum.SMS.getValue());
  573. his.setLogObjectId(contactStatus.getContactId());
  574. his.setLogObjectName(contactStatus.getContactName());
  575. his.setLogResult("短信通知");
  576. his.setOpUserRole(UserRoleEnum.SEAT.getValue());
  577. his.setCreateTime(DateUtil.date());
  578. his.setRelationTypeDesc(contactStatus.getRelationTypeDesc());
  579. this.careEventOrderHandleHisService.save(his);
  580. return true;
  581. }else {
  582. return false;
  583. }
  584. }else{
  585. return false;
  586. }
  587. }
  588. /**
  589. * 统计机构下的事件数量
  590. * @param loginUser
  591. * @return
  592. */
  593. public EventStaVO statOrder(UserLogindConvertVO loginUser) {
  594. return this.careEventOrderService.statOrder(loginUser.getOrgId(),null);
  595. }
  596. /**
  597. * 查询管家
  598. * @param orderId
  599. * @return
  600. */
  601. public CareEventOrderChamb queryChamberlain(Long orderId){
  602. CareEventOrderChamb data = new CareEventOrderChamb();
  603. QueryWrapper<CareEventOrderChamb> queryWrapper = new QueryWrapper<>();
  604. queryWrapper.lambda().eq(CareEventOrderChamb::getOrderId,orderId);
  605. List<CareEventOrderChamb> datas = this.careEventOrderChambService.list(queryWrapper);
  606. if (CollUtil.isNotEmpty(datas)){
  607. data = datas.get(0);
  608. }
  609. return data ;
  610. }
  611. public String getSmsTemplate(Long orderId){
  612. CareEventOrder order = this.careEventOrderService.getById(orderId);
  613. if (order!=null){
  614. CareHouse house = this.careHouseService.getById(order.getHouseId());
  615. return house.getName()+"的老人发生跌倒/久滞事情";
  616. }
  617. return null;
  618. }
  619. /**
  620. * 获取3D监控页面URL
  621. * @return
  622. */
  623. public String getRealTimeMonitorUrl(Long orderId){
  624. CareEventOrder order = this.careEventOrderService.getById(orderId);
  625. if (order!=null){
  626. Map<String,String> map = this.careDeviceService.get3dUrl(order.getDevId());
  627. return map.get("toBms");
  628. }
  629. return null;
  630. }
  631. /**
  632. * 获取空闲管家
  633. * @return
  634. */
  635. public List<ChamberlainVO> getFreeChamberlainList(Long orderId){
  636. List<ChamberlainVO> freeChamberlainList = new ArrayList<>();
  637. CareEventOrder order = this.careEventOrderService.getById(orderId);
  638. QueryWrapper<CareSysUser> queryWrapper = new QueryWrapper<>();
  639. queryWrapper.lambda().eq(CareSysUser::getStatus,ChambStatusEnum.FREE.getValue()).eq(CareSysUser::getRole,"chanmb").eq(CareSysUser::getOrgId,order.getOrgId()).eq(CareSysUser::getStationId,order.getStationId());
  640. List<CareSysUser> list = this.careSysUserService.list(queryWrapper);
  641. if(CollUtil.isNotEmpty(list)){
  642. List<ChamberlainVO> tmp = new ArrayList<>();
  643. list.forEach(item->{
  644. ChamberlainVO chamberlainVO = new ChamberlainVO();
  645. BeanUtil.copyProperties(item,chamberlainVO);
  646. chamberlainVO.setStatusDesc(ChambStatusEnum.getCodeToName(chamberlainVO.getStatus()));
  647. CareDevice careDevice = this.careDeviceService.getById(order.getDevId());
  648. if(careDevice != null && chamberlainVO.getId().equals(careDevice.getChambId())) {
  649. chamberlainVO.setIsMain(TrueFalseEnum.TRUE.getValue());
  650. freeChamberlainList.add(chamberlainVO);
  651. } else {
  652. chamberlainVO.setIsMain(TrueFalseEnum.FALSE.getValue());
  653. tmp.add(chamberlainVO);
  654. }
  655. });
  656. freeChamberlainList.addAll(tmp);
  657. }
  658. return freeChamberlainList;
  659. }
  660. /**
  661. * 更新管家工单
  662. * @param orderId
  663. * @param chambId
  664. */
  665. public boolean updateCareEventOrderChamb(Long orderId,Long chambId){
  666. UpdateWrapper<CareEventOrderChamb> updateWrapper = new UpdateWrapper<>();
  667. updateWrapper.lambda().eq(CareEventOrderChamb::getOrderId,orderId)
  668. .set(CareEventOrderChamb::getChambId,chambId)
  669. .set(CareEventOrderChamb::getModifyTime,DateUtil.date());
  670. this.careEventOrderChambService.update(updateWrapper);
  671. return true;
  672. }
  673. }