Browse Source

add merchant product list package info

huodongdong 7 years ago
parent
commit
aa34b15a14

+ 7 - 29
rankin-cms-web/src/main/java/cn/rankin/cmsweb/controller/product/MerchantProductController.java

@@ -1,21 +1,17 @@
 package cn.rankin.cmsweb.controller.product;
 
 import cn.rankin.cmsweb.service.product.MerchantProductService;
-import cn.rankin.cmsweb.service.user.MerchantService;
+import cn.rankin.cmsweb.service.user.MerchantInfoSetService;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.common.utils.util.BeanUtil;
 import cn.rankin.data.api.product.dto.MerchantProductDTO;
 import cn.rankin.data.api.product.dto.MerchantProductSearchDTO;
 import cn.rankin.data.api.product.vo.MerchantProductVo;
-import cn.rankin.data.api.user.vo.MerchantVo;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 @RestController
 @RequestMapping(value = "/merchant/product")
@@ -25,34 +21,16 @@ public class MerchantProductController {
     private MerchantProductService merchantProductService;
 
     @Autowired
-    private MerchantService merchantService;
+    private MerchantInfoSetService merchantInfoSetService;
 
     @RequestMapping(method = RequestMethod.GET)
     public APIResult<Page<MerchantProductVo>> search(MerchantProductSearchDTO searchDTO) {
-        APIResult<Page<MerchantProductVo>> pageAPIResult = merchantProductService.search(BeanUtil.convertToMap(searchDTO));
-        List<MerchantProductVo> merchantProductVoList = pageAPIResult.getData().getList();
-        if (!CollectionUtils.isEmpty(merchantProductVoList)) {
-            List<String> merchantIdList = new ArrayList<>();
-            merchantProductVoList.forEach(merchantProductVo -> {
-                String merchantId = merchantProductVo.getMerchantId();
-                if (!merchantIdList.contains(merchantId)) {
-                    merchantIdList.add(merchantId);
-                }
-            });
-
-            APIResult<Map<String, MerchantVo>> mapAPIResult = merchantService.findByIds(merchantIdList);
-            Map<String, MerchantVo> merchantVoMap = mapAPIResult.getData();
-            if (!CollectionUtils.isEmpty(merchantVoMap)) {
-                for (MerchantProductVo merchantProductVo : merchantProductVoList) {
-                    String merchantId = merchantProductVo.getMerchantId();
-                    MerchantVo merchantVo = merchantVoMap.get(merchantId);
-                    if (merchantVo != null) {
-                        merchantProductVo.setMerchantName(merchantVo.getName());
-                    }
-                }
-            }
+        APIResult<Page<MerchantProductVo>> apiResult = merchantProductService.search(BeanUtil.convertToMap(searchDTO));
+        if (apiResult.getSuccess()) {
+            List<MerchantProductVo> merchantProductVoList = apiResult.getData().getList();
+            merchantInfoSetService.setMerchantInfo(merchantProductVoList);
         }
-        return pageAPIResult;
+        return apiResult;
     }
 
     @RequestMapping(value = "/detail", method = RequestMethod.GET)

+ 8 - 7
rankin-cms-web/src/main/java/cn/rankin/cmsweb/service/trade/order/OrderService.java

@@ -25,7 +25,7 @@ import cn.rankin.data.api.trade.entity.OrderProductSnapshot;
 import cn.rankin.data.api.trade.vo.OrderDetailVo;
 import cn.rankin.data.api.trade.vo.OrderVo;
 import cn.rankin.data.api.user.dto.CampusSearchDTO;
-import cn.rankin.data.api.user.dto.MerchantPayDTO;
+import cn.rankin.data.api.user.dto.PayDTO;
 import cn.rankin.data.api.user.vo.CampusVo;
 import cn.rankin.data.api.user.vo.TerminalUserVo;
 import lombok.extern.slf4j.Slf4j;
@@ -59,7 +59,7 @@ public class OrderService {
     private CampusService campusService;
 
     @Autowired
-    private MerchantService merchantService;
+    private PayingService payingService;
 
     public APIResult<Boolean> pay(String orderId) {
         APIResult<Order> userOrderAPIResult = orderClient.getOrder(orderId);
@@ -79,15 +79,16 @@ public class OrderService {
 
         // 开始扣款
         String merchantId = userVo.getMerchantId();
-        MerchantPayDTO payDTO = new MerchantPayDTO();
+        PayDTO payDTO = new PayDTO();
         payDTO.setQuantity(order.getFinalPrice());
         payDTO.setType(LedgerTypeEnum.COURSE);
         payDTO.setReceiptId(order.getId());
+        payDTO.setMerchantId(merchantId);
 
-        APIResult<Boolean> merchantPayAPIResult = merchantService.pay(merchantId, payDTO);
-        if (!merchantPayAPIResult.getSuccess()) {
-            log.error("扣款失败, orderId={}, {}", orderId, merchantPayAPIResult.getMessage());
-            return APIResult.error(new BaseCode(merchantPayAPIResult.getCode(), merchantPayAPIResult.getMessage()));
+        APIResult<Boolean> payAPIResult = payingService.buy(payDTO);
+        if (!payAPIResult.getSuccess()) {
+            log.error("扣款失败, orderId={}, {}", orderId, payAPIResult.getMessage());
+            return APIResult.error(new BaseCode(payAPIResult.getCode(), payAPIResult.getMessage()));
         }
 
         // 更新订单状态

+ 15 - 0
rankin-cms-web/src/main/java/cn/rankin/cmsweb/service/trade/order/PayingService.java

@@ -0,0 +1,15 @@
+package cn.rankin.cmsweb.service.trade.order;
+
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.data.api.user.dto.PayDTO;
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@FeignClient(name = "${service.user.name}")
+public interface PayingService {
+
+    @RequestMapping(value = "/pay/buy", method = RequestMethod.POST)
+    APIResult<Boolean> buy(@RequestBody PayDTO payDTO);
+}

+ 0 - 4
rankin-cms-web/src/main/java/cn/rankin/cmsweb/service/user/MerchantService.java

@@ -3,7 +3,6 @@ package cn.rankin.cmsweb.service.user;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.data.api.user.dto.MerchantDTO;
-import cn.rankin.data.api.user.dto.MerchantPayDTO;
 import cn.rankin.data.api.user.vo.MerchantVo;
 import org.springframework.cloud.netflix.feign.FeignClient;
 import org.springframework.web.bind.annotation.*;
@@ -32,7 +31,4 @@ public interface MerchantService {
     @RequestMapping(value = "/merchant/ids", method = RequestMethod.GET)
     APIResult<Map<String, MerchantVo>> findByIds(@RequestParam("id") List<String> ids);
 
-    @RequestMapping(value = "/merchant/pay/{merchantId}", method = RequestMethod.POST)
-    APIResult<Boolean> pay(@PathVariable("merchantId") String merchantId, @RequestBody MerchantPayDTO payDTO);
-
 }

+ 3 - 1
rankin-data-api/src/main/java/cn/rankin/data/api/user/dto/MerchantPayDTO.java

@@ -9,7 +9,9 @@ import java.math.BigDecimal;
 
 @Data
 @ToString
-public class MerchantPayDTO implements Serializable {
+public class PayDTO implements Serializable {
+
+    private String merchantId;
 
     private BigDecimal quantity;
 

+ 5 - 1
rankin-product-service/src/main/java/cn/rankin/productservice/controller/MerchantProductController.java

@@ -50,7 +50,11 @@ public class MerchantProductController {
 
     @RequestMapping(value = "/detail", method = RequestMethod.GET)
     public APIResult<MerchantProduct> getProduct(@RequestParam("pid") String productId, @RequestParam("merchantId") String merchantId) {
-        return merchantProductService.getProduct(productId, merchantId);
+        MerchantProduct merchantProduct = merchantProductService.getProduct(productId, merchantId);
+        if (merchantProduct == null) {
+            return APIResult.error(ProductServiceAPICode.NOT_EXISTS);
+        }
+        return APIResult.ok(merchantProduct);
     }
 
     @RequestMapping(value = "/status", method = RequestMethod.PUT)

+ 7 - 3
rankin-product-service/src/main/java/cn/rankin/productservice/service/MerchantProductService.java

@@ -145,6 +145,10 @@ public class MerchantProductService {
                 });
                 product.setTags(tags);
             }
+            ProductTypeEnum type = product.getType();
+            if (type.equals(ProductTypeEnum.PACKAGE)) {
+                product = this.getProduct(productId, merchantId);
+            }
         }
 
         page.setList(merchantProductList);
@@ -152,11 +156,11 @@ public class MerchantProductService {
         return APIResult.ok(page);
     }
 
-    public APIResult<MerchantProduct> getProduct(String productId, String merchantId) {
+    public MerchantProduct getProduct(String productId, String merchantId) {
         MerchantProduct merchantProduct = merchantProductRepository.findByPidAndMerchantId(productId, merchantId);
 
         if (merchantProduct == null) {
-            return APIResult.error(ProductServiceAPICode.NOT_EXISTS);
+            return null;
         }
 
         List<Goods> goodsList = goodsRepository.findByPidAndMerchantId(productId, merchantId);
@@ -185,7 +189,7 @@ public class MerchantProductService {
             merchantProduct.setSpecials(supportGoodsList);
         }
 
-        return APIResult.ok(merchantProduct);
+        return merchantProduct;
     }
 
     @Transactional

+ 0 - 6
rankin-user-service/src/main/java/cn/rankin/userservice/controller/MerchantController.java

@@ -6,7 +6,6 @@ import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.data.api.user.dto.MerchantDTO;
 import cn.rankin.data.api.user.dto.MerchantSearchDTO;
 import cn.rankin.common.utils.enums.BaseOrderEnum;
-import cn.rankin.data.api.user.dto.MerchantPayDTO;
 import cn.rankin.data.api.user.entity.Merchant;
 import cn.rankin.data.api.user.entity.CmsUser;
 import cn.rankin.userservice.service.MerchantService;
@@ -92,11 +91,6 @@ public class MerchantController {
         return result;
     }
 
-    @RequestMapping(value = "/pay/{merchantId}", method = RequestMethod.POST)
-    public APIResult<Boolean> pay(@PathVariable("merchantId") String merchantId, @RequestBody MerchantPayDTO payDTO) {
-        return merchantService.pay(merchantId, payDTO.getQuantity(), payDTO.getType(), payDTO.getReceiptId(), payDTO.getNote());
-    }
-
     @RequestMapping(value = "/ids", method = RequestMethod.GET)
     public APIResult<Map<String, Merchant>> getMerchantList(@RequestParam("id") List<String> idList) {
         return merchantService.findByIds(idList);

+ 21 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/controller/PayController.java

@@ -0,0 +1,21 @@
+package cn.rankin.userservice.controller;
+
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.data.api.user.dto.PayDTO;
+import cn.rankin.userservice.service.PayingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(name = "/pay")
+public class PayController {
+
+    @Autowired
+    private PayingService payingService;
+
+    @RequestMapping(value = "/buying", method = RequestMethod.POST)
+    public APIResult<Boolean> buy(@RequestBody PayDTO payDTO) {
+        return payingService.buy(payDTO.getMerchantId(), payDTO.getQuantity(), payDTO.getType(), payDTO.getReceiptId(), payDTO.getNote());
+    }
+
+}

+ 1 - 7
rankin-user-service/src/main/java/cn/rankin/userservice/repository/MerchantRepository.java

@@ -17,21 +17,15 @@ public interface MerchantRepository  extends BasicJpaRepository<Merchant, String
 
     Long countByCode(String code);
 
-	List<Merchant> findByIdIn(List<String> ids);
-
 	Merchant findByIdAndStatus(String id, BaseStatusEnum status);
 
 	Merchant findByName(String name);
 
 	@Modifying
-    @Query("update Merchant m set m.status = :status where m.id in (:ids) ")
-    int updateStatusByIds(@Param("ids") List<String> ids, @Param("status") BaseStatusEnum status);
-
-	@Modifying
     @Query("update Merchant m set m.status = :status where m.id = :id ")
     int updateStatusById(@Param("id") String id, @Param("status") BaseStatusEnum status);
 
 	@Modifying
     @Query(value = "update Merchant m set m.balance = m.balance - ?2 where m.balance - ?2 > 0 and m.id = ?1")
-    Integer pay(String merchantId, BigDecimal quantity);
+    Integer buy(String merchantId, BigDecimal quantity);
 }

+ 0 - 25
rankin-user-service/src/main/java/cn/rankin/userservice/service/MerchantService.java

@@ -30,31 +30,6 @@ public class MerchantService {
     @Autowired
     private MerchantRepository merchantRepository;
 
-    @Autowired
-    private LedgerService ledgerService;
-
-    @Transactional
-    public APIResult<Boolean> pay(String merchantId, BigDecimal quantity, LedgerTypeEnum type, String receiptId, String note) {
-        Merchant merchant = merchantRepository.find(merchantId);
-        if (merchant == null || !merchant.getStatus().equals(BaseStatusEnum.NORMAL)) {
-            return APIResult.error(UserServiceAPICode.NOT_EXISTS);
-        }
-
-        if (merchant.getBalance().compareTo(quantity) < 0) {
-            return APIResult.error(UserServiceAPICode.MONEY_NOT_ENOUGH);
-        }
-
-        Integer count = merchantRepository.pay(merchantId, quantity);
-        if (count <= 0) {
-            return APIResult.error(UserServiceAPICode.PAY_FAILED);
-        }
-
-        // 插入流水
-        ledgerService.insert(merchantId, quantity.negate(), merchant.getBalance(), type, receiptId, note);
-
-        return APIResult.ok();
-    }
-
     public APIResult<Page<Merchant>> search(Merchant merchant, Integer pageNo, Integer pageSize, LinkedHashMap<String, BaseOrderEnum> sort) {
         Long count = merchantRepository.count(merchant);
         Page<Merchant> page = new Page<>(count, pageNo, pageSize);

+ 45 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/service/PayingService.java

@@ -0,0 +1,45 @@
+package cn.rankin.userservice.service;
+
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.LedgerTypeEnum;
+import cn.rankin.data.api.user.entity.Merchant;
+import cn.rankin.userservice.code.UserServiceAPICode;
+import cn.rankin.userservice.repository.MerchantRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.math.BigDecimal;
+
+@Service
+public class PayingService {
+
+    @Autowired
+    private MerchantRepository merchantRepository;
+
+    @Autowired
+    private LedgerService ledgerService;
+
+    @Transactional
+    public APIResult<Boolean> buy(String merchantId, BigDecimal quantity, LedgerTypeEnum type, String receiptId, String note) {
+        Merchant merchant = merchantRepository.find(merchantId);
+        if (merchant == null || !merchant.getStatus().equals(BaseStatusEnum.NORMAL)) {
+            return APIResult.error(UserServiceAPICode.NOT_EXISTS);
+        }
+
+        if (merchant.getBalance().compareTo(quantity) < 0) {
+            return APIResult.error(UserServiceAPICode.MONEY_NOT_ENOUGH);
+        }
+
+        Integer count = merchantRepository.buy(merchantId, quantity);
+        if (count <= 0) {
+            return APIResult.error(UserServiceAPICode.PAY_FAILED);
+        }
+
+        // 插入流水
+        ledgerService.insert(merchantId, quantity.negate(), merchant.getBalance(), type, receiptId, note);
+
+        return APIResult.ok();
+    }
+}