|  |  | 
 |  |  | import cn.hutool.core.lang.Validator; | 
 |  |  | import cn.hutool.core.util.PhoneUtil; | 
 |  |  | import cn.hutool.core.util.ReUtil; | 
 |  |  | import com.doumee.core.haikang.model.HKConstants; | 
 |  |  | import com.doumee.core.model.PageData; | 
 |  |  | import com.doumee.core.model.PageWrap; | 
 |  |  | import com.doumee.core.utils.Constants; | 
 |  |  | import com.doumee.core.utils.DateUtil; | 
 |  |  | import com.doumee.core.utils.Utils; | 
 |  |  | import com.doumee.dao.admin.request.DeviceEventQuery; | 
 |  |  | import com.doumee.dao.admin.response.DeviceEventDTO; | 
 |  |  | import com.doumee.dao.business.DeviceEventMapper; | 
 |  |  | import com.doumee.dao.business.join.DeviceEventJoinMapper; | 
 |  |  | import com.doumee.dao.business.model.Company; | 
 |  |  | import com.doumee.dao.business.model.DeviceEvent; | 
 |  |  | import com.doumee.dao.business.model.Member; | 
 |  |  | import com.doumee.dao.business.model.*; | 
 |  |  | import com.doumee.dao.system.SystemDictDataMapper; | 
 |  |  | import com.doumee.dao.system.model.SystemDictData; | 
 |  |  | import com.doumee.dao.system.vo.DeviceEventVo; | 
 |  |  | import com.doumee.dao.system.vo.SystemDictDataListVO; | 
 |  |  | import com.doumee.service.business.DeviceEventService; | 
 |  |  | 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.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
 |  |  | import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
 |  |  | import com.sun.org.apache.xerces.internal.xs.StringList; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.util.CollectionUtils; | 
 |  |  |  | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Objects; | 
 |  |  | import java.text.ParseException; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.function.Function; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 门禁事件推送记录表Service实现 | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DeviceEventJoinMapper deviceEventJoinMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SystemDictDataMapper systemDictDataMapper; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Integer create(DeviceEvent deviceEvent) { | 
 |  |  | 
 |  |  |             queryWrapper.lambda().eq(DeviceEvent::getIssuingAuthority, pageWrap.getModel().getIssuingAuthority()); | 
 |  |  |         } | 
 |  |  |         if (pageWrap.getModel().getName() != null) { | 
 |  |  |             queryWrapper.lambda().eq(DeviceEvent::getName, pageWrap.getModel().getName()); | 
 |  |  |             queryWrapper.lambda().like(DeviceEvent::getName, pageWrap.getModel().getName()); | 
 |  |  |         } | 
 |  |  |         if (pageWrap.getModel().getSex() != null) { | 
 |  |  |             queryWrapper.lambda().eq(DeviceEvent::getSex, pageWrap.getModel().getSex()); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public PageData<DeviceEventDTO> findDeviceEventDTOPage(PageWrap<DeviceEventQuery> pageWrap) { | 
 |  |  |     public PageData<DeviceEventDTO> findDeviceEventDTOPage(PageWrap<DeviceEvent> pageWrap) { | 
 |  |  |  | 
 |  |  |         IPage<DeviceEventDTO> deviceEventDTOIPage = getDataInfo(pageWrap); | 
 |  |  |         if(null != deviceEventDTOIPage && deviceEventDTOIPage.getRecords().size() > 0) { | 
 |  |  |             deviceEventDTOIPage.setRecords(newDeviceEvent(deviceEventDTOIPage.getRecords())); | 
 |  |  |         } | 
 |  |  |         return PageData.from(deviceEventDTOIPage); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<DeviceEventVo> findDeviceEventExcel(PageWrap<DeviceEvent> pageWrap) { | 
 |  |  |         IPage<DeviceEventDTO> deviceEventExcel = getDataInfo(pageWrap); | 
 |  |  |         List<DeviceEventVo> voList = new ArrayList<>(); | 
 |  |  |         if(null != deviceEventExcel && deviceEventExcel.getRecords().size() > 0) { | 
 |  |  |             deviceEventExcel.getRecords().stream().forEach(obj-> { | 
 |  |  |                 DeviceEventVo eventVo = new DeviceEventVo(); | 
 |  |  |                 if(null != obj.getPersonType()) { | 
 |  |  |                     if(Constants.ZERO == obj.getPersonType()){ | 
 |  |  |                         eventVo.setPersonTypeName(Constants.Status.LW_FK.getDes()); | 
 |  |  |                     }else if(Constants.ONE == obj.getPersonType()) { | 
 |  |  |                         eventVo.setPersonTypeName(Constants.Status.PT_FK.getDes()); | 
 |  |  |                     }else { | 
 |  |  |                         eventVo.setPersonTypeName(Constants.Status.NB_FK.getDes()); | 
 |  |  |                     } | 
 |  |  |                 }else { | 
 |  |  |                     eventVo.setPersonTypeName(""); | 
 |  |  |                 } | 
 |  |  |                 eventVo.setPersonName(obj.getPersonName()); | 
 |  |  |                 eventVo.setPersonPhone(obj.getPersonName()); | 
 |  |  |                 eventVo.setPersonIdcardDecode(obj.getPersonIdcardDecode()); | 
 |  |  |                 eventVo.setPersonCompanyName(obj.getPersonCompanyName()); | 
 |  |  |                 eventVo.setDevName(obj.getDevName()); | 
 |  |  |                 eventVo.setSrcName(obj.getSrcName()); | 
 |  |  |                 if(null != obj.getExtEventInOut()) { | 
 |  |  |                     if(Constants.ZERO == obj.getExtEventInOut()){ | 
 |  |  |                         eventVo.setExtEventInOutName(Constants.Status.OUT.getDes()); | 
 |  |  |                     }else if(Constants.ONE == obj.getPersonType()) { | 
 |  |  |                         eventVo.setExtEventInOutName(Constants.Status.PT_FK.getDes()); | 
 |  |  |                     } | 
 |  |  |                 }else { | 
 |  |  |                     eventVo.setExtEventInOutName(""); | 
 |  |  |                 } | 
 |  |  |                 eventVo.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType())) ; | 
 |  |  |                 try { | 
 |  |  |                     eventVo.setHappenTime(DateUtil.timeEscape(obj.getHappenTime())); | 
 |  |  |                 } catch (ParseException e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 } | 
 |  |  |                 voList.add(eventVo); | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |         return voList; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private IPage<DeviceEventDTO> getDataInfo(PageWrap<DeviceEvent> pageWrap) { | 
 |  |  |         IPage<DeviceEvent> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); | 
 |  |  |         MPJLambdaWrapper<DeviceEvent> queryWrapper = new MPJLambdaWrapper<>(); | 
 |  |  |         Utils.MP.blankToNull(pageWrap.getModel()); | 
 |  |  | 
 |  |  |         boolean b = Validator.hasChinese(pageWrap.getModel().getKeyWords()); | 
 |  |  |         //是否包含英文 | 
 |  |  |         boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyWords()); | 
 |  |  |         queryWrapper.leftJoin(Member.class,Member::getId,DeviceEvent::getExtEventPersonNo) | 
 |  |  |                     .leftJoin(Company.class,Company::getId,Member::getCompanyId) | 
 |  |  |                     .selectAll(DeviceEvent.class) | 
 |  |  |                     .selectAs(Member::getName,DeviceEventDTO::getPersonName) | 
 |  |  |                     .selectAs(Member::getPhone,DeviceEventDTO::getPersonPhone) | 
 |  |  |                     .selectAs(Member::getIdcardDecode,DeviceEventDTO::getPersonIdcardDecode) | 
 |  |  |                     .selectAs(Company::getName,DeviceEventDTO::getPersonCompanyName); | 
 |  |  |         queryWrapper.like(number, | 
 |  |  |                             Member::getPhone, | 
 |  |  |                             pageWrap.getModel().getKeyWords()) | 
 |  |  |                     .like((b||hasWord), | 
 |  |  |                             Member::getName, | 
 |  |  |                             pageWrap.getModel().getKeyWords()) | 
 |  |  |                     .eq(StringUtils.isNotBlank(pageWrap.getModel().getPersonType()), | 
 |  |  |                                                 Member::getType, | 
 |  |  |                                                 pageWrap.getModel().getPersonType()) | 
 |  |  |                     .eq(StringUtils.isNotBlank(pageWrap.getModel().getEventType()), | 
 |  |  |                                                 DeviceEvent::getEventType, | 
 |  |  |                                                 pageWrap.getModel().getEventType()) | 
 |  |  |                     .ge(Objects.nonNull(pageWrap.getModel().getStartTime()), | 
 |  |  |                                                 DeviceEvent::getCreateDate, | 
 |  |  |                                                 pageWrap.getModel().getStartTime() == null?null:pageWrap.getModel().getStartTime()+" 00:00:00") | 
 |  |  |                     .le(Objects.nonNull(pageWrap.getModel().getEndTime()), | 
 |  |  |                                                 DeviceEvent::getCreateDate, | 
 |  |  |                                                 pageWrap.getModel().getEndTime() == null?"":pageWrap.getModel().getEndTime()+" 23:59:59"); | 
 |  |  |         queryWrapper.leftJoin(Member.class,Member::getHkId,DeviceEvent::getExtEventPersonNo) | 
 |  |  |                 .leftJoin(Company.class,Company::getId,Member::getCompanyId) | 
 |  |  |                 .leftJoin(Device.class,Device::getHkId,DeviceEvent::getSrcParentIndex) | 
 |  |  |                 .selectAll(DeviceEvent.class) | 
 |  |  |                 .selectAs(Member::getName,DeviceEventDTO::getPersonName) | 
 |  |  |                 .selectAs(Member::getId,DeviceEventDTO::getMemberId) | 
 |  |  |                 .selectAs(Member::getType,DeviceEventDTO::getPersonType) | 
 |  |  |                 .selectAs(Member::getPhone,DeviceEventDTO::getPersonPhone) | 
 |  |  |                 .selectAs(Member::getIdcardDecode,DeviceEventDTO::getPersonIdcardDecode) | 
 |  |  |                 .selectAs(Device::getName,DeviceEventDTO::getDevName) | 
 |  |  |                 .selectAs(Company::getName,DeviceEventDTO::getPersonCompanyName); | 
 |  |  |         queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),w-> | 
 |  |  |                         w.like(Member::getName,pageWrap.getModel().getKeyWords()).or().like(Member::getPhone,pageWrap.getModel().getKeyWords())) | 
 |  |  |                 .eq(StringUtils.equals(pageWrap.getModel().getPersonType(),Constants.TWO+""), | 
 |  |  |                         Member::getType, | 
 |  |  |                         pageWrap.getModel().getPersonType()) | 
 |  |  |                 .eq(Objects.nonNull(pageWrap.getModel().getEventType()), | 
 |  |  |                         DeviceEvent::getEventType, | 
 |  |  |                         pageWrap.getModel().getEventType()) | 
 |  |  |                 .like(Objects.nonNull(pageWrap.getModel().getCompanyName()),Company::getName, | 
 |  |  |                         pageWrap.getModel().getCompanyName()) | 
 |  |  |                 .ge(Objects.nonNull(pageWrap.getModel().getStartTime()), | 
 |  |  |                         DeviceEvent::getCreateDate, | 
 |  |  |                         pageWrap.getModel().getStartTime()) | 
 |  |  |                 .le(Objects.nonNull(pageWrap.getModel().getEndTime()), | 
 |  |  |                         DeviceEvent::getCreateDate, | 
 |  |  |                         pageWrap.getModel().getEndTime()) | 
 |  |  |                 .isNull(StringUtils.isNotBlank(pageWrap.getModel().getPersonType()) && !StringUtils.equals(pageWrap.getModel().getPersonType(),Constants.TWO+""),Member::getId)//除了内部人员都是外来访客 | 
 |  |  |                 .orderByDesc(DeviceEvent::getCreateDate); | 
 |  |  |         queryWrapper.orderByDesc(DeviceEvent::getHappenTime); | 
 |  |  |         IPage<DeviceEventDTO> deviceEventDTOIPage = deviceEventJoinMapper.selectJoinPage(page, DeviceEventDTO.class, queryWrapper); | 
 |  |  |         return PageData.from(deviceEventDTOIPage); | 
 |  |  |         return deviceEventDTOIPage; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 对图片进行判断处理 | 
 |  |  |     private List<DeviceEventDTO> newDeviceEvent(List<DeviceEventDTO> DeviceEventDTOList) { | 
 |  |  |         List<DeviceEventDTO> newDeviceEventDTOS = new ArrayList<>(); | 
 |  |  |         List<String> codes = Arrays.asList(Constants.FTP_RESOURCE_PATH,Constants.DEVICE_EVENT_IMG); | 
 |  |  |         List<SystemDictData> list = systemDictDataMapper.list(codes); | 
 |  |  |         Map<String,SystemDictData> dataMap = list.stream().collect(Collectors.toMap(SystemDictData::getLabel, Function.identity())); | 
 |  |  |         for (DeviceEventDTO dto:DeviceEventDTOList) { | 
 |  |  |            if(StringUtils.isNotBlank(dto.getExtEventPictureURL()) | 
 |  |  |                    && !dto.getExtEventPictureURL().startsWith(HKConstants.IMG_INDEX) | 
 |  |  |                    && !dto.getExtEventPictureURL().startsWith(HKConstants.IMG_INDEX_ERROR)) { | 
 |  |  |                    if(null != list && list.size() > 0) { | 
 |  |  |                            dto.setExtEventPictureURL(dataMap.get(Constants.FTP_RESOURCE_PATH).getCode() | 
 |  |  |                                    +dataMap.get(Constants.DEVICE_EVENT_IMG).getCode() | 
 |  |  |                                    +dto.getExtEventPictureURL()); | 
 |  |  |                    } | 
 |  |  |            }else{ | 
 |  |  |                dto.setExtEventPictureURL(null); | 
 |  |  |            } | 
 |  |  |             dto.setEventTypeName(HKConstants.EventTypes.getName(dto.getEventType())) ; | 
 |  |  |             try { | 
 |  |  |                 dto.setHappenTime(DateUtil.timeEscape(dto.getHappenTime())); | 
 |  |  |             } catch (ParseException e) { | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |             } | 
 |  |  |             newDeviceEventDTOS.add(dto); | 
 |  |  |         } | 
 |  |  |         return newDeviceEventDTOS; | 
 |  |  |     } | 
 |  |  | } |