ziyi.liu преди 4 години
родител
ревизия
8a23215ac9

+ 1 - 3
graphql-api/src/main/resources/graphqls/order.graphqls

@@ -14,7 +14,5 @@ type Order {
 
 input OrderInput{
     goodsSerialNo: String!
-    discount: Float!
-    originalAmount: BigDecimal!
-    discountAmount: BigDecimal!
+    userID: ID!
 }

+ 30 - 0
order-service/src/main/java/com/remy/order/service/impl/OrderServiceImpl.java

@@ -1,19 +1,39 @@
 package com.remy.order.service.impl;
 
+import com.remy.common.module.GoodsDTO;
+import com.remy.common.module.UserDTO;
 import com.remy.order.dao.OrderDAO;
 import com.remy.order.entity.Order;
 import com.remy.order.service.OrderService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Example;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
 
+import java.math.BigDecimal;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class OrderServiceImpl implements OrderService {
 
+    private static Map<Integer, BigDecimal> discountMapping;
+
+    static {
+        discountMapping = new HashMap<>();
+        discountMapping.put(1, new BigDecimal("0.90"));
+        discountMapping.put(2, new BigDecimal("0.85"));
+        discountMapping.put(3, new BigDecimal("0.80"));
+    }
+
     @Autowired
     OrderDAO orderDAO;
+    @Value("${rest.api.users-endpoint}")
+    private String userAPIEndpoint;
+    @Value("${rest.api.goods-endpoint}")
+    private String goodsAPIEndpoint;
 
     @Override
     public Order findByOrderNo(String orderNo) {
@@ -37,6 +57,16 @@ public class OrderServiceImpl implements OrderService {
 
     @Override
     public Order save(Order order) {
+
+        UserDTO user = new RestTemplate().getForObject(userAPIEndpoint + order.getUserID(), UserDTO.class);
+        BigDecimal discountBase = discountMapping.get(user.getLevel());
+
+        GoodsDTO goods = new RestTemplate().getForObject(goodsAPIEndpoint + order.getGoodsSerialNo(), GoodsDTO.class);
+
+        order.setOriginalAmount(goods.getPrice());
+        order.setDiscount(discountBase);
+        order.setDiscountAmount(goods.getPrice().multiply(discountBase));
+
         return orderDAO.save(order);
     }
 }

+ 6 - 1
order-service/src/main/resources/application.yml

@@ -11,4 +11,9 @@ spring:
     show-sql: true
     properties:
       hibernate:
-        format_sql: true
+        format_sql: true
+
+rest:
+  api:
+    users-endpoint: http://localhost:8083/users/
+    goods-endpoint: http://localhost:8081/goods/