BmsEventOrderService.java 32 KB

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