From 2d08b036f5bdb9c34d686d6d125d5690a948ffa0 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 11 三月 2023 17:33:38 +0800
Subject: [PATCH] 新增加用户端接口

---
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java |   92 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 88 insertions(+), 4 deletions(-)

diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
index ab94bfa..fd81855 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
@@ -4,19 +4,26 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.supersavedriving.user.core.common.constant.JwtConstants;
 import com.supersavedriving.user.core.shiro.ShiroKit;
 import com.supersavedriving.user.core.shiro.ShiroUser;
 import com.supersavedriving.user.core.util.JwtTokenUtil;
 import com.supersavedriving.user.core.util.ToolUtil;
 import com.supersavedriving.user.modular.system.dao.AppUserMapper;
 import com.supersavedriving.user.modular.system.model.AppUser;
+import com.supersavedriving.user.modular.system.model.Coupon;
+import com.supersavedriving.user.modular.system.model.UserToCoupon;
 import com.supersavedriving.user.modular.system.service.IAppUserService;
+import com.supersavedriving.user.modular.system.service.ICouponService;
+import com.supersavedriving.user.modular.system.service.IUserToCouponService;
 import com.supersavedriving.user.modular.system.util.RedisUtil;
 import com.supersavedriving.user.modular.system.util.ResultUtil;
 import com.supersavedriving.user.modular.system.util.weChat.WXCore;
 import com.supersavedriving.user.modular.system.util.weChat.WeChatUtil;
 import com.supersavedriving.user.modular.system.util.weChat.model.Code2Session;
+import com.supersavedriving.user.modular.system.warpper.CouponWarpper;
 import com.supersavedriving.user.modular.system.warpper.SignInToRegister;
+import com.supersavedriving.user.modular.system.warpper.SignInToRegisterWarpper;
 import org.apache.shiro.authc.SimpleAuthenticationInfo;
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
@@ -24,8 +31,13 @@
 import org.apache.shiro.util.ByteSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -42,12 +54,18 @@
 
     private final String salt = "s5d1";
 
+    @Autowired
+    private ICouponService couponService;
+
+    @Autowired
+    private IUserToCouponService userToCouponService;
+
 
 
     @Override
     public ResultUtil<String> appUserLogin(String jscode) throws Exception {
         Code2Session code2Session = weChatUtil.code2Session(jscode);
-        if(code2Session.getErrcode() != 0){
+        if(null != code2Session.getErrcode() && code2Session.getErrcode() != 0){
             return ResultUtil.error(code2Session.getErrmsg());
         }
         String openid = code2Session.getOpenid();
@@ -107,7 +125,8 @@
      * @throws Exception
      */
     @Override
-    public ResultUtil signInToRegister(SignInToRegister signInToRegister) throws Exception {
+    public ResultUtil<SignInToRegisterWarpper> signInToRegister(SignInToRegister signInToRegister) throws Exception {
+        SignInToRegisterWarpper warpper = new SignInToRegisterWarpper();
         if(ToolUtil.isEmpty(signInToRegister.getJscode())){
             return ResultUtil.paranErr("jscode");
         }
@@ -118,7 +137,7 @@
             return ResultUtil.paranErr("ivPhone");
         }
         Code2Session code2Session = weChatUtil.code2Session(signInToRegister.getJscode());
-        if(code2Session.getErrcode() != 0){
+        if(null != code2Session.getErrcode() && code2Session.getErrcode() != 0){
             return ResultUtil.error(code2Session.getErrmsg());
         }
         String openid = code2Session.getOpenid();
@@ -143,6 +162,13 @@
             appUser.setInviterId(signInToRegister.getInviterId());
             appUser.setInviterType(signInToRegister.getInviterType());
             this.insert(appUser);
+            //发送优惠券
+            boolean lock = redisUtil.lock();
+            if(lock){
+                List<CouponWarpper> list = pushCoupon(appUser.getId());
+                redisUtil.unlock();
+                warpper.setCoupons(list);
+            }
         }
         if(appUser.getStatus() == 2){
             return ResultUtil.error("账号被冻结");
@@ -151,6 +177,64 @@
         if(ToolUtil.isEmpty(token)){
             return ResultUtil.error("获取身份凭证失败");
         }
-        return ResultUtil.success(token);
+        warpper.setToken(token);
+        return ResultUtil.success(warpper);
+    }
+
+
+    /**
+     * 发送优惠券
+     * @param userId
+     */
+    public List<CouponWarpper> pushCoupon(Integer userId){
+        List<Coupon> coupons = couponService.selectList(new EntityWrapper<Coupon>().eq("coupon_type", 2).eq("coupon_state", 1).gt("remaining_quantity", 0));
+        List<CouponWarpper> list = new ArrayList<>();
+        for (Coupon coupon : coupons) {
+            UserToCoupon userToCoupon = new UserToCoupon();
+            userToCoupon.setCouponId(coupon.getId());
+            userToCoupon.setCreateTime(new Date());
+            userToCoupon.setUserId(userId);
+            userToCoupon.setStatus(1);
+            userToCoupon.setCouponTotal(coupon.getCouponSendQuantity() > coupon.getRemainingQuantity() ?
+                    coupon.getRemainingQuantity() : coupon.getCouponSendQuantity());
+            userToCoupon.setValidCount(userToCoupon.getCouponTotal());
+            userToCoupon.setExpireTime(new Date(System.currentTimeMillis() + (coupon.getCouponValidity() * 24 * 60 * 60 * 1000)));
+            userToCouponService.insert(userToCoupon);
+
+            coupon.setRemainingQuantity(coupon.getCouponSendQuantity() > coupon.getRemainingQuantity() ? 0 :
+                    coupon.getRemainingQuantity() - coupon.getCouponSendQuantity());
+            couponService.updateById(coupon);
+
+            CouponWarpper couponWarpper = new CouponWarpper();
+            couponWarpper.setCouponConditionalAmount(coupon.getCouponConditionalAmount());
+            couponWarpper.setCouponPreferentialAmount(coupon.getCouponPreferentialAmount());
+            couponWarpper.setCouponName(coupon.getCouponName());
+            couponWarpper.setNumber(userToCoupon.getValidCount());
+            couponWarpper.setExpirationDate(userToCoupon.getExpireTime().getTime());
+            list.add(couponWarpper);
+        }
+        return list;
+    }
+
+
+    @Override
+    public Integer getUserByRequest() throws Exception {
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = servletRequestAttributes.getRequest();
+        String requestHeader = request.getHeader(JwtConstants.AUTH_HEADER);
+        if (ToolUtil.isNotEmpty(requestHeader) && requestHeader.startsWith("Bearer ")) {
+            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
+            String key = null;
+            int length = requestHeader.length();
+            if(length > 16){
+                key = requestHeader.substring(length - 16);
+            }else{
+                key = requestHeader;
+            }
+            String value = redisUtil.getValue(key);
+            return null != value ? Integer.valueOf(value) : null;
+        }else{
+            return null;
+        }
     }
 }

--
Gitblit v1.7.1