Przeglądaj źródła

设备开关机

skyline 1 rok temu
rodzic
commit
39e6df536d

+ 3 - 0
car-wash-entity/src/main/java/com/kym/entity/miniapp/WashOrder.java

@@ -1,6 +1,7 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.kym.entity.BaseEntity;
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -150,11 +151,13 @@ public class WashOrder extends BaseEntity {
     /**
      * 开始时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime startTime;
 
     /**
      * 结束时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime endTime;
 
     /**

+ 21 - 1
car-wash-miniapp/src/main/java/com/kym/miniapp/controller/WashDeviceController.java

@@ -3,7 +3,10 @@ package com.kym.miniapp.controller;
 import com.kym.common.R;
 import com.kym.common.controller.IController;
 import com.kym.service.miniapp.WashDeviceService;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -35,10 +38,27 @@ public class WashDeviceController extends IController {
         return resp(() -> washDeviceService.getDevice(shortId));
     }
 
+    /**
+     * 启动设备创建订单
+     *
+     * @param shortId
+     * @return
+     */
     @GetMapping(value = "/startDevice/{shortId}")
     R<?> startDevice(@PathVariable("shortId") String shortId) {
         return resp(() -> washDeviceService.startDevice(shortId));
     }
 
+    /**
+     * 停止设备关闭订单
+     *
+     * @param shortId
+     * @return
+     */
+    @GetMapping(value = "/stopDevice/{shortId}")
+    R<?> stopDevice(@PathVariable("shortId") String shortId) {
+        return resp((t) -> washDeviceService.stopDevice(shortId));
+    }
+
 
 }

+ 3 - 1
car-wash-service/src/main/java/com/kym/service/awoara/AwoaraService.java

@@ -115,7 +115,9 @@ public interface AwoaraService {
      * @param forceClose
      * @return
      */
-    void closeOrder(String productKey, String deviceName, String orderId, int forceClose);
+    void closeOrder(String productKey, String deviceName, String orderId);
+
+    void forceCloseOrder(String productKey, String deviceName);
 
     /**
      * 查询订单

+ 23 - 7
car-wash-service/src/main/java/com/kym/service/awoara/AwoaraServiceImpl.java

@@ -43,18 +43,22 @@ public class AwoaraServiceImpl implements AwoaraService {
             if (HTTP_OK == response.getStatusCode()) {
                 if (CommUtil.isNotEmptyAndNull(typeReference)) {
                     res = JSONObject.parseObject(new String(DECODER.decode(response.getBody().payloadBase64Byte), StandardCharsets.UTF_8), typeReference[0]);
+                    log.debug("AliyunLot返回结果:{}", res);
                 } else {
                     res = JSONObject.parseObject(new String(DECODER.decode(response.getBody().payloadBase64Byte), StandardCharsets.UTF_8), AwoaraResponse.class);
                 }
                 if (HTTP_OK == res.getCode()) {
                     return res.getData();
                 } else {
+                    log.error("AliyunLot响应异常:{}", res);
                     throw new BusinessException("AliyunLot响应异常");
                 }
             } else {
+                log.error("AliyunLot响应码:{}", response.getStatusCode());
                 throw new BusinessException("AliyunLot响应异常");
             }
         } catch (Exception e) {
+            log.error("AliyunLot请求异常:{}", e.getMessage());
             throw new RuntimeException(e);
         }
     }
@@ -95,8 +99,8 @@ public class AwoaraServiceImpl implements AwoaraService {
                     "version": "2.0",
                         "method": "show_msgbox",
                         "params": {
-                            "title": %s,
-                            "content": %s,
+                            "title": "%s",
+                            "content": "%s",
                             "seconds": %d
                         }
                 }
@@ -175,17 +179,29 @@ public class AwoaraServiceImpl implements AwoaraService {
     }
 
     @Override
-    public void closeOrder(String productKey, String deviceName, String orderId, int forceClose) {
+    public void closeOrder(String productKey, String deviceName, String orderId) {
         var params = """
                 {
                     "version": "2.0",
                     "method": "close_order",
                     "params": {
-                        "order_id": %s,
-                        "force_close": %d
+                        "order_id": "%s"
                      }
                 }
-                """.formatted(orderId, forceClose);
+                """.formatted(orderId);
+        doRequest(productKey, deviceName, params, null);
+    }
+    @Override
+    public void forceCloseOrder(String productKey, String deviceName) {
+        var params = """
+                {
+                    "version": "2.0",
+                    "method": "close_order",
+                    "params": {
+                        "force_close": 1
+                     }
+                }
+                """;
         doRequest(productKey, deviceName, params, null);
     }
 
@@ -196,7 +212,7 @@ public class AwoaraServiceImpl implements AwoaraService {
                     "version": "2.0",
                     "method": "query_order",
                     "params": {
-                        "order_id": %s
+                        "order_id": "%s"
                      }
                 }
                 """.formatted(orderId);

+ 1 - 1
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderCloseEventHandler.java

@@ -45,7 +45,7 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
         // 订单状态、支付状态
         var washOrder = washOrderService.lambdaQuery()
                 .eq(WashOrder::getOrderId, orderInfo.getOrder_id())
-                .eq(WashOrder::getOrderIdLocal, orderInfo.getOrder_id_local())
+//                .eq(WashOrder::getOrderIdLocal, orderInfo.getOrder_id_local())
                 .one();
         washOrder.setAmount(orderInfo.getAmount())
                 .setAmountReceivable(orderInfo.getAmount_receivable())

+ 1 - 1
car-wash-service/src/main/java/com/kym/service/awoara/entity/response/CreateOrder.java

@@ -16,5 +16,5 @@ public class CreateOrder {
     /**
      * 创建了新订单返回1,订单已存在返回0
      */
-    private Integer accepted;
+    private Integer created;
 }

+ 2 - 0
car-wash-service/src/main/java/com/kym/service/miniapp/WashDeviceService.java

@@ -17,4 +17,6 @@ public interface WashDeviceService extends MyBaseService<WashDevice> {
     WashDevice getDevice(String shortId);
 
     WashOrder startDevice(String shortId);
+
+    void stopDevice(String shortId);
 }

+ 2 - 0
car-wash-service/src/main/java/com/kym/service/miniapp/WashOrderService.java

@@ -18,5 +18,7 @@ public interface WashOrderService extends MyBaseService<WashOrder> {
 
     WashOrder createOrder(DeviceParams params);
 
+    void closeOrder(DeviceParams params);
+
     WashOrder queryOrder(WashOrderParams params);
 }

+ 6 - 0
car-wash-service/src/main/java/com/kym/service/miniapp/impl/WashDeviceServiceImpl.java

@@ -49,4 +49,10 @@ public class WashDeviceServiceImpl extends MyBaseServiceImpl<WashDeviceMapper, W
         var productKeyAndDeviceName = KymCache.INSTANCE.getProductKeyAndDeviceNameByWashShortId(shortId);
         return washOrderService.createOrder(new DeviceParams(shortId, productKeyAndDeviceName[0], productKeyAndDeviceName[1]));
     }
+
+    @Override
+    public void stopDevice(String shortId) {
+        var productKeyAndDeviceName = KymCache.INSTANCE.getProductKeyAndDeviceNameByWashShortId(shortId);
+        washOrderService.closeOrder(new DeviceParams(shortId, productKeyAndDeviceName[0], productKeyAndDeviceName[1]));
+    }
 }

+ 24 - 8
car-wash-service/src/main/java/com/kym/service/miniapp/impl/WashOrderServiceImpl.java

@@ -7,7 +7,6 @@ import com.kym.entity.miniapp.queryParams.DeviceParams;
 import com.kym.entity.miniapp.queryParams.WashOrderParams;
 import com.kym.mapper.miniapp.WashOrderMapper;
 import com.kym.service.awoara.AwoaraService;
-import com.kym.service.cache.KymCache;
 import com.kym.service.miniapp.AccountService;
 import com.kym.service.miniapp.WashOrderService;
 import com.kym.service.mybatisplus.MyBaseServiceImpl;
@@ -36,6 +35,7 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
 
     /**
      * 创建订单(启动洗车机)
+     *
      * @param params
      * @return
      */
@@ -44,29 +44,45 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
         var account = accountService.getAccountByUserId(StpUtil.getLoginIdAsLong());
         var memberName = StpUtil.getSession().getString("mobilePhone");
         var orderId = OrderUtils.getOrderNo();
-        var stationId = "";
         var createOrder = awoaraService.createOrder(params.getProductKey(), params.getDeviceName(),
-                orderId, memberName, account.getBalance(),
-                100, 2000);
+                orderId,
+                memberName,
+                account.getBalance(),
+                100, // 优惠折扣 todo 后期会员折扣可用
+                account.getBalance() - 50); // 本次开机最大消费金额,减去0.5元,防止超消费
         var washOrder = new WashOrder()
                 .setUserId(StpUtil.getLoginIdAsLong())
-                .setStationId(stationId)
+                .setStationId(params.getStationId())
                 .setProductKey(params.getProductKey())
                 .setDeviceName(params.getDeviceName())
                 .setOpenType("network")
                 .setOrderId(orderId)
                 .setOrderIdLocal(createOrder.getOrder_id_local())
                 .setMemberDiscount(100)
-                .setPrepayMoney(2000)
+                .setPrepayMoney(account.getBalance() - 50)
                 .setStartTime(LocalDateTime.now())
-                .setOrderStatus(0)
-                .setPayStatus(0);
+                .setOrderStatus(WashOrder.ORDER_STATUS_开机)
+                .setPayStatus(WashOrder.PAY_STATUS_未支付);
         save(washOrder);
         return washOrder;
     }
 
+    @Override
+    public void closeOrder(DeviceParams params) {
+        var order = lambdaQuery()
+                .eq(WashOrder::getProductKey, params.getProductKey())
+                .eq(WashOrder::getDeviceName, params.getDeviceName())
+                .eq(WashOrder::getOrderStatus, WashOrder.ORDER_STATUS_开机)
+                .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_未支付)
+                .one();
+        if (order != null) {
+            awoaraService.closeOrder(params.getProductKey(), params.getDeviceName(), order.getOrderId());
+        }
+    }
+
     /**
      * 查询订单详情
+     *
      * @param params
      * @return
      */

+ 2 - 5
car-wash-service/src/main/java/com/kym/service/mq/MnsHandler.java

@@ -64,7 +64,7 @@ public class MnsHandler {
     private static void longPollingBatchReceive(CloudQueue queue) {
         executorService.execute(() -> {
             while (true) {
-                log.info("=============start longPollingBatchReceive=============");
+                log.info("=============开始 长轮训批量获取消息=============");
 
                 // 一次性拉取最多xx条消息
                 int batchSize = 15;
@@ -77,7 +77,7 @@ public class MnsHandler {
                         printMsgAndDelete(queue, message);
                     }
                 }
-                log.info("=============end longPollingBatchReceive=============");
+                log.info("=============结束 长轮训批量获取消息=============");
             }
         });
     }
@@ -129,12 +129,9 @@ public class MnsHandler {
         log.info("消息内容:{}", json.toJSONString());
         if ("upload".equals(json.getString("messagetype"))) {
             var event = json.getJSONObject("payload").getString("event");
-            if ("device_state".equals(event)) {
                 var handler = AwoaraEventHandlerFactory.getEventHandler(event);
                 var message = parseMessageBody(json.toJSONString(), Event.getClazz(event));
                 handler.handle(message);
-            }
-
         } else {
             log.info("message type is not upload");
         }