123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- package com.care.keeper.service;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.date.DateUtil;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.care.common.cache.RedisKeyConstant;
- import com.care.common.cache.RedisUtil;
- import com.care.common.entity.*;
- import com.care.common.enums.*;
- import com.care.common.exception.BDException;
- import com.care.common.service.*;
- import com.care.common.vo.PageReqVO;
- import com.care.common.vo.order.*;
- import com.care.keeper.vo.HouseContactVO;
- import com.care.keeper.vo.KeeperInfoVO;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.compress.utils.Lists;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- /**
- * @Author: lilt
- * @Date: 2021/6/7
- * @Desc:
- */
- @Slf4j
- @Service
- public class KeeperOrderApiService {
- @Resource
- private CareDeviceService careDeviceService;
- @Resource
- private CareHouseContactService careHouseContactService;
- @Resource
- private CareEventOrderService careEventOrderService;
- @Resource
- private CareEventOrderHandleHisService careEventOrderHandleHisService;
- @Resource
- private CareSysUserService careSysUserService;
- @Resource
- private CareEventOrderChambService careEventOrderChambService;
- @Resource
- private CareEventOrderOlderService careEventOrderOlderService;
- @Resource
- private CareEventOrderKeyApplyService careEventOrderKeyApplyService;
- @Resource
- private CareHouseContactRelService careHouseContactRelService;
- @Resource
- RedisUtil redisUtil;
- /**
- * 待处理的工单
- *
- * @param pageReqVo
- * @param chambId
- * @return
- */
- public IPage<ChambEventOrderVO> queryTodoEventByChambId(PageReqVO pageReqVo, Long chambId) {
- return this.careEventOrderChambService.queryTodoEventByChambId(pageReqVo,chambId);
- }
- /**
- * 进行中的工单
- *
- * @param pageReqVo
- * @param chambId
- * @return
- */
- public IPage<ChambEventOrderVO> queryDoingEventByChambId(PageReqVO pageReqVo, Long chambId) {
- return this.careEventOrderChambService.queryDoingEventByChambId(pageReqVo,chambId);
- }
- /**
- * 完成的工单
- *
- * @param pageReqVo
- * @param chambId
- * @return
- */
- public IPage<ChambEventOrderVO> queryDoneEventByChambId(PageReqVO pageReqVo, Long chambId) {
- return this.careEventOrderChambService.queryDoneEventByChambId(pageReqVo,chambId);
- }
- public ChambEventOrderVO getChambOrder(Long id){
- CareEventOrderChamb orderChamb = this.careEventOrderChambService.getChambOrderByOrderId(id);
- ChambEventOrderVO chambEventOrderVO = new ChambEventOrderVO();
- BeanUtil.copyProperties(orderChamb,chambEventOrderVO);
- return chambEventOrderVO;
- }
- /**
- * 事件详情
- * @param orderId
- * @return
- */
- public EventOrderVO getEventInfo(Long orderId){
- CareEventOrder eventOrder = this.careEventOrderService.getById(orderId);
- EventOrderVO vo = new EventOrderVO();
- BeanUtil.copyProperties(eventOrder,vo);
- vo.setOrderTypeName(OrderTypeEnum.getCodeToName(vo.getOrderType()));
- return vo;
- }
- /**
- * 主管家改派管家列表查询
- * @param orderId
- * @return
- */
- public List<ChamberlainVO> queryChambList(Long orderId){
- List<ChamberlainVO> chambList = new ArrayList<>();
- ChamberlainVO mainVO = null;
- ChamberlainVO assignVO = null;
- CareEventOrder order = this.careEventOrderService.getById(orderId);
- CareDevice dev = this.careDeviceService.getById(order.getDevId());
- if(dev != null){
- CareSysUser careSysUser = this.careSysUserService.getById(dev.getChambId());
- if (careSysUser != null) {
- mainVO = new ChamberlainVO();
- BeanUtil.copyProperties(careSysUser,mainVO);
- mainVO.setIsMain(TrueFalseEnum.TRUE.getValue());
- mainVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
- }
- }
- CareEventOrderChamb careEventOrderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderId);
- if(careEventOrderChamb != null) {
- CareSysUser careSysUser = this.careSysUserService.getById(careEventOrderChamb.getChambId());
- if(careSysUser != null){
- assignVO = new ChamberlainVO();
- BeanUtil.copyProperties(careSysUser,assignVO);
- assignVO.setIsMain(TrueFalseEnum.FALSE.getValue());
- assignVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
- }
- }
- if (mainVO != null && assignVO != null) {
- if(mainVO.getId().equals(assignVO.getId())){ //没有指派管家
- if(ChambStatusEnum.BUSY.getValue().equals(mainVO.getStatus())){ //主状态是忙碌时拆分子状态
- if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){
- mainVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
- } else {
- mainVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
- }
- } else {//主状态不是忙碌时设置子状态和主状态相同
- mainVO.setSubStatus(mainVO.getStatus());
- }
- mainVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(mainVO.getSubStatus()));
- chambList.add(mainVO);
- } else{ //指派了管家
- //设置主管家子状态和主状态相同:空闲、休假、忙碌
- mainVO.setSubStatus(mainVO.getStatus());
- //设置指派管家状态
- if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
- if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){
- assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
- } else {
- assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
- }
- } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
- assignVO.setSubStatus(assignVO.getStatus());
- }
- mainVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(mainVO.getSubStatus()));
- chambList.add(mainVO);
- assignVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(assignVO.getSubStatus()));
- chambList.add(assignVO);
- }
- } else if(mainVO == null && assignVO != null) {
- //设置指派管家状态
- if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
- if(ChambOrderStatusEnum.DOING.getValue().equals(careEventOrderChamb.getStatus())){
- assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
- } else {
- assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
- }
- } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
- assignVO.setSubStatus(assignVO.getStatus());
- }
- assignVO.setSubStatusDesc(ChambSubStatusEnum.getCodeToName(assignVO.getSubStatus()));
- chambList.add(assignVO);
- }
- return chambList;
- }
- /**
- * 查询工单对应的老人列表
- * @param orderId
- * @return
- */
- public List<OrderOlderVO> queryOrderOlderList(Long orderId){
- List<OrderOlderVO> orderOlderVOList = Lists.newArrayList();
- QueryWrapper<CareEventOrderOlder> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CareEventOrderOlder::getOrderId,orderId);
- List<CareEventOrderOlder> ceoos = this.careEventOrderOlderService.list(queryWrapper);
- if (CollUtil.isNotEmpty(ceoos)){
- ceoos.forEach(item->{
- OrderOlderVO orderOlderVO = new OrderOlderVO();
- BeanUtil.copyProperties(item,orderOlderVO);
- orderOlderVO.setStatusDesc(OrderOlderStatusEnum.getCodeToName(orderOlderVO.getStatus()));
- orderOlderVOList.add(orderOlderVO);
- });
- }
- return orderOlderVOList;
- }
- /**
- * 查询事件紧急联系人
- * @param orderId
- * @return
- */
- public List<HouseContactVO> queryContactByOrderId(Long orderId){
- List<HouseContactVO> vos = Lists.newArrayList();
- CareEventOrder order = this.careEventOrderService.getById(orderId);
- QueryWrapper<CareHouseContactRel> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CareHouseContactRel::getHouseId, order.getHouseId());
- List<CareHouseContactRel> contactRelss = this.careHouseContactRelService.list(queryWrapper);
- if (CollUtil.isNotEmpty(contactRelss)){
- contactRelss.forEach(item -> {
- CareHouseContact careHouseContact = careHouseContactService.getById(item.getContactId());
- HouseContactVO vo = new HouseContactVO();
- BeanUtil.copyProperties(careHouseContact,vo);
- vo.setRelationTypeDesc(RelationTypeEnum.getCodeToName(vo.getRelationType()));
- vos.add(vo);
- });
- }
- List<HouseContactVO> vosNew = CollUtil.sortByProperty(vos,"contactLevel");
- return vosNew;
- }
- /**
- * 钥匙信息
- * @param orderId
- * @param keeperId
- * @return
- */
- public OrderKeyApplyVO getApplyKeyInfo(Long orderId,Long keeperId ){
- QueryWrapper<CareEventOrderKeyApply> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CareEventOrderKeyApply::getOrderId,orderId).eq(CareEventOrderKeyApply::getApplyRole,UserRoleEnum.CHANMB.getValue())
- .eq(CareEventOrderKeyApply::getApplyUserId,keeperId);
- List<CareEventOrderKeyApply> datas = this.careEventOrderKeyApplyService.list(queryWrapper);
- if (CollUtil.isNotEmpty(datas)){
- OrderKeyApplyVO keyApplyVO = new OrderKeyApplyVO();
- BeanUtil.copyProperties(datas.get(0),keyApplyVO);
- return keyApplyVO;
- }else {
- return null;
- }
- }
- /**
- * 申请钥匙
- * @param orderId
- * @param keeperInfoVO
- * @return
- */
- public boolean applyKey(Long orderId,KeeperInfoVO keeperInfoVO){
- String key = RedisKeyConstant.KEY_APPLY_LOCAK+":"+keeperInfoVO.getId();
- boolean result = redisUtil.tryLock(key,3000);
- Date date = DateUtil.date();
- boolean flag =false;
- try{
- if (result){
- CareEventOrder order = this.careEventOrderService.getById(orderId);
- CareEventOrderKeyApply keyApply = new CareEventOrderKeyApply();
- keyApply.setOrgId(order.getOrgId());
- keyApply.setStationId(order.getStationId());
- keyApply.setHouseId(order.getHouseId());
- keyApply.setOrderId(orderId);
- keyApply.setApplyRole(UserRoleEnum.CHANMB.getValue());
- keyApply.setApplyUserId(keeperInfoVO.getId());
- keyApply.setApplyUserName(keeperInfoVO.getName());
- keyApply.setStatus(KeyAuthEnum.TODO.getValue());
- keyApply.setCreateTime(date);
- keyApply.setModifyTime(date);
- keyApply.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
- flag = this.careEventOrderKeyApplyService.save(keyApply);
- if (flag){
- CareEventOrderHandleHis his = new CareEventOrderHandleHis();
- his.setOrgId(keyApply.getOrgId());
- his.setStationId(keyApply.getStationId());
- his.setOrderId(keyApply.getOrderId());
- his.setLogType(LogTypeEnum.KEY.getValue());
- his.setLogObjectId(keyApply.getApplyUserId());
- his.setLogObjectName(keyApply.getApplyUserName());
- his.setLogResult("申请钥匙");
- his.setOpUserRole(UserRoleEnum.SEAT.getValue());
- his.setOpUserId(keyApply.getApplyUserId());
- his.setOpUserName(keyApply.getApplyUserName());
- his.setCreateTime(date);
- his.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
- this.careEventOrderHandleHisService.save(his);
- }
- }else {
- throw new BDException("已经申请,请勿重复申请");
- }
- }finally {
- redisUtil.releaseLock(key);
- }
- return flag;
- }
- /**
- * 到达确认
- * @param orderChambId
- * @return
- */
- @Transactional(rollbackFor = Exception.class)
- public boolean daoDaConfirm(Long orderChambId){
- boolean flag = false;
- CareEventOrderChamb orderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderChambId);
- Date date = DateUtil.date();
- UpdateWrapper<CareEventOrderChamb> updateWrapper = new UpdateWrapper<>();
- updateWrapper.lambda().eq(CareEventOrderChamb::getId,orderChamb.getId())
- .set(CareEventOrderChamb::getStatus,ChambOrderStatusEnum.DOING.getValue())
- .set(CareEventOrderChamb::getDaodaTime,date)
- .set(CareEventOrderChamb::getModifyTime,date);
- flag = this.careEventOrderChambService.update(updateWrapper);
- if (flag){
- UpdateWrapper<CareSysUser> updateWrapper2 = new UpdateWrapper<>();
- updateWrapper2.lambda().eq(CareSysUser::getId,orderChamb.getChambId())
- .set(CareSysUser::getStatus,ChambStatusEnum.BUSY.getValue())
- .set(CareSysUser::getModifyTime,date);
- this.careSysUserService.update(updateWrapper2);
- //保存日志
- CareEventOrderHandleHis his = new CareEventOrderHandleHis();
- his.setOrgId(orderChamb.getOrgId());
- his.setStationId(orderChamb.getStationId());
- his.setOrderId(orderChamb.getOrderId());
- his.setLogType(LogTypeEnum.CHAMB.getValue());
- his.setLogObjectId(orderChamb.getId());
- his.setLogObjectName(orderChamb.getChambName());
- his.setLogResult("已到达");
- his.setOpUserRole(UserRoleEnum.CHANMB.getValue());
- his.setOpUserId(orderChamb.getChambId());
- his.setOpUserName(orderChamb.getChambName());
- his.setCreateTime(date);
- his.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
- this.careEventOrderHandleHisService.save(his);
- }
- return flag;
- }
- /**
- * 离开确认
- * @param orderChambId
- * @return
- */
- @Transactional(rollbackFor = Exception.class)
- public boolean liKaiConfirm(Long orderChambId,String remark,String scenePic){
- boolean flag = false;
- CareEventOrderChamb orderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderChambId);
- Date date = DateUtil.date();
- UpdateWrapper<CareEventOrderChamb> updateWrapper = new UpdateWrapper<>();
- updateWrapper.lambda().eq(CareEventOrderChamb::getId,orderChamb.getId())
- .set(CareEventOrderChamb::getRemark,remark)
- .set(CareEventOrderChamb::getScenePic,scenePic)
- .set(CareEventOrderChamb::getLikaiTime,date)
- .set(CareEventOrderChamb::getStatus,ChambOrderStatusEnum.COMPLETE.getValue())
- .set(CareEventOrderChamb::getModifyTime,date);
- flag = this.careEventOrderChambService.update(updateWrapper);
- if (flag){
- UpdateWrapper<CareSysUser> updateWrapper2 = new UpdateWrapper<>();
- updateWrapper2.lambda().eq(CareSysUser::getId,orderChamb.getChambId())
- .set(CareSysUser::getStatus,ChambStatusEnum.FREE.getValue())
- .set(CareSysUser::getModifyTime,date);
- this.careSysUserService.update(updateWrapper2);
- //保存日志
- CareEventOrderHandleHis his = new CareEventOrderHandleHis();
- his.setOrgId(orderChamb.getOrgId());
- his.setStationId(orderChamb.getStationId());
- his.setOrderId(orderChamb.getOrderId());
- his.setLogType(LogTypeEnum.CHAMB.getValue());
- his.setLogObjectId(orderChamb.getId());
- his.setLogObjectName(orderChamb.getChambName());
- his.setLogResult("已离开");
- his.setOpUserRole(UserRoleEnum.CHANMB.getValue());
- his.setOpUserId(orderChamb.getChambId());
- his.setOpUserName(orderChamb.getChambName());
- his.setCreateTime(date);
- his.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
- this.careEventOrderHandleHisService.save(his);
- }
- return flag;
- }
- /**
- * 获取处理记录
- * @return
- */
- public List<OrderHandleHisVO> queryOrderHandleHis(Long orderId){
- List<OrderHandleHisVO> result = Lists.newArrayList();
- QueryWrapper<CareEventOrderHandleHis> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("distinct org_id,station_id,house_id,order_id,log_type,order_type,log_object_id,log_object_name,log_result," +
- "op_user_role,op_user_id,op_user_name,create_time,relation_type_desc,call_result_id").lambda().eq(CareEventOrderHandleHis::getOrderId,orderId)
- .orderByDesc(CareEventOrderHandleHis::getCreateTime);
- List<CareEventOrderHandleHis> datas = this.careEventOrderHandleHisService.list(queryWrapper);
- if (CollUtil.isNotEmpty(datas)){
- datas.forEach(item ->{
- OrderHandleHisVO hisVO = new OrderHandleHisVO();
- BeanUtil.copyProperties(item,hisVO);
- result.add(hisVO);
- });
- }
- return result;
- }
- /**
- * 管家工单统计
- * @param chambId
- * @return
- */
- public ChambEventOrderCountVO getOrderCountByChambId(Long chambId){
- return this.careEventOrderChambService.getOrderCountByChambId(chambId);
- }
- }
|