Ver código fonte

售货机出货回调

LuoDLeo 6 meses atrás
pai
commit
b68bd42f3d

+ 61 - 9
src/main/java/org/springblade/modules/api/controller/ApiVendingController.java

@@ -7,23 +7,35 @@ import cn.hutool.json.JSONUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springblade.common.aspect.VendingFlag;
 import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.enums.OrderStateEnum;
 import org.springblade.core.log.annotation.ApiLog;
 import org.springblade.modules.api.request.VendingOrderReq;
+import org.springblade.modules.api.request.VendingShipReq;
 import org.springblade.modules.api.response.VendingOrderRes;
 import org.springblade.modules.api.service.VendingOrderService;
+import org.springblade.modules.finance.entity.Order;
+import org.springblade.modules.finance.entity.OrderGoods;
+import org.springblade.modules.finance.service.IOrderGoodsService;
+import org.springblade.modules.finance.service.IOrderService;
 import org.springblade.modules.finance.vo.OrderGoodsVO;
 import org.springblade.modules.finance.vo.OrderVO;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -33,9 +45,12 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 @RequestMapping(CommonConstant.API_URL + "/vending")
 @Api(value = "售货机硬件对接接口", tags = "售货机硬件对接接口")
+@Slf4j
 public class ApiVendingController {
 
     private final VendingOrderService vendingOrderService;
+    private final IOrderGoodsService orderGoodsService;
+    private final IOrderService orderService;
 
 
     @ApiLog("查询设备订单信息")
@@ -76,15 +91,8 @@ public class ApiVendingController {
 
     }
 
-    @ApiLog("设备出货成功回调")
-    @ApiOperation(value = "出货成功回调", notes = "出货成功回调")
-    @PostMapping("callback")
-    public void callback() {
-
-    }
-
     /**
-     * 硬件接口通用响应
+     * 硬件接口订单信息返回通用响应
      *
      * @param response        HttpServletResponse
      * @param vendingOrderRes 返值
@@ -96,4 +104,48 @@ public class ApiVendingController {
         response.flushBuffer();
     }
 
+    @ApiLog("设备出货成功回调")
+    @ApiOperation(value = "出货成功回调", notes = "出货成功回调")
+    @PostMapping("callback")
+    public void callback(@Valid @RequestBody VendingShipReq req) {
+        //设备出货成功回调
+        OrderGoods orderGoods = orderGoodsService.lambdaQuery()
+                .eq(OrderGoods::getDeviceId, req.getMachine_id())
+                .eq(OrderGoods::getOrderId, req.getSaleSn())
+                .eq(OrderGoods::getCargoWayNo, req.getChannelNum())
+                .one();
+
+        if (Objects.isNull(orderGoods)){
+            log.info("设备出货成功回调,未找到货品信息");
+            return;
+        }
+
+        //出货量校验
+        if (orderGoods.getGoodsNum() < orderGoods.getShipmentNum() + 1){
+            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 (orderGoods.getGoodsNum() == orderGoods.getShipmentNum() + 1){
+            orderService.lambdaUpdate()
+                    .set(Order::getOrderState, OrderStateEnum.COMPLETED.getValue())
+                    .eq(Order::getId, req.getSaleSn());
+        }
+
+    }
+
+    @ApiLog("设备心跳")
+    @ApiOperation(value = "设备心跳", notes = "设备心跳")
+    @PostMapping("heartbeat")
+    public void heartbeat(@Valid @RequestBody VendingShipReq req) {
+
+
+    }
+
 }

+ 27 - 0
src/main/java/org/springblade/modules/api/request/VendingShipReq.java

@@ -0,0 +1,27 @@
+package org.springblade.modules.api.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 设备出货回调
+ */
+@Data
+public class VendingShipReq {
+
+    //成功:{"machine_id":"001","SaleSn":"1234567890","ChannelNum":"1","Status":"OK"}
+    //失败:{"machine_id":"001","SaleSn":"1234567890","ChannelNum":"1","Status":"FAIL"}
+
+    @ApiModelProperty(value = "设备id")
+    private String machine_id;
+
+    @ApiModelProperty(value = "订单号")
+    private String SaleSn;
+
+    @ApiModelProperty(value = "设备通道")
+    private String ChannelNum;
+
+    @ApiModelProperty(value = "出货状态")
+    private String Status;
+
+}

+ 5 - 0
src/main/java/org/springblade/modules/finance/entity/OrderGoods.java

@@ -46,6 +46,11 @@ public class OrderGoods extends BaseEntity {
 	*/
 	@ApiModelProperty(value = "商品数量")
 	private Integer goodsNum;
+	/**
+	 * 出货数量
+	 */
+	@ApiModelProperty(value = "出货数量")
+	private Integer shipmentNum;
 	/**
 	* 商品名称
 	*/

+ 1 - 0
src/main/java/org/springblade/modules/finance/service/impl/OrderGoodsServiceImpl.java

@@ -110,6 +110,7 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
 		OrderGoods orderGoods = new OrderGoods();
 		orderGoods.setOrderId(order.getId());
 		orderGoods.setGoodsNum(request.getGoodsNum());
+		orderGoods.setShipmentNum(0);
 		orderGoods.setDeviceId(request.getDeviceId());
 		orderGoods.setGoodsName(goods.getGoodsName());
 		orderGoods.setCargoWayId(request.getCargoWayId());