设备对接 接口

master
guochaojie 4 months ago
parent 0cbe9be165
commit 7121d9d077

@ -2,17 +2,17 @@ package cc.yunxi.controller;
import cc.yunxi.common.domain.CommonResult;
import cc.yunxi.domain.po.RecycleBucket;
import cc.yunxi.domain.po.RecycleDevice;
import cc.yunxi.domain.po.RecycleDeviceConfig;
import cc.yunxi.common.exception.BizIllegalException;
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.service.IFileService;
import cc.yunxi.service.IRecycleBucketService;
import cc.yunxi.service.IRecycleDeviceConfigService;
import cc.yunxi.service.IRecycleDeviceService;
import cc.yunxi.service.*;
import cc.yunxi.utils.DeviceStatusManager;
import cc.yunxi.utils.UserContext;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
@ -24,9 +24,8 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* <p>
@ -45,13 +44,18 @@ public class DeviceController {
@Resource
private DeviceStatusManager deviceStatusManager;
@Resource
private IRecycleDeviceService recycleDeviceService;
private IRecycleDeviceService deviceService;
@Resource
private IRecycleDeviceConfigService configService;
@Resource
private IRecycleBucketService bucketService;
@Resource
private IRecycleDeviceConfigService recycleDeviceConfigService;
private IRecycleDeviceEventService eventService;
@Resource
private IRecycleBucketService recycleBucketService;
private IRecycleCleanOrderService cleanOrderService;
@Resource
private IRecycleDeliveryOrderService deliveryOrderService;
@Resource
private IFileService fileService;
@ -61,37 +65,51 @@ public class DeviceController {
public CommonResult<DeviceRespVO> conf(@RequestBody DeviceVO deviceVO) {
CommonResult<DeviceRespVO> result = new CommonResult<>();
DeviceRespVO respVO = new DeviceRespVO();
RecycleDevice device = recycleDeviceService.getByDeviceCode(deviceVO.getDeviceCode());
RecycleDevice device = deviceService.getByDeviceCode(deviceVO.getDeviceCode());
if (device == null) {
return result.error(400, "设备不存在");
return CommonResult.error(404, "设备不存在");
}
String companyId = device.getBeLongCompanyId();
if (StrUtil.isBlank(companyId)) {
return result.error(400, "设备未绑定公司,还未投用!!");
return CommonResult.error(404, "设备未绑定公司,还未投用!!");
}
RecycleDeviceConfig config = recycleDeviceConfigService.getByCompanyId(companyId);
RecycleDeviceConfig config = configService.getByCompanyId(companyId);
if (config == null) {
return result.error(400, "设备未配置");
return CommonResult.error(404, "设备未配置配置项");
}
List<RecycleBucket> buckets = recycleBucketService.getByDeviceCode(deviceVO.getDeviceCode());
List<RecycleBucket> buckets = bucketService.getByDeviceCode(deviceVO.getDeviceCode());
if (buckets.size() == 0) {
return result.error(400, "当前设备没有桶配置清单!!");
return CommonResult.error(404, "当前设备没有桶配置清单!!");
}
respVO.setDeviceCode(device.getDeviceCode());
respVO.setDeviceName(device.getDeviceName());
respVO.setUserStatus(device.getUseStatus());
respVO.setCleanLock(Integer.valueOf(config.getCleanLock()));
respVO.setUsePhoneLogin(config.getAllowPhoneLogin());
//桶配置
fillBucketConfig(respVO, buckets, config);
//宣传配置
respVO.setPromotionSet(config.getPromotionSet());
respVO.setSlogan(config.getPromotionSlogans());
String pics = config.getPromotionPic1();
fillPoster(pics, respVO);
result.setData(respVO);
result.setMsg("success");
return result;
}
private void fillBucketConfig(DeviceRespVO respVO, List<RecycleBucket> buckets, RecycleDeviceConfig config) {
ArrayList<DeviceRespVO.Bucket> list = new ArrayList<>();
for (RecycleBucket bucket : buckets) {
DeviceRespVO.Bucket _bucket = new DeviceRespVO.Bucket();
BigDecimal price = calculatePrice(bucket, config);//计算价格
_bucket.setBucketCode(bucket.getBucketCode());
_bucket.setDoorNum(bucket.getDoorNum());
_bucket.setOrdNum(bucket.getShowOrd());
_bucket.setCode(bucket.getProductCode());
_bucket.setSubCode(bucket.getProductSubCode());
_bucket.setShowText(bucket.getShowName());
_bucket.setPrice(bucket.getPrice());
_bucket.setPrice(price);
_bucket.setSingleWeightLimit(BigDecimal.ZERO);
_bucket.setTotalWeightLimit(bucket.getWarningWeight());
_bucket.setSmokeAlarm(bucket.getSmogSet());
@ -107,10 +125,11 @@ public class DeviceController {
list.add(_bucket);
}
respVO.setBucketList(list);
respVO.setPromotionSet(config.getPromotionSet());
respVO.setSlogan(config.getPromotionSlogans());
}
private void fillPoster(String pics, DeviceRespVO respVO) {
ArrayList<DeviceRespVO.Poster> posters = new ArrayList<>();
String pics = config.getPromotionPic1();
List<FileUploadRespVO> files = JSONUtil.toList(pics, FileUploadRespVO.class);
for (int i = 0; i < files.size(); i++) {
FileUploadRespVO file = files.get(i);
@ -122,8 +141,75 @@ public class DeviceController {
posters.add(poster);
}
respVO.setPosterList(posters);
result.setData(respVO);
return result;
}
private BigDecimal calculatePrice(RecycleBucket bucket, RecycleDeviceConfig config) {
BigDecimal bucketPrice = bucket.getPrice();
if (null != bucketPrice && bucketPrice.compareTo(BigDecimal.ZERO) > 0) {
return bucketPrice;//优先桶配置
}
BigDecimal price = BigDecimal.ZERO;
BigDecimal comm = config.getDeliveryPrice();//统一价格
if (comm != null && comm.compareTo(BigDecimal.ZERO) > 0) {
price = comm;
}
BigDecimal doorNumPrice = BigDecimal.ZERO;//按编号算价格
Integer doorNum = bucket.getDoorNum();
switch (doorNum) {
case 1:
doorNumPrice = config.getBucket1Price();
break;
case 2:
doorNumPrice = config.getBucket2Price();
break;
case 3:
doorNumPrice = config.getBucket3Price();
break;
case 4:
doorNumPrice = config.getBucket4Price();
break;
case 5:
doorNumPrice = config.getBucket5Price();
break;
case 6:
doorNumPrice = config.getBucket6Price();
break;
case 7:
doorNumPrice = config.getBucket7Price();
break;
case 8:
doorNumPrice = config.getBucket8Price();
break;
case 9:
doorNumPrice = config.getBucket9Price();
break;
case 10:
doorNumPrice = config.getBucket10Price();
break;
case 11:
doorNumPrice = config.getBucket11Price();
break;
case 12:
doorNumPrice = config.getBucket12Price();
break;
default:
break;
}
if (doorNumPrice.compareTo(BigDecimal.ZERO) > 0) {
price = doorNumPrice;
}
return price;
}
private String uploadImages(List<Snap> snaps) {
List<FileUploadRespVO> list = new ArrayList<>();
for (Snap snap : snaps) {
FileUploadRespVO uploadRespVO = fileService.uploadImage(snap.getImage(), snap.getFileName());
list.add(uploadRespVO);
}
return JSONUtil.toJsonStr(list);
}
//手机号登录
@ -131,6 +217,7 @@ public class DeviceController {
@ApiModelProperty("手机号登录")
public CommonResult<LoginRespVO> login(@RequestBody LoginReqVO loginReqVO) {
CommonResult<LoginRespVO> result = new CommonResult<>();
//todo
return result;
}
@ -139,25 +226,134 @@ public class DeviceController {
@PostMapping("/delivery")
@ApiModelProperty("投递订单上传")
public CommonResult<String> delivery(@RequestBody DeliveryOrderVO orderVO) {
// UserDTO user = UserContext.getUser();
RecycleDevice device = deviceService.getByDeviceCode(orderVO.getDeviceCode());
return null;
if (null == device || StrUtil.isEmpty(device.getBeLongCompanyId())) {
throw new BizIllegalException("上传失败:根据设备编号,未查询到设备信息!!");
}
String companyId = device.getBeLongCompanyId();
//查询配置
RecycleDeviceConfig config = configService.getByCompanyId(companyId);
String adjustSet = config.getDeliveryAdjustSet();//审核配置
RecycleDeliveryOrder order = new RecycleDeliveryOrder();
order.setDeviceCode(orderVO.getDeviceCode());
order.setBucketCode(orderVO.getBucketCode());
order.setDeviceOrderNo(orderVO.getDeviceOrderNo());
order.setDoorNum(orderVO.getDoorNum());
order.setBagNo(orderVO.getBagNo());
order.setOriginalWeight(orderVO.getOriginalWeight());
order.setReportWeight(orderVO.getWeight());
order.setPrice(orderVO.getPrice());
order.setProductCode(orderVO.getProductCode());
order.setProductSubCode(orderVO.getProductSubCode());
order.setTotalPrice(orderVO.getTotalPrice());
if ("1".equals(adjustSet)) {//自动审核
order.setAdjustStatus(1);
order.setAdjustWeight(orderVO.getWeight());
order.setAdjustPrice(orderVO.getTotalPrice());
order.setAdjustComm("自动审核");
} else {//手动审核
order.setAdjustStatus(0);
order.setAdjustWeight(BigDecimal.ZERO);
order.setAdjustPrice(BigDecimal.ZERO);
order.setAdjustComm("");
}
order.setBagNo(orderVO.getBagNo());
order.setDeliverId(orderVO.getUserId());
order.setPhone(orderVO.getPhone());
// 上传照片
List<Snap> images = orderVO.getImages();
String photos = uploadImages(images);
order.setPhoto(photos);
order.setCompanyId(companyId);//绑定订单对应商户
order.setLoginType(orderVO.getLoginType());
// order.setStartTime(orderVO.getStartTime());
// order.setFinishTime(orderVO.getFinishTime());
order.setReportTime(new Date());
deliveryOrderService.save(order);
return CommonResult.success(orderVO.getDeviceOrderNo());
}
//清运重量上传
@PostMapping("/clean")
@ApiModelProperty("清运订单上传")
public CommonResult<String> clean(@RequestBody CleanOrderVO orderVO) {
UserDTO user = UserContext.getUser();
RecycleDevice device = deviceService.getByDeviceCode(orderVO.getDeviceCode());
if (null == device) {
throw new BizIllegalException("上传失败:根据设备编号,未查询到设备信息!!");
}
return null;
//查询配置
RecycleDeviceConfig config = configService.getByCompanyId(user.getCompanyId());
String adjustSet = config.getCleanAdjustSet();//审核配置
//查询桶
// RecycleBucket bucket = bucketService.getByBucketCode(orderVO.getBucketCode());
RecycleCleanOrder order = new RecycleCleanOrder();
order.setDeviceCode(orderVO.getDeviceCode());
order.setBucketCode(orderVO.getBucketCode());
order.setDoorNum(orderVO.getDoorNum());
order.setProductCode(orderVO.getProductCode());
order.setProductSubCode(orderVO.getProductSubCode());
order.setPrice(orderVO.getPrice());
//开始时间
//完成时间
List<Snap> images = orderVO.getImages();
if (images == null || images.size() == 0) {
throw new BizIllegalException("上传失败:未上传抓拍图片!!");
} else {
String result = uploadImages(images);
order.setPhoto(result);
}
//审核
if ("1".equals(adjustSet)) {
order.setAdjustStatus(1);
order.setAdjustComm("自动审核");
order.setAdjustWeight(orderVO.getTotalWeight());
order.setAdjustPrice(orderVO.getTotalPrice());
} else {
order.setAdjustStatus(0);
order.setAdjustComm("");
order.setAdjustWeight(BigDecimal.ZERO);
order.setAdjustPrice(BigDecimal.ZERO);
}
// order.setStartTime(orderVO.getStartTime());
// order.setFinishTime(orderVO.getFinishTime());
order.setReportTime(new Date());
order.setCreatorUserId(orderVO.getUserId());
order.setCreatorTime(new Date());
order.setPhone(orderVO.getPhone());
order.setCompanyId(user.getCompanyId());
cleanOrderService.save(order);
return CommonResult.success(orderVO.getDeviceOrderNo());
}
//设备事件上报
@PostMapping("/event")
@ApiModelProperty("设备事件上报")
public CommonResult<String> event(@RequestBody DeviceEventVO eventVO) {
CommonResult<String> result = new CommonResult<>();
RecycleDevice device = deviceService.getByDeviceCode(eventVO.getDeviceCode());
return result;
RecycleDeviceEvent event = new RecycleDeviceEvent();
event.setDeviceCode(eventVO.getDeviceCode());
event.setPhone(eventVO.getPhone());
event.setIsLocal("0");
event.setEventType(eventVO.getEventType());
// event.setEventTime(eventVO.getEventTime());
event.setEventDesc(eventVO.getEventDesc());
event.setDoorNum(eventVO.getDoorNum());
event.setBucketCode(eventVO.getBucketCode());
event.setOrderNo(eventVO.getOrderNum());
event.setOrderType(eventVO.getOrderType());
event.setCompanyId(device.getCompanyId());
event.setCreateUserId(eventVO.getUserId());//公司
event.setCreateTime(new Date());
eventService.save(event);
return CommonResult.success("事件上报成功");
}
//设备心跳上报
@ -177,9 +373,65 @@ public class DeviceController {
@ApiModelProperty("设备命令下发")
@PostMapping("/command")
public CommonResult<String> command(@RequestBody CommandVO commandVO) {
String deviceCode = commandVO.getDeviceCode();
UserDTO user = UserContext.getUser();
DeviceStatus status = deviceStatusManager.getDeviceStatus(deviceCode);
// 判断设备是否在线
Boolean online = status.getOnline();
if (!online) return CommonResult.error(400, "设备不在线");
String ip = status.getIp();
// 下发指令
String res = HttpUtil.post("http://" + ip + "/command", JSONUtil.toJsonStr(commandVO), 1000);
// 记录指令下发事件
CommonResult _result = JSONUtil.toBean(res, CommonResult.class);
RecycleDeviceEvent event = new RecycleDeviceEvent();
event.setDeviceCode(deviceCode);
event.setBucketCode("");//
event.setDoorNum(0);//
event.setEventType(deviceCode);
event.setEventDesc("设备命令下发");
event.setEventTime(new Date());
event.setIsLocal("0");//远程调用
//todo 记录指令下发事件
return null;
if (_result.getCode() != 200) {
event.setEventResult("1");
} else {
event.setEventResult("0");
}
event.setCreateUserId(user.getId());
event.setCreateTime(new Date());
event.setCompanyId(user.getCompanyId());
event.setOrganizeJsonId("");
eventService.save(event);
return _result;
}
@ApiModelProperty("获取设备状态")
@PostMapping("/status")
public CommonResult<String> command(@RequestBody DeviceVO deviceVO)
{
String deviceCode = deviceVO.getDeviceCode();
CommandVO cmd = new CommandVO();
cmd.setCmd(CMDEnum.status);
cmd.setDeviceCode(deviceCode);
cmd.setOptTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
cmd.setRemark("获取设备状态");
DeviceStatus status = deviceStatusManager.getDeviceStatus(deviceCode);
// 判断设备是否在线
Boolean online = status.getOnline();
if (!online) return CommonResult.error(400, "设备不在线");
String post = HttpUtil.post("http://" + status.getIp() + "/command", JSONUtil.toJsonStr(cmd), 1000);
JSONObject json = JSONUtil.parseObj(post);
Integer code = json.getInt("code");
if (code == 200 || code == 201) {
} else {
return CommonResult.error(400, json.getStr("msg"));
}
return CommonResult.success("状态已更新", "success");
}
}

@ -0,0 +1,115 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-05-29
*/
@Data
@TableName("nx_recycle_clean_order")
public class RecycleCleanOrder {
@TableId(value = "ID", type = IdType.ASSIGN_UUID)
private String id;
@TableField(value = "ORDER_NO")
@ApiModelProperty("订单号")
private String orderNo;
@TableField(value = "DEVICE_CODE")
@ApiModelProperty("设备编码")
private String deviceCode;
@TableField(value = "BUCKET_CODE")
@ApiModelProperty("桶编码")
private String bucketCode;
@TableField(value = "DOOR_NUM")
@ApiModelProperty("总重量")
private String doorNum;
@TableField(value = "DEVICE_ORDER_NO")
@ApiModelProperty("设备订单号")
private String deviceOrderNo;
@TableField(value = "PRODUCT_CODE")
@ApiModelProperty("回收大类")
private String productCode;
@TableField(value = "PRODUCT_SUB_CODE")
@ApiModelProperty("回收子类")
private String productSubCode;
@TableField(value = "PRICE")
@ApiModelProperty("单价")
private BigDecimal price;
@TableField(value = "WEIGHT")
@ApiModelProperty("重量")
private BigDecimal weight;
@TableField(value = "TOTAL_PRICE")
@ApiModelProperty("本单金额")
private BigDecimal totalPrice;
@TableField(value = "ADJUST_WEIGHT")
@ApiModelProperty("审核重量")
private BigDecimal adjustWeight;
@TableField(value = "ADJUST_PRICE")
@ApiModelProperty("本单审核金额")
private BigDecimal adjustPrice;
@TableField(value = "CLEAN_USER_ID")
@ApiModelProperty("清运员")
private String cleanUserId;
@TableField(value = "PHONE")
@ApiModelProperty("清运员手机号")
private String phone;
@TableField(value = "ENTRY_STATUS")
@ApiModelProperty("入库状态 0 待入库 1 已入库")
private Integer entryStatus;
@TableField(value = "BAG_NO")
@ApiModelProperty("垃圾袋编号")
private String bagNo;
@TableField(value = "ADJUST_STATUS")
@ApiModelProperty("审核状态 0 待审核 1 通过 3 调整通过 4 拒绝")
private Integer adjustStatus;
@TableField(value = "ADJUST_COMM")
@ApiModelProperty("审核意见")
private String adjustComm;
@TableField(value = "PHOTO")
@ApiModelProperty("抓拍照片")
private String photo;
@TableField(value = "F_TENANT_ID")
@ApiModelProperty("租户")
private String tenantId;
@TableField("F_CREATOR_TIME")
private Date creatorTime;
@TableField("F_CREATOR_USER_ID")
private String creatorUserId;
@TableField("F_LAST_MODIFY_TIME")
private Date lastModifyTime;
@TableField("F_LAST_MODIFY_USER_ID")
private String lastModifyUserId;
@TableField("F_DELETE_TIME")
private Date deleteTime;
@TableField("F_DELETE_USER_ID")
private Integer deleteUserId;
@TableField("F_DELETE_MARK")
private String deleteMark;
@TableField("COMPANY_ID")
private String companyId;
@TableField("DEPARTMENT_ID")
private String departmentId;
@TableField("ORGANIZE_JSON_ID")
private String organizeJsonId;
@TableField("F_VERSION")
private Integer version;
@TableField("F_FLOW_ID")
private String flowId;
@TableField(value = "START_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date startTime;
@TableField(value = "FINISH_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date finishTime;
@TableField(value = "LOGIN_TYPE" , updateStrategy = FieldStrategy.IGNORED)
private String loginType;
@TableField(value = "REPORT_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date reportTime;
}

@ -1,87 +0,0 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-05-29
*/
@Data
@TableName("nx_recycle_clean_order")
public class RecycleCleanOrderEntity {
@TableId(value ="ID" )
private String id;
@TableField(value = "ORDER_NO" , updateStrategy = FieldStrategy.IGNORED)
private String orderNo;
@TableField(value = "DEVICE_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String deviceCode;
@TableField(value = "BUCKET_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String bucketCode;
@TableField(value = "DOOR_NUM" , updateStrategy = FieldStrategy.IGNORED)
private String doorNum;
@TableField(value = "PRODUCT_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String productCode;
@TableField(value = "DEVICE_ORDER_NO" , updateStrategy = FieldStrategy.IGNORED)
private String deviceOrderNo;
@TableField(value = "PRODUCT_SUB_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String productSubCode;
@TableField(value = "PRICE" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal price;
@TableField(value = "WEIGHT" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal weight;
@TableField(value = "TOTAL_PRICE" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal totalPrice;
@TableField(value = "ADJUST_WEIGHT" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal adjustWeight;
@TableField(value = "ADJUST_PRICE" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal adjustPrice;
@TableField(value = "CLEAN_USER_ID" , updateStrategy = FieldStrategy.IGNORED)
private String cleanUserId;
@TableField(value = "PHONE" , updateStrategy = FieldStrategy.IGNORED)
private String phone;
@TableField(value = "ENTRY_STATUS" , updateStrategy = FieldStrategy.IGNORED)
private Integer entryStatus;
@TableField(value = "BAG_NO" , updateStrategy = FieldStrategy.IGNORED)
private String bagNo;
@TableField(value = "ADJUST_STATUS" , updateStrategy = FieldStrategy.IGNORED)
private Integer adjustStatus;
@TableField(value = "ADJUST_COMM" , updateStrategy = FieldStrategy.IGNORED)
private String adjustComm;
@TableField(value = "F_TENANT_ID" , updateStrategy = FieldStrategy.IGNORED)
private String tenantId;
@TableField("F_CREATOR_TIME")
private Date creatorTime;
@TableField("F_CREATOR_USER_ID")
private String creatorUserId;
@TableField("F_LAST_MODIFY_TIME")
private Date lastModifyTime;
@TableField("F_LAST_MODIFY_USER_ID")
private String lastModifyUserId;
@TableField("F_DELETE_TIME")
private Date deleteTime;
@TableField("F_DELETE_USER_ID")
private Integer deleteUserId;
@TableField("F_DELETE_MARK")
private String deleteMark;
@TableField("COMPANY_ID")
private String companyId;
@TableField("DEPARTMENT_ID")
private String departmentId;
@TableField("ORGANIZE_JSON_ID")
private String organizeJsonId;
@TableField("F_VERSION")
private Integer version;
@TableField("F_FLOW_ID")
private String flowId;
}

@ -0,0 +1,131 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-05-31
*/
@Data
@TableName("nx_recycle_delivery_order")
public class RecycleDeliveryOrder {
@TableId(value = "ID")
@ApiModelProperty("主键")
private String id;
@TableField(value = "ORDER_NO")
@ApiModelProperty("订单号")
private String orderNo;
@TableField(value = "DEVICE_ORDER_NO")
@ApiModelProperty("设备订单号")
private String deviceOrderNo;
@TableField(value = "DEVICE_CODE")
@ApiModelProperty("设备编码")
private String deviceCode;
@TableField(value = "BUCKET_CODE")
@ApiModelProperty("桶编号")
private String bucketCode;
@TableField(value = "DOOR_NUM")
@ApiModelProperty("门号")
private Integer doorNum;
@TableField(value = "BAG_NO")
@ApiModelProperty("垃圾袋编号")
private String bagNo;
@TableField(value = "ORIGINAL_WEIGHT")
@ApiModelProperty("桶内原重")
private BigDecimal originalWeight;
@TableField(value = "REPORT_WEIGHT")
@ApiModelProperty("上报重量")
private BigDecimal reportWeight;
@TableField(value = "ADJUST_WEIGHT")
@ApiModelProperty("审核重量")
private BigDecimal adjustWeight;
@TableField(value = "PRODUCT_CODE")
@ApiModelProperty("回收大类")
private String productCode;
@TableField(value = "PRODUCT_SUB_CODE")
@ApiModelProperty("回收子类")
private String productSubCode;
@TableField(value = "PRICE")
@ApiModelProperty("单价")
private BigDecimal price;
@TableField(value = "TOTAL_PRICE")
@ApiModelProperty("总价")
private BigDecimal totalPrice;
@TableField(value = "ADJUST_PRICE")
@ApiModelProperty("审核总价")
private BigDecimal adjustPrice;
@TableField(value = "ADJUST_SET")
@ApiModelProperty("审核设置")
private Integer adjustSet;
@TableField(value = "ADJUST_STATUS")
@ApiModelProperty("审核状态 0未审核 1通过 2调整通过 3拒绝")
private Integer adjustStatus;
@TableField(value = "ADJUST_COMM")
@ApiModelProperty("审核意见")
private String adjustComm;
@TableField(value = "DELIVER_ID")
@ApiModelProperty("投递员id")
private String deliverId;
@TableField(value = "PHONE")
@ApiModelProperty("投递员手机")
private String phone;
@TableField(value = "CLEAN_STATUS")
@ApiModelProperty("清运状态")
private Integer cleanStatus;
@TableField(value = "CLEAN_NO")
@ApiModelProperty("清运单号")
private String cleanNo;
@TableField(value = "CLEANER_PHONE")
@ApiModelProperty("清运员手机号")
private String cleanerPhone;
@TableField(value = "LOGIN_TYPE")
@ApiModelProperty("登录方式")
private String loginType;
@TableField(value = "PHOTO")
@ApiModelProperty("抓拍")
private String photo;
@TableField("F_FLOW_ID")
private String flowId;
@TableField("F_CREATOR_TIME")
private Date creatorTime;
@TableField("F_CREATOR_USER_ID")
private String creatorUserId;
@TableField("F_LAST_MODIFY_TIME")
private Date lastModifyTime;
@TableField("F_LAST_MODIFY_USER_ID")
private String lastModifyUserId;
@TableField("F_DELETE_TIME")
private Date deleteTime;
@TableField("F_DELETE_USER_ID")
private String deleteUserId;
@TableField("F_DELETE_MARK")
private String deleteMark;
@TableField("F_TENANT_ID")
private String tenantId;
@TableField("COMPANY_ID")
private String companyId;
@TableField("DEPARTMENT_ID")
private String departmentId;
@TableField("ORGANIZE_JSON_ID")
private String organizeJsonId;
@TableField("F_VERSION")
private Integer version;
@TableField(value = "START_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date startTime;
@TableField(value = "FINISH_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date finishTime;
@TableField(value = "REPORT_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date reportTime;
}

@ -1,99 +0,0 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-05-31
*/
@Data
@TableName("nx_recycle_delivery_order")
public class RecycleDeliveryOrderEntity {
@TableId(value ="ID" )
private String id;
@TableField(value = "ORDER_NO" , updateStrategy = FieldStrategy.IGNORED)
private String orderNo;
@TableField(value = "DEVICE_ORDER_NO" , updateStrategy = FieldStrategy.IGNORED)
private Integer deviceOrderNo;
@TableField(value = "DEVICE_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String deviceCode;
@TableField(value = "BUCKET_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String bucketCode;
@TableField(value = "DOOR_NUM" , updateStrategy = FieldStrategy.IGNORED)
private Integer doorNum;
@TableField(value = "BAG_NO" , updateStrategy = FieldStrategy.IGNORED)
private Integer bagNo;
@TableField(value = "ORIGINAL_WEIGHT" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal originalWeight;
@TableField(value = "REPORT_WEIGHT" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal reportWeight;
@TableField(value = "ADJUST_WEIGHT" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal adjustWeight;
@TableField(value = "PRODUCT_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String productCode;
@TableField(value = "PRODUCT_SUB_CODE" , updateStrategy = FieldStrategy.IGNORED)
private String productSubCode;
@TableField(value = "PRICE" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal price;
@TableField(value = "TOTAL_PRICE" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal totalPrice;
@TableField(value = "ADJUST_PRICE" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal adjustPrice;
@TableField(value = "ADJUST_SET" , updateStrategy = FieldStrategy.IGNORED)
private Integer adjustSet;
@TableField(value = "ADJUST_STATUS" , updateStrategy = FieldStrategy.IGNORED)
private Integer adjustStatus;
@TableField(value = "ADJUST_COMM" , updateStrategy = FieldStrategy.IGNORED)
private String adjustComm;
@TableField(value = "DELIVER_ID" , updateStrategy = FieldStrategy.IGNORED)
private String deliverId;
@TableField(value = "PHONE" , updateStrategy = FieldStrategy.IGNORED)
private String phone;
@TableField(value = "CLEAN_STATUS" , updateStrategy = FieldStrategy.IGNORED)
private Integer cleanStatus;
@TableField(value = "CLEAN_NO" , updateStrategy = FieldStrategy.IGNORED)
private String cleanNo;
@TableField(value = "CLEANER_PHONE" , updateStrategy = FieldStrategy.IGNORED)
private String cleanerPhone;
@TableField(value = "LOGIN_TYPE" , updateStrategy = FieldStrategy.IGNORED)
private Integer loginType;
@TableField(value = "PHOTO" , updateStrategy = FieldStrategy.IGNORED)
private String photo;
@TableField("F_FLOW_ID")
private String flowId;
@TableField("F_CREATOR_TIME")
private Date creatorTime;
@TableField("F_CREATOR_USER_ID")
private String creatorUserId;
@TableField("F_LAST_MODIFY_TIME")
private Date lastModifyTime;
@TableField("F_LAST_MODIFY_USER_ID")
private String lastModifyUserId;
@TableField("F_DELETE_TIME")
private Date deleteTime;
@TableField("F_DELETE_USER_ID")
private String deleteUserId;
@TableField("F_DELETE_MARK")
private String deleteMark;
@TableField("F_TENANT_ID")
private String tenantId;
@TableField("COMPANY_ID")
private String companyId;
@TableField("DEPARTMENT_ID")
private String departmentId;
@TableField("ORGANIZE_JSON_ID")
private String organizeJsonId;
@TableField("F_VERSION")
private Integer version;
}

@ -0,0 +1,71 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel("回收设备事件表")
@TableName("nx_recycle_device_event")
public class RecycleDeviceEvent {
@TableId(value = "ID",type = IdType.ASSIGN_ID)
private String id;
@TableField(value = "DEVICE_CODE")
@ApiModelProperty("设备编码")
private String deviceCode;
@TableField(value = "BUCKET_CODE")
@ApiModelProperty("桶编码")
private String bucketCode;
@TableField(value = "DOOR_NUM")
@ApiModelProperty("门号")
private Integer doorNum;
@TableField(value = "EVENT_TYPE")
@ApiModelProperty("事件类型")
private String eventType;
@TableField(value = "EVENT_TIME")
@ApiModelProperty("事件时间")
private Date eventTime;
@TableField(value = "EVENT_DESC")
@ApiModelProperty("事件描述")
private String eventDesc;
@TableField(value = "EVENT_RESULT")
@ApiModelProperty("执行结果")
private String eventResult;
@TableField(value = "IS_LOCAL")
@ApiModelProperty("本地调用 0-否 1-是")
private String isLocal;
@TableField("orderNo")
@ApiModelProperty("订单号")
private String orderNo;
@TableField("orderType")
@ApiModelProperty("订单类型")
private String orderType;
@TableField("phone")
@ApiModelProperty("用户手机号")
private String phone;
@TableField("IMAGES")
@ApiModelProperty("抓拍")
private String images;
@TableField("F_CREATE_USER_ID")
private String createUserId;
@TableField("F_CREATE_TIME")
private Date createTime;
@TableField("F_LAST_MODIFY_USER_ID")
private String lastModifyUserId;
@TableField("F_LAST_MODIFY_TIME")
private Date lastModifyTime;
@TableField("F_TENANT_ID")
private String tenantId;
@TableField("COMPANY_ID")
private String companyId;
@TableField("DEPARTMENT_ID")
private String departmentId;
@TableField("ORGANIZE_JSON_ID")
private String organizeJsonId;
@TableField("F_FLOW_ID")
private String flowId;
}

@ -0,0 +1,29 @@
package cc.yunxi.domain.vo.device;
import cc.yunxi.common.enums.SwaggerDisplayEnum;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
@SwaggerDisplayEnum
public enum CMDEnum {
reboot("reboot", "重启设备"),
restart("restart", "重启应用"),
update("update", "更新应用"),
deliveryOpen("deliveryOpen", "投递开门"),
deliveryClose("deliveryClose", "投递关门"),
delay("delay", "投递延时"),
cleanOpen("cleanOpen", "清运开门"),
snapshot("snapshot", "抓拍"),
adjust("adjust", "远程校准"),
clear("clear", "远程清零"),
status("status", "获取状态");
@EnumValue
private final String value;
private final String desc;
}

@ -1,26 +1,50 @@
package cc.yunxi.domain.vo.device;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel("清运单")
public class CleanOrderVO {
private String id;
private String orderNo;
private String orderType;
private String orderStatus;
private String orderTime;
private String orderAddress;
private String orderDesc;
private String orderUser;
private String orderUserPhone;
private String orderUserAddress;
private String orderUserAddressDetail;
private String orderUserAddressLongitude;
private String orderUserAddressLatitude;
private String orderUserAddressArea;
private String orderUserAddressAreaCode;
private String orderUserAddressCity;
@ApiModelProperty("设备订单号")
private String deviceOrderNo;
@ApiModelProperty("设备编号")
private String deviceCode;
@ApiModelProperty("桶编号")
private String bucketCode;
@ApiModelProperty("门号")
private String doorNum;
@ApiModelProperty("回收大类")
private String productCode;
@ApiModelProperty("回收子类")
private String productSubCode;
@ApiModelProperty("单价")
private BigDecimal price;
@ApiModelProperty("本单重量")
private BigDecimal totalWeight;
@ApiModelProperty("总价")
private BigDecimal totalPrice;
@ApiModelProperty("开始时间")
private String startTime;
@ApiModelProperty("完成时间")
private String finishTime;
@ApiModelProperty("投递员id")
private String userId;
@ApiModelProperty("垃圾袋编号")
private String bagNo;
@ApiModelProperty("手机号")
private String phone;
@ApiModelProperty("登录方式")
private String loginType;
@ApiModelProperty("上报类型")
private String reportType;
@ApiModelProperty("上报时间")
private String reportTime;
@ApiModelProperty("抓拍")
private List<Snap> images;
}

@ -11,15 +11,17 @@ import java.time.LocalDateTime;
@Data
@ApiModel("设备控制命令")
public class CommandVO {
@ApiModelProperty(value = "设备编码", required = true, example = "DE00011")
@NotBlank(message = "设备编码不能为空")
private String deviceCode;
@ApiModelProperty(value = "命令", required = true, example = "reboot")
@NotBlank(message = "命令不能为空")
private String cmd;
@ApiModelProperty(value = "命令参数", required = true, example = "设备编码")
@NotBlank(message = "命令参数不能为空")
@NotNull(message = "命令不能为空")
private CMDEnum cmd;
@ApiModelProperty(value = "命令参数")
private String data;
@ApiModelProperty(value = "操作时间", required = true, example = "admin")
@NotNull(message = "操作时间不能为空")
private LocalDateTime optTime;
private String optTime;
@ApiModelProperty(value = "备注", example = "重启设备")
private String remark;

@ -11,22 +11,24 @@ import java.util.List;
@Data
@ApiModel("投递单")
public class DeliveryOrderVO {
@ApiModelProperty("订单号")
private String orderNum;
@ApiModelProperty("设备订单号")
private String deviceOrderNo;
@ApiModelProperty("设备编码")
private String deviceCode;
@ApiModelProperty("桶编码")
private String bucketCode;
@ApiModelProperty("门号")
private String doorNum;
private Integer doorNum;
@ApiModelProperty("回收大类")
private String code;
private String productCode;
@ApiModelProperty("回收子类")
private String subCode;
private String productSubCode;
@ApiModelProperty("回收单价")
private BigDecimal price;
@ApiModelProperty("重量")
private BigDecimal weight;
@ApiModelProperty("桶内原重")
private BigDecimal originalWeight;
@ApiModelProperty("总价")
private BigDecimal totalPrice;
@ApiModelProperty("开始时间")
@ -37,10 +39,12 @@ public class DeliveryOrderVO {
private String userId;
@ApiModelProperty("用户手机")
private String phone;
@ApiModelProperty("上报类型")
private String reportType;
@ApiModelProperty("登录方式")
private String loginType;
@ApiModelProperty("上报时间")
private LocalDateTime reportTime;
@ApiModelProperty("抓拍图片")
private List<Snap> images;
@ApiModelProperty("垃圾袋编号")
private String bagNo;
}

@ -4,30 +4,36 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel("设备事件")
public class DeviceEventVO {
@ApiModelProperty("设备编码")
@ApiModelProperty(value = "设备编码", required = true, example = "DE123")
@NotBlank(message = "设备编码不能为空")
private String deviceCode;
@ApiModelProperty("桶编码")
private String bucketCode;
@ApiModelProperty("门号")
private String doorNum;
private Integer doorNum;
@NotBlank(message = "事件类型不能为空")
@ApiModelProperty("事件类型")
private String eventType;
@NotBlank(message = "事件时间不能为空")
@ApiModelProperty("事件时间")
private String eventTime;
@ApiModelProperty("事件描述")
private String eventDesc;
@ApiModelProperty("订单号")
private String orderNo;
private String orderNum;
@ApiModelProperty("订单类型")
private String orderType;
@ApiModelProperty("用户ID")
private String userId;
@ApiModelProperty("用户手机号")
private String phone;
@ApiModelProperty("是否本地")
@NotBlank(message = "是否本地不能为空")
@ApiModelProperty(value = "是否本地", required = true, allowableValues = "0,1", example = "0")
private String isLocal;
}

@ -13,6 +13,9 @@ public class Snap {
private String inside;
@ApiModelProperty("抓拍时间")
private String takeTime;
@ApiModelProperty(value = "文件名",required = true,example = "123.jpg")
private String fileName;
@ApiModelProperty("图片")
private byte[] image;
private String image;
}

@ -0,0 +1,11 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.RecycleCleanOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface RecycleCleanOrderMapper extends BaseMapper<RecycleCleanOrder> {
// TODO 此处编写RecycleDevice的mapper.xml文件中需要的方法
}

@ -0,0 +1,11 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.RecycleDeliveryOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface RecycleDeliveryOrderMapper extends BaseMapper<RecycleDeliveryOrder> {
// TODO 此处编写RecycleDevice的mapper.xml文件中需要的方法
}

@ -0,0 +1,11 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.RecycleDeviceEvent;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface RecycleDeviceEventMapper extends BaseMapper<RecycleDeviceEvent> {
// TODO 此处编写RecycleDevice的mapper.xml文件中需要的方法
}

@ -0,0 +1,8 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleCleanOrder;
import cc.yunxi.domain.po.RecycleDeviceEvent;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IRecycleCleanOrderService extends IService<RecycleCleanOrder> {
}

@ -0,0 +1,8 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleDeliveryOrder;
import cc.yunxi.domain.po.RecycleDeviceEvent;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IRecycleDeliveryOrderService extends IService<RecycleDeliveryOrder> {
}

@ -0,0 +1,7 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleDeviceEvent;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IRecycleDeviceEventService extends IService<RecycleDeviceEvent> {
}

@ -97,7 +97,11 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements IF
@Override
public byte[] download(String url) {
// 默认为本地存储拉取 todo
String filePath = basePath + java.io.File.separator + url;
String filePath = System.getProperty("user.dir")+ url;
String osName = System.getProperty("os.name").toLowerCase();
if(osName.contains("win")){
filePath = filePath.replace("/","\\");
}
if (!FileUtil.exist(filePath)) {
throw new BizIllegalException("下载资源不存在");
}

@ -0,0 +1,11 @@
package cc.yunxi.service.impl;
import cc.yunxi.domain.po.RecycleCleanOrder;
import cc.yunxi.mapper.RecycleCleanOrderMapper;
import cc.yunxi.service.IRecycleCleanOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderMapper, RecycleCleanOrder> implements IRecycleCleanOrderService {
}

@ -0,0 +1,11 @@
package cc.yunxi.service.impl;
import cc.yunxi.domain.po.RecycleDeliveryOrder;
import cc.yunxi.mapper.RecycleDeliveryOrderMapper;
import cc.yunxi.service.IRecycleDeliveryOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class RecycleDeliveryOrderServiceImpl extends ServiceImpl<RecycleDeliveryOrderMapper, RecycleDeliveryOrder> implements IRecycleDeliveryOrderService {
}

@ -0,0 +1,12 @@
package cc.yunxi.service.impl;
import cc.yunxi.domain.po.RecycleDeviceEvent;
import cc.yunxi.mapper.RecycleDeviceEventMapper;
import cc.yunxi.service.IRecycleDeviceEventService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class RecycleDeviceEventServiceImpl extends ServiceImpl<RecycleDeviceEventMapper, RecycleDeviceEvent> implements IRecycleDeviceEventService {
}

@ -0,0 +1,6 @@
<?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="cc.yunxi.mapper.RecycleCleanOrderMapper">
</mapper>

@ -0,0 +1,6 @@
<?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="cc.yunxi.mapper.RecycleDeliveryOrderMapper">
</mapper>

@ -0,0 +1,6 @@
<?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="cc.yunxi.mapper.RecycleDeviceEventMapper">
</mapper>
Loading…
Cancel
Save