Browse Source

设备心跳

LuoDLeo 6 months ago
parent
commit
963eea474a

+ 64 - 19
src/main/java/org/springblade/modules/api/controller/ApiVendingController.java

@@ -10,12 +10,19 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.common.aspect.VendingFlag;
 import org.springblade.common.aspect.VendingFlag;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.enums.FacilityStatusEnum;
 import org.springblade.common.enums.OrderStateEnum;
 import org.springblade.common.enums.OrderStateEnum;
 import org.springblade.core.log.annotation.ApiLog;
 import org.springblade.core.log.annotation.ApiLog;
+import org.springblade.modules.api.request.VendingHeartReq;
 import org.springblade.modules.api.request.VendingOrderReq;
 import org.springblade.modules.api.request.VendingOrderReq;
 import org.springblade.modules.api.request.VendingShipReq;
 import org.springblade.modules.api.request.VendingShipReq;
 import org.springblade.modules.api.response.VendingOrderRes;
 import org.springblade.modules.api.response.VendingOrderRes;
 import org.springblade.modules.api.service.VendingOrderService;
 import org.springblade.modules.api.service.VendingOrderService;
+import org.springblade.modules.business.entity.Facility;
+import org.springblade.modules.business.entity.FacilityFault;
+import org.springblade.modules.business.enums.FacilityFaultStatusEnum;
+import org.springblade.modules.business.service.IFacilityFaultService;
+import org.springblade.modules.business.service.IFacilityService;
 import org.springblade.modules.finance.entity.Order;
 import org.springblade.modules.finance.entity.Order;
 import org.springblade.modules.finance.entity.OrderGoods;
 import org.springblade.modules.finance.entity.OrderGoods;
 import org.springblade.modules.finance.service.IOrderGoodsService;
 import org.springblade.modules.finance.service.IOrderGoodsService;
@@ -32,10 +39,7 @@ import javax.validation.Valid;
 import java.io.IOException;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -51,6 +55,8 @@ public class ApiVendingController {
     private final VendingOrderService vendingOrderService;
     private final VendingOrderService vendingOrderService;
     private final IOrderGoodsService orderGoodsService;
     private final IOrderGoodsService orderGoodsService;
     private final IOrderService orderService;
     private final IOrderService orderService;
+    private final IFacilityService facilityService;
+    private final IFacilityFaultService facilityFaultService;
 
 
 
 
     @ApiLog("查询设备订单信息")
     @ApiLog("查询设备订单信息")
@@ -115,27 +121,31 @@ public class ApiVendingController {
                 .eq(OrderGoods::getCargoWayNo, req.getChannelNum())
                 .eq(OrderGoods::getCargoWayNo, req.getChannelNum())
                 .one();
                 .one();
 
 
-        if (Objects.isNull(orderGoods)){
+        if (Objects.isNull(orderGoods)) {
             log.info("设备出货成功回调,未找到货品信息");
             log.info("设备出货成功回调,未找到货品信息");
             return;
             return;
         }
         }
 
 
         //出货量校验
         //出货量校验
-        if (orderGoods.getGoodsNum() < orderGoods.getShipmentNum() + 1){
+        if (orderGoods.getGoodsNum() < orderGoods.getShipmentNum() + 1) {
             log.info("设备出货成功回调,出货量过多");
             log.info("设备出货成功回调,出货量过多");
         }
         }
 
 
-        orderGoodsService.lambdaUpdate()
-                .set(OrderGoods::getShipmentNum, orderGoods.getShipmentNum() + 1)
-                .set(OrderGoods::getShippingTime, LocalDateTime.now())
-                .eq(OrderGoods::getDeviceId, req.getMachine_id())
-                .eq(OrderGoods::getOrderId, req.getSaleSn())
-                .eq(OrderGoods::getCargoWayNo,req.getChannelNum());
+        if ("OK".equals(req.getStatus())) {
+            orderGoodsService.lambdaUpdate()
+                    .set(OrderGoods::getShipmentNum, orderGoods.getShipmentNum() + 1)
+                    .set(OrderGoods::getShippingTime, LocalDateTime.now())
+                    .eq(OrderGoods::getDeviceId, req.getMachine_id())
+                    .eq(OrderGoods::getOrderId, req.getSaleSn())
+                    .eq(OrderGoods::getCargoWayNo, req.getChannelNum());
+
+            if (orderGoods.getGoodsNum() == orderGoods.getShipmentNum() + 1) {
+                orderService.lambdaUpdate()
+                        .set(Order::getOrderState, OrderStateEnum.COMPLETED.getValue())
+                        .eq(Order::getId, req.getSaleSn());
+            }
+        } else {//出货故障处理
 
 
-        if (orderGoods.getGoodsNum() == orderGoods.getShipmentNum() + 1){
-            orderService.lambdaUpdate()
-                    .set(Order::getOrderState, OrderStateEnum.COMPLETED.getValue())
-                    .eq(Order::getId, req.getSaleSn());
         }
         }
 
 
     }
     }
@@ -143,9 +153,44 @@ public class ApiVendingController {
     @ApiLog("设备心跳")
     @ApiLog("设备心跳")
     @ApiOperation(value = "设备心跳", notes = "设备心跳")
     @ApiOperation(value = "设备心跳", notes = "设备心跳")
     @PostMapping("heartbeat")
     @PostMapping("heartbeat")
-    public void heartbeat(@Valid @RequestBody VendingShipReq req) {
-
-
+    public void heartbeat(@Valid @RequestBody VendingHeartReq req) {
+        Facility facility = facilityService.getById(req.getMachine_id());
+        if (Objects.isNull(facility)) {
+            log.info("设备心跳,未找到设备信息");
+            return;
+        }
+        Date now = new Date();
+        facility.setHeartbeatTime(now);
+        if ("0".equals(req.getErrorNum())) {
+            facility.setFacilityStatus(FacilityStatusEnum.ON_LINE.getValue());
+            facilityService.updateById(facility);
+
+            FacilityFault facilityFault = new FacilityFault();
+            facilityFault.setFacilityId(req.getMachine_id());
+            facilityFault.setFaultDesc(FacilityFaultStatusEnum.getDesc("0"));
+            facilityFault.setFaultStatus("0");
+            facilityFault.setCreateTime(now);
+            facilityFaultService.save(facilityFault);
+            return;
+        } else {
+            //设备故障
+            facility.setFacilityStatus(FacilityStatusEnum.FAULT.getValue());
+            facilityService.updateById(facility);
+
+            //录入故障信息
+            String[] split = req.getErrorArray().replace("{", "").replace("}", "").split(",");
+
+            List<FacilityFault> facilityFaults = new ArrayList<>();
+            for (String status : split) {
+                FacilityFault facilityFault = new FacilityFault();
+                facilityFault.setFacilityId(req.getMachine_id());
+                facilityFault.setFaultDesc(FacilityFaultStatusEnum.getDesc(status));
+                facilityFault.setFaultStatus(status);
+                facilityFault.setCreateTime(now);
+                facilityFaults.add(facilityFault);
+            }
+            facilityFaultService.saveBatch(facilityFaults);
+        }
     }
     }
 
 
 }
 }

+ 30 - 0
src/main/java/org/springblade/modules/api/request/VendingHeartReq.java

@@ -0,0 +1,30 @@
+package org.springblade.modules.api.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 设备心跳数据
+ */
+@Data
+public class VendingHeartReq {
+
+    //心跳:正常{"machine_id":"1814145843008155650","Status":"OK","ErrorNum":"0","ErrorArray":{},"Location":"N,ddmm.mmmm,E,dddmm.mmmm"}
+    //心跳:故障{"machine_id":"1814145843008155650","Status":"FAIL","ErrorNum":"2","ErrorArray":{"1001,2001"},"Location":"N,ddmm.mmmm,E,dddmm.mmmm"}
+
+    @ApiModelProperty(value = "设备id")
+    private String machine_id;
+
+    @ApiModelProperty(value = "设备状态")
+    private String Status;
+
+    @ApiModelProperty(value = "错误码数量")
+    private String ErrorNum;
+
+    @ApiModelProperty(value = "错误代码")
+    private String ErrorArray;
+
+    @ApiModelProperty(value = "设备地址")
+    private String Location;
+
+}

+ 51 - 0
src/main/java/org/springblade/modules/business/entity/FacilityFault.java

@@ -0,0 +1,51 @@
+package org.springblade.modules.business.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 设备故障信息
+ */
+@Data
+@TableName("t_facility_fault")
+@ApiModel(value = "FacilityFault对象", description = "设备故障表")
+public class FacilityFault {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    protected Long id;
+
+    /**
+     * 设备id
+     */
+    @ApiModelProperty(value = "设备id")
+    private String facilityId;
+
+    /**
+     * 故障描述
+     */
+    @ApiModelProperty(value = "故障描述")
+    private String faultDesc;
+
+    /**
+     * 故障状态
+     */
+    @ApiModelProperty(value = "故障状态")
+    private String faultStatus;
+
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    protected Date createTime;
+
+}

+ 37 - 0
src/main/java/org/springblade/modules/business/enums/FacilityFaultStatusEnum.java

@@ -0,0 +1,37 @@
+package org.springblade.modules.business.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 设备状态编码
+ */
+
+@Getter
+@AllArgsConstructor
+public enum FacilityFaultStatusEnum {
+
+    FAULT("fault", "故障"),
+    OFF_LINE("offLine", "离线"),
+    ON_LINE("onLine", "在线");
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 描述
+     */
+    private String desc;
+
+    public static String getDesc(String code) {
+        for (FacilityFaultStatusEnum facilityFaultStatusEnum : FacilityFaultStatusEnum.values()) {
+            if (facilityFaultStatusEnum.getCode().equals(code)) {
+                return facilityFaultStatusEnum.getDesc();
+            }
+        }
+        return "";
+    }
+
+}

+ 8 - 0
src/main/java/org/springblade/modules/business/mapper/FacilityFaultMapper.java

@@ -0,0 +1,8 @@
+package org.springblade.modules.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.modules.business.entity.FacilityFault;
+
+public interface FacilityFaultMapper extends BaseMapper<FacilityFault> {
+
+}

+ 5 - 0
src/main/java/org/springblade/modules/business/mapper/FacilityFaultMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.springblade.modules.business.mapper.FacilityFaultMapper">
+
+</mapper>

+ 8 - 0
src/main/java/org/springblade/modules/business/service/IFacilityFaultService.java

@@ -0,0 +1,8 @@
+package org.springblade.modules.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.business.entity.FacilityFault;
+
+public interface IFacilityFaultService  extends IService<FacilityFault> {
+
+}

+ 12 - 0
src/main/java/org/springblade/modules/business/service/impl/FacilityFaultServiceImpl.java

@@ -0,0 +1,12 @@
+package org.springblade.modules.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.modules.business.entity.FacilityFault;
+import org.springblade.modules.business.mapper.FacilityFaultMapper;
+import org.springblade.modules.business.service.IFacilityFaultService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FacilityFaultServiceImpl extends ServiceImpl<FacilityFaultMapper, FacilityFault> implements IFacilityFaultService {
+
+}