package com.panzhihua.service_grid.service.impl; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.common.model.dtos.grid.*; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.grid.EventGridMemberWarnLogDetailsVO; import com.panzhihua.common.model.vos.grid.EventGridMemberWarnLogVO; import com.panzhihua.common.model.vos.grid.LatLngVO; import com.panzhihua.common.utlis.LngLatUtils; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.service_grid.dao.EventGridDataMapper; import com.panzhihua.service_grid.dao.EventGridMemberGpsLogMapper; import com.panzhihua.service_grid.dao.EventGridMemberRelationMapper; import com.panzhihua.service_grid.dao.EventGridMemberWarnLogMapper; import com.panzhihua.service_grid.model.dos.EventGridDataDO; import com.panzhihua.service_grid.model.dos.EventGridMemberGpsLogDO; import com.panzhihua.service_grid.model.dos.EventGridMemberRelationDO; import com.panzhihua.service_grid.model.dos.EventGridMemberWarnLogDO; import com.panzhihua.service_grid.service.EventGridMemberWarnLogService; import lombok.extern.slf4j.Slf4j; /** * @auther lyq * @create 2021-04-14 15:03:01 * @describe 订单表服务实现类 */ @Slf4j @Service public class EventGridMemberWarnLogServiceImpl extends ServiceImpl implements EventGridMemberWarnLogService { @Resource private EventGridMemberWarnLogMapper eventGridMemberWarnLogMapper; @Resource private EventGridMemberGpsLogMapper eventGridMemberGpsLogMapper; @Resource private EventGridDataMapper eventGridDataMapper; @Resource private EventGridMemberRelationMapper eventGridMemberRelationMapper; /** * 新增网格员定时上报地理预警记录 * * @param eventGridMemberWarnLogAddDTO * @return 新增结果 */ public R add(EventGridMemberWarnLogAddDTO eventGridMemberWarnLogAddDTO) { EventGridMemberWarnLogDO eventGridMemberWarnLogDO = new EventGridMemberWarnLogDO(); BeanUtils.copyProperties(eventGridMemberWarnLogAddDTO, eventGridMemberWarnLogDO); eventGridMemberWarnLogDO.setCreateAt(new Date()); if (eventGridMemberWarnLogMapper.insert(eventGridMemberWarnLogDO) > 0) { return R.ok(); } return R.fail(); } /** * 修改网格员定时上报地理预警记录 * * @param eventGridMemberWarnLogEditDTO * @return 维护结果 */ public R edit(EventGridMemberWarnLogEditDTO eventGridMemberWarnLogEditDTO) { EventGridMemberWarnLogDO eventGridMemberWarnLogDO = new EventGridMemberWarnLogDO(); BeanUtils.copyProperties(eventGridMemberWarnLogEditDTO, eventGridMemberWarnLogDO); // eventGridMemberWarnLogDO.setUpdateAt(new Date()); if (eventGridMemberWarnLogMapper.updateById(eventGridMemberWarnLogDO) > 0) { return R.ok(); } return R.fail(); } /** * 分页查找网格员定时上报地理预警记录 * * @param pageEventGridMemberWarnLogDTO * @return 维护结果 */ public R> query(PageEventGridMemberWarnLogDTO pageEventGridMemberWarnLogDTO) { Page page = new Page(1, 10); if (pageEventGridMemberWarnLogDTO.getPageNum() != null) { page.setCurrent(pageEventGridMemberWarnLogDTO.getPageNum()); } if (pageEventGridMemberWarnLogDTO.getPageSize() != null) { page.setSize(pageEventGridMemberWarnLogDTO.getPageSize()); } return R.ok(eventGridMemberWarnLogMapper.findByPage(page, pageEventGridMemberWarnLogDTO)); } /** * 删除网格员定时上报地理预警记录 * * @param EventGridMemberWarnLogDeleteDTO * @return 平台用户信息 */ public R delete(EventGridMemberWarnLogDeleteDTO EventGridMemberWarnLogDeleteDTO) { return R.fail(); } /** * 查询网格员定时上报地理预警记录详细信息 * * @param id * 网格员定时上报地理预警记录 id * @return 查找结果 */ public R eventGridMemberWarnLogDetails(Long id) { EventGridMemberWarnLogDO eventGridMemberWarnLogDO = eventGridMemberWarnLogMapper.selectById(id); if (eventGridMemberWarnLogDO != null) { EventGridMemberWarnLogDetailsVO eventGridMemberWarnLogDetailsVO = new EventGridMemberWarnLogDetailsVO(); BeanUtils.copyProperties(eventGridMemberWarnLogDO, eventGridMemberWarnLogDetailsVO); return R.ok(eventGridMemberWarnLogDetailsVO); } return R.fail(); } /** * 后台获取网格员预警记录 * * @param gridMemberWainDTO * 请求参数 * @return 预警记录 */ @Override public R gridMemberWorkWarning(EventGridMemberWainDTO gridMemberWainDTO) { return R.ok(this.baseMapper.gridMemberWorkWarning( new Page(gridMemberWainDTO.getPageNum(), gridMemberWainDTO.getPageSize()), gridMemberWainDTO)); } /** * 定时任务扫描网格员工作状态 * * @return 定时任务扫描结果 */ @Override public R timedTaskGridMember() { // 查询所有网格数据 List gridDataDOList = eventGridDataMapper.selectList( new QueryWrapper().lambda().eq(EventGridDataDO::getType, EventGridDataDO.type.sq)); if (gridDataDOList.isEmpty()) { return R.fail("未查询到网格数据"); } List memberGpsLogDOS = eventGridMemberGpsLogMapper.selectList(new QueryWrapper().lambda() .eq(EventGridMemberGpsLogDO::getPositionStation, EventGridMemberGpsLogDO.positionStation.no)); if (!memberGpsLogDOS.isEmpty()) { memberGpsLogDOS.forEach(memberGpsLog -> { if (StringUtils.isNotEmpty(memberGpsLog.getLngLat())) { String[] lngLat = memberGpsLog.getLngLat().split(","); Double lat = Double.valueOf(lngLat[0]); Double lng = Double.valueOf(lngLat[1]); // 遍历所有网格信息匹配网格员的坐标点是否在网格内 Boolean isOk = true; Integer workStatus = 2; for (EventGridDataDO gridData : gridDataDOList) { if (StringUtils.isNotEmpty(gridData.getData())) { List latLngList = LngLatUtils.getLatLngFromText(gridData.getData()); if (LngLatUtils.isInPolygon(latLngList, lng, lat)) {// 匹配通过 // 判断当前网格员与此网格是否有关系 Integer count = eventGridMemberRelationMapper .selectCount(new QueryWrapper().lambda() .eq(EventGridMemberRelationDO::getGridMemberId, memberGpsLog.getGridMemberId()) .eq(EventGridMemberRelationDO::getGridId, memberGpsLog.getGridId())); if (count > 0) { isOk = false; workStatus = 1; memberGpsLog.setGridId(gridData.getId()); memberGpsLog.setGridCommunityId(gridData.getGridCommunityId()); memberGpsLog.setGridStreetId(gridData.getGridStreetId()); memberGpsLog.setGridName(gridData.getGridName()); memberGpsLog.setPositionStation(EventGridMemberGpsLogDO.positionStation.normal); eventGridMemberGpsLogMapper.updateById(memberGpsLog); // 修改用户工作状态 this.baseMapper.setUserWorkStatus(memberGpsLog.getGridMemberId(), workStatus); break; } } } } if (isOk) {// 此网格员脱岗 memberGpsLog.setPositionStation(EventGridMemberGpsLogDO.positionStation.abnormal); workStatus = 2; // 新增网格员预警信息 EventGridMemberWarnLogDO memberWarnLogDO = new EventGridMemberWarnLogDO(); BeanUtils.copyProperties(memberGpsLog, memberWarnLogDO); memberWarnLogDO.setId(null); memberWarnLogDO.setContent("工作时间未在网格内预警"); memberWarnLogDO.setHappenAt(memberGpsLog.getCreateAt()); this.baseMapper.insert(memberWarnLogDO); eventGridMemberGpsLogMapper.updateById(memberGpsLog); // 修改用户工作状态 this.baseMapper.setUserWorkStatus(memberGpsLog.getGridMemberId(), workStatus); } } }); } return R.ok(); } }