设备柜清单

master
guochaojie 2 months ago
parent 21a8c711cf
commit 45cbba7ea9

@ -10,11 +10,16 @@ import cc.yunxi.domain.dto.UserDTO;
import cc.yunxi.domain.po.*; import cc.yunxi.domain.po.*;
import cc.yunxi.domain.vo.device.*; import cc.yunxi.domain.vo.device.*;
import cc.yunxi.domain.vo.file.FileUploadRespVO; 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.enums.BusinessCodeEnum;
import cc.yunxi.service.*; import cc.yunxi.service.*;
import cc.yunxi.utils.CustomerMqttClient; import cc.yunxi.utils.CustomerMqttClient;
import cc.yunxi.utils.DistanceUtil;
import cc.yunxi.utils.RedisTool; import cc.yunxi.utils.RedisTool;
import cc.yunxi.utils.UserContext; import cc.yunxi.utils.UserContext;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
@ -33,6 +38,7 @@ import java.text.SimpleDateFormat;
import java.time.Duration; import java.time.Duration;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@ -568,6 +574,14 @@ public class DeviceController {
event.setPhone(eventVO.getPhone()); event.setPhone(eventVO.getPhone());
event.setIsLocal("1");//本地调用 event.setIsLocal("1");//本地调用
event.setEventType(eventVO.getEventType()); 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(); String eventTime = eventVO.getEventTime();
if (StrUtil.isNotEmpty(eventTime)) { if (StrUtil.isNotEmpty(eventTime)) {
event.setEventTime(DateUtil.parse(eventTime, "yyyy-MM-dd HH:mm:ss")); event.setEventTime(DateUtil.parse(eventTime, "yyyy-MM-dd HH:mm:ss"));
@ -1081,4 +1095,96 @@ public class DeviceController {
return respVO; 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<String> codes = staffDeviceService.getDeviceCodesByPhone(phone, reqVO.getDeviceName());
if (CollectionUtil.isEmpty(codes)) return CommonResult.success(Collections.emptyList());
List<RecycleDevice> devices = deviceService.getByDeviceCodes(codes);
DeviceCountVO countVO = new DeviceCountVO();
int onlineCount = 0;
int smogCount = 0;
int fullCount = 0;
List<RecyclerDeviceVO> vos = new ArrayList<>();
for (RecycleDevice device : devices) {
List<RecycleBucket> list = bucketService.getByDeviceCode(device.getDeviceCode());
if (CollectionUtil.isEmpty(list)) continue;
//排序
List<Map<String, Object>> collect = list.stream().sorted(
(rb1, rb2) -> rb2.getShowOrd() - rb1.getShowOrd()
).map(bucket -> {
Map<String, Object> 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);
}
} }

@ -54,5 +54,5 @@ public class RecycleStaffDevice {
@TableField(value = "address" ) @TableField(value = "address" )
private String address; private String address;
@TableField("DEVICE_NAME") @TableField("DEVICE_NAME")
private String device_name; private String deviceName;
} }

@ -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<RecyclerDeviceVO> list;
}

@ -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;
}

@ -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<Map<String, Object>> bucketList;
}

@ -29,4 +29,8 @@ public interface IRecycleBucketService extends IService<RecycleBucket> {
* @return list * @return list
*/ */
List<RecycleBucket> getByDeviceCodes(Collection<String> deviceCodes); List<RecycleBucket> getByDeviceCodes(Collection<String> deviceCodes);
boolean updateSmog(String bucketCode, int status);
boolean updateFull(String bucketCode, int status);
} }

@ -2,6 +2,7 @@ package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleCleanOrder; import cc.yunxi.domain.po.RecycleCleanOrder;
import cc.yunxi.domain.query.RecycleCleanOrderQuery; import cc.yunxi.domain.query.RecycleCleanOrderQuery;
import cc.yunxi.domain.vo.device.CleanOrder;
import cc.yunxi.domain.vo.recycleorder.RecycleCleanOrderVO; import cc.yunxi.domain.vo.recycleorder.RecycleCleanOrderVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -26,4 +27,6 @@ public interface IRecycleCleanOrderService extends IService<RecycleCleanOrder> {
RecycleCleanOrder getByDeviceOrderNo(String deviceOrderNo); RecycleCleanOrder getByDeviceOrderNo(String deviceOrderNo);
RecycleCleanOrder getByOrderNO(String orderNo); RecycleCleanOrder getByOrderNO(String orderNo);
RecycleCleanOrder getLastCleanDate(String deviceCode);
} }

@ -4,4 +4,5 @@ import cc.yunxi.domain.po.RecycleDeviceEvent;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
public interface IRecycleDeviceEventService extends IService<RecycleDeviceEvent> { public interface IRecycleDeviceEventService extends IService<RecycleDeviceEvent> {
String getFullTime(String bucketCode);
} }

@ -18,6 +18,7 @@ public interface IRecycleDeviceService extends IService<RecycleDevice> {
// int updateDevice(DeviceStatus status); // int updateDevice(DeviceStatus status);
boolean offline(String deviceCode); boolean offline(String deviceCode);
boolean online(String deviceCode); boolean online(String deviceCode);
// boolean isChanged(DeviceStatus old, DeviceStatus now); // boolean isChanged(DeviceStatus old, DeviceStatus now);
@ -25,8 +26,11 @@ public interface IRecycleDeviceService extends IService<RecycleDevice> {
/** /**
* *
*
* @param location * @param location
* @return list * @return list
*/ */
List<DeviceLocationVO> getNearby(LocationDTO location); List<DeviceLocationVO> getNearby(LocationDTO location);
List<RecycleDevice> getByDeviceCodes(List<String> deviceCodes);
} }

@ -3,7 +3,11 @@ package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleStaffDevice; import cc.yunxi.domain.po.RecycleStaffDevice;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface IRecycleStaffDeviceService extends IService<RecycleStaffDevice> { public interface IRecycleStaffDeviceService extends IService<RecycleStaffDevice> {
RecycleStaffDevice getByDeviceCode(String deviceCode,String phone); RecycleStaffDevice getByDeviceCode(String deviceCode,String phone);
List<String> getDeviceCodesByPhone(String phone,String deviceName);
} }

@ -98,4 +98,20 @@ public class RecycleBucketServiceImpl extends ServiceImpl<RecycleBucketMapper, R
.eq(RecycleBucket::getDeviceCode, bagNo.getDeviceCode()); .eq(RecycleBucket::getDeviceCode, bagNo.getDeviceCode());
return this.update(wrapper); return this.update(wrapper);
} }
@Override
public boolean updateSmog(String bucketCode, int status) {
LambdaUpdateWrapper<RecycleBucket> 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<RecycleBucket> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(RecycleBucket::getFullStatus, status);
wrapper.eq(RecycleBucket::getBucketCode, bucketCode);
return this.update(wrapper);
}
} }

@ -2,11 +2,13 @@ package cc.yunxi.service.impl;
import cc.yunxi.domain.po.RecycleCleanOrder; import cc.yunxi.domain.po.RecycleCleanOrder;
import cc.yunxi.domain.query.RecycleCleanOrderQuery; import cc.yunxi.domain.query.RecycleCleanOrderQuery;
import cc.yunxi.domain.vo.device.CleanOrder;
import cc.yunxi.domain.vo.recycleorder.RecycleCleanOrderVO; import cc.yunxi.domain.vo.recycleorder.RecycleCleanOrderVO;
import cc.yunxi.mapper.RecycleCleanOrderMapper; import cc.yunxi.mapper.RecycleCleanOrderMapper;
import cc.yunxi.service.IRecycleCleanOrderService; import cc.yunxi.service.IRecycleCleanOrderService;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -54,4 +56,12 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderM
.last("limit 1"); .last("limit 1");
return this.getOne(wrapper); return this.getOne(wrapper);
} }
@Override
public RecycleCleanOrder getLastCleanDate(String deviceCode) {
QueryWrapper<RecycleCleanOrder> query = new QueryWrapper<>();
query.lambda().orderByDesc(RecycleCleanOrder::getCreatorTime)
.last("limit 1");
return this.getOne(query);
}
} }

@ -3,10 +3,24 @@ package cc.yunxi.service.impl;
import cc.yunxi.domain.po.RecycleDeviceEvent; import cc.yunxi.domain.po.RecycleDeviceEvent;
import cc.yunxi.mapper.RecycleDeviceEventMapper; import cc.yunxi.mapper.RecycleDeviceEventMapper;
import cc.yunxi.service.IRecycleDeviceEventService; 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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class RecycleDeviceEventServiceImpl extends ServiceImpl<RecycleDeviceEventMapper, RecycleDeviceEvent> implements IRecycleDeviceEventService { public class RecycleDeviceEventServiceImpl extends ServiceImpl<RecycleDeviceEventMapper, RecycleDeviceEvent> implements IRecycleDeviceEventService {
@Override
public String getFullTime(String bucketCode) {
QueryWrapper<RecycleDeviceEvent> 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 "";
}
} }

@ -134,4 +134,13 @@ public class RecycleDeviceServiceImpl extends ServiceImpl<RecycleDeviceMapper, R
} }
return nearbyVOList; return nearbyVOList;
} }
@Override
public List<RecycleDevice> getByDeviceCodes(List<String> deviceCodes) {
QueryWrapper<RecycleDevice> query = new QueryWrapper<>();
query.lambda().isNull(RecycleDevice::getDeleteMark)
.eq(RecycleDevice::getUseStatus, 1)
.in(RecycleDevice::getDeviceCode, deviceCodes);
return this.list(query);
}
} }

@ -7,6 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Service @Service
public class RecycleStaffDeviceServiceImpl extends ServiceImpl<RecycleStaffDeviceMapper, RecycleStaffDevice> implements IRecycleStaffDeviceService { public class RecycleStaffDeviceServiceImpl extends ServiceImpl<RecycleStaffDeviceMapper, RecycleStaffDevice> implements IRecycleStaffDeviceService {
@ -19,4 +23,17 @@ public class RecycleStaffDeviceServiceImpl extends ServiceImpl<RecycleStaffDevic
.last("limit 1"); .last("limit 1");
return getOne(query); return getOne(query);
} }
@Override
public List<String> getDeviceCodesByPhone(String phone,String deviceName) {
QueryWrapper<RecycleStaffDevice> query = new QueryWrapper<>();
query.lambda().isNull(RecycleStaffDevice::getDeleteMark)
.eq(RecycleStaffDevice::getPhone, phone)
.like(RecycleStaffDevice::getDeviceName, deviceName);
List<RecycleStaffDevice> list = list(query);
if (list.size() > 0) {
return list.stream().map(RecycleStaffDevice::getDeviceCode).collect(Collectors.toList());
}
return Collections.emptyList();
}
} }

Loading…
Cancel
Save