From 32866c0896969b3ac6f3eaddf0420507708c9c52 Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期五, 17 五月 2024 16:28:57 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java |  361 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 345 insertions(+), 16 deletions(-)

diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
index 433086e..cc0d7d8 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -1,32 +1,36 @@
 package com.ruoyi.study.controller;
 
 
+import com.alipay.api.AlipayApiException;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.management.api.feignClient.ManagementClient;
 import com.ruoyi.management.api.model.TPage;
+import com.ruoyi.management.api.model.TVipSet;
 import com.ruoyi.study.domain.TUser;
+import com.ruoyi.study.domain.TVipOrder;
 import com.ruoyi.study.dto.AppUserQuery;
 import com.ruoyi.study.dto.UserInfoQuery;
 import com.ruoyi.study.service.ITUserService;
 import com.ruoyi.study.service.IVipOrderService;
-import com.ruoyi.study.vo.AppUserVO;
-import com.ruoyi.study.vo.UserGameRecordVO;
-import com.ruoyi.study.vo.UserInfoVO;
-import com.ruoyi.study.vo.VipOrderVO;
+import com.ruoyi.study.utils.PayMoneyUtil;
+import com.ruoyi.study.utils.UUIDUtil;
+import com.ruoyi.study.vo.*;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * <p>
@@ -46,6 +50,169 @@
     private IVipOrderService vipOrderService;
     @Autowired
     private ManagementClient managementClient;
+    @PostMapping("/vipInfo")
+    @ApiOperation(value = "会员中心-获取会员说明、当前登录用户是否为会员、会员购买规格", tags = {"家长端-个人中心"})
+    public AjaxResult<List<VipInfoVO>> vipInfo() {
+        List<VipInfoVO> vipInfoVOS = new ArrayList<>();
+        List<TVipSet> data = managementClient.getVipSet1().getData();
+        for (TVipSet datum : data) {
+            VipInfoVO vipInfoVO = new VipInfoVO();
+            vipInfoVO.setInfo(datum.getInfo());
+            vipInfoVO.setId(datum.getId());
+//            vipInfoVO.setIsVip();
+            vipInfoVO.setTime(datum.getTime());
+            vipInfoVO.setAmount(datum.getAmount());
+        }
+        return AjaxResult.ok(vipInfoVOS);
+    }
+    @Autowired
+    private PayMoneyUtil payMoneyUtil;
+
+    @PostMapping("/order")
+    @ApiOperation(value = "购买会员下单操作", tags = {"家长端-个人中心"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
+            @ApiImplicitParam(name = "payType", value = "支付类型 1=微信 2=支付宝", required = true),
+            @ApiImplicitParam(name = "id", value = "会员规格id", required = true),
+    })
+    public AjaxResult order(Integer payType,Integer id) throws Exception {
+        TVipOrder tVipOrder = new TVipOrder();
+        List<TVipSet> data = managementClient.getVipSet1().getData();
+        Integer time = 0;
+        for (TVipSet datum : data) {
+            if (datum.getId() == id){
+                tVipOrder.setMoney(datum.getAmount());
+                time = datum.getTime();
+            }
+        }
+        tVipOrder.setPayState(1);
+//        tVipOrder.setUserId();
+//        tVipOrder.setPayTime();
+//        tVipOrder.setBackTime();
+//        tVipOrder.setTime();
+        tVipOrder.setPayType(payType);
+        tVipOrder.setCount(time);
+        switch (payType){
+            case 1:
+                return payMoneyUtil.weixinpay
+                        ("购买会员", "",
+                                id+"_"+tVipOrder.getId() + "_"+
+                                        UUIDUtil.getRandomCode(8),
+                                tVipOrder.getMoney().toString(),
+                                "/base/wxPayBuyVip", "APP", "");
+            case 2:
+                return payMoneyUtil.alipay
+                        ("购买会员",
+                                "购买会员下单支付",
+                                "",
+                                id+"_"+tVipOrder.getId()+"_"+
+                                        UUIDUtil.getRandomCode(8),
+                                tVipOrder.getMoney().toString(),
+                                "/base/aliPayBuyVip");
+        }
+        return AjaxResult.success();
+    }
+    @ResponseBody
+    @PostMapping("/base/aliPayBuyVip")
+    public void addVipPaymentAliCallback(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, String> map = payMoneyUtil.alipayCallback(request);
+            if (null != map) {
+                String out_trade_no = map.get("out_trade_no");
+                String trade_no = map.get("trade_no");
+                // 会员规格id
+                String s = out_trade_no.split("_")[0];
+                Integer integer = Integer.valueOf(s);
+                Integer time  = 0;
+                for (TVipSet datum : managementClient.getVipSet1().getData()) {
+                    if (datum.getId() == integer){
+                        time = datum.getTime();
+                    }
+                }
+                // 订单id
+                String s1 = out_trade_no.split("_")[1];
+                Integer integer1 = Integer.valueOf(s1);
+                TVipOrder byId = vipOrderService.getById(integer1);
+                byId.setPayState(2);
+                byId.setTransactionId(trade_no);
+                byId.setOutTradeNo(out_trade_no);
+                byId.setPayTime(new Date());
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(new Date());
+                calendar.add(Calendar.MONTH, time);
+                Date dateAfterOneMonth = calendar.getTime();
+                byId.setTime(dateAfterOneMonth);
+                // 修改订单状态
+                vipOrderService.updateById(byId);
+                TUser byId1 = userService.getById(byId.getUserId());
+                if (byId1.getVipPayTime() == null){
+                    // 是否是首次充值会员
+                    byId1.setVipPayTime(new Date());
+                }
+                byId1.setVipEndTime(dateAfterOneMonth);
+                // 修改用户会员续期信息
+                userService.updateById(byId1);
+                PrintWriter out = response.getWriter();
+                out.write("success");
+                out.flush();
+                out.close();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    @ResponseBody
+    @PostMapping("/base/wxPayBuyVip")
+    public void wxPayBuyPackage(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
+            if (null != map) {
+                // 内部订单号
+                String out_trade_no = map.get("out_trade_no");
+                // 微信订单号
+                String transaction_id = map.get("transaction_id");
+                String result = map.get("result");
+                // 会员规格id
+                String s = out_trade_no.split("_")[0];
+                Integer integer = Integer.valueOf(s);
+                Integer time  = 0;
+                for (TVipSet datum : managementClient.getVipSet1().getData()) {
+                    if (datum.getId() == integer){
+                        time = datum.getTime();
+                    }
+                }
+                // 订单id
+                String s1 = out_trade_no.split("_")[1];
+                Integer integer1 = Integer.valueOf(s1);
+                TVipOrder byId = vipOrderService.getById(integer1);
+                byId.setPayState(2);
+                byId.setTransactionId(transaction_id);
+                byId.setOutTradeNo(out_trade_no);
+                byId.setPayTime(new Date());
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(new Date());
+                calendar.add(Calendar.MONTH, time);
+                Date dateAfterOneMonth = calendar.getTime();
+                byId.setTime(dateAfterOneMonth);
+                // 修改订单状态
+                vipOrderService.updateById(byId);
+                TUser byId1 = userService.getById(byId.getUserId());
+                if (byId1.getVipPayTime() == null){
+                    // 是否是首次充值会员
+                    byId1.setVipPayTime(new Date());
+                }
+                byId1.setVipEndTime(dateAfterOneMonth);
+                // 修改用户会员续期信息
+                userService.updateById(byId1);
+                PrintWriter out = response.getWriter();
+                out.write(result);
+                out.flush();
+                out.close();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
     @PostMapping("/getPage")
     @ApiOperation(value = "获取注意事项", tags = {"家长端-注意事项"})
     public AjaxResult<TPage> getPage() {
@@ -57,16 +224,176 @@
         }
         return AjaxResult.success();
     }
+    @Autowired
+    private TokenService tokenService;
+//    @Autowired
+//    private HWSendSms hwSendSms;
+//    @ResponseBody
+//    @PostMapping("/getSMSCode")
+//    @ApiOperation(value = "获取短信验证码", tags = {"家长端-登录注册"})
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(value = "类型(1:登录,2:注册,3:修改密码,4:忘记密码,5:修改绑定手机号)", name = "type", dataType = "int", required = true),
+//            @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true)
+//    })
+//    public AjaxResult getSMSCode(Integer type, String phone) {
+//        if (ToolUtil.isEmpty(phone)) {
+//            return AjaxResult.paranErr("phone");
+//        }
+//        if (ToolUtil.isEmpty(type)) {
+//            return AjaxResult.paranErr("type");
+//        }
+//        try {
+//            if (type == 2) {
+//                AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
+//                        .eq("phone", phone).ne("state", 3));
+//                if (null != tAppUser) {
+//                    return AjaxResult.error("账号已存在");
+//                }
+//            }
+//            if (type == 5) {
+//                AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
+//                        .eq("phone", phone).ne("state", 3));
+//                if (null != tAppUser) {
+//                    return AjaxResult.error("账号已存在");
+//                }
+//            }
+//            String numberRandom = UUIDUtil.getNumberRandom(6);
+//            String templateCode = "";
+//            if (type == 1 || type == 2) {
+//                templateCode = "SMS_161275250";
+//            }
+//            if (type == 3 || type == 4) {
+//                templateCode = "SMS_160960014";
+//            }
+////            aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + numberRandom + "\"}");
+//            hwSendSms.sendSms(numberRandom,phone);
+//            redisUtil.setStrValue(phone, numberRandom, 300);
+//            return AjaxResult.success();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return ResultUtil.runErr();
+//        }
+//    }
+
     @PostMapping("/updateUserInfo")
     @ApiOperation(value = "修改个人资料", tags = {"家长端-个人中心"})
-
-    public AjaxResult updateUserInfo() {
-
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
+            @ApiImplicitParam(name = "name", value = "姓名 改什么就只传什么"),
+            @ApiImplicitParam(name = "phone", value = "电话 改什么就只传什么"),
+            @ApiImplicitParam(name = "headImg", value = "头像 改什么就只传什么"),
+    })
+    public AjaxResult updateUserInfo(String name, String phone,String headImg) {
+        // todo 获取用户id
+        Long userid = tokenService.getLoginUser().getUserid();
+        TUser byId = userService.getById(userid);
+        if (StringUtils.hasLength(name)){
+            byId.setName(name);
+        }
+        if (StringUtils.hasLength(phone)){
+            // 先判断手机号是否和当前用户手机号一致
+//            if (byId == null){
+//                return AjaxResult.tokenError("登录失效");
+//            }
+            if (phone.equals(byId.getPhone())){
+                return AjaxResult.error("更换的手机号不能和原手机号相同");
+            }
+            byId.setPhone(phone);
+        }
+        if (StringUtils.hasLength(headImg)){
+            byId.setHeadImg(headImg);
+        }
+        userService.updateById(byId);
         return AjaxResult.success("修改成功");
+    }
+    @PostMapping("/vipBack/{id}")
+    @ApiOperation(value = "会员退款", tags = {"管理后台-会员退款"})
+    public R vipBack(@PathVariable("id") Integer id) throws AlipayApiException {
+        TVipOrder byId = vipOrderService.getById(id);
+        // 外部订单号
+        String transactionId = byId.getTransactionId();
+        // 内部订单号
+        String outTradeNo = byId.getOutTradeNo();
+        switch (byId.getPayType()){
+            case 1:
+                 // 微信退款
+                Map<String, String> stringStringMap = payMoneyUtil.wxRefund(transactionId, outTradeNo, byId.getMoney().toString(), byId.getMoney().toString(), "/base/wxRefund");
+                if (stringStringMap.get("code").equals("SUCCESS")){
+                    byId.setPayState(3);
+                    byId.setBackTime(new Date());
+                    vipOrderService.updateById(byId);
+                    // 用户的vip剩余时间减少
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.add(Calendar.MONTH, -byId.getCount());
+                    Date dateAfterOneMonth = calendar.getTime();
+                    Integer userId = byId.getUserId();
+                    TUser byId1 = userService.getById(userId);
+                    // 判断用户是不是第一次充值
+                    List<TVipOrder> list = vipOrderService.list(new QueryWrapper<TVipOrder>()
+                            .eq("userId", userId)
+                            .eq("payState", 2)
+                            .orderByDesc("createTime"));
+                    int size = list.size();
+                    if (size == 0){
+                        // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空
+                        byId1.setVipEndTime(null);
+                        byId1.setVipPayTime(null);
+                        userService.updateById(byId1);
+                    }else{
+                        // 最近的一次充值会员时间
+                        TVipOrder tVipOrder = list.get(0);
+                        // 将会员到期时间回退到上一次
+                        byId1.setVipEndTime(tVipOrder.getTime());
+                        userService.updateById(byId1);
+                    }
+
+                    return R.ok();
+                }else{
+                    return R.fail(stringStringMap.get("msg"));
+                }
+            case 2:
+                // 支付宝退款
+                Map<String, String> stringStringMap1 = payMoneyUtil.aliRefund(transactionId,byId.getMoney().toString());
+                if (stringStringMap1.get("code").equals("10000")){
+                    byId.setPayState(3);
+                    byId.setBackTime(new Date());
+                    vipOrderService.updateById(byId);
+                    // 用户的vip剩余时间减少
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.add(Calendar.MONTH, -byId.getCount());
+                    Date dateAfterOneMonth = calendar.getTime();
+                    Integer userId = byId.getUserId();
+                    TUser byId1 = userService.getById(userId);
+                    // 判断用户是不是第一次充值
+                    List<TVipOrder> list = vipOrderService.list(new QueryWrapper<TVipOrder>()
+                            .eq("userId", userId)
+                            .eq("payState", 2)
+                            .orderByDesc("createTime"));
+                    int size = list.size();
+                    if (size == 0){
+                        // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空
+                        byId1.setVipEndTime(null);
+                        byId1.setVipPayTime(null);
+                        userService.updateById(byId1);
+                    }else{
+                        // 最近的一次充值会员时间
+                        TVipOrder tVipOrder = list.get(0);
+                        // 将会员到期时间回退到上一次
+                        byId1.setVipEndTime(tVipOrder.getTime());
+                        userService.updateById(byId1);
+                    }
+                    return R.ok();
+                }else{
+                    return R.fail(stringStringMap1.get("msg"));
+                }
+        }
+        return R.ok();
     }
     @PostMapping("/userList")
     @ApiOperation(value = "用户列表", tags = {"管理后台-用户管理"})
-    public R<PageInfo<AppUserVO>> couponReceive(AppUserQuery query) {
+    public R<PageInfo<AppUserVO>> couponReceive(@RequestBody AppUserQuery query) {
         PageInfo<AppUserVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
         List<AppUserVO> list =  userService.listAll(query);
         for (AppUserVO appUserVO : list) {
@@ -87,7 +414,7 @@
 
     @PostMapping("/getUserInfo")
     @ApiOperation(value = "查看用户详情", tags = {"管理后台-用户管理"})
-    public R<UserInfoVO> getUserInfo(UserInfoQuery dto) {
+    public R<UserInfoVO> getUserInfo(@RequestBody UserInfoQuery dto) {
         SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
         UserInfoVO res = new UserInfoVO();
         PageInfo<UserGameRecordVO> list = new PageInfo<>(dto.getPageNumber(), dto.getPageSize());
@@ -130,15 +457,17 @@
         res.setGameRecords(list);
         return R.ok(res);
     }
-    @PostMapping("/freeze")
+    @PostMapping("/freeze/{id}")
     @ApiOperation(value = "冻结/解冻", tags = {"管理后台-用户管理"})
-    public R freeze(Integer id) {
+    public R freeze(@PathVariable("id")  Integer id) {
         TUser byId = userService.getById(id);
         if (byId.getState() == 1) {
             byId.setState(2);
+            userService.updateById(byId);
             return R.ok("冻结成功");
         }else {
             byId.setState(1);
+            userService.updateById(byId);
             return R.ok("解冻成功");
         }
     }
@@ -146,7 +475,7 @@
 
     @PostMapping("/vipOrderList")
     @ApiOperation(value = "列表查询", tags = {"管理后台-会员管理"})
-    public R<PageInfo<VipOrderVO>> vipOrderList(AppUserQuery query) {
+    public R<PageInfo<VipOrderVO>> vipOrderList(@RequestBody AppUserQuery query) {
         PageInfo<VipOrderVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
         List<VipOrderVO> list =  vipOrderService.listAll(query);
         res.setRecords(list);

--
Gitblit v1.7.1