guozhaoshun 6 vuotta sitten
vanhempi
commit
2d3ab8ee88

+ 41 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/QRcodeController.java

@@ -0,0 +1,41 @@
+package cn.rankin.apiweb.controller;
+
+import cn.rankin.apiweb.assist.resolver.NeedUser;
+import cn.rankin.apiweb.service.user.UserService;
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.data.api.app.vo.DeviceUserVo;
+import cn.rankin.data.api.user.vo.QRCodeVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+@Slf4j
+@RestController
+@RequestMapping(value = "/qrcode")
+public class QRcodeController {
+
+    @Autowired
+    private UserService userService;
+
+    @RequestMapping(method = RequestMethod.GET)
+    public APIResult<QRCodeVo> qrcode(@NeedUser DeviceUserVo user)
+    {
+
+        String eid = user.getEid();
+
+        log.info("qrcode request header : eid={},", eid);
+
+        return userService.qrcode(eid);
+    }
+
+    @RequestMapping(value = "/last", method = RequestMethod.GET)
+    public APIResult<QRCodeVo> queryLastQRCode(@NeedUser DeviceUserVo user)
+    {
+        String eid = user.getEid();
+        log.info("qrcode request header : eid={},", eid);
+        return userService.queryLastQRCode(eid);
+    }
+
+}
+

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

@@ -3,11 +3,13 @@ package cn.rankin.apiweb.service.user;
 import cn.rankin.apiweb.code.ApiWebCode;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
+import cn.rankin.data.api.user.dto.QRCodeDTO;
 import cn.rankin.data.api.user.dto.TerminalDeviceDTO;
 import cn.rankin.data.api.user.dto.UserDeviceDTO;
 import cn.rankin.data.api.user.entity.UserRecommend;
 import cn.rankin.data.api.user.entity.UserTag;
 import cn.rankin.data.api.user.entity.UserTagProductRelation;
+import cn.rankin.data.api.user.vo.QRCodeVo;
 import cn.rankin.data.api.user.vo.TerminalDeviceVo;
 import cn.rankin.data.api.user.vo.TerminalUserVo;
 import cn.rankin.data.api.user.vo.WhiteUserVo;
@@ -71,6 +73,13 @@ public interface UserClient
                                                @RequestParam("pageNo") Integer pageNo,
                                                @RequestParam("pageSize") Integer pageSize);
 
+    @RequestMapping(value = "/qrcode", method = RequestMethod.POST)
+    QRCodeVo qrcode(@RequestBody QRCodeDTO dto);
+
+    @RequestMapping(value = "/qrcode/last", method = RequestMethod.GET)
+    QRCodeVo queryLastQRCode(@RequestParam("eid") String eid);
+
+
     @Component
     class UserServiceHystrix implements UserClient
     {
@@ -162,6 +171,16 @@ public interface UserClient
             return null;
         }
 
+        @Override
+        public QRCodeVo qrcode(QRCodeDTO dto) {
+            return null;
+        }
+
+        @Override
+        public QRCodeVo queryLastQRCode(String eid) {
+            return null;
+        }
+
 
     }
 }

+ 54 - 4
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserService.java

@@ -3,22 +3,27 @@ package cn.rankin.apiweb.service.user;
 import cn.rankin.apiweb.code.ApiWebCode;
 import cn.rankin.apiweb.service.product.ProductClient;
 import cn.rankin.apiweb.utils.SecurityManager;
+import cn.rankin.common.utils.api.model.APICode;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.model.BaseCode;
 import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.common.utils.constant.PlatForm;
 import cn.rankin.common.utils.constant.RedisKey;
 import cn.rankin.common.utils.service.RedisService;
+import cn.rankin.common.utils.util.FastJsonUtils;
+import cn.rankin.common.utils.util.QRCodeUtil;
 import cn.rankin.data.api.app.dto.DeviceLoginDTO;
 import cn.rankin.data.api.app.dto.LoginInfoDTO;
 import cn.rankin.data.api.app.vo.DeviceUserVo;
 import cn.rankin.data.api.app.vo.ItemVo;
 import cn.rankin.data.api.app.vo.UserInfoVo;
+import cn.rankin.data.api.user.dto.QRCodeDTO;
 import cn.rankin.data.api.user.dto.TerminalDeviceDTO;
 import cn.rankin.data.api.user.dto.UserDeviceDTO;
 import cn.rankin.data.api.user.entity.UserRecommend;
 import cn.rankin.data.api.user.entity.UserTag;
 import cn.rankin.data.api.user.entity.UserTagProductRelation;
+import cn.rankin.data.api.user.vo.QRCodeVo;
 import cn.rankin.data.api.user.vo.TerminalDeviceVo;
 import cn.rankin.data.api.user.vo.TerminalUserVo;
 import com.alibaba.fastjson.JSON;
@@ -31,10 +36,7 @@ import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 @Service
@@ -473,4 +475,52 @@ public class UserService
     {
         return userClient.findRelations(userTagId, productIdList, pageNo, pageSize);
     }
+
+    public APIResult<QRCodeVo> qrcode(String eid) {
+        APIResult<TerminalUserVo> apiResult = userClient.loadUserByEid(eid);
+        if(!apiResult.getSuccess()){
+            log.error("load user by eid is fail");
+            return APIResult.error(ApiWebCode.OPERATE_ERROR);
+        }
+        TerminalUserVo vo = apiResult.getData();
+        if(null == vo){
+            log.info("load terminalUser is null");
+            return APIResult.error(ApiWebCode.OPERATE_ERROR);
+        }
+
+        Date time = new Date();
+
+        Map qrcode = new HashMap();
+        qrcode.put("user",eid);
+        qrcode.put("time",time);
+        String json = FastJsonUtils.collectToString(qrcode);
+        String qrCode = null;
+
+        try{
+            qrCode = "data:image/png;base64," +  QRCodeUtil.generateQRCode(json);
+        }catch(Exception e){
+            log.error("generateQRCode exception,message={}",e.getMessage());
+            e.printStackTrace();
+            return APIResult.error(ApiWebCode.SERVER_ERROR);
+        }
+
+        String simple = vo.getMerchantSimple();
+
+        QRCodeDTO dto = new QRCodeDTO();
+        dto.setEid(eid);
+        dto.setSimple(simple);
+        dto.setTime(time);
+        dto.setQrcode(qrCode);
+        QRCodeVo qrcodeVo = userClient.qrcode(dto);
+
+        return APIResult.ok(qrcodeVo);
+    }
+
+    public APIResult<QRCodeVo> queryLastQRCode(String eid) {
+        QRCodeVo vo = userClient.queryLastQRCode(eid);
+        if(null == vo ){
+            return APIResult.error(APICode.OPERATE_ERROR);
+        }
+        return APIResult.ok(vo);
+    }
 }

+ 26 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/controller/QRCodeController.java

@@ -0,0 +1,26 @@
+package cn.rankin.userservice.controller;
+
+import cn.rankin.data.api.user.dto.QRCodeDTO;
+import cn.rankin.data.api.user.entity.QRCode;
+import cn.rankin.userservice.service.QRCodeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(value = "/qrcode")
+public class QRCodeController {
+
+    @Autowired
+    private QRCodeService qrcodeService;
+
+    @RequestMapping(method = RequestMethod.POST)
+    public QRCode add(@RequestBody QRCodeDTO dto) {
+        return qrcodeService.add(dto);
+    }
+
+    @RequestMapping(value = "/last", method = RequestMethod.GET)
+    public QRCode findLastOne(@RequestParam("eid") String eid ){
+        return qrcodeService.findLastOne(eid);
+    }
+
+}

+ 2 - 2
rankin-user-service/src/main/java/cn/rankin/userservice/proxy/RemoteAuthFeign.java

@@ -9,8 +9,8 @@ import org.springframework.cloud.netflix.feign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
 
-@FeignClient(name = "auth-remote", url = "${remote.auth.url}")
-//@FeignClient(name = "${iaas.auth.url}")
+//@FeignClient(name = "auth-remote", url = "${remote.auth.url}")
+@FeignClient(name = "${iaas.auth.url}")
 public interface RemoteAuthFeign {
 
     @RequestMapping(value = "/acenter/v1/auth/list/v2", method = RequestMethod.POST)

+ 2 - 2
rankin-user-service/src/main/java/cn/rankin/userservice/proxy/RemoteUserFeign.java

@@ -10,8 +10,8 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
-@FeignClient(name = "user-remote", url = "${remote.user.url}")
-//@FeignClient(name = "${iaas.user.url}")
+//@FeignClient(name = "user-remote", url = "${remote.user.url}")
+@FeignClient(name = "${iaas.user.url}")
 public interface RemoteUserFeign {
 
     @RequestMapping(value = "/ucenter/v1/users", method = RequestMethod.POST)

+ 11 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/repository/QRCodeRepository.java

@@ -0,0 +1,11 @@
+package cn.rankin.userservice.repository;
+
+import cn.rankin.common.utils.jpa.BasicJpaRepository;
+import cn.rankin.data.api.user.entity.QRCode;
+import org.springframework.data.jpa.repository.Query;
+
+public interface QRCodeRepository extends BasicJpaRepository<QRCode, String> {
+
+    @Query(value = "select qr.* from u_qrcode qr where qr.eid = ?1 ORDER BY qr.gmt_created DESC limit 1",nativeQuery = true)
+    QRCode findLastOne(String eid);
+}

+ 38 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/service/QRCodeService.java

@@ -0,0 +1,38 @@
+package cn.rankin.userservice.service;
+
+import cn.rankin.common.utils.util.DateUtil;
+import cn.rankin.data.api.user.dto.QRCodeDTO;
+import cn.rankin.data.api.user.entity.QRCode;
+import cn.rankin.userservice.repository.QRCodeRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+import static cn.rankin.userservice.utils.DTOConverter.convert;
+
+@Service
+public class QRCodeService {
+
+    @Autowired
+    private QRCodeRepository qrcodeRepository;
+
+    public QRCode add(QRCodeDTO dto) {
+        QRCode qrcode = convert(dto);
+        return qrcodeRepository.save(qrcode);
+    }
+
+    public QRCode findLastOne(String eid) {
+        QRCode qrCode = qrcodeRepository.findLastOne(eid);
+        if(null != qrCode ){
+            Date now = new Date();
+            Date time = DateUtil.getAfterIntervalMInDate(qrCode.getTime(), 5);
+            if(now.getTime() > time.getTime()){
+                qrCode.setStatus(1); //已失效|过期
+                qrcodeRepository.update(qrCode);
+            }
+            return qrCode;
+        }
+        return qrCode;
+    }
+}

+ 6 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/utils/DTOConverter.java

@@ -76,4 +76,10 @@ public class DTOConverter {
         BeanUtils.copyProperties(downloadInfoDTO, downloadInfo);
         return downloadInfo;
     }
+
+    public static QRCode convert(QRCodeDTO dto) {
+        QRCode qrcode = new QRCode();
+        BeanUtils.copyProperties(dto, qrcode);
+        return qrcode;
+    }
 }