suochencheng 6 лет назад
Родитель
Сommit
47fc069b7c

+ 61 - 1
src/main/java/com/izouma/awesomeadmin/dao/PayCodeInfoMapper.xml

@@ -16,12 +16,18 @@
         <result column="use_flag" property="useFlag" jdbcType="CHAR"/>
         <result column="remark" property="remark" jdbcType="VARCHAR"/>
         <result column="auto_timeover" property="autoTimeover" jdbcType="CHAR"/>
+        <result column="user_id" property="userId" jdbcType="INTEGER"/>
+        <result column="daymoney" property="daymoney" jdbcType="INTEGER"/>
+        <result column="daytimes" property="daytimes" jdbcType="INTEGER"/>
+        <result column="monthmoney" property="monthmoney" jdbcType="INTEGER"/>
+        <result column="monthtimes" property="monthtimes" jdbcType="INTEGER"/>
         <!--generatedEnd-->
     </resultMap>
 
     <sql id="Base_Column_List">
         <!--generatedStart-->
-        id, del_flag, update_time, update_user, create_time, create_user, code_name, pay_type, image, limit_money, use_flag, remark, auto_timeover        <!--generatedEnd-->
+        id, del_flag, update_time, update_user, create_time, create_user, code_name, pay_type, image,
+        limit_money, use_flag, remark, auto_timeover , user_id ,daymoney ,daytimes, monthmoney, monthtimes      <!--generatedEnd-->
     </sql>
 
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
@@ -80,6 +86,21 @@
             <if test="autoTimeover!= null">
                 auto_timeover,
             </if>
+            <if test="userId!= null">
+                user_id,
+            </if>
+            <if test="daymoney!= null">
+                daymoney,
+            </if>
+            <if test="daytimes!= null">
+                daytimes,
+            </if>
+            <if test="monthmoney!= null">
+                monthmoney,
+            </if>
+            <if test="monthtimes!= null">
+                monthtimes,
+            </if>
             <!--generatedEnd-->
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -123,6 +144,21 @@
             <if test="autoTimeover != null">
                 #{autoTimeover,jdbcType=CHAR},
             </if>
+            <if test="userId != null">
+                #{userId},
+            </if>
+            <if test="daymoney != null">
+                #{daymoney},
+            </if>
+            <if test="daytimes != null">
+                #{daytimes},
+            </if>
+            <if test="monthmoney != null">
+                #{monthmoney},
+            </if>
+            <if test="monthtimes != null">
+                #{monthtimes},
+            </if>
             <!--generatedEnd-->
         </trim>
     </insert>
@@ -170,6 +206,21 @@
             <if test="autoTimeover != null">
                 auto_timeover= #{autoTimeover,jdbcType=CHAR},
             </if>
+            <if test="userId != null">
+                user_id= #{userId},
+            </if>
+            <if test="daymoney != null">
+                daymoney= #{daymoney},
+            </if>
+            <if test="daytimes != null">
+                daytimes= #{daytimes},
+            </if>
+            <if test="monthmoney != null">
+                monthmoney= #{monthmoney},
+            </if>
+            <if test="monthtimes != null">
+                monthtimes= #{monthtimes},
+            </if>
             <!--generatedEnd-->
         </set>
         WHERE
@@ -228,6 +279,9 @@
             <if test="record.autoTimeover != null and !&quot;&quot;.equals(record.autoTimeover)">
                 AND auto_timeover = #{record.autoTimeover}
             </if>
+            <if test="record.userId != null and !&quot;&quot;.equals(record.userId)">
+                AND user_id = #{record.userId}
+            </if>
             <!--generatedEnd-->
             <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
@@ -328,6 +382,9 @@
             <if test="autoTimeover != null and !&quot;&quot;.equals(autoTimeover)">
                 AND auto_timeover = #{autoTimeover}
             </if>
+            <if test="userId != null and !&quot;&quot;.equals(userId)">
+                AND user_id = #{userId}
+            </if>
             <!--generatedEnd-->
             <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
@@ -424,6 +481,9 @@
             <if test="autoTimeover != null and !&quot;&quot;.equals(autoTimeover)">
                 AND auto_timeover = #{autoTimeover}
             </if>
+            <if test="userId != null and !&quot;&quot;.equals(userId)">
+                AND user_id = #{userId}
+            </if>
             <!--generatedEnd-->
         </where>
         LIMIT 1

+ 17 - 1
src/main/java/com/izouma/awesomeadmin/dao/PayCodeStockMapper.xml

@@ -17,12 +17,13 @@
         <result column="remark" property="remark" jdbcType="VARCHAR"/>
         <result column="name" property="name" jdbcType="VARCHAR"/>
         <result column="regenerate" property="regenerate" jdbcType="CHAR"/>
+        <result column="user_id" property="userId" jdbcType="INTEGER"/>
         <!--generatedEnd-->
     </resultMap>
 
     <sql id="Base_Column_List">
         <!--generatedStart-->
-        id, del_flag, update_time, update_user, create_time, create_user, code_id, pay_type, money, amount, use_flag, remark, name, regenerate        <!--generatedEnd-->
+        id, del_flag, update_time, update_user, create_time, create_user, code_id, pay_type, money, amount, use_flag, remark, name, regenerate , user_id       <!--generatedEnd-->
     </sql>
 
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
@@ -84,6 +85,9 @@
             <if test="regenerate!= null">
                 regenerate,
             </if>
+            <if test="userId!= null">
+                user_id,
+            </if>
             <!--generatedEnd-->
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -130,6 +134,9 @@
             <if test="regenerate != null">
                 #{regenerate,jdbcType=CHAR},
             </if>
+            <if test="userId != null">
+                #{userId},
+            </if>
             <!--generatedEnd-->
         </trim>
     </insert>
@@ -180,6 +187,9 @@
             <if test="regenerate != null">
                 regenerate= #{regenerate,jdbcType=CHAR},
             </if>
+            <if test="userId != null">
+                user_id= #{userId},
+            </if>
             <!--generatedEnd-->
         </set>
         WHERE
@@ -241,6 +251,9 @@
             <if test="record.regenerate != null and !&quot;&quot;.equals(record.regenerate)">
                 AND regenerate = #{record.regenerate}
             </if>
+            <if test="record.userId != null and !&quot;&quot;.equals(record.userId)">
+                AND user_id = #{record.userId}
+            </if>
             <!--generatedEnd-->
             <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
@@ -343,6 +356,9 @@
             <if test="regenerate != null and !&quot;&quot;.equals(regenerate)">
                 AND regenerate = #{regenerate}
             </if>
+            <if test="userId != null and !&quot;&quot;.equals(userId)">
+                AND user_id = #{userId}
+            </if>
             <!--generatedEnd-->
             <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">

+ 12 - 1
src/main/java/com/izouma/awesomeadmin/dao/UserInfoMapper.xml

@@ -39,6 +39,7 @@
         <result column="recommender" property="recommender" jdbcType="INTEGER"/>
         <result column="money_ticket" property="moneyTicket" jdbcType="INTEGER"/>
         <result column="channel" property="channel" jdbcType="INTEGER"/>
+        <result column="apikey" property="apikey" jdbcType="VARCHAR"/>
 
         <association property="departId" javaType="string" column="id"
                      select="com.izouma.awesomeadmin.dao.DepartInfoMapper.getUserDepartId"/>
@@ -84,6 +85,7 @@
         <result column="recommender" property="recommender" jdbcType="INTEGER"/>
         <result column="money_ticket" property="moneyTicket" jdbcType="INTEGER"/>
         <result column="channel" property="channel" jdbcType="INTEGER"/>
+        <result column="apikey" property="apikey" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
@@ -91,7 +93,7 @@
         country, province, city, district, create_time, del_flag, money_coin, money_point,
         contacter, contact_phone, company_name, company_type, admin_flag, cash_pledge,
         approve_flag, store_flag, company_flag, approve_step, notice_flag, remind_flag,
-        create_flag, level_id, house_card, recommender, money_ticket,channel
+        create_flag, level_id, house_card, recommender, money_ticket,channel,apikey
     </sql>
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
         select
@@ -222,6 +224,9 @@
             <if test="channel != null">
                 channel,
             </if>
+            <if test="apikey != null">
+                apikey,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">
@@ -338,6 +343,9 @@
             <if test="channel != null">
                 #{channel},
             </if>
+            <if test="apikey != null">
+                #{apikey},
+            </if>
         </trim>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.UserInfo">
@@ -454,6 +462,9 @@
             <if test="channel != null">
                 channel = #{channel},
             </if>
+            <if test="apikey != null">
+                apikey = #{apikey},
+            </if>
         </set>
         where id = #{id,jdbcType=INTEGER}
     </update>

+ 31 - 0
src/main/java/com/izouma/awesomeadmin/enums/PayApiErrCode.java

@@ -0,0 +1,31 @@
+package com.izouma.awesomeadmin.enums;
+
+/**
+ * 支付错误码
+ */
+public enum PayApiErrCode {
+    /**
+     * 参数错误
+     */
+    INVALID_REQUEST,
+
+    /**
+     * MCHID不存在
+     */
+    MCHID_NOT_EXIST,
+
+    /**
+     * 缺少参数
+     */
+    LACK_PARAMS,
+
+    /**
+     * 签名错误
+     */
+    SIGNERROR,
+
+    /**
+     * post数据为空
+     */
+    POST_DATA_EMPTY
+}

+ 46 - 0
src/main/java/com/izouma/awesomeadmin/model/PayCodeInfo.java

@@ -39,6 +39,13 @@ public class PayCodeInfo{
     private String orderByStr;
     /*generatedEnd*/
 
+    private Integer userId;
+
+    private Integer daymoney;
+    private Integer daytimes;
+    private Integer monthmoney;
+    private Integer monthtimes;
+
     /*generatedStart*/
     public Integer getId(){
         return this.id;
@@ -165,5 +172,44 @@ public class PayCodeInfo{
     }
     /*generatedEnd*/
 
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getDaymoney() {
+        return daymoney;
+    }
+
+    public void setDaymoney(Integer daymoney) {
+        this.daymoney = daymoney;
+    }
+
+    public Integer getDaytimes() {
+        return daytimes;
+    }
+
+    public void setDaytimes(Integer daytimes) {
+        this.daytimes = daytimes;
+    }
+
+    public Integer getMonthmoney() {
+        return monthmoney;
+    }
+
+    public void setMonthmoney(Integer monthmoney) {
+        this.monthmoney = monthmoney;
+    }
+
+    public Integer getMonthtimes() {
+        return monthtimes;
+    }
+
+    public void setMonthtimes(Integer monthtimes) {
+        this.monthtimes = monthtimes;
+    }
 }
 

+ 56 - 33
src/main/java/com/izouma/awesomeadmin/model/PayCodeStock.java

@@ -2,13 +2,14 @@ package com.izouma.awesomeadmin.model;
 
 import java.math.BigDecimal;
 import java.util.*;
+
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonInclude;
 
 
 @JsonAutoDetect
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PayCodeStock{
+public class PayCodeStock {
     /*generatedStart*/
     private Integer id;
     private String delFlag;
@@ -30,113 +31,128 @@ public class PayCodeStock{
     private String searchKey;
 
     /**
-    * and,test_name,like,value;or,remark,=,123
-    */
+     * and,test_name,like,value;or,remark,=,123
+     */
     private String advancedQuery;
 
     /**
-    * column_name_,desc_;column_name_,asc
-    */
+     * column_name_,desc_;column_name_,asc
+     */
     private String orderByStr;
     /*generatedEnd*/
 
+    private String userId;
+
     /*generatedStart*/
-    public Integer getId(){
+    public Integer getId() {
         return this.id;
     }
 
-    public void setId(Integer id){
+    public void setId(Integer id) {
         this.id = id;
     }
-    public String getDelFlag(){
+
+    public String getDelFlag() {
         return this.delFlag;
     }
 
-    public void setDelFlag(String delFlag){
+    public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
-    public Date getUpdateTime(){
+
+    public Date getUpdateTime() {
         return this.updateTime;
     }
 
-    public void setUpdateTime(Date updateTime){
+    public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    public String getUpdateUser(){
+
+    public String getUpdateUser() {
         return this.updateUser;
     }
 
-    public void setUpdateUser(String updateUser){
+    public void setUpdateUser(String updateUser) {
         this.updateUser = updateUser;
     }
-    public Date getCreateTime(){
+
+    public Date getCreateTime() {
         return this.createTime;
     }
 
-    public void setCreateTime(Date createTime){
+    public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    public String getCreateUser(){
+
+    public String getCreateUser() {
         return this.createUser;
     }
 
-    public void setCreateUser(String createUser){
+    public void setCreateUser(String createUser) {
         this.createUser = createUser;
     }
-    public Integer getCodeId(){
+
+    public Integer getCodeId() {
         return this.codeId;
     }
 
-    public void setCodeId(Integer codeId){
+    public void setCodeId(Integer codeId) {
         this.codeId = codeId;
     }
-    public String getPayType(){
+
+    public String getPayType() {
         return this.payType;
     }
 
-    public void setPayType(String payType){
+    public void setPayType(String payType) {
         this.payType = payType;
     }
-    public BigDecimal getMoney(){
+
+    public BigDecimal getMoney() {
         return this.money;
     }
 
-    public void setMoney(BigDecimal money){
+    public void setMoney(BigDecimal money) {
         this.money = money;
     }
-    public Integer getAmount(){
+
+    public Integer getAmount() {
         return this.amount;
     }
 
-    public void setAmount(Integer amount){
+    public void setAmount(Integer amount) {
         this.amount = amount;
     }
-    public String getUseFlag(){
+
+    public String getUseFlag() {
         return this.useFlag;
     }
 
-    public void setUseFlag(String useFlag){
+    public void setUseFlag(String useFlag) {
         this.useFlag = useFlag;
     }
-    public String getRemark(){
+
+    public String getRemark() {
         return this.remark;
     }
 
-    public void setRemark(String remark){
+    public void setRemark(String remark) {
         this.remark = remark;
     }
-    public String getName(){
+
+    public String getName() {
         return this.name;
     }
 
-    public void setName(String name){
+    public void setName(String name) {
         this.name = name;
     }
-    public String getRegenerate(){
+
+    public String getRegenerate() {
         return this.regenerate;
     }
 
-    public void setRegenerate(String regenerate){
+    public void setRegenerate(String regenerate) {
         this.regenerate = regenerate;
     }
 
@@ -173,5 +189,12 @@ public class PayCodeStock{
     }
     /*generatedEnd*/
 
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
 }
 

+ 10 - 0
src/main/java/com/izouma/awesomeadmin/model/UserInfo.java

@@ -96,6 +96,8 @@ public class UserInfo {
 
     private Integer rank;
 
+    private String apikey;
+
 
     public String getDepartId() {
         return departId;
@@ -425,5 +427,13 @@ public class UserInfo {
     public void setRank(Integer rank) {
         this.rank = rank;
     }
+
+    public String getApikey() {
+        return apikey;
+    }
+
+    public void setApikey(String apikey) {
+        this.apikey = apikey;
+    }
 }
 

+ 161 - 0
src/main/java/com/izouma/awesomeadmin/util/PayApiUtil.java

@@ -0,0 +1,161 @@
+package com.izouma.awesomeadmin.util;
+
+import org.springframework.stereotype.Service;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.MessageDigest;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 支付API工具类
+ *
+ * @author
+ */
+@Service
+public class PayApiUtil {
+
+    public enum SignType {
+        MD5, HMACSHA256
+    }
+
+    public static final String FIELD_SIGN = "sign";
+
+    public static final String FIELD_SIGN_TYPE = "sign_type";
+
+    public static final String HMACSHA256 = "HMAC-SHA256";
+
+    public static final String MD5 = "MD5";
+
+
+    /**
+     * 生成签名
+     *
+     * @param data 待签名数据
+     * @param key  API密钥
+     * @return 签名
+     */
+    public static String generateSignature(final Map<String, String> data, String key) throws Exception {
+        return generateSignature(data, key, SignType.MD5);
+    }
+
+    /**
+     * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
+     *
+     * @param data     待签名数据
+     * @param key      API密钥
+     * @param signType 签名方式
+     * @return 签名
+     */
+    public static String generateSignature(final Map<String, String> data, String key, SignType signType) throws Exception {
+        Set<String> keySet = data.keySet();
+        String[] keyArray = keySet.toArray(new String[keySet.size()]);
+        Arrays.sort(keyArray);
+        StringBuilder sb = new StringBuilder();
+        for (String k : keyArray) {
+            if (k.equals(FIELD_SIGN)) {
+                continue;
+            }
+            if (k.equals(FIELD_SIGN_TYPE)) {
+                continue;
+            }
+            if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名
+                sb.append(k).append("=").append(data.get(k).trim()).append("&");
+        }
+        sb.append("key=").append(key);
+        if (SignType.MD5.equals(signType)) {
+            return MD5(sb.toString()).toUpperCase();
+        } else if (SignType.HMACSHA256.equals(signType)) {
+            return HMACSHA256(sb.toString(), key);
+        } else {
+            throw new Exception(String.format("Invalid sign_type: %s", signType));
+        }
+
+    }
+
+    /**
+     * 生成 MD5
+     *
+     * @param data 待处理数据
+     * @return MD5结果
+     */
+    public static String MD5(String data) throws Exception {
+        java.security.MessageDigest md = MessageDigest.getInstance("MD5");
+        byte[] array = md.digest(data.getBytes("UTF-8"));
+        StringBuilder sb = new StringBuilder();
+        for (byte item : array) {
+            sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
+        }
+        return sb.toString().toUpperCase();
+    }
+
+    /**
+     * 生成 HMACSHA256
+     *
+     * @param data 待处理数据
+     * @param key  密钥
+     * @return 加密结果
+     * @throws Exception
+     */
+    public static String HMACSHA256(String data, String key) throws Exception {
+        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
+        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
+        sha256_HMAC.init(secret_key);
+        byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
+        StringBuilder sb = new StringBuilder();
+        for (byte item : array) {
+            sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
+        }
+        return sb.toString().toUpperCase();
+    }
+
+
+    /**
+     * 判断支付结果通知中的sign是否有效
+     *
+     * @param reqData 向wxpay post的请求数据
+     * @return 签名是否有效
+     * @throws Exception
+     */
+    public static boolean isPayResultNotifySignatureValid(Map<String, String> reqData, String key) throws Exception {
+        String signTypeInData = reqData.get(FIELD_SIGN_TYPE);
+        SignType signType;
+        if (signTypeInData == null) {
+            signType = SignType.MD5;
+        } else {
+            signTypeInData = signTypeInData.trim();
+            if (signTypeInData.length() == 0) {
+                signType = SignType.MD5;
+            } else if (MD5.equals(signTypeInData)) {
+                signType = SignType.MD5;
+            } else if (HMACSHA256.equals(signTypeInData)) {
+                signType = SignType.HMACSHA256;
+            } else {
+                throw new Exception(String.format("Unsupported sign_type: %s", signTypeInData));
+            }
+        }
+        return isSignatureValid(reqData, key, signType);
+    }
+
+
+    /**
+     * 判断签名是否正确,必须包含sign字段,否则返回false。
+     *
+     * @param data     Map类型数据
+     * @param key      API密钥
+     * @param signType 签名方式
+     * @return 签名是否正确
+     * @throws Exception
+     */
+    public static boolean isSignatureValid(Map<String, String> data, String key, SignType signType) throws Exception {
+        if (!data.containsKey(FIELD_SIGN)) {
+            return false;
+        }
+        String sign = data.get(FIELD_SIGN);
+        return generateSignature(data, key, signType).equals(sign);
+    }
+
+}
+

+ 170 - 0
src/main/java/com/izouma/awesomeadmin/web/PayApiController.java

@@ -0,0 +1,170 @@
+package com.izouma.awesomeadmin.web;
+
+import com.github.kevinsawicki.http.HttpRequest;
+import com.izouma.awesomeadmin.enums.PayApiErrCode;
+import com.izouma.awesomeadmin.model.PayCodeInfo;
+import com.izouma.awesomeadmin.model.UserInfo;
+import com.izouma.awesomeadmin.service.PayCodeInfoService;
+import com.izouma.awesomeadmin.service.UserInfoService;
+import com.izouma.awesomeadmin.util.MbappUtil;
+import com.izouma.awesomeadmin.util.PayApiUtil;
+import com.izouma.awesomeadmin.util.PropertiesFileLoader;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@Controller
+@RequestMapping("/payApi")
+public class PayApiController {
+
+    private static Logger logger = Logger.getLogger(PayApiController.class);
+
+    @Autowired
+    private UserInfoService userInfoService;
+
+    @Autowired
+    private PayCodeInfoService payCodeInfoService;
+
+    @RequestMapping(value = "/testPush", method = RequestMethod.GET)
+    @ResponseBody
+    public String testPush(@RequestParam(required = true, value = "abc") String abc) {
+        try {
+
+
+            String nonceStr = MbappUtil.create_nonce_str();
+
+
+            Map<String, String> params = new TreeMap<>();
+            params.put("mch_id", PropertiesFileLoader.getProperties("leyunfu_mch_id"));                     //商户号
+            params.put("nonce_str", nonceStr);                 //随机串
+            params.put("abc", abc);           //商户系统内部的订单号
+            String sign = PayApiUtil.generateSignature(params, abc);
+            params.put("sign_type", "MD5");                     //签名方式
+            params.put("sign", sign);                           //签名
+
+            String response = HttpRequest.post("http://192.168.50.121:8080/payApi/notify")
+                    .form(params).body();
+
+
+            return response;
+
+        } catch (Exception e) {
+            logger.error("leyunfu查询订单失败", e);
+        }
+
+
+        return null;
+
+    }
+
+
+    @RequestMapping(value = "/notify", method = RequestMethod.POST)
+    @ResponseBody
+    public String notify(HttpServletRequest request, HttpServletResponse response) {
+        logger.error("lyf:notify");
+        try {
+
+            Map<String, String> notifyMap = getRequstParameter(request);
+
+            if (!PayApiUtil.isPayResultNotifySignatureValid(notifyMap, notifyMap.get("abc"))) {
+                return "签名失败";
+            }
+
+        } catch (Exception e) {
+            logger.error("微信支付回调异常", e);
+        }
+
+
+        return "SUCCESS";
+    }
+
+
+    /**
+     * 获取支付码列表
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/payCodeList", method = RequestMethod.POST)
+    @ResponseBody
+    public Map payCodeList(HttpServletRequest request) {
+        Map<String, Object> result = new HashMap<>();
+        result.put("return_code", "FAIL");
+        result.put("return_msg", PayApiErrCode.INVALID_REQUEST);
+        try {
+
+            Map<String, String> reqDataMap = getRequstParameter(request);
+
+            if (StringUtils.isBlank(reqDataMap.get("mch_id"))) {
+                result.put("return_code", "FAIL");
+                result.put("return_msg", PayApiErrCode.LACK_PARAMS);
+                return result;
+            }
+
+            UserInfo userInfo = new UserInfo();
+            userInfo.setPhone(reqDataMap.get("mch_id"));
+            userInfo = userInfoService.getSingleUserInfo(userInfo);
+
+            if (userInfo == null) {
+                result.put("return_code", "FAIL");
+                result.put("return_msg", PayApiErrCode.MCHID_NOT_EXIST);
+                return result;
+            }
+
+            String mch_key = userInfo.getApikey();
+
+
+            if (!PayApiUtil.isPayResultNotifySignatureValid(reqDataMap, mch_key)) {
+                result.put("return_code", "FAIL");
+                result.put("return_msg", PayApiErrCode.SIGNERROR);
+                return result;
+            }
+
+            int userId = userInfo.getId();
+
+
+            PayCodeInfo payCodeInfo = new PayCodeInfo();
+            payCodeInfo.setUserId(userId);
+
+            List<PayCodeInfo> payCodeInfoList = payCodeInfoService.getPayCodeInfoList(payCodeInfo);
+
+
+            result.put("return_code", "SUCCESS");
+            result.put("return_msg", "成功");
+            result.put("return_data", payCodeInfoList);
+            return result;
+
+
+        } catch (Exception e) {
+            logger.error("获取支付码列表异常", e);
+        }
+
+
+        return result;
+    }
+
+    private Map<String, String> getRequstParameter(HttpServletRequest request) {
+        Map<String, String> reqDataMap = new HashMap<>();
+
+        Enumeration enu = request.getParameterNames();
+        while (enu.hasMoreElements()) {
+            String paraName = (String) enu.nextElement();
+            System.out.println(paraName + ": " + request.getParameter(paraName));
+            reqDataMap.put(paraName, request.getParameter(paraName));
+        }
+
+        return reqDataMap;
+    }
+
+
+}
+

+ 1 - 0
src/main/java/com/izouma/awesomeadmin/web/PayCodeOrderController.java

@@ -147,6 +147,7 @@ public class PayCodeOrderController {
     public Result cancel(PayCodeOrder record) {
         return payCodeOrderService.cancel(record);
     }
+
     @RequestMapping(value = "/autoCancel", method = RequestMethod.POST)
     @ResponseBody
     public Result autoCancel() {

+ 28 - 2
src/main/vue/src/pages/PayCodeInfo.vue

@@ -2,6 +2,9 @@
     <div>
         <el-form :model="formData" :rules="rules" ref="form" label-width="120px" label-position="right" size="small"
                  style="max-width: 500px;">
+            <el-form-item prop="userId" label="用户Id">
+                <el-input v-model="formData.userId"></el-input>
+            </el-form-item>
             <el-form-item prop="codeName" label="名称">
                 <el-input v-model="formData.codeName" :disabled="'codeName'==subColumn"></el-input>
             </el-form-item>
@@ -38,6 +41,20 @@
             <el-form-item prop="remark" label="备注">
                 <el-input v-model="formData.remark" :disabled="'remark'==subColumn"></el-input>
             </el-form-item>
+
+            <el-form-item prop="daymoney" label="日限制金额">
+                <el-input type="number" v-model="formData.daymoney"></el-input>
+            </el-form-item>
+            <el-form-item prop="daytimes" label="日限制次数">
+                <el-input type="number" v-model="formData.daytimes"></el-input>
+            </el-form-item>
+            <el-form-item prop="monthmoney" label="月限制金额">
+                <el-input type="number" v-model="formData.monthmoney"></el-input>
+            </el-form-item>
+            <el-form-item prop="monthtimes" label="月限制次数">
+                <el-input type="number" v-model="formData.monthtimes"></el-input>
+            </el-form-item>
+
             <el-form-item>
                 <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
                 <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
@@ -90,7 +107,12 @@ export default {
     data() {
         return {
             saving: false,
-            formData: {},
+            formData: {
+                daymoney: 0,
+                daytimes: 0,
+                monthmoney: 0,
+                monthtimes: 0,
+            },
             rules: {
                 codeName: [
                     { required: true, message: '请输入 名称', trigger: 'blur' },
@@ -99,7 +121,11 @@ export default {
                     { required: true, message: '请输入 类型', trigger: 'blur' },
                 ],
                 limitMoney: [
-                    { required: true, message: '请输入 限制金额', trigger: 'blur' },
+                    {
+                        required: true,
+                        message: '请输入 限制金额',
+                        trigger: 'blur',
+                    },
                 ],
                 image: [
                     {

+ 27 - 1
src/main/vue/src/pages/PayCodeInfos.vue

@@ -55,6 +55,11 @@
                              min-width="100">
             </el-table-column>
 
+            <el-table-column
+                             prop="userId"
+                             label="用户ID"
+                             min-width="100">
+            </el-table-column>
             <el-table-column
                              v-if="isColumnShow('codeName')"
                              prop="codeName"
@@ -107,11 +112,32 @@
                              label="备注"
                              min-width="100">
             </el-table-column>
+            <el-table-column
+                             prop="daymoney"
+                             label="日限制金额"
+                             min-width="100">
+            </el-table-column>
+            <el-table-column
+                             prop="daytimes"
+                             label="日限制次数"
+                             min-width="100">
+            </el-table-column>
+            <el-table-column
+                             prop="monthmoney"
+                             label="月限制金额"
+                             min-width="100">
+            </el-table-column>
+            <el-table-column
+                             prop="monthtimes"
+                             label="月限制次数"
+                             min-width="100">
+            </el-table-column>
+            
             <el-table-column
                              label="操作"
                              align="center"
                              fixed="right"
-                             min-width="150">
+                             min-width="220">
                 <template slot-scope="scope">
                     <el-button @click="$router.push({path:'/payCodeStocks',query:{column:scope.row.id+',codeId'}})" type="primary" size="small" plain>库存
                     </el-button>

+ 5 - 0
src/main/vue/src/pages/PayCodeStock.vue

@@ -2,6 +2,11 @@
     <div>
         <el-form :model="formData" :rules="rules" ref="form" label-width="120px" label-position="right" size="small"
                  style="max-width: 500px;">
+
+            <el-form-item prop="userId" label="用户Id">
+                <el-input v-model="formData.userId"></el-input>
+            </el-form-item>
+
             <el-form-item prop="codeId" label="付款码Id">
                 <el-input v-model="formData.codeId" :disabled="'codeId'==subColumn"></el-input>
             </el-form-item>

+ 6 - 0
src/main/vue/src/pages/PayCodeStocks.vue

@@ -58,6 +58,12 @@
                              min-width="100">
             </el-table-column>
 
+            <el-table-column
+                             prop="userId"
+                             label="用户ID"
+                             min-width="100">
+            </el-table-column>
+
             <el-table-column
                              v-if="isColumnShow('codeId')"
                              prop="codeId"

+ 8 - 18
src/main/vue/src/pages/User.vue

@@ -2,14 +2,17 @@
     <div>
         <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
                  style="max-width: 500px;">
-            <el-form-item prop="icon" label="头像">
+            <!-- <el-form-item prop="icon" label="头像">
                 <single-upload v-model="formData.icon"></single-upload>
-            </el-form-item>
+            </el-form-item> -->
             <el-form-item prop="username" label="用户名">
                 <el-input v-model="formData.username"></el-input>
             </el-form-item>
             <el-form-item prop="phone" label="手机">
                 <el-input v-model="formData.phone"></el-input>
+            </el-form-item>
+             <el-form-item prop="apiKey" label="apiKey">
+                <el-input v-model="formData.apiKey"></el-input>
             </el-form-item>
             <el-form-item prop="roleId" label="角色" v-if="adminFlag=='Y'">
                 <el-select v-model="formData.roleId" multiple placeholder="请选择" style="width: 100%;">
@@ -27,13 +30,6 @@
                     v-model="formData.departId">
                 </el-cascader>
             </el-form-item>
-            <el-form-item prop="birthday" label="生日">
-                <el-date-picker
-                    v-model="formData.birthday"
-                    format="yyyy-MM-dd"
-                    value-format="timestamp">
-                </el-date-picker>
-            </el-form-item>
             <el-form-item prop="createTime" label="创建时间">
                 <el-date-picker
                     v-model="formData.createTime"
@@ -42,12 +38,6 @@
                     value-format="timestamp">
                 </el-date-picker>
             </el-form-item>
-
-            <el-form-item prop="createFlag" label="可创建房间">
-                <el-switch v-model="formData.createFlag" active-color="#13ce66" inactive-color="#ff4949">
-                </el-switch>
-            </el-form-item>
-
             <el-form-item prop="channel" label="渠道">
                 <el-select v-model="formData.channel"  placeholder="请选择" style="width: 100%;">
                     <el-option
@@ -141,9 +131,9 @@
                     departId: []
                 },
                 rules: {
-                    icon: [
-                        {required: true, message: '请上传头像', trigger: 'blur'},
-                    ],
+                    // icon: [
+                    //     {required: true, message: '请上传头像', trigger: 'blur'},
+                    // ],
                     username: [
                         {required: true, message: '请输入昵称', trigger: 'blur'},
                     ],

+ 6 - 6
src/main/vue/src/pages/Users.vue

@@ -7,8 +7,8 @@
             </el-button>
             <el-button @click="$router.push('/user')" type="primary" size="small" icon="el-icon-edit" class="filter-item">添加
             </el-button>
-            <el-button @click="$router.push({path:'/memberTicketSong',query:{}})" type="primary" size="small" icon="el-icon-edit" class="filter-item">赠送门票
-            </el-button>
+            <!-- <el-button @click="$router.push({path:'/memberTicketSong',query:{}})" type="primary" size="small" icon="el-icon-edit" class="filter-item">赠送门票
+            </el-button> -->
             <!-- <el-button @click="$router.push({path:'/memberHouseCardSong',query:{}})" type="primary" size="small" icon="el-icon-edit" class="filter-item">充值房卡
             </el-button> -->
             <el-select placeholder="类型" size="small" v-model="filter2" clearable @change="searchData" class="filter-item">
@@ -53,11 +53,11 @@
             </el-table-column>
             <el-table-column v-if="isColumnShow('nickname')" prop="nickname" label="昵称" min-width="100">
             </el-table-column>
-            <el-table-column v-if="isColumnShow('icon')" label="头像" min-width="50">
+            <!-- <el-table-column v-if="isColumnShow('icon')" label="头像" min-width="50">
                 <template slot-scope="scope" v-if="scope.row.icon">
                     <img :src="scope.row.icon" style="width: 32px;height: 32px;border-radius: 50%;vertical-align: middle;" />
                 </template>
-            </el-table-column>
+            </el-table-column> -->
 
             <el-table-column v-if="isColumnShow('phone')" prop="phone" label="手机" min-width="100">
             </el-table-column>
@@ -65,8 +65,8 @@
             <!-- <el-table-column prop="userLevel.name" label="级别" width="100">
             </el-table-column> -->
 
-            <el-table-column prop="moneyTicket" label="门票" min-width="100">
-            </el-table-column>
+            <!-- <el-table-column prop="moneyTicket" label="门票" min-width="100">
+            </el-table-column> -->
             <!-- <el-table-column prop="houseCard" label="场次" min-width="100">
             </el-table-column> -->
             <el-table-column prop="channel" label="渠道" min-width="50">