Browse Source

Accomplish /user/product/valid

xuchaolang 7 years ago
parent
commit
1124e7124d

+ 37 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/UserController.java

@@ -12,6 +12,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @RestController
 @RequestMapping(value = "/user")
 public class UserController {
@@ -30,4 +35,36 @@ public class UserController {
         return APIResult.ok(userInfoVo);
     }
 
+    @RequestMapping(value="/product/valid", method = RequestMethod.GET)
+    public APIResult getProductValid(@NeedUser DeviceUserVo user) {
+        String uid = user.getUid();
+        if (StringUtils.isEmpty(uid)) {
+            return APIResult.error(ApiWebCode.NOT_EXISTS);
+        }
+
+        List<Map<String, Object>> products =  userService.getProductValid(uid);
+
+        if (null == products){
+            products = new ArrayList<>();
+        }
+
+        List<Map<String, Object> > recs = new ArrayList<>();
+
+        for(Map<String, Object> item : products){
+            Map<String, Object> rec = new HashMap<>();
+            rec.put("id", item.get("pid"));
+            rec.put("title", item.get("name"));
+            rec.put("beginTime", item.get("beginTime"));
+            rec.put("endTime", item.get("endTime"));
+
+            recs.add(rec);
+        }
+
+        HashMap<String, Object> data = new HashMap<String, Object>();
+        data.put("totalNum", recs.size());
+        data.put("recs", recs);
+
+        return APIResult.ok(data);
+    }
+
 }

+ 16 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserClient.java

@@ -7,9 +7,14 @@ import cn.rankin.data.api.user.vo.TerminalDeviceVo;
 import cn.rankin.data.api.user.vo.TerminalUserVo;
 import cn.rankin.data.api.user.vo.WhiteUserVo;
 import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 @FeignClient(name = "${service.user.name}", fallback = UserClient.UserServiceHystrix.class)
 public interface UserClient {
 
@@ -34,6 +39,11 @@ public interface UserClient {
     @RequestMapping(value = "/white/user/{userId}", method = RequestMethod.GET)
     APIResult<WhiteUserVo> findWhiteUserById(@PathVariable("userId") String userId);
 
+    @RequestMapping(value = "/user/{uid}/product/valid", method = RequestMethod.GET)
+    List<Map<String, Object>> getProductValid(@PathVariable("uid") String uid, @RequestParam("start") Long start,
+                                              @RequestParam("offset") Integer offset, @RequestParam("sortKey") String sortKey,
+                                              @RequestParam("direction") Sort.Direction direction);
+
     @Component
     class UserServiceHystrix implements UserClient {
 
@@ -71,5 +81,11 @@ public interface UserClient {
         public APIResult<WhiteUserVo> findWhiteUserById(String userId) {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
+
+        @Override
+        public List<Map<String, Object>> getProductValid(String uid, Long start,
+                                             Integer offset, String sortKey, Sort.Direction direction){
+            return new ArrayList<>();
+        }
     }
 }

+ 7 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserService.java

@@ -18,9 +18,12 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 
 @Service
@@ -248,4 +251,8 @@ public class UserService {
         deviceUserVo.setExpireAt(expireAt);
         deviceUserVo.setRefreshAt(nowTime);
     }
+
+    public List<Map<String, Object>> getProductValid(String uid){
+        return userClient.getProductValid(uid, 0L, 50, "endTime", Sort.Direction.ASC);
+    }
 }

+ 4 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/Support.java

@@ -67,6 +67,10 @@ public class Support implements Serializable {
     @Temporal(TemporalType.TIMESTAMP)
     private Date gmtModified;
 
+    //QR code
+    @Column(name = "shop_qr")
+    private String shopQR;
+
     @Transient
     private List<Support> supportList;
 }

+ 74 - 4
rankin-product-service/src/main/java/cn/rankin/productservice/controller/auth/AuthController.java

@@ -1,21 +1,42 @@
 package cn.rankin.productservice.controller.auth;
 
 import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.common.utils.constant.Constant;
+import cn.rankin.common.utils.util.BeanUtil;
 import cn.rankin.data.api.auth.dto.InnerAuthDTO;
 import cn.rankin.data.api.auth.vo.AuthResult;
+import cn.rankin.data.api.auth.vo.AuthVo;
+import cn.rankin.data.api.product.entity.Product;
+import cn.rankin.productservice.repository.ProductRepository;
+import cn.rankin.productservice.service.ProductService;
+import cn.rankin.productservice.service.auth.AuthClient;
 import cn.rankin.productservice.service.auth.AuthService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
+@Slf4j
 public class AuthController {
 
     @Autowired
     private AuthService authService;
 
+    @Autowired
+    private AuthClient authClient;
+
+    @Autowired
+    private ProductRepository productRepository;
+
+    @Autowired
+    private ProductService  productService;
+
     @RequestMapping(value = "/auth", method = RequestMethod.POST)
     public APIResult<AuthResult> auth(@RequestBody InnerAuthDTO authDTO) {
         String userId = authDTO.getUserId();
@@ -23,4 +44,53 @@ public class AuthController {
         String merchantId = authDTO.getMerchantId();
         return authService.auth(userId, merchantId, itemId);
     }
+
+    @RequestMapping(value = "/user/{uid}/product/valid", method = RequestMethod.GET)
+    public List<Map<String, Object>> getProductValid(@PathVariable("uid") String uid, @RequestParam("start") Long start,
+                                                     @RequestParam("offset") Integer offset, @RequestParam("sortKey") String sortKey,
+                                                     @RequestParam("direction") Sort.Direction direction){
+
+        List<AuthVo> authItems =  authClient.getUserValidProduct(uid, Constant.BIZ_CODE).getData();
+        if (null == authItems){
+            authItems = new ArrayList<>();
+        }
+
+        ArrayList<String> pids = new ArrayList<>();
+
+        HashMap<String, AuthVo> authMap = new HashMap<>();
+        for (AuthVo item: authItems ) {
+            if(null == item.getPid()) {
+                log.error("Pid-Is-Null, uid={}", uid);
+                continue;
+            }
+            pids.add(item.getPid());
+            authMap.put(item.getPid(), item);
+        }
+
+        List<Product> products = productRepository.findByPids(pids);
+
+        //assemble result
+        List< Map<String, Object> > result = new ArrayList<>();
+        for(Product product : products){
+
+            String pid = product.getPid();
+            if (!authMap.containsKey(pid)){
+                log.error("pid Not Exist in authMap, pid={}", pid);
+                continue;
+            }
+
+            AuthVo authInfo = authMap.get(pid);
+
+            Map<String, Object> rec = BeanUtil.convertToMap(product, true);
+
+            rec.put("beginTime", authInfo.getStartTime());
+            rec.put("endTime", authInfo.getEndTime());
+
+            result.add(rec);
+
+        }
+
+        return result;
+    }
+
 }

+ 4 - 3
rankin-product-service/src/main/java/cn/rankin/productservice/service/auth/AuthClient.java

@@ -4,9 +4,7 @@ import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.data.api.auth.dto.AuthQueryDTO;
 import cn.rankin.data.api.auth.vo.AuthVo;
 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;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -16,6 +14,9 @@ public interface AuthClient {
     @RequestMapping(value = "/acenter/v1/auth/list", method = RequestMethod.POST, consumes = "application/json")
     APIResult<List<AuthVo>> auth(@RequestBody AuthQueryDTO authQueryDTO);
 
+    @RequestMapping(value = "/acenter/v1/auth/uid/{uid}", method = RequestMethod.GET, consumes = "application/json")
+    APIResult<List<AuthVo>> getUserValidProduct(@PathVariable("uid") String uid, @RequestParam("bizCode") String bizCode);
+
 //    @Component
 //    class AuthServiceHystrix implements AuthClient {
 //

+ 5 - 4
rankin-user-service/src/main/java/cn/rankin/userservice/controller/TerminalUserController.java

@@ -2,17 +2,17 @@ package cn.rankin.userservice.controller;
 
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
+import cn.rankin.common.utils.enums.BaseOrderEnum;
 import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.util.HttpUtil;
 import cn.rankin.common.utils.util.ProvinceUtil;
 import cn.rankin.data.api.user.dto.TerminalUserDTO;
 import cn.rankin.data.api.user.dto.TerminalUserSearchDTO;
-import cn.rankin.common.utils.enums.BaseOrderEnum;
-import cn.rankin.common.utils.util.HttpUtil;
-import cn.rankin.userservice.code.UserServiceAPICode;
-import cn.rankin.userservice.dto.RemoteUser;
 import cn.rankin.data.api.user.entity.Campus;
 import cn.rankin.data.api.user.entity.Merchant;
 import cn.rankin.data.api.user.entity.TerminalUser;
+import cn.rankin.userservice.code.UserServiceAPICode;
+import cn.rankin.userservice.dto.RemoteUser;
 import cn.rankin.userservice.proxy.RemoteUserProxy;
 import cn.rankin.userservice.service.CampusService;
 import cn.rankin.userservice.service.MerchantService;
@@ -241,6 +241,7 @@ public class TerminalUserController {
         return terminalUserService.delete(id);
     }
 
+
     public static void setUserInfo(TerminalUser terminalUser, Campus campus, Merchant merchant) {
         if (terminalUser == null) {
             return;