BmsEventOrderService.java 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089
  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.lang.Dict;
  6. import cn.hutool.core.util.RandomUtil;
  7. import cn.hutool.core.util.StrUtil;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  10. import com.baomidou.mybatisplus.core.metadata.IPage;
  11. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  12. import com.care.bigscreen.service.BigScreenService;
  13. import com.care.client.dto.TemplateDataDTO;
  14. import com.care.common.cache.RedisKeyConstant;
  15. import com.care.common.cache.RedisUtil;
  16. import com.care.common.entity.*;
  17. import com.care.common.enums.*;
  18. import com.care.common.exception.BDException;
  19. import com.care.common.service.*;
  20. import com.care.common.vo.PageReqVO;
  21. import com.care.common.vo.UserLogindConvertVO;
  22. import com.care.common.vo.order.*;
  23. import com.care.common.vo.outcall.CcCallResultVO;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.apache.commons.collections4.CollectionUtils;
  26. import org.apache.commons.compress.utils.Lists;
  27. import org.apache.commons.lang3.StringUtils;
  28. import org.apache.commons.lang3.math.NumberUtils;
  29. import org.springframework.beans.BeanUtils;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Service;
  32. import org.springframework.transaction.annotation.Transactional;
  33. import javax.annotation.Resource;
  34. import java.text.SimpleDateFormat;
  35. import java.util.*;
  36. /**
  37. * 事件定单表(CareEventOrder)表服务实现类
  38. *
  39. * @author makejava
  40. * @since 2021-05-21 00:08:29
  41. */
  42. @Service
  43. @Transactional(rollbackFor = Exception.class)
  44. @Slf4j
  45. public class BmsEventOrderService {
  46. @Resource
  47. RedisUtil redisUtil;
  48. @Resource
  49. private CareEventOrderService careEventOrderService;
  50. @Resource
  51. private CareSysUserService careSysUserService;
  52. @Resource
  53. private CareEventOrderOlderService careEventOrderOlderService;
  54. @Resource
  55. private CareEventOrderChambService careEventOrderChambService;
  56. @Resource
  57. private CareEventOrderContactStatusService careEventOrderContactStatusService;
  58. @Resource
  59. private CareEventOrderHandleHisService careEventOrderHandleHisService;
  60. @Resource
  61. private CareHandleLogService careHandleLogService;
  62. @Resource
  63. private CareEventOrderKeyApplyService careEventOrderKeyApplyService;
  64. @Resource
  65. private CcCallResultService ccCallResultService;
  66. @Resource
  67. private CareHouseService careHouseService;
  68. @Resource
  69. private SmsSendService smsSendService;
  70. @Autowired
  71. private BmsEventOrderService bmsEventOrderService;
  72. @Resource
  73. private BigScreenService bigScreenService;
  74. @Resource
  75. private CareDeviceService careDeviceService;
  76. @Resource
  77. private CareMemberInfoService careMemberInfoService;
  78. @Resource
  79. private CareHouseContactService careHouseContactService;
  80. @Resource
  81. private WxNoticSendService wxNoticSendService;
  82. /**
  83. * 工单查询
  84. *
  85. * @param orderStatus
  86. * @param olderName
  87. * @param loginUser
  88. * @param pageReqVo
  89. * @return
  90. */
  91. public IPage<EventOrderVO> listEvent(String orderStatus, String orderType, String title, String olderName, String chambId, String deviceCode, UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
  92. IPage<CareEventOrder> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  93. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  94. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus), CareEventOrder::getStatus, orderStatus)
  95. .eq(StrUtil.isNotEmpty(orderType), CareEventOrder::getOrderType, orderType)
  96. // .like(StrUtil.isNotEmpty(title), CareEventOrder::getTitle, title)
  97. .like(StrUtil.isNotEmpty(olderName), CareEventOrder::getOlderName, olderName)
  98. .eq(StringUtils.isNotBlank(deviceCode), CareEventOrder::getDevCode, deviceCode)
  99. .eq(CareEventOrder::getOrgId, loginUser.getOrgId())
  100. .eq(loginUser.getStationId() != null, CareEventOrder::getStationId, loginUser.getStationId())
  101. .orderByDesc(CareEventOrder::getCreateTime);
  102. if (StrUtil.isNotEmpty(title)) {
  103. queryWrapper.lambda().and(wrapper -> wrapper.like(CareEventOrder::getTitle, title).or().eq(CareEventOrder::getDevCode, title));
  104. }
  105. if (StringUtils.isNotBlank(chambId)) {
  106. queryWrapper.apply("(select chamb_id from care_event_order_chamb where care_event_order_chamb.order_id = care_event_order.id) = " + chambId);
  107. }
  108. IPage<CareEventOrder> pageRes = this.careEventOrderService.page(page, queryWrapper);
  109. IPage<EventOrderVO> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
  110. if (CollUtil.isNotEmpty(pageRes.getRecords())) {
  111. List<EventOrderVO> list = new ArrayList<>();
  112. pageRes.getRecords().forEach(item -> {
  113. EventOrderVO resVO = new EventOrderVO();
  114. BeanUtils.copyProperties(item, resVO);
  115. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  116. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  117. list.add(resVO);
  118. });
  119. results.setRecords(list);
  120. }
  121. return results;
  122. }
  123. /**
  124. * 工单查询
  125. *
  126. * @param orderStatus
  127. * @param chambId
  128. * @param loginUser
  129. * @param pageReqVo
  130. * @return
  131. */
  132. public IPage<EventOrderVO> listEventByChamb(String orderStatus, String chambId, UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
  133. IPage<CareEventOrder> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  134. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  135. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus), CareEventOrder::getStatus, orderStatus)
  136. .eq(CareEventOrder::getOrgId, loginUser.getOrgId())
  137. .eq(loginUser.getStationId() != null, CareEventOrder::getStationId, loginUser.getStationId())
  138. .orderByDesc(CareEventOrder::getCreateTime);
  139. queryWrapper.apply("(select chamb_id from care_event_order_chamb where care_event_order_chamb.order_id = care_event_order.id) = " + chambId);
  140. IPage<CareEventOrder> pageRes = this.careEventOrderService.page(page, queryWrapper);
  141. IPage<EventOrderVO> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
  142. if (CollUtil.isNotEmpty(pageRes.getRecords())) {
  143. List<EventOrderVO> list = new ArrayList<>();
  144. pageRes.getRecords().forEach(item -> {
  145. EventOrderVO resVO = new EventOrderVO();
  146. BeanUtils.copyProperties(item, resVO);
  147. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  148. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  149. list.add(resVO);
  150. });
  151. results.setRecords(list);
  152. }
  153. return results;
  154. }
  155. /**
  156. * 工单查询
  157. *
  158. * @param orderStatus
  159. * @param deviceCode
  160. * @param loginUser
  161. * @param pageReqVo
  162. * @return
  163. */
  164. public IPage<EventOrderVO> listEventByDevice(String orderStatus, String deviceCode, UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
  165. IPage<CareEventOrder> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  166. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  167. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus), CareEventOrder::getStatus, orderStatus)
  168. .eq(CareEventOrder::getOrgId, loginUser.getOrgId())
  169. .eq(StringUtils.isNotBlank(deviceCode), CareEventOrder::getDevCode, deviceCode)
  170. .eq(loginUser.getStationId() != null, CareEventOrder::getStationId, loginUser.getStationId())
  171. .orderByDesc(CareEventOrder::getCreateTime);
  172. IPage<CareEventOrder> pageRes = this.careEventOrderService.page(page, queryWrapper);
  173. IPage<EventOrderVO> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
  174. if (CollUtil.isNotEmpty(pageRes.getRecords())) {
  175. List<EventOrderVO> list = new ArrayList<>();
  176. pageRes.getRecords().forEach(item -> {
  177. EventOrderVO resVO = new EventOrderVO();
  178. BeanUtils.copyProperties(item, resVO);
  179. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  180. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  181. list.add(resVO);
  182. });
  183. results.setRecords(list);
  184. }
  185. return results;
  186. }
  187. /**
  188. * 工单查询
  189. *
  190. * @param orderStatus
  191. * @param olderName
  192. * @param loginUser
  193. * @return
  194. */
  195. public List<EventOrderVO> listTodoOrder(String orderStatus, String olderName, UserLogindConvertVO loginUser) {
  196. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  197. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus), CareEventOrder::getStatus, orderStatus)
  198. .like(StrUtil.isNotEmpty(olderName), CareEventOrder::getOlderName, olderName)
  199. .eq(CareEventOrder::getOrgId, loginUser.getOrgId())
  200. .eq(loginUser.getStationId() != null, CareEventOrder::getStationId, loginUser.getStationId())
  201. //.last("limit 100")
  202. .orderByAsc(CareEventOrder::getCreateTime);
  203. List<CareEventOrder> datas = this.careEventOrderService.list(queryWrapper);
  204. List<EventOrderVO> results = Lists.newArrayList();
  205. if (CollUtil.isNotEmpty(datas)) {
  206. datas.forEach(item -> {
  207. EventOrderVO resVO = new EventOrderVO();
  208. BeanUtils.copyProperties(item, resVO);
  209. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  210. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  211. results.add(resVO);
  212. });
  213. }
  214. return results;
  215. }
  216. /**
  217. * 工单数量查询
  218. *
  219. * @param orderStatus
  220. * @param olderName
  221. * @param loginUser
  222. * @return
  223. */
  224. public Integer getTodoOrderCount(String orderStatus, String olderName, UserLogindConvertVO loginUser) {
  225. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  226. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus), CareEventOrder::getStatus, orderStatus)
  227. .like(StrUtil.isNotEmpty(olderName), CareEventOrder::getOlderName, olderName)
  228. .eq(CareEventOrder::getOrgId, loginUser.getOrgId())
  229. .eq(loginUser.getStationId() != null, CareEventOrder::getStationId, loginUser.getStationId());
  230. int count = this.careEventOrderService.count(queryWrapper);
  231. return count;
  232. }
  233. /**
  234. * 我的处理事件 - 坐席
  235. *
  236. * @param orderStatus
  237. * @param olderName
  238. * @param loginUser
  239. * @param pageReqVo
  240. * @return
  241. */
  242. public IPage<EventOrderVO> listEvent4MyDo(String orderStatus, String title, String olderName, UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
  243. IPage<CareEventOrder> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  244. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  245. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus), CareEventOrder::getStatus, orderStatus)
  246. .like(StrUtil.isNotEmpty(title), CareEventOrder::getTitle, title)
  247. .like(StrUtil.isNotEmpty(olderName), CareEventOrder::getOlderName, olderName)
  248. .eq(CareEventOrder::getOrgId, loginUser.getOrgId())
  249. .eq(CareEventOrder::getSeatId, loginUser.getId())
  250. .orderByAsc(CareEventOrder::getCreateTime);
  251. IPage<CareEventOrder> pageRes = this.careEventOrderService.page(page, queryWrapper);
  252. IPage<EventOrderVO> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
  253. if (CollUtil.isNotEmpty(pageRes.getRecords())) {
  254. List<EventOrderVO> list = new ArrayList<>();
  255. pageRes.getRecords().forEach(item -> {
  256. EventOrderVO resVO = new EventOrderVO();
  257. BeanUtils.copyProperties(item, resVO);
  258. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  259. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  260. QueryWrapper<CareEventOrderHandleHis> queryWrapper2 = new QueryWrapper<>();
  261. queryWrapper2.select("distinct org_id,station_id,house_id,order_id,log_type,order_type,log_object_id,log_object_name,log_result," +
  262. "op_user_role,op_user_id,op_user_name,create_time,relation_type_desc,call_result_id").lambda().eq(CareEventOrderHandleHis::getOrderId, item.getId()).eq(CareEventOrderHandleHis::getLogType, LogTypeEnum.DEV_EVENT.getValue());
  263. List tmpList = careEventOrderHandleHisService.list(queryWrapper2);
  264. resVO.setWarnCount(CollUtil.isNotEmpty(tmpList)?tmpList.size():0);
  265. list.add(resVO);
  266. });
  267. results.setRecords(list);
  268. }
  269. return results;
  270. }
  271. /**
  272. * 历史告警查询
  273. *
  274. * @return
  275. */
  276. public List<OrderHandleHisVO> listHisWarn(Long orderId) {
  277. CareEventOrder order = this.careEventOrderService.getById(orderId);
  278. QueryWrapper<CareEventOrderHandleHis> queryWrapper = new QueryWrapper<>();
  279. queryWrapper.select("distinct org_id,station_id,house_id,order_id,log_type,order_type,log_object_id,log_object_name,log_result," +
  280. "op_user_role,op_user_id,op_user_name,create_time,relation_type_desc,call_result_id").lambda().eq(CareEventOrderHandleHis::getOrderId, order.getId()).eq(CareEventOrderHandleHis::getLogType, LogTypeEnum.DEV_EVENT.getValue()).orderByDesc(CareEventOrderHandleHis::getCreateTime);
  281. List<CareEventOrderHandleHis> list = careEventOrderHandleHisService.list(queryWrapper);
  282. List<OrderHandleHisVO> listHisWarn = new ArrayList<>();
  283. if (CollUtil.isNotEmpty(list)) {
  284. list.forEach(item -> {
  285. OrderHandleHisVO vo = new OrderHandleHisVO();
  286. BeanUtil.copyProperties(item, vo);
  287. vo.setOrderTypeName(OrderTypeEnum.getCodeToName(vo.getOrderType()));
  288. listHisWarn.add(vo);
  289. });
  290. }
  291. return listHisWarn;
  292. }
  293. /**
  294. * 近期事件查询
  295. *
  296. * @param orderStatus
  297. * @param loginUser
  298. * @return
  299. */
  300. public List<EventOrderVO> listRecentHandle(String orderStatus, UserLogindConvertVO loginUser) {
  301. QueryWrapper<CareEventOrder> queryWrapper = new QueryWrapper<>();
  302. queryWrapper.lambda().eq(StrUtil.isNotEmpty(orderStatus), CareEventOrder::getStatus, orderStatus)
  303. .eq(CareEventOrder::getOrgId, loginUser.getOrgId())
  304. .eq(loginUser.getStationId() != null, CareEventOrder::getStationId, loginUser.getStationId())
  305. .eq(CareEventOrder::getSeatId, loginUser.getId())
  306. .orderByAsc(CareEventOrder::getCreateTime);
  307. List<CareEventOrder> datas = this.careEventOrderService.list(queryWrapper);
  308. List<EventOrderVO> results = Lists.newArrayList();
  309. if (CollUtil.isNotEmpty(datas)) {
  310. datas.forEach(item -> {
  311. EventOrderVO resVO = new EventOrderVO();
  312. BeanUtils.copyProperties(item, resVO);
  313. resVO.setOrderTypeName(OrderTypeEnum.getCodeToName(item.getOrderType()));
  314. resVO.setStatusName(OrderStatusEnum.getCodeToName(item.getStatus()));
  315. results.add(resVO);
  316. });
  317. }
  318. return results;
  319. }
  320. /**
  321. * 处理工单
  322. * 使用分布式锁
  323. *
  324. * @param orderId
  325. * @param loginUser
  326. */
  327. public void receiveOrder(Long orderId, UserLogindConvertVO loginUser) {
  328. String key = RedisKeyConstant.DO_ORDER + ":" + orderId;
  329. boolean result = redisUtil.tryLock(key, 3000);
  330. try {
  331. if (result) {
  332. CareEventOrder order = this.careEventOrderService.getById(orderId);
  333. //1.判断工单的状态,如果不是未处理状态,则不能处理
  334. if (OrderStatusEnum.TODO.getValue().equals(order.getStatus())) {
  335. UpdateWrapper<CareEventOrder> updateWrapper = new UpdateWrapper<>();
  336. updateWrapper.lambda().eq(CareEventOrder::getId, orderId)
  337. .set(CareEventOrder::getStatus, OrderStatusEnum.DOING.getValue())
  338. .set(CareEventOrder::getSeatId, loginUser.getId())
  339. .set(CareEventOrder::getSeatName, loginUser.getName())
  340. .set(CareEventOrder::getModifyTime, DateUtil.date());
  341. this.careEventOrderService.update(updateWrapper);
  342. } else {
  343. throw new BDException("该工单状态已变化,请刷新");
  344. }
  345. } else {
  346. throw new BDException("该工单已经再被处理");
  347. }
  348. } finally {
  349. redisUtil.releaseLock(key);
  350. }
  351. }
  352. /**
  353. * @param orderId
  354. * @return
  355. */
  356. public EventOrderVO getOrderInfo(Long orderId) {
  357. EventOrderVO eventOrderVO = null;
  358. CareEventOrder order = this.careEventOrderService.getById(orderId);
  359. if (order != null) {
  360. eventOrderVO = new EventOrderVO();
  361. BeanUtil.copyProperties(order, eventOrderVO);
  362. eventOrderVO.setStatusName(OrderStatusEnum.getCodeToName(eventOrderVO.getStatus()));
  363. eventOrderVO.setOrderTypeName(OrderTypeEnum.getCodeToName(eventOrderVO.getOrderType()));
  364. CareHouse house = this.careHouseService.getById(order.getHouseId());
  365. CareHouseVO houseVO = new CareHouseVO();
  366. BeanUtil.copyProperties(house, houseVO);
  367. //houseVO.setRelationTypeDesc("屋主");
  368. eventOrderVO.setHouse(houseVO);
  369. }
  370. return eventOrderVO;
  371. }
  372. /**
  373. * 主管家改派管家列表查询
  374. *
  375. * @param orderId
  376. * @return
  377. */
  378. public List<ChamberlainVO> queryChambList(Long orderId) {
  379. List<ChamberlainVO> chambList = new ArrayList<>();
  380. ChamberlainVO mainVO = null;
  381. ChamberlainVO assignVO = null;
  382. CareEventOrder order = this.careEventOrderService.getById(orderId);
  383. CareDevice dev = this.careDeviceService.getById(order.getDevId());
  384. if (dev != null) {
  385. CareSysUser careSysUser = this.careSysUserService.getById(dev.getChambId());
  386. if (careSysUser != null) {
  387. mainVO = new ChamberlainVO();
  388. BeanUtil.copyProperties(careSysUser, mainVO);
  389. mainVO.setIsMain(TrueFalseEnum.TRUE.getValue());
  390. mainVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
  391. }
  392. }
  393. CareEventOrderChamb careEventOrderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderId);
  394. if (careEventOrderChamb != null) {
  395. CareSysUser careSysUser = this.careSysUserService.getById(careEventOrderChamb.getChambId());
  396. if (careSysUser != null) {
  397. assignVO = new ChamberlainVO();
  398. BeanUtil.copyProperties(careSysUser, assignVO);
  399. assignVO.setIsMain(TrueFalseEnum.FALSE.getValue());
  400. assignVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
  401. }
  402. }
  403. if (mainVO != null && assignVO != null) {
  404. if (mainVO.getId().equals(assignVO.getId())) { //没有指派管家
  405. if (ChambStatusEnum.BUSY.getValue().equals(mainVO.getStatus())) { //主状态是忙碌时拆分子状态
  406. if (ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())) {
  407. mainVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  408. } else {
  409. mainVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  410. }
  411. } else {//主状态不是忙碌时设置子状态和主状态相同
  412. mainVO.setSubStatus(mainVO.getStatus());
  413. }
  414. mainVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(mainVO.getSubStatus()));
  415. chambList.add(mainVO);
  416. } else { //指派了管家
  417. //设置主管家子状态和主状态相同:空闲、休假、忙碌
  418. mainVO.setSubStatus(mainVO.getStatus());
  419. //设置指派管家状态
  420. if (ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
  421. if (ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())) {
  422. assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  423. } else {
  424. assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  425. }
  426. } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
  427. assignVO.setSubStatus(assignVO.getStatus());
  428. }
  429. mainVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(mainVO.getSubStatus()));
  430. chambList.add(mainVO);
  431. assignVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(assignVO.getSubStatus()));
  432. chambList.add(assignVO);
  433. }
  434. } else if (mainVO == null && assignVO != null) {
  435. //设置指派管家状态
  436. if (ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
  437. if (ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())) {
  438. assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
  439. } else {
  440. assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
  441. }
  442. } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
  443. assignVO.setSubStatus(assignVO.getStatus());
  444. }
  445. assignVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(assignVO.getSubStatus()));
  446. chambList.add(assignVO);
  447. }
  448. return chambList;
  449. }
  450. /**
  451. * 查询老人列表
  452. *
  453. * @param orderId
  454. * @return
  455. */
  456. public List<OrderOlderVO> queryOrderOlderList(Long orderId) {
  457. List<OrderOlderVO> orderOlderVOList = Lists.newArrayList();
  458. // CareEventOrder order = this.careEventOrderService.getById(orderId);
  459. QueryWrapper<CareEventOrderOlder> queryWrapper = new QueryWrapper<>();
  460. queryWrapper.lambda().eq(CareEventOrderOlder::getOrderId, orderId);
  461. List<CareEventOrderOlder> ceoos = this.careEventOrderOlderService.list(queryWrapper);
  462. if (CollUtil.isNotEmpty(ceoos)) {
  463. // ChamberlainVO chamberlainVO = new ChamberlainVO();
  464. // CareHouse house = this.careHouseService.getById(order.getHouseId());
  465. // if (house!=null){
  466. // CareSysUser user = this.careSysUserService.getById(house.getChambId());
  467. // if (user!= null){
  468. // BeanUtil.copyProperties(user,chamberlainVO);
  469. // }
  470. // }
  471. ceoos.forEach(item -> {
  472. OrderOlderVO orderOlderVO = new OrderOlderVO();
  473. BeanUtil.copyProperties(item, orderOlderVO);
  474. orderOlderVO.setStatusDesc(OrderOlderStatusEnum.getCodeToName(orderOlderVO.getStatus()));
  475. //orderOlderVO.setChamberlain(chamberlainVO);
  476. orderOlderVOList.add(orderOlderVO);
  477. });
  478. }
  479. return orderOlderVOList;
  480. }
  481. /**
  482. * 查询事件处理历史
  483. *
  484. * @param orderId
  485. * @return
  486. */
  487. public List<OrderHandleHisVO> queryOrderHandleHis(Long orderId) {
  488. List<OrderHandleHisVO> result = Lists.newArrayList();
  489. QueryWrapper<CareEventOrderHandleHis> queryWrapper = new QueryWrapper<>();
  490. queryWrapper.select("distinct org_id,station_id,house_id,order_id,log_type,order_type,log_object_id,log_object_name,log_result," +
  491. "op_user_role,op_user_id,op_user_name,create_time,relation_type_desc,call_result_id,voice_call_status,voice_failure_reason,log_step").lambda().eq(CareEventOrderHandleHis::getOrderId, orderId)
  492. .orderByDesc(CareEventOrderHandleHis::getCreateTime);
  493. List<CareEventOrderHandleHis> datas = this.careEventOrderHandleHisService.list(queryWrapper);
  494. if (CollUtil.isNotEmpty(datas)) {
  495. datas.forEach(item -> {
  496. OrderHandleHisVO hisVO = new OrderHandleHisVO();
  497. BeanUtil.copyProperties(item, hisVO);
  498. hisVO.setHasAudioUrl(false);
  499. if (hisVO.getCallResultId() != null) {
  500. CcCallResultVO callResultVO = this.ccCallResultService.getCallResult(hisVO.getCallResultId());
  501. if (StrUtil.isNotEmpty(callResultVO.getAudioUrl())) {
  502. hisVO.setHasAudioUrl(true);
  503. }
  504. }
  505. if (hisVO.getLogObjectName() == null){
  506. hisVO.setLogObjectName("");
  507. }
  508. result.add(hisVO);
  509. });
  510. }
  511. return result;
  512. }
  513. /**
  514. * 查询工单的相关联系人
  515. *
  516. * @param orderId
  517. * @return
  518. */
  519. public List<OrderContactorVO> queryContactList(Long orderId) {
  520. List<OrderContactorVO> result = Lists.newArrayList();
  521. QueryWrapper<CareEventOrderContactStatus> queryWrapper = new QueryWrapper<>();
  522. queryWrapper.lambda().eq(CareEventOrderContactStatus::getOrderId, orderId).orderByAsc(CareEventOrderContactStatus::getContactLevel);
  523. List<CareEventOrderContactStatus> ceocs = this.careEventOrderContactStatusService.list(queryWrapper);
  524. if (CollUtil.isNotEmpty(ceocs)) {
  525. ceocs.forEach(item -> {
  526. OrderContactorVO contactorVO = new OrderContactorVO();
  527. BeanUtil.copyProperties(item, contactorVO);
  528. contactorVO.setStatusDesc(ContactorStatusEnum.getCodeToName(item.getStatus()));
  529. if (contactorVO.getContactName() == null){
  530. contactorVO.setContactName("");
  531. }
  532. result.add(contactorVO);
  533. });
  534. }
  535. return result;
  536. }
  537. /**
  538. * 更新工单状态
  539. *
  540. * @param orderId
  541. * @param loginUser
  542. */
  543. public void complete(Long orderId, UserLogindConvertVO loginUser) {
  544. CareEventOrder order = this.careEventOrderService.getById(orderId);
  545. UpdateWrapper<CareEventOrder> updateWrapper = new UpdateWrapper<>();
  546. updateWrapper.lambda().eq(CareEventOrder::getId, orderId)
  547. .set(CareEventOrder::getStatus, OrderStatusEnum.COMPLETE.getValue())
  548. .set(CareEventOrder::getModifyTime, DateUtil.date());
  549. this.careEventOrderService.update(updateWrapper);
  550. CareEventOrderHandleHis log = new CareEventOrderHandleHis();
  551. log.setOrgId(order.getOrgId());
  552. log.setStationId(order.getStationId());
  553. log.setOrderId(order.getId());
  554. log.setLogType(LogTypeEnum.CLOSE.getValue());
  555. log.setLogObjectId(loginUser.getId());
  556. log.setLogObjectName(loginUser.getName());
  557. log.setLogResult("完成工单");
  558. log.setOpUserRole(UserRoleEnum.SEAT.getValue());
  559. log.setCreateTime(DateUtil.date());
  560. log.setRelationTypeDesc(UserRoleEnum.getCodeToName(loginUser.getRole()));
  561. this.careEventOrderHandleHisService.save(log);
  562. this.bigScreenService.pushRtEventFlag(order.getOrgId(), order.getStationId(), orderId.toString(), "bigscreenRefresh");
  563. }
  564. /**
  565. * 更新工单状态
  566. *
  567. * @param orderIds
  568. * @param loginUser
  569. */
  570. public boolean completeByIds(List orderIds, UserLogindConvertVO loginUser) {
  571. if (CollectionUtils.isEmpty(orderIds)) {
  572. return false;
  573. }
  574. List<Dict> pushRecords = Lists.newArrayList();
  575. for (Object orderId : orderIds) {
  576. CareEventOrder order = this.careEventOrderService.getById(NumberUtils.toLong(Objects.toString(orderId)));
  577. if (OrderStatusEnum.TODO.getValue().equals(order.getStatus()) || OrderStatusEnum.DOING.getValue().equals(order.getStatus())){
  578. UpdateWrapper<CareEventOrder> updateWrapper = new UpdateWrapper<>();
  579. updateWrapper.lambda().eq(CareEventOrder::getId, orderId)
  580. .set(CareEventOrder::getStatus, OrderStatusEnum.COMPLETE.getValue())
  581. .set(CareEventOrder::getSeatId,loginUser.getId())
  582. .set(CareEventOrder::getSeatName,loginUser.getName())
  583. .set(CareEventOrder::getModifyTime, DateUtil.date());
  584. this.careEventOrderService.update(updateWrapper);
  585. CareEventOrderHandleHis log = new CareEventOrderHandleHis();
  586. log.setOrgId(order.getOrgId());
  587. log.setStationId(order.getStationId());
  588. log.setOrderId(order.getId());
  589. log.setLogType(LogTypeEnum.CLOSE.getValue());
  590. log.setLogObjectId(loginUser.getId());
  591. log.setLogObjectName(loginUser.getName());
  592. log.setLogResult("完成工单");
  593. log.setOpUserRole(UserRoleEnum.SEAT.getValue());
  594. log.setCreateTime(DateUtil.date());
  595. log.setRelationTypeDesc(UserRoleEnum.getCodeToName(loginUser.getRole()));
  596. boolean saved = this.careEventOrderHandleHisService.save(log);
  597. if (!saved) {
  598. throw new BDException("事件归档出现错误, 请稍后重试");
  599. }
  600. pushRecords.add(Dict.create()
  601. .set("orgId", order.getOrgId())
  602. .set("stationId", order.getStationId())
  603. .set("orderId", orderId));
  604. }
  605. }
  606. for (Dict dict : pushRecords) {
  607. this.bigScreenService.pushRtEventFlag(dict.getLong("orgId"), dict.getLong("stationId"), dict.getStr("orderId"), "bigscreenRefresh");
  608. }
  609. for (Dict dict : pushRecords) {
  610. //this.bmsEventOrderService.sendSmsToMemberAndLianxiren(dict.getLong("orderId"),"工单完成");
  611. }
  612. return true;
  613. }
  614. /**
  615. * 获取钥匙请求历史
  616. *
  617. * @param orderId
  618. * @return
  619. */
  620. public List<OrderKeyApplyVO> queryKeyAuthList(Long orderId) {
  621. List<OrderKeyApplyVO> result = Lists.newArrayList();
  622. QueryWrapper<CareEventOrderKeyApply> queryWrapper = new QueryWrapper<>();
  623. queryWrapper.lambda().eq(CareEventOrderKeyApply::getOrderId, orderId).orderByDesc(CareEventOrderKeyApply::getCreateTime);
  624. List<CareEventOrderKeyApply> ceocs = this.careEventOrderKeyApplyService.list(queryWrapper);
  625. if (CollUtil.isNotEmpty(ceocs)) {
  626. ceocs.forEach(item -> {
  627. OrderKeyApplyVO keyApplyVO = new OrderKeyApplyVO();
  628. BeanUtil.copyProperties(item, keyApplyVO);
  629. result.add(keyApplyVO);
  630. });
  631. }
  632. return result;
  633. }
  634. /**
  635. * 钥匙授权
  636. *
  637. * @param applyId
  638. * @return
  639. */
  640. public boolean keyAuth(Long applyId, UserLogindConvertVO loginUser) {
  641. CareEventOrderKeyApply apply = this.careEventOrderKeyApplyService.getById(applyId);
  642. UpdateWrapper<CareEventOrderKeyApply> updateWrapper = new UpdateWrapper<>();
  643. updateWrapper.lambda().eq(CareEventOrderKeyApply::getId, applyId)
  644. .set(CareEventOrderKeyApply::getKeyPass, RandomUtil.randomNumbers(6))
  645. .set(CareEventOrderKeyApply::getStatus, KeyAuthEnum.AUTHED.getValue());
  646. CareEventOrderHandleHis his = new CareEventOrderHandleHis();
  647. his.setOrgId(apply.getOrgId());
  648. his.setStationId(apply.getStationId());
  649. his.setOrderId(apply.getOrderId());
  650. his.setLogType(LogTypeEnum.KEY.getValue());
  651. his.setLogObjectId(apply.getApplyUserId());
  652. his.setLogObjectName(apply.getApplyUserName());
  653. his.setLogResult("获得钥匙");
  654. his.setOpUserRole(UserRoleEnum.SEAT.getValue());
  655. his.setOpUserId(loginUser.getId());
  656. his.setOpUserName(loginUser.getName());
  657. his.setCreateTime(DateUtil.date());
  658. his.setRelationTypeDesc(apply.getRelationTypeDesc());
  659. this.careEventOrderHandleHisService.save(his);
  660. return this.careEventOrderKeyApplyService.update(updateWrapper);
  661. }
  662. /**
  663. * 修改联系人状态
  664. *
  665. * @param orderContactId
  666. * @param status
  667. * @return
  668. */
  669. public boolean updateOrderContactStatus(Long orderContactId, Integer status, UserLogindConvertVO loginUser) {
  670. CareEventOrderContactStatus contact = this.careEventOrderContactStatusService.getById(orderContactId);
  671. UpdateWrapper<CareEventOrderContactStatus> updateWrapper = new UpdateWrapper<>();
  672. updateWrapper.lambda().eq(CareEventOrderContactStatus::getId, orderContactId)
  673. .set(CareEventOrderContactStatus::getStatus, status);
  674. CareEventOrderHandleHis his = new CareEventOrderHandleHis();
  675. his.setOrgId(contact.getOrgId());
  676. his.setStationId(contact.getStationId());
  677. his.setOrderId(contact.getOrderId());
  678. his.setLogType(LogTypeEnum.OUT_CALL.getValue());
  679. his.setLogObjectId(contact.getContactId());
  680. his.setLogObjectName(contact.getContactName());
  681. his.setLogResult(ContactorStatusEnum.getCodeToName(status));
  682. his.setOpUserRole(UserRoleEnum.SEAT.getValue());
  683. his.setOpUserId(loginUser.getId());
  684. his.setOpUserName(loginUser.getName());
  685. his.setCreateTime(DateUtil.date());
  686. his.setRelationTypeDesc(contact.getRelationTypeDesc());
  687. this.careEventOrderHandleHisService.save(his);
  688. return this.careEventOrderContactStatusService.update(updateWrapper);
  689. }
  690. /**
  691. * 语音通知回调后修改联系人状态
  692. *
  693. * @param orderId
  694. * @param status
  695. * @return
  696. */
  697. public boolean updateOrderContactStatus4Callback(String callId, Long orderId,String phone, Integer status,String failureReason) {
  698. //联系人的,care_event_order_contact_status只有联系人,没有管家
  699. UpdateWrapper<CareEventOrderContactStatus> updateWrapper = new UpdateWrapper<>();
  700. updateWrapper.lambda().eq(CareEventOrderContactStatus::getOrderId, orderId).eq(CareEventOrderContactStatus::getContactPhone,phone)
  701. .set(CareEventOrderContactStatus::getStatus, status);
  702. //历史表的
  703. UpdateWrapper<CareEventOrderHandleHis> updateWrapper2 = new UpdateWrapper<>();
  704. updateWrapper2.lambda().eq(CareEventOrderHandleHis::getVoiceCallId,callId)
  705. .set(CareEventOrderHandleHis::getVoiceCallStatus, status)
  706. .set(CareEventOrderHandleHis::getVoiceFailureReason, failureReason);
  707. this.careEventOrderHandleHisService.update(updateWrapper2);
  708. //管家的
  709. UpdateWrapper<CareEventOrderChamb> updateWrapper3 = new UpdateWrapper<>();
  710. updateWrapper3.lambda().eq(CareEventOrderChamb::getOrderId,orderId).eq(CareEventOrderChamb::getPhone,phone)
  711. .set(CareEventOrderChamb::getVoiceCallStatus, status);
  712. this.careEventOrderChambService.update(updateWrapper3);
  713. return this.careEventOrderContactStatusService.update(updateWrapper);
  714. }
  715. /**
  716. * 获取通话结果
  717. *
  718. * @param hisId
  719. */
  720. public CcCallResultVO getCallRadio(Long hisId) {
  721. CareEventOrderHandleHis his = this.careEventOrderHandleHisService.getById(hisId);
  722. if (his.getCallResultId() != null) {
  723. return this.ccCallResultService.getCallResult(his.getCallResultId());
  724. } else {
  725. return null;
  726. }
  727. }
  728. public void insertTestData() {
  729. List<CareHouse> houses = Lists.newArrayList();
  730. CareHouse house = new CareHouse();
  731. house.setId(1L);
  732. house.setName("北太平庄21号院1单元201室");
  733. house.setAddr("北太平庄21号院1单元");
  734. house.setHouseNumber("201室");
  735. houses.add(house);
  736. CareEventOrder order = new CareEventOrder();
  737. order.setOrgId(1L);
  738. order.setOrgName("测试机构");
  739. order.setStationId(1L);
  740. order.setStationName("站点1");
  741. order.setHouseId(1L);
  742. order.setDevId(1L);
  743. order.setDevName("卧室");
  744. order.setHouseName(house.getName());
  745. order.setTitle(house.getAddr() + house.getHouseNumber());
  746. order.setOrderType(OrderTypeEnum.values()[RandomUtil.randomInt(0, 4)].getValue());
  747. order.setStatus("0");
  748. order.setCreateTime(DateUtil.date());
  749. order.setModifyTime(DateUtil.date());
  750. order.setTid(1);
  751. this.careEventOrderService.saveOrder(order);
  752. }
  753. /**
  754. * 给用户和联系人发送工单完成短信
  755. *
  756. * @param orderId
  757. * @return
  758. */
  759. public void sendSmsToMemberAndLianxiren(Long orderId, String content) {
  760. CareEventOrder order = this.careEventOrderService.getById(orderId);
  761. if (order == null) {
  762. return;
  763. }
  764. CareHouse house = this.careHouseService.getById(order.getHouseId());
  765. if (house == null){
  766. return;
  767. }
  768. sendWXToMember(order, house, content);
  769. Object switchSms = redisUtil.get(RedisKeyConstant.SWITCH_SMS);
  770. if (switchSms != null) {
  771. sendSmsToMember(order, house, content);
  772. sendSmsToLianxirenList(order, house, content);
  773. }
  774. }
  775. /**
  776. * 给用户发送工单完成短信
  777. *
  778. * @param order
  779. * @return
  780. */
  781. private void sendSmsToMember(CareEventOrder order,CareHouse house, String content) {
  782. if (order.getMemberId() == null || order.getMemberId() == 0L) {
  783. return;
  784. }
  785. CareMemberInfo careMemberInfo = this.careMemberInfoService.getById(order.getMemberId());
  786. if (careMemberInfo == null) {
  787. return;
  788. }
  789. String[] params = {house.getName(), OrderTypeEnum.getCodeToName(order.getOrderType())};
  790. boolean smsResult = smsSendService.sendSmsToLianxirenOrMember(SmsTemplateTypeEnum.ORDER_COMPLETE, careMemberInfo.getPhone(), params);
  791. if (smsResult) {
  792. CareEventOrderHandleHis log = new CareEventOrderHandleHis();
  793. log.setOrgId(order.getOrgId());
  794. log.setStationId(order.getStationId());
  795. log.setOrderId(order.getId());
  796. log.setLogType(LogTypeEnum.SMS.getValue());
  797. log.setLogObjectId(order.getMemberId());
  798. String name = careMemberInfo.getPhone();
  799. if (StrUtil.isNotEmpty(careMemberInfo.getName())){
  800. name = careMemberInfo.getName();
  801. }else if (StrUtil.isNotEmpty(careMemberInfo.getNickname())){
  802. name = careMemberInfo.getNickname();
  803. }
  804. log.setLogObjectName(name);
  805. log.setLogResult(content+"短信通知");
  806. log.setOpUserRole(UserRoleEnum.SEAT.getValue());
  807. log.setCreateTime(DateUtil.date());
  808. log.setRelationTypeDesc("用户");
  809. this.careEventOrderHandleHisService.save(log);
  810. }
  811. }
  812. /**
  813. * 给用户发送工单完成短信
  814. *
  815. * @param order
  816. * @return
  817. */
  818. private void sendWXToMember(CareEventOrder order,CareHouse house, String content) {
  819. if (order.getMemberId() == null || order.getMemberId() == 0L) {
  820. return;
  821. }
  822. CareMemberInfo careMemberInfo = this.careMemberInfoService.getById(order.getMemberId());
  823. if (careMemberInfo == null) {
  824. return;
  825. }
  826. if (StrUtil.isNotEmpty(careMemberInfo.getOpenId())){
  827. Map<String, TemplateDataDTO> data = new HashMap<>();
  828. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  829. data.put("first", new TemplateDataDTO("安全事件处理完成", "#ff5200"));
  830. data.put("keyword1", new TemplateDataDTO(OrderTypeEnum.getCodeToName(order.getOrderType())+"报警已处理完成", "#000000"));
  831. data.put("keyword2", new TemplateDataDTO(simpleDateFormat.format(new Date()), "#000000"));
  832. data.put("keyword3", new TemplateDataDTO(house.getAddr(), "#000000"));
  833. // data.put("remark", new TemplateDataDTO("请尽快联系您的被监护人, 确认现场情况", "#ff5200"));
  834. boolean smsResult = this.wxNoticSendService.sendWhenHappen(careMemberInfo.getOpenId(),data);
  835. log.info("发送WX消息模板: openId: " + careMemberInfo.getOpenId() + ", ORDER: " + order.getId() + " 状态: " + smsResult);
  836. if (smsResult) {
  837. CareEventOrderHandleHis log = new CareEventOrderHandleHis();
  838. log.setOrgId(order.getOrgId());
  839. log.setStationId(order.getStationId());
  840. log.setOrderId(order.getId());
  841. log.setLogType(LogTypeEnum.WX.getValue());
  842. log.setLogObjectId(order.getMemberId());
  843. String name = careMemberInfo.getPhone();
  844. if (StrUtil.isNotEmpty(careMemberInfo.getName())){
  845. name = careMemberInfo.getName();
  846. }else if (StrUtil.isNotEmpty(careMemberInfo.getNickname())){
  847. name = careMemberInfo.getNickname();
  848. }
  849. log.setLogObjectName(name);
  850. log.setLogResult(content+"微信通知");
  851. log.setOpUserRole(UserRoleEnum.SYSTEM.getValue());
  852. log.setCreateTime(DateUtil.date());
  853. log.setRelationTypeDesc("用户");
  854. this.careEventOrderHandleHisService.save(log);
  855. }
  856. }
  857. }
  858. /**
  859. * 给所有联系人发送工单完成短信
  860. *
  861. * @param order
  862. * @return
  863. */
  864. private void sendSmsToLianxirenList(CareEventOrder order, CareHouse house, String content) {
  865. List<OrderContactorVO> orderContactorVOList = queryContactList(order.getId());
  866. if (CollUtil.isEmpty(orderContactorVOList)) {
  867. return;
  868. }
  869. for(OrderContactorVO orderContactorVO : orderContactorVOList) {
  870. CareHouseContact careHouseContact = this.careHouseContactService.getById(orderContactorVO.getContactId());
  871. if (careHouseContact == null) {
  872. continue;
  873. }
  874. String[] params = {house.getName(), OrderTypeEnum.getCodeToName(order.getOrderType())};
  875. boolean smsResult = smsSendService.sendSmsToLianxirenOrMember(SmsTemplateTypeEnum.ORDER_COMPLETE, orderContactorVO.getContactPhone(), params);
  876. if (smsResult) {
  877. CareEventOrderHandleHis log = new CareEventOrderHandleHis();
  878. log.setOrgId(order.getOrgId());
  879. log.setStationId(order.getStationId());
  880. log.setOrderId(order.getId());
  881. log.setLogType(LogTypeEnum.SMS.getValue());
  882. log.setLogObjectId(order.getMemberId());
  883. log.setLogObjectName(orderContactorVO.getContactName());
  884. log.setLogResult(content+"短信通知");
  885. log.setOpUserRole(UserRoleEnum.SEAT.getValue());
  886. log.setCreateTime(DateUtil.date());
  887. log.setRelationTypeDesc("联系人");
  888. this.careEventOrderHandleHisService.save(log);
  889. }
  890. }
  891. }
  892. /**
  893. * 给联系人发送短信
  894. * @param orderContactId
  895. * @return
  896. */
  897. public boolean sendSmsToLianxiren(Long orderContactId){
  898. CareEventOrderContactStatus contactStatus = this.careEventOrderContactStatusService.getById(orderContactId);
  899. if (contactStatus!=null){
  900. CareEventOrder order = this.careEventOrderService.getById(contactStatus.getOrderId());
  901. CareHouse house = this.careHouseService.getById(contactStatus.getHouseId());
  902. boolean smsResult = false;
  903. String[] params = {house.getName()};
  904. if (OrderTypeEnum.JIU_ZHI.getValue().equals(order.getOrderType())){
  905. smsResult = smsSendService.sendSmsToLianxirenOrMember(SmsTemplateTypeEnum.JIU_ZHI,contactStatus.getContactPhone(),params);
  906. }else if(OrderTypeEnum.DIE_DAO.getValue().equals(order.getOrderType())){
  907. smsResult = smsSendService.sendSmsToLianxirenOrMember(SmsTemplateTypeEnum.DIE_DAO,contactStatus.getContactPhone(),params);
  908. }
  909. if (smsResult){
  910. CareEventOrderHandleHis his = new CareEventOrderHandleHis();
  911. his.setOrgId(contactStatus.getOrgId());
  912. his.setStationId(contactStatus.getStationId());
  913. his.setOrderId(contactStatus.getOrderId());
  914. his.setLogType(LogTypeEnum.SMS.getValue());
  915. his.setLogObjectId(contactStatus.getContactId());
  916. his.setLogObjectName(contactStatus.getContactName());
  917. his.setLogResult("短信通知");
  918. his.setOpUserRole(UserRoleEnum.SEAT.getValue());
  919. his.setCreateTime(DateUtil.date());
  920. his.setRelationTypeDesc(contactStatus.getRelationTypeDesc());
  921. this.careEventOrderHandleHisService.save(his);
  922. return true;
  923. }else {
  924. return false;
  925. }
  926. }else{
  927. return false;
  928. }
  929. }
  930. /**
  931. * 统计机构下的事件数量
  932. * @param loginUser
  933. * @return
  934. */
  935. public EventStaVO statOrder(UserLogindConvertVO loginUser, Long chambId, String deviceCode) {
  936. return this.careEventOrderService.statOrder(loginUser.getOrgId(),null, chambId, deviceCode);
  937. }
  938. /**
  939. * 查询管家
  940. * @param orderId
  941. * @return
  942. */
  943. public CareEventOrderChamb queryChamberlain(Long orderId){
  944. CareEventOrderChamb data = new CareEventOrderChamb();
  945. QueryWrapper<CareEventOrderChamb> queryWrapper = new QueryWrapper<>();
  946. queryWrapper.lambda().eq(CareEventOrderChamb::getOrderId,orderId);
  947. List<CareEventOrderChamb> datas = this.careEventOrderChambService.list(queryWrapper);
  948. if (CollUtil.isNotEmpty(datas)){
  949. data = datas.get(0);
  950. }
  951. return data ;
  952. }
  953. public String getSmsTemplate(Long orderId){
  954. CareEventOrder order = this.careEventOrderService.getById(orderId);
  955. if (order!=null){
  956. CareHouse house = this.careHouseService.getById(order.getHouseId());
  957. return house.getName()+"的老人发生跌倒/久滞事情";
  958. }
  959. return null;
  960. }
  961. /**
  962. * 获取3D监控页面URL
  963. * @return
  964. */
  965. public String getRealTimeMonitorUrl(Long orderId){
  966. CareEventOrder order = this.careEventOrderService.getById(orderId);
  967. if (order!=null){
  968. Map<String,String> map = this.careDeviceService.get3dUrl(order.getDevId());
  969. return map.get("toBms");
  970. }
  971. return null;
  972. }
  973. /**
  974. * 获取空闲管家
  975. * @return
  976. */
  977. public List<ChamberlainVO> getFreeChamberlainList(Long orderId){
  978. List<ChamberlainVO> freeChamberlainList = new ArrayList<>();
  979. CareEventOrder order = this.careEventOrderService.getById(orderId);
  980. QueryWrapper<CareSysUser> queryWrapper = new QueryWrapper<>();
  981. queryWrapper.lambda().eq(CareSysUser::getStatus,ChambStatusEnum.FREE.getValue()).eq(CareSysUser::getRole,UserRoleEnum.CHANMB.getValue()).eq(CareSysUser::getOrgId,order.getOrgId()).eq(CareSysUser::getStationId,order.getStationId());
  982. List<CareSysUser> list = this.careSysUserService.list(queryWrapper);
  983. if(CollUtil.isNotEmpty(list)){
  984. List<ChamberlainVO> tmp = new ArrayList<>();
  985. list.forEach(item->{
  986. ChamberlainVO chamberlainVO = new ChamberlainVO();
  987. BeanUtil.copyProperties(item,chamberlainVO);
  988. chamberlainVO.setStatusDesc(ChambStatusEnum.getCodeToName(chamberlainVO.getStatus()));
  989. CareDevice careDevice = this.careDeviceService.getById(order.getDevId());
  990. if(careDevice != null && chamberlainVO.getId().equals(careDevice.getChambId())) {
  991. chamberlainVO.setIsMain(TrueFalseEnum.TRUE.getValue());
  992. freeChamberlainList.add(chamberlainVO);
  993. } else {
  994. chamberlainVO.setIsMain(TrueFalseEnum.FALSE.getValue());
  995. tmp.add(chamberlainVO);
  996. }
  997. });
  998. freeChamberlainList.addAll(tmp);
  999. }
  1000. return freeChamberlainList;
  1001. }
  1002. /**
  1003. * 更新管家工单
  1004. * @param orderId
  1005. * @param chambId
  1006. */
  1007. public boolean updateCareEventOrderChamb(Long orderId,Long chambId){
  1008. CareSysUser careSysUser = this.careSysUserService.getById(chambId);
  1009. UpdateWrapper<CareEventOrderChamb> updateWrapper = new UpdateWrapper<>();
  1010. updateWrapper.lambda().eq(CareEventOrderChamb::getOrderId,orderId)
  1011. .set(CareEventOrderChamb::getChambId,chambId)
  1012. .set(CareEventOrderChamb::getChambName,careSysUser.getName())
  1013. .set(CareEventOrderChamb::getPhone,careSysUser.getPhone())
  1014. .set(CareEventOrderChamb::getModifyTime,DateUtil.date());
  1015. this.careEventOrderChambService.update(updateWrapper);
  1016. return true;
  1017. }
  1018. }