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<EventGridMemberWarnLogMapper, EventGridMemberWarnLogDO> 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<IPage<EventGridMemberWarnLogVO>> 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<EventGridMemberWarnLogDetailsVO> 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<EventGridDataDO> gridDataDOList = eventGridDataMapper.selectList(
|
new QueryWrapper<EventGridDataDO>().lambda().eq(EventGridDataDO::getType, EventGridDataDO.type.sq));
|
if (gridDataDOList.isEmpty()) {
|
return R.fail("未查询到网格数据");
|
}
|
|
List<EventGridMemberGpsLogDO> memberGpsLogDOS =
|
eventGridMemberGpsLogMapper.selectList(new QueryWrapper<EventGridMemberGpsLogDO>().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<LatLngVO> latLngList = LngLatUtils.getLatLngFromText(gridData.getData());
|
if (LngLatUtils.isInPolygon(latLngList, lng, lat)) {// 匹配通过
|
// 判断当前网格员与此网格是否有关系
|
Integer count = eventGridMemberRelationMapper
|
.selectCount(new QueryWrapper<EventGridMemberRelationDO>().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();
|
}
|
|
}
|