screen-api/src/main/java/com/moral/api/controller/UAVController.java
@@ -3,8 +3,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.HistorySecondUav; import com.moral.api.mapper.HistorySecondUavMapper; import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO; import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm; import com.moral.api.pojo.vo.uav.UAVQueryDateVO; import com.moral.api.pojo.vo.uav.UAVQueryTimeSlotVO; import com.moral.api.pojo.vo.uav.UAVQueryTimeSlotVOs; import com.moral.api.service.HistorySecondUavService; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.util.DateUtils; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.*; /** * @ClassName UAVController @@ -30,6 +37,8 @@ @Autowired HistorySecondUavMapper historySecondUavMapper; @Autowired HistorySecondUavService historySecondUavService; /** * @Description: 根据组织id,mac以及时间查询无人机数据 * @Param: [] @@ -42,4 +51,38 @@ List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(new QueryWrapper<>()); return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),historySecondUavs); } /** * @Description: 查询组织在哪天有无人机飞行,返回具体日期 * @Param: [organizationId] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/9/8 */ @RequestMapping("queryDate") public ResultMessage queryDate(Integer organizationId){ //处理查询业务 List<Date> dates = historySecondUavService.queryDate(organizationId); //封装vo层 UAVQueryDateVO vo = UAVQueryDateVO.convert(dates); //返回数据 return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo); } @RequestMapping("queryTimeSlot") public ResultMessage queryTimeSlot(UAVQueryTimeSlotForm form){ //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //处理查询业务 List<UAVQueryTimeSlotDTO> dtos = historySecondUavService.queryTimeSlot(form); //封装vo层 UAVQueryTimeSlotVOs vo = UAVQueryTimeSlotVOs.convert(dtos); //返回数据 return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo); } } screen-api/src/main/java/com/moral/api/entity/HistorySecondUav.java
@@ -1,5 +1,7 @@ package com.moral.api.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.extension.activerecord.Model; import java.time.LocalDateTime; import java.io.Serializable; @@ -23,6 +25,12 @@ private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 设备mac */ private String mac; screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java
New file @@ -0,0 +1,35 @@ package com.moral.api.pojo.dto.uav; import lombok.Data; import java.util.Date; import java.util.List; import java.util.Map; /** * @ClassName UAVQueryTimeSlotDTO * @Description TODO * @Author 陈凯裕 * @Date 2021/9/8 15:13 * @Version TODO **/ @Data public class UAVQueryTimeSlotDTO { /* * 无人机mac * */ private String mac; /* * 无人机名称 * */ private String name; /* * 无人机飞行时间段 * map中开始时间的key为startTime * 结束时间的key为endTime * */ private List<Map<String,Date>> timeSlot; } screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
New file @@ -0,0 +1,57 @@ package com.moral.api.pojo.form.uav; import com.fasterxml.jackson.annotation.JsonFormat; import com.moral.util.DateUtils; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; /** * @ClassName queryTimeSlotForm * @Description TODO * @Author 陈凯裕 * @Date 2021/9/8 14:17 * @Version TODO **/ @Data public class UAVQueryTimeSlotForm { /* * 组织id * */ private Integer organizationId; /* * 日期 * */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private Date date; /* * 开始时间 * */ private Date startDate; /* * 结束时间 * */ private Date endDate; public boolean valid() { if ( ObjectUtils.isEmpty(organizationId)&& ObjectUtils.isEmpty(date) ) return false; //将日期转换为开始结束时间 List<Date> dates = DateUtils.dateToStartAndEndTime(date); startDate = dates.get(0); endDate = dates.get(1); return true; } } screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryDateVO.java
New file @@ -0,0 +1,47 @@ package com.moral.api.pojo.vo.uav; import com.moral.util.DateUtils; import lombok.Data; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; /** * @ClassName UAVQueryDateVO * @Description 查询组织哪天有无人机飞行vo * @Author 陈凯裕 * @Date 2021/9/8 11:03 * @Version TODO **/ @Data public class UAVQueryDateVO { /** * @Description: 使用hashset是为了去重 * @Param: * @return: * @Author: 陈凯裕 * @Date: 2021/9/8 */ public HashSet<String> datesStr; /** * @Description: 将业务层返回数据转化为vo层数据 * @Param: [dates] * @return: com.moral.api.pojo.vo.uav.UAVQueryDateVO * @Author: 陈凯裕 * @Date: 2021/9/8 */ public static UAVQueryDateVO convert(List<Date> dates){ //日志格式转化为字符串格式 UAVQueryDateVO uavQueryDateVO = new UAVQueryDateVO(); HashSet<String> datesStr = new HashSet<>(); for (Date date : dates) { datesStr.add(DateUtils.dateToDateString(date,"yyyy-MM-dd")); } uavQueryDateVO.setDatesStr(datesStr); return uavQueryDateVO; } } screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java
New file @@ -0,0 +1,23 @@ package com.moral.api.pojo.vo.uav; import lombok.Data; import java.util.List; import java.util.Map; /** * @ClassName UAVQueryTimeSlotVO * @Description TODO * @Author 陈凯裕 * @Date 2021/9/8 16:57 * @Version TODO **/ @Data public class UAVQueryTimeSlotVO { private String mac; private String name; private List<Map<String,String>> timeSlot; } screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java
New file @@ -0,0 +1,44 @@ package com.moral.api.pojo.vo.uav; import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO; import com.moral.util.DateUtils; import lombok.Data; import java.util.*; /** * @ClassName UAVQueryTimeSlotVOs * @Description TODO * @Author 陈凯裕 * @Date 2021/9/8 17:16 * @Version TODO **/ @Data public class UAVQueryTimeSlotVOs { List<UAVQueryTimeSlotVO> vos; public static UAVQueryTimeSlotVOs convert(List<UAVQueryTimeSlotDTO> dtos){ UAVQueryTimeSlotVOs resultVO = new UAVQueryTimeSlotVOs(); List<UAVQueryTimeSlotVO> vos = new ArrayList<>(); for (UAVQueryTimeSlotDTO dto : dtos) { UAVQueryTimeSlotVO vo = new UAVQueryTimeSlotVO(); vo.setMac(dto.getMac()); vo.setName(dto.getName()); List<Map<String,String>> timeSlotVo = new ArrayList<>(); List<Map<String, Date>> timeSlot = dto.getTimeSlot(); for (Map<String, Date> map : timeSlot) { Map<String,String> newMap = new LinkedHashMap<>(); map.forEach((key,value)->{ String dateStr = DateUtils.dateToDateString(value, "yyyy-MM-dd HH:mm:ss"); newMap.put(key,dateStr); }); timeSlotVo.add(newMap); } vo.setTimeSlot(timeSlotVo); vos.add(vo); } resultVO.setVos(vos); return resultVO; } } screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java
@@ -2,6 +2,11 @@ import com.moral.api.entity.HistorySecondUav; import com.baomidou.mybatisplus.extension.service.IService; import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO; import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm; import java.util.Date; import java.util.List; /** * <p> @@ -13,4 +18,23 @@ */ public interface HistorySecondUavService extends IService<HistorySecondUav> { /** * @Description: 根据组织id查询该组织在哪天有无人机飞行 * @Param: [organizationId] * @return: java.util.List<java.util.Date> * @Author: 陈凯裕 * @Date: 2021/9/8 */ List<Date> queryDate(Integer organizationId); /** * @Description: 查询组织在指定日期下无人机的飞行时间段 * @Param: [from] * @return: List<UAVQueryTimeSlotDTO> * @Author: 陈凯裕 * @Date: 2021/9/8 */ List<UAVQueryTimeSlotDTO> queryTimeSlot(UAVQueryTimeSlotForm form); } screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java
@@ -22,4 +22,22 @@ //走航车轨迹 List<Map<String, Object>> carTrajectory(Map<String, Object> params); /** * @Description: 根据mac号获取无人机数据 * @Param: [mac] * @return: com.moral.api.entity.SpecialDevice * @Author: 陈凯裕 * @Date: 2021/9/8 */ Map<String,Object> getSpecialDeviceMapByMac(String mac); /** * @Description: 根据mac号获取无人机对象 * @Param: [mac] * @return: com.moral.api.entity.SpecialDevice * @Author: 陈凯裕 * @Date: 2021/9/8 */ SpecialDevice getSpecialDeviceByMac(String mac); } screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
@@ -1,10 +1,21 @@ package com.moral.api.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.HistorySecondUav; import com.moral.api.entity.Organization; import com.moral.api.mapper.HistorySecondUavMapper; import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO; import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm; import com.moral.api.service.HistorySecondUavService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.service.OrganizationService; import com.moral.api.service.SpecialDeviceService; import com.moral.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.function.Predicate; /** * <p> @@ -17,4 +28,125 @@ @Service public class HistorySecondUavServiceImpl extends ServiceImpl<HistorySecondUavMapper, HistorySecondUav> implements HistorySecondUavService { @Autowired HistorySecondUavMapper historySecondUavMapper; @Autowired OrganizationService organizationService; @Autowired SpecialDeviceService specialDeviceService; @Override public List<Date> queryDate(Integer organizationId) { //构造查询条件 QueryWrapper<HistorySecondUav> queryWrapper = new QueryWrapper<>(); //获取子组织id List<Organization> children = organizationService.getChildrenOrganizationsById(organizationId); List<Integer> childrenId = new ArrayList<>(); for (Organization child : children) { childrenId.add(child.getId()); } childrenId.add(organizationId); queryWrapper.in("organization_id",childrenId); //设置查询时间范围为180天 Date endDate = new Date(); Date startDate = DateUtils.addDays(endDate, -180); queryWrapper.between("batch",startDate,endDate); //设置查询字段 queryWrapper.select("DISTINCT batch"); //查询结果 List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(queryWrapper); //结果转为Date集合 List<Date> result = new ArrayList<>(); for (HistorySecondUav historySecondUav : historySecondUavs) { result.add(historySecondUav.getBatch()); } return result; } @Override public List<UAVQueryTimeSlotDTO> queryTimeSlot(UAVQueryTimeSlotForm form) { //取参 Integer organizationId = form.getOrganizationId(); Date startDate = form.getStartDate(); Date endDate = form.getEndDate(); QueryWrapper<HistorySecondUav> wrapper = new QueryWrapper<>(); //获取子组织id List<Organization> children = organizationService.getChildrenOrganizationsById(organizationId); List<Integer> childrenId = new ArrayList<>(); for (Organization child : children) { childrenId.add(child.getId()); } childrenId.add(organizationId); wrapper.in("organization_id",childrenId); //查询根据batch查,因为可能会有跨天飞行的情况。 wrapper.between("batch",startDate,endDate); //设置查询字段 wrapper.select("mac,time,batch"); //查询结果 List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(wrapper); //根据batch进行分批 Map<String,List<HistorySecondUav>> batchMap = new LinkedHashMap<>();//key为batch的string for (HistorySecondUav historySecondUav : historySecondUavs) { //获取batch对应的数据集合 List<HistorySecondUav> list = batchMap.get(historySecondUav.getBatch().toString()); if(list!=null){ list.add(historySecondUav); }else{ ArrayList<HistorySecondUav> newList = new ArrayList<>(); newList.add(historySecondUav); batchMap.put(historySecondUav.getBatch().toString(),newList); } } //去除少于30条数据的集合 batchMap.values().removeIf(new Predicate<List<HistorySecondUav>>() { @Override public boolean test(List<HistorySecondUav> historySecondUavs) { if(historySecondUavs.size()<=30) return true; return false; } }); //根据mac进行分类 Map<String,List<Map<String,List<HistorySecondUav>>>> macBatchMap = new LinkedHashMap<>();//key为mac //遍历batchMap将mac提取出来,作为macBatchMap的key,batch和数据map的数据集合放入value batchMap.forEach((key,value)->{ String mac = value.get(0).getMac(); List<Map<String, List<HistorySecondUav>>> maps = macBatchMap.get(mac); if(maps!=null){ Map<String,List<HistorySecondUav>> map = new LinkedHashMap<>(); map.put(key,value); maps.add(map); }else{ List<Map<String,List<HistorySecondUav>>> list = new ArrayList<>(); Map<String,List<HistorySecondUav>> map = new LinkedHashMap<>(); map.put(key,value); list.add(map); macBatchMap.put(value.get(0).getMac(),list); } }); //封装返回数据 List<UAVQueryTimeSlotDTO> dtos = new ArrayList<>(); macBatchMap.forEach((key,value)->{ UAVQueryTimeSlotDTO dto = new UAVQueryTimeSlotDTO(); List<Map<String,Date>> timeSlots = new ArrayList<>(); dto.setMac(key); //根据mac查询设备名称 dto.setName((String) specialDeviceService.getSpecialDeviceMapByMac(key).get("name")); //获取时间段 value.forEach(listValue->{ listValue.forEach((mKey,mValue)->{ Date slotStartDate = mValue.get(0).getTime(); Date slotEndDate = mValue.get(mValue.size()-1).getTime(); Map<String,Date> dateMap = new HashMap<>(); dateMap.put("startTime",slotStartDate); dateMap.put("endTime",slotEndDate); timeSlots.add(dateMap); }); }); dto.setTimeSlot(timeSlots); dtos.add(dto); }); return dtos; } } screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -27,6 +27,7 @@ @Autowired OrganizationMapper organizationMapper; @Override public List<Organization> getChildrenOrganizationsById(Integer id) { List<Organization> childrenOrganization = new ArrayList<>(); screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
@@ -2,18 +2,23 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.HistorySecondSpecial; import com.moral.api.entity.Organization; import com.moral.api.entity.SpecialDevice; import com.moral.api.entity.SpecialDeviceHistory; import com.moral.api.mapper.HistorySecondSpecialMapper; import com.moral.api.mapper.SpecialDeviceMapper; import com.moral.api.service.OrganizationService; import com.moral.api.service.SpecialDeviceHistoryService; import com.moral.api.service.SpecialDeviceService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.GeodesyUtils; import com.moral.util.TokenUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -37,6 +42,14 @@ @Autowired private SpecialDeviceHistoryService specialDeviceHistoryService; @Autowired OrganizationService organizationService; @Autowired SpecialDeviceMapper specialDeviceMapper; @Autowired RedisTemplate redisTemplate; private final static Double dis = 50d; @@ -84,6 +97,23 @@ return filterData(data); } @Override public Map<String,Object> getSpecialDeviceMapByMac(String mac) { //从缓存中获取 Map<String,Object> specialDeviceMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DEVICE,mac); return specialDeviceMap; } @Override public SpecialDevice getSpecialDeviceByMac(String mac) { QueryWrapper<SpecialDevice> queryWrapper = new QueryWrapper(); queryWrapper.eq("mac",mac); queryWrapper.eq("is_delete",Constants.NOT_DELETE); SpecialDevice specialDevice = specialDeviceMapper.selectOne(queryWrapper); return specialDevice; } //根据距离筛选数据 private List<Map<String, Object>> filterData(List<Map<String, Object>> data) { List<Map<String, Object>> result = new ArrayList<>(); screen-common/src/main/java/com/moral/constant/Constants.java
@@ -218,5 +218,6 @@ * 字典表无人机设备类型 * */ public static final String SPECIAL_DEVICE_UAV = "1"; } screen-common/src/main/java/com/moral/constant/RedisConstants.java
@@ -78,5 +78,10 @@ * */ public static final String SPECIAL_DEVICE_INFO = "special_device_alarm_info"; /* * redis中政府站点信息key * */ public static final String GOV_MONITOR_POINT = "gov_monitor_point"; } screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -92,6 +92,26 @@ /** * @Description: 将日期转换为当天的开始和结束时间 * @Param: [date] * @return: java.util.List<java.util.Date> * @Author: 陈凯裕 * @Date: 2021/9/8 */ public static List<Date> dateToStartAndEndTime(Date date){ String dateStr = dateToDateString(date, "yyyy-MM-dd"); String startDateStr = dateStr+" 00:00:00"; String endDateStr = dateStr+" 23:59:59"; Date startDate = getDate(startDateStr, "yyyy-MM-dd HH:mm:ss"); Date endDate = getDate(endDateStr, "yyyy-MM-dd HH:mm:ss"); ArrayList<Date> dates = new ArrayList<>(); dates.add(startDate); dates.add(endDate); return dates; } /** * @Description: Date的toString格式转为Date * @Param: [] * @return: java.util.Date screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java
New file @@ -0,0 +1,107 @@ package com.moral.api.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.moral.api.entity.GovMonitorPoint; import com.moral.api.mapper.GovMonitorPointMapper; import com.moral.api.service.GovMonitorPointService; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.util.WebUtils; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; /** * @program: screen * @description: 政府站点 * @author: lizijie * @create: 2021-09-09 11:31 **/ @Slf4j @Api(tags = {"政府站点"}) @RestController @RequestMapping("/govMonitorPoint") public class GovMonitorPoionController { @Resource private GovMonitorPointService govMonitorPointService; @Resource private GovMonitorPointMapper govMonitorPointMapper; @RequestMapping(value = "getGovMonitorPointByCondition", method = RequestMethod.GET) @ResponseBody public ResultMessage getSpecialDeviceByCondition(HttpServletRequest request) { Map<String,Object> parameters = WebUtils.getParametersStartingWith(request,null); Map<String,Object> resultMap = govMonitorPointService.getDataByCondition(parameters); if (!resultMap.containsKey("code")){ return ResultMessage.ok(resultMap); } return ResultMessage.fail(Integer.parseInt(resultMap.get("code").toString()),resultMap.get("msg").toString()); } @RequestMapping(value = "insert", method = RequestMethod.POST) @ResponseBody public ResultMessage insert(@RequestBody GovMonitorPoint govMonitorPoint){ String guid = govMonitorPoint.getGuid(); String name = govMonitorPoint.getName(); double longitude = govMonitorPoint.getLongitude(); double latitude = govMonitorPoint.getLatitude(); String station_level = govMonitorPoint.getStationLevel(); if (ObjectUtils.isEmpty(guid) && ObjectUtils.isEmpty(name) && ObjectUtils.isEmpty(longitude) && ObjectUtils.isEmpty(latitude) && ObjectUtils.isEmpty(station_level)){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); wrapper_govMonitorPoint.eq("is_delete",Constants.NOT_DELETE); wrapper_govMonitorPoint.eq("guid",guid).or().eq("name",name); List<GovMonitorPoint> govMonitorPoints = govMonitorPointMapper.selectList(wrapper_govMonitorPoint); if (govMonitorPoints.size()>0){ return ResultMessage.fail(ResponseCodeEnum.MONITOR_POINT_IS_EXIST.getCode(),ResponseCodeEnum.MONITOR_POINT_IS_EXIST.getMsg()); } govMonitorPointService.insert(govMonitorPoint); return ResultMessage.ok(); } @RequestMapping(value = "update", method = RequestMethod.POST) @ResponseBody public ResultMessage update(@RequestBody GovMonitorPoint govMonitorPoint){ int id = govMonitorPoint.getId(); if (ObjectUtils.isEmpty(id)){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); wrapper_govMonitorPoint.eq("is_delete",Constants.NOT_DELETE); wrapper_govMonitorPoint.eq("id",id); List<GovMonitorPoint> govMonitorPoints = govMonitorPointMapper.selectList(wrapper_govMonitorPoint); if (govMonitorPoints.size()==0){ return ResultMessage.fail(ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getCode(),ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getMsg()); } govMonitorPointService.update(govMonitorPoint); return ResultMessage.ok(); } @RequestMapping(value = "delete", method = RequestMethod.POST) @ResponseBody public ResultMessage delete(@RequestBody Map map){ int id = Integer.parseInt(map.get("id").toString()); if (ObjectUtils.isEmpty(id)){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); wrapper_govMonitorPoint.eq("is_delete",Constants.NOT_DELETE); wrapper_govMonitorPoint.eq("id",id); List<GovMonitorPoint> govMonitorPoints = govMonitorPointMapper.selectList(wrapper_govMonitorPoint); if (govMonitorPoints.size()==0){ return ResultMessage.fail(ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getCode(),ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getMsg()); } govMonitorPointService.delete(id); return ResultMessage.ok(); } } screen-manage/src/main/java/com/moral/api/entity/GovMonitorPoint.java
New file @@ -0,0 +1,101 @@ package com.moral.api.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import java.util.Date; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * * </p> * * @author moral * @since 2021-09-09 */ @Data @EqualsAndHashCode(callSuper = false) public class GovMonitorPoint extends Model<GovMonitorPoint> { private static final long serialVersionUID = 1L; /** * id */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 政府站点code */ private String guid; /** * 名称 */ private String name; /** * 经度 */ private Double longitude; /** * 纬度 */ private Double latitude; /** * 省编码 */ private Integer provinceCode; /** * 市编码 */ private Integer cityCode; /** * 县/区编码 */ private Integer areaCode; /** * 政府站点类型:国控、省控、县控 */ private String stationLevel; /** * 创建时间 */ private Date createTime; /** * 更新时间 */ private Date updateTime; /** * 是否删除 */ private String isDelete; /** * 备注 */ @TableField("`desc`") private String desc; @Override protected Serializable pkVal() { return this.id; } } screen-manage/src/main/java/com/moral/api/mapper/GovMonitorPointMapper.java
New file @@ -0,0 +1,16 @@ package com.moral.api.mapper; import com.moral.api.entity.GovMonitorPoint; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper 接口 * </p> * * @author moral * @since 2021-09-09 */ public interface GovMonitorPointMapper extends BaseMapper<GovMonitorPoint> { } screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java
New file @@ -0,0 +1,67 @@ package com.moral.api.service; import com.moral.api.entity.GovMonitorPoint; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.transaction.annotation.Transactional; import java.util.Map; /** * <p> * 服务类 * </p> * * @author moral * @since 2021-09-09 */ public interface GovMonitorPointService extends IService<GovMonitorPoint> { /** *@Description: 根据条件查询政府站点信息 *@Param: [map] *@return: java.util.Map<java.lang.String,java.lang.Object> *@Author: lizijie *@Date: 2021/9/9 11:28 **/ Map<String,Object> getDataByCondition(Map map); /** *@Description: 新增政府站点 *@Param: [govMonitorPoint] *@return: void *@Author: lizijie *@Date: 2021/9/9 15:09 **/ @Transactional void insert(GovMonitorPoint govMonitorPoint); /** *@Description: 更新政府站点 *@Param: [govMonitorPoint] *@return: void *@Author: lizijie *@Date: 2021/9/10 10:10 **/ @Transactional void update(GovMonitorPoint govMonitorPoint); /** *@Description: 删除政府站点 *@Param: [id] *@return: void *@Author: lizijie *@Date: 2021/9/10 13:11 **/ @Transactional void delete(Integer id); /** *@Description: 通过id获取政府站点信息 *@Param: [id] *@return: com.moral.api.entity.GovMonitorPoint *@Author: lizijie *@Date: 2021/9/9 16:35 **/ GovMonitorPoint selectGovMonitorPointInfoById(int id); } screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java
New file @@ -0,0 +1,222 @@ package com.moral.api.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.GovMonitorPoint; import com.moral.api.entity.SysArea; import com.moral.api.mapper.GovMonitorPointMapper; import com.moral.api.mapper.SysAreaMapper; import com.moral.api.service.GovMonitorPointService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.util.LogUtils; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.constant.ResponseCodeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.*; /** * <p> * 服务实现类 * </p> * * @author moral * @since 2021-09-09 */ @Service public class GovMonitorPointServiceImpl extends ServiceImpl<GovMonitorPointMapper, GovMonitorPoint> implements GovMonitorPointService { @Autowired(required = false) private GovMonitorPointMapper govMonitorPointMapper; @Autowired(required = false) private SysAreaMapper sysAreaMapper; @Autowired(required = false) private RedisTemplate redisTemplate; @Autowired private LogUtils logUtils; /* * 从redis获取设备信息 * */ private Map<String, Object> getGovMonitorPointInfoFromRedis(String id) { return (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.GOV_MONITOR_POINT, id); } /* * 设备信息存入redis */ private void setGovMonitorPointInfoToRedis(String id, GovMonitorPoint govMonitorPointInfo) { redisTemplate.opsForHash().put(RedisConstants.GOV_MONITOR_POINT, id, govMonitorPointInfo); } /* * 从redis删除设备信息 */ private void delGovMonitorPointInfoFromRedis(String id) { redisTemplate.opsForHash().delete(RedisConstants.GOV_MONITOR_POINT, id); } @Override public Map<String, Object> getDataByCondition(Map map) { Map<String,Object> resultMap = new HashMap<>(); if (!map.containsKey("current")||!map.containsKey("size")){ resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } int current = Integer.parseInt(map.get("current").toString()); int size = Integer.parseInt(map.get("size").toString()); Page<GovMonitorPoint> page = new Page<>(current,size); QueryWrapper<GovMonitorPoint> wrapper_Condition = new QueryWrapper<>(); wrapper_Condition.eq("is_delete",Constants.NOT_DELETE); if (!ObjectUtils.isEmpty(map.get("name"))){ wrapper_Condition.like("name",map.get("name").toString()); } if (!ObjectUtils.isEmpty(map.get("stationLevel"))){ wrapper_Condition.like("station_level",map.get("stationLevel").toString()); } wrapper_Condition.orderByDesc("create_time"); Page resultPage = govMonitorPointMapper.selectPage(page,wrapper_Condition); int totalNumber = govMonitorPointMapper.selectCount(wrapper_Condition); List<GovMonitorPoint> govMonitorPoints = resultPage.getRecords(); SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<Map<String,Object>> govMonitorPointList = new ArrayList<>(); for (GovMonitorPoint govMonitorPoint:govMonitorPoints) { Map govMonitorPointMap = JSON.parseObject(JSON.toJSONString(govMonitorPoint),Map.class); String createTime = SDF.format(govMonitorPoint.getCreateTime()); String updateTime = SDF.format(govMonitorPoint.getUpdateTime()); govMonitorPointMap.put("createTime",createTime); govMonitorPointMap.put("updateTime",updateTime); String position = ""; if (!ObjectUtils.isEmpty(govMonitorPoint.getProvinceCode())){ QueryWrapper<SysArea> wrapper_province = new QueryWrapper<>(); wrapper_province.eq("area_code",govMonitorPoint.getProvinceCode()); SysArea sysArea_provice = sysAreaMapper.selectOne(wrapper_province); if (!ObjectUtils.isEmpty(sysArea_provice)){ position = position+sysArea_provice.getAreaName(); if (!ObjectUtils.isEmpty(govMonitorPoint.getCityCode())){ QueryWrapper<SysArea> wrapper_city = new QueryWrapper<>(); wrapper_city.eq("area_code",govMonitorPoint.getCityCode()); SysArea sysArea_city = sysAreaMapper.selectOne(wrapper_city); if (!ObjectUtils.isEmpty(sysArea_city)){ position = position+"/"+sysArea_city.getAreaName(); if (!ObjectUtils.isEmpty(govMonitorPoint.getAreaCode())){ QueryWrapper<SysArea> wrapper_area = new QueryWrapper<>(); wrapper_area.eq("area_code",govMonitorPoint.getAreaCode()); SysArea sysArea_area = sysAreaMapper.selectOne(wrapper_area); if (!ObjectUtils.isEmpty(sysArea_area)){ position = position+"/"+sysArea_area.getAreaName(); } } } } } } govMonitorPointMap.put("position",position); govMonitorPointList.add(govMonitorPointMap); } resultMap.put("govMonitorPointList",govMonitorPointList); resultMap.put("totalNumber",totalNumber); resultMap.put("current",current); int totalPageNumber = totalNumber/size; if(totalNumber%size != 0){ totalPageNumber += 1; } resultMap.put("totalPageNumber",totalPageNumber); return resultMap; } @Transactional @Override public void insert(GovMonitorPoint govMonitorPoint) { int count = govMonitorPointMapper.insert(govMonitorPoint); //数据插入redis setGovMonitorPointInfoToRedis(govMonitorPoint.getId().toString(),selectGovMonitorPointInfoById(govMonitorPoint.getId())); if (count > 0){ //操作日志记录 HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); StringBuilder content = new StringBuilder(); content.append("添加了政府站点:").append("id:").append(govMonitorPoint.getId()+";").append(govMonitorPoint.getName()+";").append(":").append("guid:").append(govMonitorPoint.getGuid()+";"); logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE); } } @Transactional @Override public void update(GovMonitorPoint govMonitorPoint) { Integer id = govMonitorPoint.getId(); GovMonitorPoint oldGovMonitorPoint = govMonitorPointMapper.selectById(id); govMonitorPointMapper.updateById(govMonitorPoint); //删除redis delGovMonitorPointInfoFromRedis(id.toString()); //更新redis setGovMonitorPointInfoToRedis(id.toString(),selectGovMonitorPointInfoById(id)); //操作日志记录 HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); StringBuilder content = new StringBuilder(); content.append("修改了政府站点:").append("id:").append(govMonitorPoint.getId()+";"); if (!ObjectUtils.isEmpty(govMonitorPoint.getGuid())){ content.append("guid:").append(oldGovMonitorPoint.getGuid()).append("->").append(govMonitorPoint.getGuid()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getName())){ content.append("name:").append(oldGovMonitorPoint.getName()).append("->").append(govMonitorPoint.getName()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getLongitude())){ content.append("longitude:").append(oldGovMonitorPoint.getLongitude()).append("->").append(govMonitorPoint.getLongitude()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getLatitude())){ content.append("latitude:").append(oldGovMonitorPoint.getLatitude()).append("->").append(govMonitorPoint.getLatitude()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getProvinceCode())){ content.append("provinceCode:").append(oldGovMonitorPoint.getProvinceCode()).append("->").append(govMonitorPoint.getProvinceCode()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getCityCode())){ content.append("cityCode:").append(oldGovMonitorPoint.getCityCode()).append("->").append(govMonitorPoint.getCityCode()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getAreaCode())){ content.append("areaCode:").append(oldGovMonitorPoint.getAreaCode()).append("->").append(govMonitorPoint.getAreaCode()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getStationLevel())){ content.append("stationLevel:").append(oldGovMonitorPoint.getStationLevel()).append("->").append(govMonitorPoint.getStationLevel()).append(";"); } if (!ObjectUtils.isEmpty(govMonitorPoint.getDesc())){ content.append("desc:").append(oldGovMonitorPoint).append("->").append(govMonitorPoint.getDesc()).append(";"); } logUtils.saveOperationForManage(request, content.toString(), Constants.UPDATE_OPERATE_TYPE); } @Override public void delete(Integer id) { UpdateWrapper<GovMonitorPoint> wrapper_delete = new UpdateWrapper<>(); wrapper_delete.eq("id",id).set("is_delete",Constants.DELETE); govMonitorPointMapper.update(null,wrapper_delete); //删除redis delGovMonitorPointInfoFromRedis(id.toString()); //操作日志记录 HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); StringBuilder content = new StringBuilder(); content.append("删除了设备:").append("id:").append(id).append(";"); logUtils.saveOperationForManage(request, content.toString(), Constants.DELETE_OPERATE_TYPE); } @Override public GovMonitorPoint selectGovMonitorPointInfoById(int id) { GovMonitorPoint govMonitorPoint = govMonitorPointMapper.selectById(id); return govMonitorPoint; } } screen-manage/src/main/resources/mapper/GovMonitorPointMapper.xml
New file @@ -0,0 +1,22 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.moral.api.mapper.GovMonitorPointMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.GovMonitorPoint"> <id column="id" property="id" /> <result column="gov_code" property="govCode" /> <result column="name" property="name" /> <result column="longitude" property="longitude" /> <result column="latitude" property="latitude" /> <result column="province_code" property="provinceCode" /> <result column="city_code" property="cityCode" /> <result column="area_code" property="areaCode" /> <result column="gov_type" property="govType" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> <result column="is_delete" property="isDelete" /> <result column="desc" property="desc" /> </resultMap> </mapper>