From 45cbba7ea964224aad1a59a46e9050b8c61e481c Mon Sep 17 00:00:00 2001 From: guochaojie Date: Mon, 12 Aug 2024 17:47:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=9F=9C=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/yunxi/controller/DeviceController.java | 106 ++++++++++++++++++ .../yunxi/domain/po/RecycleStaffDevice.java | 2 +- .../domain/vo/recycler/DeviceCountVO.java | 24 ++++ .../yunxi/domain/vo/recycler/DeviceReqVO.java | 23 ++++ .../domain/vo/recycler/RecyclerDeviceVO.java | 36 ++++++ .../yunxi/service/IRecycleBucketService.java | 4 + .../service/IRecycleCleanOrderService.java | 3 + .../service/IRecycleDeviceEventService.java | 1 + .../yunxi/service/IRecycleDeviceService.java | 4 + .../service/IRecycleStaffDeviceService.java | 4 + .../impl/RecycleBucketServiceImpl.java | 16 +++ .../impl/RecycleCleanOrderServiceImpl.java | 10 ++ .../impl/RecycleDeviceEventServiceImpl.java | 16 ++- .../impl/RecycleDeviceServiceImpl.java | 9 ++ .../impl/RecycleStaffDeviceServiceImpl.java | 17 +++ 15 files changed, 273 insertions(+), 2 deletions(-) create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceCountVO.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceReqVO.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/RecyclerDeviceVO.java diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java b/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java index ce16e05..4d14b96 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java @@ -10,11 +10,16 @@ import cc.yunxi.domain.dto.UserDTO; import cc.yunxi.domain.po.*; import cc.yunxi.domain.vo.device.*; import cc.yunxi.domain.vo.file.FileUploadRespVO; +import cc.yunxi.domain.vo.recycler.DeviceCountVO; +import cc.yunxi.domain.vo.recycler.DeviceReqVO; +import cc.yunxi.domain.vo.recycler.RecyclerDeviceVO; import cc.yunxi.enums.BusinessCodeEnum; import cc.yunxi.service.*; import cc.yunxi.utils.CustomerMqttClient; +import cc.yunxi.utils.DistanceUtil; import cc.yunxi.utils.RedisTool; import cc.yunxi.utils.UserContext; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; @@ -33,6 +38,7 @@ import java.text.SimpleDateFormat; import java.time.Duration; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** *

@@ -568,6 +574,14 @@ public class DeviceController { event.setPhone(eventVO.getPhone()); event.setIsLocal("1");//本地调用 event.setEventType(eventVO.getEventType()); + if ("烟感报警".equals(eventVO.getEventType())) { + bucketService.updateSmog(eventVO.getBucketCode(), 1); + event.setEventType("smog"); + } + if ("满溢报警".equals(eventVO.getEventType())) { + bucketService.updateFull(eventVO.getBucketCode(), 1); + event.setEventType("full"); + } String eventTime = eventVO.getEventTime(); if (StrUtil.isNotEmpty(eventTime)) { event.setEventTime(DateUtil.parse(eventTime, "yyyy-MM-dd HH:mm:ss")); @@ -1081,4 +1095,96 @@ public class DeviceController { return respVO; } + // 回收员查询设备列表 + @PostMapping("/getDeviceList") + @ApiOperation(value = "回收员查询设备列表") + public CommonResult getDeviceList(@RequestBody DeviceReqVO reqVO) { + UserDTO user = UserContext.getUser(); + if (null == user) { + throw new BizIllegalException("登录已过期,请先登录!"); + } + String phone = user.getPhone(); + + //获取管理的设备列表 + List codes = staffDeviceService.getDeviceCodesByPhone(phone, reqVO.getDeviceName()); + if (CollectionUtil.isEmpty(codes)) return CommonResult.success(Collections.emptyList()); + + List devices = deviceService.getByDeviceCodes(codes); + + DeviceCountVO countVO = new DeviceCountVO(); + int onlineCount = 0; + int smogCount = 0; + int fullCount = 0; + + List vos = new ArrayList<>(); + for (RecycleDevice device : devices) { + List list = bucketService.getByDeviceCode(device.getDeviceCode()); + if (CollectionUtil.isEmpty(list)) continue; + //排序 + List> collect = list.stream().sorted( + (rb1, rb2) -> rb2.getShowOrd() - rb1.getShowOrd() + ).map(bucket -> { + Map map = new HashMap<>(); + map.put("bucketCode", bucket.getBucketCode()); + map.put("showName", bucket.getShowName()); + map.put("currentWeight", bucket.getCurrentWeight()); + map.put("smogStatus", bucket.getSmogStatus()); + map.put("fullStatus", bucket.getFullStatus()); + if (1 == bucket.getFullStatus()) { + String fullTime = eventService.getFullTime(bucket.getBucketCode()); + map.put("fullTime", fullTime); + } else { + map.put("fullTime", ""); + } + return map; + }).collect(Collectors.toList()); + + //最近清运 + RecycleCleanOrder cleanOrder = cleanOrderService.getLastCleanDate(device.getDeviceCode()); + RecyclerDeviceVO vo = BeanUtils.copyBean(device, RecyclerDeviceVO.class); + // 初始化状态 + if (cleanOrder != null) vo.setCleanDate(cleanOrder.getCreatorTime()); + vo.setFullStatus(0); + vo.setSmogStatus(0); + + vo.setBucketList(collect); + LocationDTO location = reqVO.getLocation(); + //计算距离 + double distance = DistanceUtil.calculateDistance( + Double.valueOf(location.getLatitude()), + Double.valueOf(location.getLongitude()), + Double.valueOf(device.getLatitude()), + Double.valueOf(device.getLongitude())); + vo.setDistance(distance); + list.forEach(bucket -> { + if (1 == bucket.getSmogStatus()) vo.setSmogStatus(1); + if (1 == bucket.getFullStatus()) vo.setFullStatus(1); + }); + + //数据统计 + if (1 == vo.getStatus()) onlineCount++; + if (1 == vo.getSmogStatus()) smogCount++; + if (1 == vo.getFullStatus()) fullCount++; + vos.add(vo); + } + countVO.setTotal(vos.size()); + countVO.setFull(fullCount); + countVO.setSmog(smogCount); + countVO.setOnline(onlineCount); + + // 筛选 + if (reqVO.isOnline() || reqVO.isCheckFull() || reqVO.isCheckSmog()) { + vos = vos.stream().filter(dev -> { + if (reqVO.isOnline() && dev.getStatus() != 1) return false; + if (reqVO.isCheckFull() && dev.getFullStatus() != 1) return false; + if (reqVO.isCheckSmog() && dev.getSmogStatus() != 1) return false; + return true; + }).collect(Collectors.toList()); + } + // 排序 + vos.sort(Comparator.comparing(RecyclerDeviceVO::getDistance)); + countVO.setList(vos); + return CommonResult.success(countVO); + } + } \ No newline at end of file diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStaffDevice.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStaffDevice.java index 1304d8f..9a25376 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStaffDevice.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStaffDevice.java @@ -54,5 +54,5 @@ public class RecycleStaffDevice { @TableField(value = "address" ) private String address; @TableField("DEVICE_NAME") - private String device_name; + private String deviceName; } diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceCountVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceCountVO.java new file mode 100644 index 0000000..9829e49 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceCountVO.java @@ -0,0 +1,24 @@ +package cc.yunxi.domain.vo.recycler; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel("回收设备统计数据") +public class DeviceCountVO { + @ApiModelProperty("总数") + private int total; + @ApiModelProperty("在线数") + private int online; + @ApiModelProperty("烟雾报警") + private int smog; + @ApiModelProperty("满溢报警数") + private int full; + @ApiModelProperty("设备列表") + private List list; + + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceReqVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceReqVO.java new file mode 100644 index 0000000..65f462e --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/DeviceReqVO.java @@ -0,0 +1,23 @@ +package cc.yunxi.domain.vo.recycler; + +import cc.yunxi.domain.dto.LocationDTO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import lombok.Data; + +@Data +@ApiModel(value = "DeviceReqVO", description = "设备清单查询参数") +public class DeviceReqVO { + @ApiModelProperty(value = "设备名称") + private String deviceName; + @ApiModelProperty(value = "在线筛选") + private boolean online; + @ApiModelProperty(value = "烟雾筛选") + private boolean checkSmog; + @ApiModelProperty(value = "满溢筛选") + private boolean checkFull; + @ApiModelProperty(value = "位置") + private LocationDTO location; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/RecyclerDeviceVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/RecyclerDeviceVO.java new file mode 100644 index 0000000..0135a1c --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycler/RecyclerDeviceVO.java @@ -0,0 +1,36 @@ +package cc.yunxi.domain.vo.recycler; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Data +@ApiModel(description = "回收员设备列表") +public class RecyclerDeviceVO { + @ApiModelProperty("设备编码") + private String deviceCode; + @ApiModelProperty("设备名称") + private String deviceName; + @ApiModelProperty("距离") + private Double distance; + @ApiModelProperty("在线状态") + private Integer status; + @ApiModelProperty("烟雾状态") + private Integer smogStatus; + @ApiModelProperty("满溢状态") + private Integer fullStatus; + @ApiModelProperty("纬度") + private BigDecimal latitude; + @ApiModelProperty("经度") + private BigDecimal longitude; + @ApiModelProperty("最近清空时间") + private Date cleanDate; + @ApiModelProperty("桶列表") + private List> bucketList; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleBucketService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleBucketService.java index 6020dcf..48a43b3 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleBucketService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleBucketService.java @@ -29,4 +29,8 @@ public interface IRecycleBucketService extends IService { * @return list */ List getByDeviceCodes(Collection deviceCodes); + + boolean updateSmog(String bucketCode, int status); + boolean updateFull(String bucketCode, int status); + } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleCleanOrderService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleCleanOrderService.java index de7cb42..3e331d6 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleCleanOrderService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleCleanOrderService.java @@ -2,6 +2,7 @@ package cc.yunxi.service; import cc.yunxi.domain.po.RecycleCleanOrder; import cc.yunxi.domain.query.RecycleCleanOrderQuery; +import cc.yunxi.domain.vo.device.CleanOrder; import cc.yunxi.domain.vo.recycleorder.RecycleCleanOrderVO; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -26,4 +27,6 @@ public interface IRecycleCleanOrderService extends IService { RecycleCleanOrder getByDeviceOrderNo(String deviceOrderNo); RecycleCleanOrder getByOrderNO(String orderNo); + + RecycleCleanOrder getLastCleanDate(String deviceCode); } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceEventService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceEventService.java index 2a149ab..a4b2c08 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceEventService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceEventService.java @@ -4,4 +4,5 @@ import cc.yunxi.domain.po.RecycleDeviceEvent; import com.baomidou.mybatisplus.extension.service.IService; public interface IRecycleDeviceEventService extends IService { + String getFullTime(String bucketCode); } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceService.java index 29729ee..3d6ef6e 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleDeviceService.java @@ -18,6 +18,7 @@ public interface IRecycleDeviceService extends IService { // int updateDevice(DeviceStatus status); boolean offline(String deviceCode); + boolean online(String deviceCode); // boolean isChanged(DeviceStatus old, DeviceStatus now); @@ -25,8 +26,11 @@ public interface IRecycleDeviceService extends IService { /** * 获取附近五公里内的投递柜 + * * @param location 本地地址 * @return list */ List getNearby(LocationDTO location); + + List getByDeviceCodes(List deviceCodes); } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleStaffDeviceService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleStaffDeviceService.java index d4db8a2..e87b9c6 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleStaffDeviceService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleStaffDeviceService.java @@ -3,7 +3,11 @@ package cc.yunxi.service; import cc.yunxi.domain.po.RecycleStaffDevice; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + public interface IRecycleStaffDeviceService extends IService { RecycleStaffDevice getByDeviceCode(String deviceCode,String phone); + + List getDeviceCodesByPhone(String phone,String deviceName); } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java index d4f7bbc..854c858 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java @@ -98,4 +98,20 @@ public class RecycleBucketServiceImpl extends ServiceImpl wrapper = new LambdaUpdateWrapper<>(); + wrapper.set(RecycleBucket::getSmogStatus, status); + wrapper.eq(RecycleBucket::getBucketCode, bucketCode); + return this.update(wrapper); + } + + @Override + public boolean updateFull(String bucketCode, int status) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.set(RecycleBucket::getFullStatus, status); + wrapper.eq(RecycleBucket::getBucketCode, bucketCode); + return this.update(wrapper); + } } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleCleanOrderServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleCleanOrderServiceImpl.java index 7bdda5f..001c44b 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleCleanOrderServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleCleanOrderServiceImpl.java @@ -2,11 +2,13 @@ package cc.yunxi.service.impl; import cc.yunxi.domain.po.RecycleCleanOrder; import cc.yunxi.domain.query.RecycleCleanOrderQuery; +import cc.yunxi.domain.vo.device.CleanOrder; import cc.yunxi.domain.vo.recycleorder.RecycleCleanOrderVO; import cc.yunxi.mapper.RecycleCleanOrderMapper; import cc.yunxi.service.IRecycleCleanOrderService; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -54,4 +56,12 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl query = new QueryWrapper<>(); + query.lambda().orderByDesc(RecycleCleanOrder::getCreatorTime) + .last("limit 1"); + return this.getOne(query); + } } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceEventServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceEventServiceImpl.java index 2ca888b..a73416d 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceEventServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceEventServiceImpl.java @@ -3,10 +3,24 @@ package cc.yunxi.service.impl; import cc.yunxi.domain.po.RecycleDeviceEvent; import cc.yunxi.mapper.RecycleDeviceEventMapper; import cc.yunxi.service.IRecycleDeviceEventService; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service public class RecycleDeviceEventServiceImpl extends ServiceImpl implements IRecycleDeviceEventService { - + @Override + public String getFullTime(String bucketCode) { + QueryWrapper query = new QueryWrapper<>(); + query.lambda().eq(RecycleDeviceEvent::getBucketCode, bucketCode) + .eq(RecycleDeviceEvent::getEventType, "full") + .orderByDesc(RecycleDeviceEvent::getCreateTime) + .last("limit 1"); + RecycleDeviceEvent event = this.getOne(query); + if (event != null) { + return DateUtil.format(event.getEventTime(), "yyyy-MM-dd HH:mm:ss"); + } + return ""; + } } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceServiceImpl.java index d0a0d49..a845e50 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleDeviceServiceImpl.java @@ -134,4 +134,13 @@ public class RecycleDeviceServiceImpl extends ServiceImpl getByDeviceCodes(List deviceCodes) { + QueryWrapper query = new QueryWrapper<>(); + query.lambda().isNull(RecycleDevice::getDeleteMark) + .eq(RecycleDevice::getUseStatus, 1) + .in(RecycleDevice::getDeviceCode, deviceCodes); + return this.list(query); + } } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleStaffDeviceServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleStaffDeviceServiceImpl.java index a08a597..e343ae9 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleStaffDeviceServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleStaffDeviceServiceImpl.java @@ -7,6 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + @Service public class RecycleStaffDeviceServiceImpl extends ServiceImpl implements IRecycleStaffDeviceService { @@ -19,4 +23,17 @@ public class RecycleStaffDeviceServiceImpl extends ServiceImpl getDeviceCodesByPhone(String phone,String deviceName) { + QueryWrapper query = new QueryWrapper<>(); + query.lambda().isNull(RecycleStaffDevice::getDeleteMark) + .eq(RecycleStaffDevice::getPhone, phone) + .like(RecycleStaffDevice::getDeviceName, deviceName); + List list = list(query); + if (list.size() > 0) { + return list.stream().map(RecycleStaffDevice::getDeviceCode).collect(Collectors.toList()); + } + return Collections.emptyList(); + } }