Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

小么熊🐻 3 tahun lalu
induk
melakukan
e9614c6ba6

+ 83 - 0
twzd-admin/src/main/java/com/miaxis/app/controller/wx/VipController.java

@@ -0,0 +1,83 @@
+package com.miaxis.app.controller.wx;
+
+import com.alibaba.fastjson.JSONObject;
+import com.miaxis.common.config.WxpayConfig;
+import com.miaxis.common.constant.Constants;
+import com.miaxis.common.core.controller.BaseController;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.system.service.ISysDictDataService;
+import com.miaxis.wx.dto.WxOrderDTO;
+import com.miaxis.wx.service.IWxOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.HttpClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 【小程序-微信支付】Controller
+ *
+ * @author miaxis
+ * @date 2021-03-10
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(Constants.VIP_PREFIX+"/wx")
+@Api(tags = {"【VIP-接口】"})
+@Slf4j
+public class VipController extends BaseController {
+
+    @Autowired
+    private HttpClient httpClient;
+
+    @Autowired
+    private WxpayConfig wxpayConfig;
+
+    @Autowired
+    private IWxOrderService wxOrderService;
+
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    @Value("${app.appid}")
+    private String appid;
+    @Value("${wxpay.notifyUrl}")
+    private  String notifyUrl ;
+
+
+
+
+
+
+    /**
+     * 微信支付获取预订单id
+     */
+    @PostMapping(value = "/prepareOrder")
+    @ApiOperation("微信支付下单")
+    public Response<JSONObject> getPrepareOrder(@RequestBody WxOrderDTO wxOrderDTO) throws Exception{
+
+            return Response.success();
+
+
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 1 - 16
twzd-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -77,22 +77,7 @@ public class WxController extends BaseController {
 
 
 
-//
-//
-//    @GetMapping("/order/list")
-//    @ApiOperation("查询订单列表")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(name = "pageNum",value = "当前页码" ,dataType = "int", paramType = "query", required = false),
-//            @ApiImplicitParam(name = "pageSize",value = "每页数据量" , dataType = "int", paramType = "query", required = false),
-//    })
-//    public ResponsePageInfo<WxOrder> list(@ModelAttribute WxOrderListDTO wxOrderListDTO){
-//
-//        String openid = SecurityUtils.getLoginUser().getStudent().getOpenid();
-//        startPage();
-//        wxOrderListDTO.setOpenid(openid);
-//        List<WxOrder> list = wxOrderService.selectOrderList(wxOrderListDTO);
-//        return toResponsePageInfo(list);
-//    }
+
 
     /**
      * 微信支付获取预订单id

+ 13 - 10
twzd-admin/src/main/java/com/miaxis/app/controller/wx/WxNotifyController.java

@@ -6,8 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.miaxis.common.config.WxpayConfig;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.domain.entity.UserInfo;
+import com.miaxis.common.core.domain.model.LoginUser;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.AesUtil;
+import com.miaxis.common.utils.SecurityUtils;
+import com.miaxis.framework.web.service.TokenService;
 import com.miaxis.user.service.IUserInfoService;
 import com.miaxis.wx.domain.RefundRecord;
 import com.miaxis.wx.domain.WxOrder;
@@ -35,7 +38,6 @@ import java.nio.charset.StandardCharsets;
 import java.security.*;
 import java.security.cert.X509Certificate;
 import java.util.Date;
-import java.util.Random;
 
 @RestController
 @RequiredArgsConstructor
@@ -62,6 +64,9 @@ public class WxNotifyController {
     @Autowired
     private AutoUpdateCertificatesVerifier verifier;
 
+    @Autowired
+    private TokenService tokenService;
+
 
     /**
      * 微信支付回调接口
@@ -229,6 +234,13 @@ public class WxNotifyController {
         }
 
         userInfoService.updateById(userinfo);
+
+        //更新上下文中对象状态
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        loginUser.setStudent(userinfo);
+        //刷新缓存中的数据
+        tokenService.refreshToken(loginUser);
+
         return outTradeNo;
 
     }
@@ -239,16 +251,7 @@ public class WxNotifyController {
         return aesUtil.decryptToString(wxpaySource.getAssociated_data().getBytes(), wxpaySource.getNonce().getBytes(), wxpaySource.getCiphertext());
     }
 
-    private String randomVipcode() {
-        String result = "";
-        Random random = new Random();
-        for(int i =0 ;i <11 ;i ++){
-            result+=random.nextInt(10);
-        }
-        return  result;
-
 
-    }
 
 
 

+ 61 - 0
twzd-admin/src/main/java/com/miaxis/pc/controller/extension/WxExtensionIncomeController.java

@@ -0,0 +1,61 @@
+package com.miaxis.pc.controller.extension;
+
+import com.miaxis.common.core.controller.BaseController;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.core.page.ResponsePageInfo;
+import com.miaxis.extension.domain.WxExtensionIncome;
+import com.miaxis.extension.service.IWxExtensionIncomeService;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 【分成收益】Controller
+ * @author wwl
+ * @version 1.0
+ * @date 2021/11/4 15:02
+ */
+@RestController
+@RequestMapping("/pc/extension/income")
+@Api(tags={"【H5-分成收益】"})
+@AllArgsConstructor
+public class WxExtensionIncomeController extends BaseController {
+
+    private final IWxExtensionIncomeService wxExtensionIncomeService;
+
+
+    /**
+     * 查询分成收益列表
+     */
+    @PreAuthorize("@ss.hasPermi('extension:income:list')")
+    @GetMapping("/list")
+    @ApiOperation("查询分成收益列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum",value = "当前页码" ,dataType = "int", paramType = "query", required = false),
+            @ApiImplicitParam(name = "pageSize",value = "每页数据量" , dataType = "int", paramType = "query", required = false),
+    })
+    public ResponsePageInfo<WxExtensionIncome> list(@ModelAttribute WxExtensionIncome wxExtensionIncome){
+        startPage();
+        List<WxExtensionIncome> list = wxExtensionIncomeService.selectWxExtensionIncomeList(wxExtensionIncome);
+        return toResponsePageInfo(list);
+    }
+
+
+    /**
+     * 获取分成收益详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('extension:income:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation("获取分成收益详细信息")
+    public Response<WxExtensionIncome> getInfo(
+            @ApiParam(name = "id", value = "分成收益参数", required = true)
+            @PathVariable("id") Long id
+    ){
+        return Response.success(wxExtensionIncomeService.getById(id));
+    }
+
+
+}

+ 1 - 1
twzd-admin/src/main/java/com/miaxis/pc/controller/WxMenuController.java → twzd-admin/src/main/java/com/miaxis/pc/controller/wx/WxMenuController.java

@@ -1,4 +1,4 @@
-package com.miaxis.pc.controller;
+package com.miaxis.pc.controller.wx;
 
 import com.miaxis.common.annotation.Log;
 import com.miaxis.common.constant.Constants;

+ 4 - 0
twzd-common/src/main/java/com/miaxis/common/constant/Constants.java

@@ -178,6 +178,10 @@ public class Constants
      */
     public static final String STUDENT_PREFIX = "/student";
 
+    /**
+     * VIP
+     */
+    public static final String VIP_PREFIX = "/vip";
 
 
     /**

+ 5 - 7
twzd-common/src/main/java/com/miaxis/common/core/domain/model/LoginUser.java

@@ -10,10 +10,7 @@ import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 登录用户身份权限
@@ -272,9 +269,10 @@ public class LoginUser implements UserDetails
             List<SimpleGrantedAuthority> roleList = new ArrayList<SimpleGrantedAuthority>();
             roleList.add(new SimpleGrantedAuthority("ROLE_STUDENT"));
             //如果已激活,是vip的话
-//            if (this.getStudent().getIsVip() == 1){
-//                roleList.add(new SimpleGrantedAuthority("ROLE_VIP"));
-//            }
+            Date expireTime = this.getStudent().getExpireTime();
+            if (expireTime != null && expireTime.getTime() > System.currentTimeMillis()){
+                roleList.add(new SimpleGrantedAuthority("ROLE_VIP"));
+            }
             return roleList;
         }else {
             return null;

+ 1 - 0
twzd-framework/src/main/java/com/miaxis/framework/config/SecurityConfig.java

@@ -105,6 +105,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/login", "/login/noCode","/captchaImage","/login/code","/login/code/test","/login/jscode-test").anonymous()
                 //.antMatchers("/student/open/**").permitAll()
                 .antMatchers("/student/**").hasRole("STUDENT")
+                .antMatchers("/vip/**").hasRole("VIP")
                 .antMatchers(
                         HttpMethod.GET,
                         "/*.html",

+ 61 - 0
twzd-service/src/main/java/com/miaxis/extension/domain/WxExtensionIncome.java

@@ -0,0 +1,61 @@
+package com.miaxis.extension.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 分成收益对象 wx_extension_income
+ * @author wwl
+ * @version 1.0
+ * @date 2021/11/4 14:34
+ */
+@Data
+@TableName("wx_extension_income")
+@ApiModel(value = "WxExtensionIncome", description = "分成收益对象 wx_extension_income")
+public class WxExtensionIncome extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @TableId(value = "id")
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableField("source_id")
+    @ApiModelProperty(value = "收益来源订单id")
+    private Long sourceId;
+
+    @TableField("beneficiary_openid")
+    @ApiModelProperty(value = "受益人----用户唯一标识(微信)")
+    private String beneficiaryOpenid;
+
+    @TableField("source_openid")
+    @ApiModelProperty(value = "收益来源人----用户唯一标识")
+    private String sourceOpenid;
+
+    @TableField("hierarchy")
+    @ApiModelProperty(value = "层级,1:一级 ,2:二级(受益人 相对于收益来源人 层级关系)")
+    private String hierarchy;
+
+    @TableField("percentage")
+    @ApiModelProperty(value = "分成百分比")
+    private BigDecimal percentage;
+
+    @TableField("profit_price")
+    @ApiModelProperty(value = "收益金额-----根据层级分成百分比计算")
+    private BigDecimal profitPrice;
+
+    @TableField("extract_status")
+    @ApiModelProperty(value = "提现状态  0:未提现(默认)、1:已提现")
+    private String extractStatus;
+
+    @TableField("status")
+    @ApiModelProperty(value = "状态  0:有效(默认)、1:失效 (伪删除)")
+    private String status;
+}

+ 22 - 0
twzd-service/src/main/java/com/miaxis/extension/mapper/WxExtensionIncomeMapper.java

@@ -0,0 +1,22 @@
+package com.miaxis.extension.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.extension.domain.WxExtensionIncome;
+
+import java.util.List;
+
+/**
+ * 分成收益Mapper接口
+ * @author wwl
+ * @version 1.0
+ * @date 2021/11/4 14:36
+ */
+public interface WxExtensionIncomeMapper extends BaseMapper<WxExtensionIncome> {
+    /**
+     * 查询分成收益列表
+     *
+     * @param wxExtensionIncome 分成收益
+     * @return 分成收益集合
+     */
+    List<WxExtensionIncome> selectWxExtensionIncomeList(WxExtensionIncome wxExtensionIncome);
+}

+ 36 - 0
twzd-service/src/main/java/com/miaxis/extension/service/IWxExtensionIncomeService.java

@@ -0,0 +1,36 @@
+package com.miaxis.extension.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.extension.domain.WxExtensionIncome;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 分成收益Service接口
+ * @author wwl
+ * @version 1.0
+ * @date 2021/11/4 14:37
+ */
+public interface IWxExtensionIncomeService extends IService<WxExtensionIncome> {
+
+    /**
+     * 查询分成收益列表
+     *
+     * @param wxExtensionIncome 分成收益
+     * @return 分成收益集合
+     */
+    List<WxExtensionIncome> selectWxExtensionIncomeList(WxExtensionIncome wxExtensionIncome);
+
+
+    /**
+     * 新增收益信息
+     * @param sourceId  订单id
+     * @param sourceOpenid 用户openid
+     * @param sourcePrice 订单金额
+     * @return
+     */
+    Response addExtensionIncomeBySourceId(Long sourceId, String sourceOpenid, BigDecimal sourcePrice);
+
+}

+ 110 - 0
twzd-service/src/main/java/com/miaxis/extension/service/impl/WxExtensionIncomeServiceImpl.java

@@ -0,0 +1,110 @@
+package com.miaxis.extension.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.core.domain.entity.SysDictData;
+import com.miaxis.extension.domain.WxExtensionIncome;
+import com.miaxis.extension.mapper.WxExtensionIncomeMapper;
+import com.miaxis.extension.service.IWxExtensionIncomeService;
+import com.miaxis.spread.domain.WxSpreadRelation;
+import com.miaxis.spread.service.IWxSpreadRelationService;
+import com.miaxis.system.service.ISysDictDataService;
+import com.miaxis.system.service.ISysDictTypeService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 分成收益Service业务层处理
+ * @author wwl
+ * @version 1.0
+ * @date 2021/11/4 14:38
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class WxExtensionIncomeServiceImpl extends ServiceImpl<WxExtensionIncomeMapper, WxExtensionIncome> implements IWxExtensionIncomeService {
+
+
+    private final WxExtensionIncomeMapper wxExtensionIncomeMapper;
+
+    private final IWxSpreadRelationService wxSpreadRelationService;
+
+    private final ISysDictTypeService dictTypeService;
+
+    private final ISysDictDataService dictDataService;
+
+    /**
+     * 查询分成收益列表
+     *
+     * @param wxExtensionIncome 分成收益
+     * @return 分成收益
+     */
+    @Override
+    public List<WxExtensionIncome> selectWxExtensionIncomeList(WxExtensionIncome wxExtensionIncome){
+        return wxExtensionIncomeMapper.selectWxExtensionIncomeList(wxExtensionIncome);
+    }
+
+    /**
+     * 新增收益信息
+     * @param sourceId  订单id
+     * @param sourceOpenid 用户openid
+     * @param sourcePrice 订单金额
+     * @return
+     */
+    @Override
+    public Response addExtensionIncomeBySourceId(Long sourceId, String sourceOpenid, BigDecimal sourcePrice) {
+
+        //查找一二级绑定关系
+        WxSpreadRelation oneRelation = wxSpreadRelationService.getOne(new QueryWrapper<WxSpreadRelation>().eq("openid", sourceOpenid));
+        if (oneRelation == null){
+            log.info(sourceOpenid+": 此用户不存在绑定关系");
+            return Response.success();
+        }
+
+        WxSpreadRelation twoRelation = wxSpreadRelationService.getOne(new QueryWrapper<WxSpreadRelation>().eq("openid", oneRelation.getParentOpenid()));
+
+        //根据字典获取分成百分比
+        List<SysDictData> dictDatas = dictTypeService.selectDictDataByType("sys_divide_percent");
+
+        List<WxExtensionIncome> extensionIncomes = new ArrayList<>();
+        dictDatas.forEach(d -> {
+            if ("一级".equals(d.getDictLabel())){
+                BigDecimal decimal = BigDecimal.valueOf(Double.parseDouble(d.getDictValue()));//百分比
+                WxExtensionIncome income = new WxExtensionIncome();
+                income.setSourceId(sourceId);
+                income.setBeneficiaryOpenid(oneRelation.getParentOpenid());
+                income.setSourceOpenid(sourceOpenid);
+                income.setHierarchy("1");
+                income.setPercentage(decimal);
+                income.setProfitPrice(sourcePrice.multiply(decimal));
+                extensionIncomes.add(income);
+            }
+
+            if (twoRelation != null){
+                if ("二级".equals(d.getDictLabel())){
+                    BigDecimal decimal = BigDecimal.valueOf(Double.parseDouble(d.getDictValue()));//百分比
+                    WxExtensionIncome income = new WxExtensionIncome();
+                    income.setSourceId(sourceId);
+                    income.setBeneficiaryOpenid(twoRelation.getParentOpenid());
+                    income.setSourceOpenid(sourceOpenid);
+                    income.setHierarchy("2");
+                    income.setPercentage(decimal);
+                    income.setProfitPrice(sourcePrice.multiply(decimal));
+                    extensionIncomes.add(income);
+                }
+            }
+        });
+
+        //保存分成收益信息
+        this.saveBatch(extensionIncomes);
+
+        return Response.success();
+    }
+
+}

+ 39 - 0
twzd-service/src/main/resources/mapper/extension/WxExtensionIncomeMapper.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miaxis.extension.mapper.WxExtensionIncomeMapper">
+
+    <resultMap type="WxExtensionIncome" id="WxExtensionIncomeResult">
+        <result property="id"    column="id"    />
+        <result property="sourceId"    column="source_id"    />
+        <result property="beneficiaryOpenid"    column="beneficiary_openid"    />
+        <result property="sourceOpenid"    column="source_openid"    />
+        <result property="hierarchy"    column="hierarchy"    />
+        <result property="percentage"    column="percentage"    />
+        <result property="profitPrice"    column="profit_price"    />
+        <result property="extractStatus"    column="extract_status"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="status"    column="status"    />
+    </resultMap>
+
+    <sql id="selectWxExtensionIncomeVo">
+        select * from wx_extension_income
+    </sql>
+
+    <select id="selectWxExtensionIncomeList" parameterType="WxExtensionIncome" resultMap="WxExtensionIncomeResult">
+        <include refid="selectWxExtensionIncomeVo"/>
+        <where>
+            <if test="sourceId != null "> and source_id = #{sourceId}</if>
+            <if test="beneficiaryOpenid != null  and beneficiaryOpenid != ''"> and beneficiary_openid = #{beneficiaryOpenid}</if>
+            <if test="sourceOpenid != null  and sourceOpenid != ''"> and source_openid = #{sourceOpenid}</if>
+            <if test="hierarchy != null  and hierarchy != ''"> and hierarchy = #{hierarchy}</if>
+            <if test="percentage != null "> and percentage = #{percentage}</if>
+            <if test="profitPrice != null "> and profit_price = #{profitPrice}</if>
+            <if test="extractStatus != null  and extractStatus != ''"> and extract_status = #{extractStatus}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+        </where>
+    </select>
+
+</mapper>