diff --git a/gan-modules/ruoyi-gan/pom.xml b/gan-modules/ruoyi-gan/pom.xml
index 4bb078e..0ce8fa0 100644
--- a/gan-modules/ruoyi-gan/pom.xml
+++ b/gan-modules/ruoyi-gan/pom.xml
@@ -111,7 +111,22 @@
org.projectlombok
lombok
-
+
+ com.github.wechatpay-apiv3
+ wechatpay-java
+ 0.2.12
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.3
+
+
+
+ dom4j
+ dom4j
+ 1.6.1
+
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java
new file mode 100644
index 0000000..9ab3848
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java
@@ -0,0 +1,125 @@
+package com.ruoyi.app.controller;
+
+import com.ruoyi.app.domain.AppDynamicComment;
+import com.ruoyi.app.domain.AppOrder;
+import com.ruoyi.app.domain.AppOrderArg;
+import com.ruoyi.app.domain.dto.KeyUtil;
+import com.ruoyi.app.domain.dto.PayConfig;
+import com.ruoyi.app.domain.dto.PayUtils;
+import com.ruoyi.app.domain.dto.WeChatPrepayResult;
+import com.ruoyi.app.domain.vo.AppDynamicCommentVo;
+import com.ruoyi.app.mapper.AppOrderMapper;
+import com.ruoyi.app.service.IAppDynamicCommentService;
+import com.ruoyi.app.service.IPayService;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.List;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * 动态评论Controller
+ *
+ * @author wyh
+ * @date 2024-04-24
+ */
+@RestController
+@RequestMapping("/pay")
+@Api(tags = "支付" , description = "支付")
+@Slf4j
+public class PayController extends BaseController
+{
+ @Autowired
+ private IPayService payService;
+
+ @Autowired
+ private AppOrderMapper appOrderMapper;
+
+ /**
+ * 查询动态评论列表
+ */
+ @PostMapping("/wechatPrePay")
+ @ApiOperation(value = "微信支付", notes = "微信支付", httpMethod = "POST")
+ public AjaxResult wechatPrePay(AppOrderArg appOrderArg) {
+ Integer price = appOrderArg.getPrice();
+
+ PayConfig payConfig = getPayConfigByAppid();
+ String orderNo = KeyUtil.generateUniqueKey();
+
+ WeChatPrepayResult prePayResult = new WeChatPrepayResult();
+ String nonce_str = PayUtils.getRandomString(20);
+ long timeStamp = System.currentTimeMillis()/1000;
+ String prePayId = "";
+
+ System.out.println("orderNo:" + orderNo);
+
+ try {
+ prePayId = payService.getPrepayId(orderNo, price, nonce_str, timeStamp,payConfig);
+ log.info("=========prepayid===>>"+prePayId);
+ } catch (Exception e) {
+ log.info("==========prepayRequest===>>>error");
+ }
+
+ if(prePayId == null|| "".equals(prePayId)){
+ prePayResult.setCode("001");
+ return AjaxResult.error("支付失败");
+ }
+ SortedMap ps = new TreeMap();
+ ps.put("appId", payConfig.getAPPID());//app_id
+ ps.put("timeStamp",timeStamp);//北京时间时间戳
+ ps.put("nonceStr", nonce_str);//自定义不重复的长度不长于32位
+ ps.put("package", "prepay_id="+prePayId);
+ ps.put("signType", "MD5");
+ String paySign = PayUtils.createSign(payConfig.getAPP_KEY(), ps);
+ if (paySign==null || "".equals(paySign)) {
+ prePayResult.setCode("002");
+ return AjaxResult.error("支付失败");
+ }
+
+ AppOrder order = new AppOrder();
+ order.setOutTradeNo(orderNo);
+ order.setPrice(price);
+ order.setAppId(payConfig.getAPPID());
+ order.setUserId(appOrderArg.getUserId());
+ order.setPayStatus(1);
+ order.setPaySoure(appOrderArg.getPaySoure());
+ order.setMchId(payConfig.MCH_ID);
+ order.setCreateTime(new Date());
+ order.setLevel(appOrderArg.getLevel());
+ appOrderMapper.insertAppOrder(order);
+
+ prePayResult.setCode("000");
+ prePayResult.setNonceStr(nonce_str);
+ prePayResult.setTimeStamp(String.valueOf(timeStamp));
+ prePayResult.setPackageStr("prepay_id="+ prePayId);
+ prePayResult.setSignType("MD5");
+ prePayResult.setPaySign(paySign);
+ prePayResult.setOrderNo(order.getOutTradeNo());
+ log.info("=====>>>返回给小程序的数据:"+prePayResult.toString());
+ return AjaxResult.success(prePayResult);
+ }
+
+ public PayConfig getPayConfigByAppid() {
+ PayConfig payConfig = new PayConfig();
+ payConfig.setAPPID(payConfig.getAPPID());
+ payConfig.setMCH_ID(payConfig.getMCH_ID());
+ payConfig.setWechat_notify_url(payConfig.getWechat_notify_url());
+ payConfig.setBody(payConfig.body);
+ payConfig.setAPP_KEY(payConfig.getAPP_KEY());
+ payConfig.setPayUrl(payConfig.payUrl);
+ return payConfig;
+ }
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrder.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrder.java
new file mode 100644
index 0000000..ee7278b
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrder.java
@@ -0,0 +1,172 @@
+package com.ruoyi.app.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 订单对象 app_order
+ *
+ * @author wyh
+ * @date 2024-04-25
+ */
+@Data
+public class AppOrder extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** */
+ private Long id;
+
+ /** 订单号 */
+ @Excel(name = "订单号")
+ private String outTradeNo;
+
+ /** 小程序id */
+ @Excel(name = "小程序id")
+ private String appId;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long userId;
+
+ /** 支付状态: 1待付款 2:已付款 */
+ @Excel(name = "支付状态: 1待付款 2:已付款")
+ private int payStatus;
+
+ /** 支付类型: 1微信2支付宝3兑换码 */
+ @Excel(name = "支付类型: 1微信2支付宝3兑换码")
+ private int paySoure;
+
+ /** 微信订单号 */
+ @Excel(name = "微信订单号")
+ private String tradeNo;
+
+ /** 支付金额 */
+ @Excel(name = "支付金额")
+ private int price;
+
+ /** 商户id */
+ @Excel(name = "商户id")
+ private String mchId;
+
+ @Excel(name = "会员等级,1-7天,2-一个月,3-一年")
+ private int level;
+
+ /** 支付时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date payTime;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setOutTradeNo(String outTradeNo)
+ {
+ this.outTradeNo = outTradeNo;
+ }
+
+ public String getOutTradeNo()
+ {
+ return outTradeNo;
+ }
+ public void setAppId(String appId)
+ {
+ this.appId = appId;
+ }
+
+ public String getAppId()
+ {
+ return appId;
+ }
+ public void setUserId(Long userId)
+ {
+ this.userId = userId;
+ }
+
+ public Long getUserId()
+ {
+ return userId;
+ }
+ public void setPayStatus(int payStatus)
+ {
+ this.payStatus = payStatus;
+ }
+
+ public int getPayStatus()
+ {
+ return payStatus;
+ }
+ public void setPaySoure(int paySoure)
+ {
+ this.paySoure = paySoure;
+ }
+
+ public int getPaySoure()
+ {
+ return paySoure;
+ }
+ public void setTradeNo(String tradeNo)
+ {
+ this.tradeNo = tradeNo;
+ }
+
+ public String getTradeNo()
+ {
+ return tradeNo;
+ }
+ public void setPrice(int price)
+ {
+ this.price = price;
+ }
+
+ public int getPrice()
+ {
+ return price;
+ }
+ public void setMchId(String mchId)
+ {
+ this.mchId = mchId;
+ }
+
+ public String getMchId()
+ {
+ return mchId;
+ }
+ public void setPayTime(Date payTime)
+ {
+ this.payTime = payTime;
+ }
+
+ public Date getPayTime()
+ {
+ return payTime;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("outTradeNo", getOutTradeNo())
+ .append("appId", getAppId())
+ .append("userId", getUserId())
+ .append("payStatus", getPayStatus())
+ .append("paySoure", getPaySoure())
+ .append("tradeNo", getTradeNo())
+ .append("price", getPrice())
+ .append("mchId", getMchId())
+ .append("payTime", getPayTime())
+ .append("createTime", getCreateTime())
+ .toString();
+ }
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrderArg.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrderArg.java
new file mode 100644
index 0000000..74eeab2
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrderArg.java
@@ -0,0 +1,37 @@
+package com.ruoyi.app.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 订单对象 app_order
+ *
+ * @author wyh
+ * @date 2024-04-25
+ */
+@Data
+public class AppOrderArg extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long userId;
+
+ /** 支付类型: 1微信2支付宝3兑换码 */
+ @Excel(name = "支付类型: 1微信2支付宝3兑换码")
+ private int paySoure;
+
+ /** 支付金额 */
+ @Excel(name = "支付金额")
+ private int price;
+
+ @Excel(name = "会员等级,1-7天,2-一个月,3-一年")
+ private int level;
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrderPay.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrderPay.java
new file mode 100644
index 0000000..d1602ad
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppOrderPay.java
@@ -0,0 +1,135 @@
+package com.ruoyi.app.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 订单记录对象 app_order_pay
+ *
+ * @author wyh
+ * @date 2024-04-25
+ */
+public class AppOrderPay extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** */
+ private Long id;
+
+ /** 小程序id */
+ @Excel(name = "小程序id")
+ private String appid;
+
+ /** 订单号 */
+ @Excel(name = "订单号")
+ private String outtradeno;
+
+ /** 结果码 */
+ @Excel(name = "结果码")
+ private String resultcode;
+
+ /** 字符串 */
+ @Excel(name = "字符串")
+ private String noncestr;
+
+ /** 支付金额 */
+ @Excel(name = "支付金额")
+ private String totalfee;
+
+ /** 微信订单号 */
+ @Excel(name = "微信订单号")
+ private String transactionid;
+
+ /** 时间 */
+ @Excel(name = "时间")
+ private String timeend;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setAppid(String appid)
+ {
+ this.appid = appid;
+ }
+
+ public String getAppid()
+ {
+ return appid;
+ }
+ public void setOuttradeno(String outtradeno)
+ {
+ this.outtradeno = outtradeno;
+ }
+
+ public String getOuttradeno()
+ {
+ return outtradeno;
+ }
+ public void setResultcode(String resultcode)
+ {
+ this.resultcode = resultcode;
+ }
+
+ public String getResultcode()
+ {
+ return resultcode;
+ }
+ public void setNoncestr(String noncestr)
+ {
+ this.noncestr = noncestr;
+ }
+
+ public String getNoncestr()
+ {
+ return noncestr;
+ }
+ public void setTotalfee(String totalfee)
+ {
+ this.totalfee = totalfee;
+ }
+
+ public String getTotalfee()
+ {
+ return totalfee;
+ }
+ public void setTransactionid(String transactionid)
+ {
+ this.transactionid = transactionid;
+ }
+
+ public String getTransactionid()
+ {
+ return transactionid;
+ }
+ public void setTimeend(String timeend)
+ {
+ this.timeend = timeend;
+ }
+
+ public String getTimeend()
+ {
+ return timeend;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("appid", getAppid())
+ .append("outtradeno", getOuttradeno())
+ .append("resultcode", getResultcode())
+ .append("noncestr", getNoncestr())
+ .append("totalfee", getTotalfee())
+ .append("transactionid", getTransactionid())
+ .append("timeend", getTimeend())
+ .toString();
+ }
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java
index 560be43..3e34aca 100644
--- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java
@@ -149,6 +149,8 @@ public class AppUser extends BaseEntity
@Excel(name = "其他信息")
private String other;
+ private int isMember;
+
public void setId(Long id)
{
this.id = id;
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUserExtends.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUserExtends.java
new file mode 100644
index 0000000..4323400
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUserExtends.java
@@ -0,0 +1,116 @@
+package com.ruoyi.app.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * App用户动态图片信息对象 app_user_extends
+ *
+ * @author wyh
+ * @date 2024-04-25
+ */
+public class AppUserExtends extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 关联用户id */
+ @Excel(name = "关联用户id")
+ private Long userId;
+
+ /** 会员等级,1-7天,2-一个月,3-一年 */
+ @Excel(name = "会员等级,1-7天,2-一个月,3-一年")
+ private Long level;
+
+ /** 开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date startTime;
+
+ /** 结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date endTime;
+
+ /** 注册码 */
+ @Excel(name = "注册码")
+ private String code;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setUserId(Long userId)
+ {
+ this.userId = userId;
+ }
+
+ public Long getUserId()
+ {
+ return userId;
+ }
+ public void setLevel(Long level)
+ {
+ this.level = level;
+ }
+
+ public Long getLevel()
+ {
+ return level;
+ }
+ public void setStartTime(Date startTime)
+ {
+ this.startTime = startTime;
+ }
+
+ public Date getStartTime()
+ {
+ return startTime;
+ }
+ public void setEndTime(Date endTime)
+ {
+ this.endTime = endTime;
+ }
+
+ public Date getEndTime()
+ {
+ return endTime;
+ }
+ public void setCode(String code)
+ {
+ this.code = code;
+ }
+
+ public String getCode()
+ {
+ return code;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("userId", getUserId())
+ .append("level", getLevel())
+ .append("remark", getRemark())
+ .append("createTime", getCreateTime())
+ .append("updateTime", getUpdateTime())
+ .append("createBy", getCreateBy())
+ .append("updateBy", getUpdateBy())
+ .append("startTime", getStartTime())
+ .append("endTime", getEndTime())
+ .append("code", getCode())
+ .toString();
+ }
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/HelperUtil.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/HelperUtil.java
new file mode 100644
index 0000000..d82ab88
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/HelperUtil.java
@@ -0,0 +1,69 @@
+package com.ruoyi.app.domain.dto;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+@Component
+@Slf4j
+public class HelperUtil {
+
+ enum RequestMethod {
+ POST, GET, PUT
+ }
+
+ //采用post的方式
+ public static String post(String url, String body) {
+ String content = getServerResponse(url, body, RequestMethod.POST);
+ return content;
+ }
+
+ // 取得服务端返回数据
+ private static String getServerResponse(String url, String body, RequestMethod method) {
+ StringBuilder sb = new StringBuilder();
+ OutputStream out = null;
+ BufferedReader in = null;
+ try {
+ URL address = new URL(url);
+ HttpURLConnection conn = (HttpURLConnection) address.openConnection();
+ conn.setDoInput(true);
+ conn.setDoOutput(true);
+ conn.setUseCaches(false);
+ byte[] requestStringBytes = body.getBytes("UTF-8");
+ conn.setRequestProperty("Content-length", "" + requestStringBytes.length);
+ conn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
+ conn.setRequestProperty("Charset", "UTF-8");
+ if (method == RequestMethod.POST) {
+ conn.setRequestMethod("POST");
+ } else if (method == RequestMethod.PUT) {
+ conn.setRequestMethod("PUT");
+ }
+ byte[] bytes = body.getBytes("UTF-8");
+ if (bytes.length > 0) {
+ out = conn.getOutputStream();
+ out.write(bytes);
+ out.flush();
+ }
+ if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
+ in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
+ String line = "";
+ while ((line = in.readLine()) != null) {
+ sb.append(line);
+ }
+ }
+ if (out != null)
+ out.close();
+ if (in != null)
+ in.close();
+ } catch (Exception ex) {
+ log.info("错误:" + ex);
+ }
+ return sb.toString();
+ }
+
+}
\ No newline at end of file
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/KeyUtil.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/KeyUtil.java
new file mode 100644
index 0000000..990d3e8
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/KeyUtil.java
@@ -0,0 +1,22 @@
+package com.ruoyi.app.domain.dto;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+public class KeyUtil {
+
+ public static synchronized String generateUniqueKey(){
+ Random random = new Random();
+ // 随机数的量 自由定制,这是9位随机数
+ Integer r = random.nextInt(900000000) + 100000000;
+
+ // 返回 17位时间
+ DateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ String timeStr = sdf.format(new Date());
+
+ return timeStr + r;
+ }
+
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/PayConfig.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/PayConfig.java
new file mode 100644
index 0000000..663f7df
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/PayConfig.java
@@ -0,0 +1,29 @@
+package com.ruoyi.app.domain.dto;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @author heisenbergluck@outlook.com
+ * @date 2021/6/7 0007 16:27
+ */
+
+@Data
+@ToString
+public class PayConfig {
+
+ //商户APPID
+ public String APPID = "wx55ff808ba0e28b1d";
+ //商户账户
+ public String MCH_ID = "1646646755";
+ //异步回调地址
+ public String wechat_notify_url = "127.0.0.1";
+ //商品描述
+ public String body = "二手车";
+
+ public String APP_KEY = "Zzvi53pvCLUdFtvQ3EB0QLHQeKTctZ1c";
+
+ public String payUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";//下单
+ public static String PAY_API_UNIFIEDORDER = "https://api.mch.weixin.qq.com/pay/unifiedorder";//下单
+
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/PayUtils.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/PayUtils.java
new file mode 100644
index 0000000..90e2c61
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/PayUtils.java
@@ -0,0 +1,135 @@
+package com.ruoyi.app.domain.dto;
+import lombok.extern.slf4j.Slf4j;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+
+import java.security.MessageDigest;
+import java.util.*;
+
+@Slf4j
+public class PayUtils {
+
+ //随机字符串生成
+ public static String getRandomString(int length) {
+ String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ Random random = new Random();
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < length; i++) {
+ int number = random.nextInt(base.length());
+ sb.append(base.charAt(number));
+ }
+ return sb.toString();
+ }
+
+ //请求xml组装
+ public static String getRequestXml(SortedMap parameters){
+ StringBuffer sb = new StringBuffer();
+// sb.append("");
+ sb.append("");
+ Set es = parameters.entrySet();
+ Iterator it = es.iterator();
+ while(it.hasNext()) {
+ Map.Entry entry = (Map.Entry)it.next();
+ String key = (String)entry.getKey();
+ String value = String.valueOf(entry.getValue());
+ if ("attach".equalsIgnoreCase(key)||"body".equalsIgnoreCase(key)||"sign".equalsIgnoreCase(key)) {
+ sb.append("<"+key+">"+""+key+">");
+ }else {
+ sb.append("<"+key+">"+value+""+key+">");
+ }
+ }
+ sb.append("");
+ return sb.toString();
+ }
+
+
+ /**
+ * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
+ */
+ public static String createSign(String APP_KEY,SortedMap parameters){
+ log.info("APP_KEY="+APP_KEY);
+ StringBuffer sb = new StringBuffer();
+ Set es = parameters.entrySet();
+ Iterator it = es.iterator();
+ while(it.hasNext()) {
+ Map.Entry entry = (Map.Entry)it.next();
+ String k = (String)entry.getKey();
+ Object v = entry.getValue();
+ if(null != v && !"".equals(v)
+ && !"sign".equals(k) && !"key".equals(k)) {
+ sb.append(k + "=" + v + "&");
+ }
+ }
+ sb.append("key=" + APP_KEY);
+ String sign = md5Encode(sb.toString(), "UTF-8").toUpperCase();
+ return sign;
+ }
+
+
+ public static WeChatPayResult getResultByXml(String response) {
+ WeChatPayResult wexinResult = new WeChatPayResult();
+ Document document;
+ try {
+ document = DocumentHelper.parseText(response);
+ Element root = document.getRootElement();
+ String cashFee = root.element("cash_fee").getText();
+ String totalFee = root.element("total_fee").getText();
+ wexinResult.setAppid(root.element("appid").getText());
+ wexinResult.setBankType(root.element("bank_type").getText());
+ wexinResult.setCashFee(cashFee);
+ wexinResult.setMchId(root.element("mch_id").getText());
+ wexinResult.setNonceStr(root.element("nonce_str").getText());
+ wexinResult.setOpenid(root.element("openid").getText());
+ wexinResult.setOutTradeNo(root.element("out_trade_no").getText());
+ wexinResult.setResultCode(root.element("result_code").getText());
+ wexinResult.setReturnCode(root.element("return_code").getText());
+ wexinResult.setSign(root.element("sign").getText());
+ wexinResult.setTimeEnd(root.element("time_end").getText());
+ wexinResult.setTotalFee(totalFee);
+ wexinResult.setTradeType(root.element("trade_type").getText());
+ wexinResult.setTransactionId(root.element("transaction_id").getText());
+ return wexinResult;
+ } catch (Exception ex) {
+ log.info("解析失败");
+ }
+ return null;
+ }
+
+ public static String md5Encode(String origin, String charsetname) {
+ String resultString = null;
+ try {
+ resultString = new String(origin);
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ if (charsetname == null || "".equals(charsetname))
+ resultString = byteArrayToHexString(md.digest(resultString
+ .getBytes()));
+ else
+ resultString = byteArrayToHexString(md.digest(resultString
+ .getBytes(charsetname)));
+ } catch (Exception exception) {
+ }
+ return resultString;
+ }
+
+ private static String byteArrayToHexString(byte b[]) {
+ StringBuffer resultSb = new StringBuffer();
+ for (int i = 0; i < b.length; i++)
+ resultSb.append(byteToHexString(b[i]));
+
+ return resultSb.toString();
+ }
+
+ private static String byteToHexString(byte b) {
+ int n = b;
+ if (n < 0)
+ n += 256;
+ int d1 = n / 16;
+ int d2 = n % 16;
+ return hexDigits[d1] + hexDigits[d2];
+ }
+
+ private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/WeChatPayResult.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/WeChatPayResult.java
new file mode 100644
index 0000000..a66df1d
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/WeChatPayResult.java
@@ -0,0 +1,39 @@
+package com.ruoyi.app.domain.dto;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class WeChatPayResult {
+
+ //应用id
+ private String appid;
+ //付款银行
+ private String bankType;
+ //现金支付金额
+ private String cashFee;
+ //商户号
+ private String mchId;
+ //随机字符串
+ private String nonceStr;
+ //用户标识
+ private String openid;
+ //商户订单号
+ private String outTradeNo;
+ //业务结果
+ private String resultCode;
+ //同步状态码
+ private String returnCode;
+ //签名
+ private String sign;
+ //支付完成时间
+ private String timeEnd;
+ //总金额
+ private String totalFee;
+ //交易类型
+ private String tradeType;
+ //微信支付订单号
+ private String transactionId;
+
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/WeChatPrepayResult.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/WeChatPrepayResult.java
new file mode 100644
index 0000000..33d0ef8
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/dto/WeChatPrepayResult.java
@@ -0,0 +1,22 @@
+package com.ruoyi.app.domain.dto;
+
+import lombok.Data;
+
+
+@Data
+public class WeChatPrepayResult {
+
+ public String code;// 返回给app状态码 000 请求成功 001 prePayId没有取到 002 签名为空
+
+ public String packageStr;//统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*
+
+ public String nonceStr;// 随机字符串
+
+ public String timeStamp;//时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间
+
+ public String signType;//签名类型,默认为MD5,支持HMAC-SHA256和MD5。注意此处需与统一下单的签名类型一致
+
+ public String paySign;//签名
+
+ public String orderNo;
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderMapper.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderMapper.java
new file mode 100644
index 0000000..378a217
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.app.mapper;
+
+import java.util.List;
+import com.ruoyi.app.domain.AppOrder;
+
+/**
+ * 订单Mapper接口
+ *
+ * @author wyh
+ * @date 2024-04-25
+ */
+public interface AppOrderMapper
+{
+ /**
+ * 查询订单
+ *
+ * @param id 订单主键
+ * @return 订单
+ */
+ public AppOrder selectAppOrderById(Long id);
+
+ /**
+ * 查询订单列表
+ *
+ * @param appOrder 订单
+ * @return 订单集合
+ */
+ public List selectAppOrderList(AppOrder appOrder);
+
+ /**
+ * 新增订单
+ *
+ * @param appOrder 订单
+ * @return 结果
+ */
+ public int insertAppOrder(AppOrder appOrder);
+
+ /**
+ * 修改订单
+ *
+ * @param appOrder 订单
+ * @return 结果
+ */
+ public int updateAppOrder(AppOrder appOrder);
+
+ /**
+ * 删除订单
+ *
+ * @param id 订单主键
+ * @return 结果
+ */
+ public int deleteAppOrderById(Long id);
+
+ /**
+ * 批量删除订单
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteAppOrderByIds(Long[] ids);
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderPayMapper.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderPayMapper.java
new file mode 100644
index 0000000..f869961
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderPayMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.app.mapper;
+
+import java.util.List;
+import com.ruoyi.app.domain.AppOrderPay;
+
+/**
+ * 订单记录Mapper接口
+ *
+ * @author wyh
+ * @date 2024-04-25
+ */
+public interface AppOrderPayMapper
+{
+ /**
+ * 查询订单记录
+ *
+ * @param id 订单记录主键
+ * @return 订单记录
+ */
+ public AppOrderPay selectAppOrderPayById(Long id);
+
+ /**
+ * 查询订单记录列表
+ *
+ * @param appOrderPay 订单记录
+ * @return 订单记录集合
+ */
+ public List selectAppOrderPayList(AppOrderPay appOrderPay);
+
+ /**
+ * 新增订单记录
+ *
+ * @param appOrderPay 订单记录
+ * @return 结果
+ */
+ public int insertAppOrderPay(AppOrderPay appOrderPay);
+
+ /**
+ * 修改订单记录
+ *
+ * @param appOrderPay 订单记录
+ * @return 结果
+ */
+ public int updateAppOrderPay(AppOrderPay appOrderPay);
+
+ /**
+ * 删除订单记录
+ *
+ * @param id 订单记录主键
+ * @return 结果
+ */
+ public int deleteAppOrderPayById(Long id);
+
+ /**
+ * 批量删除订单记录
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteAppOrderPayByIds(Long[] ids);
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppUserExtendsMapper.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppUserExtendsMapper.java
new file mode 100644
index 0000000..e26949d
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppUserExtendsMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.app.mapper;
+
+import java.util.List;
+import com.ruoyi.app.domain.AppUserExtends;
+
+/**
+ * App用户动态图片信息Mapper接口
+ *
+ * @author wyh
+ * @date 2024-04-25
+ */
+public interface AppUserExtendsMapper
+{
+ /**
+ * 查询App用户动态图片信息
+ *
+ * @param id App用户动态图片信息主键
+ * @return App用户动态图片信息
+ */
+ public AppUserExtends selectAppUserExtendsById(Long id);
+
+ /**
+ * 查询App用户动态图片信息列表
+ *
+ * @param appUserExtends App用户动态图片信息
+ * @return App用户动态图片信息集合
+ */
+ public List selectAppUserExtendsList(AppUserExtends appUserExtends);
+
+ /**
+ * 新增App用户动态图片信息
+ *
+ * @param appUserExtends App用户动态图片信息
+ * @return 结果
+ */
+ public int insertAppUserExtends(AppUserExtends appUserExtends);
+
+ /**
+ * 修改App用户动态图片信息
+ *
+ * @param appUserExtends App用户动态图片信息
+ * @return 结果
+ */
+ public int updateAppUserExtends(AppUserExtends appUserExtends);
+
+ /**
+ * 删除App用户动态图片信息
+ *
+ * @param id App用户动态图片信息主键
+ * @return 结果
+ */
+ public int deleteAppUserExtendsById(Long id);
+
+ /**
+ * 批量删除App用户动态图片信息
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteAppUserExtendsByIds(Long[] ids);
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppUserExtendsMapper.xml b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppUserExtendsMapper.xml
new file mode 100644
index 0000000..3f83452
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppUserExtendsMapper.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, user_id, level, remark, create_time, update_time, create_by, updateBy, start_time, end_time, code from app_user_ extends
+
+
+
+
+
+
+
+ insert into app_user_ extends
+
+ user_id,
+ level,
+ remark,
+ create_time,
+ update_time,
+ create_by,
+ updateBy,
+ start_time,
+ end_time,
+ code,
+
+
+ #{userId},
+ #{level},
+ #{remark},
+ #{createTime},
+ #{updateTime},
+ #{createBy},
+ #{updateBy},
+ #{startTime},
+ #{endTime},
+ #{code},
+
+
+
+
+ update app_user_ extends
+
+ user_id = #{userId},
+ level = #{level},
+ remark = #{remark},
+ create_time = #{createTime},
+ update_time = #{updateTime},
+ create_by = #{createBy},
+ updateBy = #{updateBy},
+ start_time = #{startTime},
+ end_time = #{endTime},
+ code = #{code},
+
+ where id = #{id}
+
+
+
+ delete from app_user_ extends where id = #{id}
+
+
+
+ delete from app_user_ extends where id in
+
+ #{id}
+
+
+
\ No newline at end of file
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/IPayService.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/IPayService.java
new file mode 100644
index 0000000..65ff53f
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/IPayService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.app.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.app.domain.dto.PayConfig;
+
+public interface IPayService {
+ JSONObject code2session(String code);
+
+ /**
+ * 获取微信预支付的prepayid
+ *
+ * @param orderId
+ * @param orderMoney
+ * @param nonce_str
+ * @param timeStamp
+ * @return
+ */
+ String getPrepayId(String orderId, int orderMoney, String nonce_str, long timeStamp, PayConfig weChatConfig);
+ /**
+ * 查询微信支付
+ * @param oid
+ * @param nonce_str
+ * @return
+ */
+ boolean isPayOrder(String oid, String nonce_str, PayConfig weChatConfig);
+
+ String getAccessToken();
+}
diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/impl/PayServiceImpl.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/impl/PayServiceImpl.java
new file mode 100644
index 0000000..55127ca
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/impl/PayServiceImpl.java
@@ -0,0 +1,76 @@
+package com.ruoyi.app.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.app.domain.dto.HelperUtil;
+import com.ruoyi.app.domain.dto.PayConfig;
+import com.ruoyi.app.domain.dto.PayUtils;
+import com.ruoyi.app.service.IPayService;
+import lombok.extern.slf4j.Slf4j;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.springframework.stereotype.Service;
+
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+@Slf4j
+@Service
+public class PayServiceImpl implements IPayService {
+ @Override
+ public JSONObject code2session(String code) {
+ return null;
+ }
+
+ @Override
+ public String getPrepayId(String orderId, int orderMoney, String nonce_str, long timeStamp, PayConfig weChatConfig) {
+ //long fee = (long) (orderMoney * 100); // 转换为分
+ long fee = (long) (orderMoney);
+ SortedMap parameterMap = new TreeMap();
+ parameterMap.put("appid", weChatConfig.getAPPID());
+ parameterMap.put("mch_id", weChatConfig.getMCH_ID());
+ parameterMap.put("nonce_str", nonce_str);
+ parameterMap.put("body", weChatConfig.getBody());
+ parameterMap.put("out_trade_no", orderId);
+ parameterMap.put("total_fee", fee);
+ parameterMap.put("spbill_create_ip","127.0.0.1");
+ parameterMap.put("notify_url", weChatConfig.getWechat_notify_url());
+ parameterMap.put("trade_type", "APP");
+ //parameterMap.put("openid", openId);
+ String sign = PayUtils.createSign(weChatConfig.getAPP_KEY(), parameterMap);
+ log.info("sign:" + sign);
+ parameterMap.put("sign", sign);
+ String body = PayUtils.getRequestXml(parameterMap);
+ String response = "";
+ try {
+ response = HelperUtil.post(weChatConfig.payUrl, body);
+ } catch (Exception e) {
+ log.info(e.getMessage());
+ }
+ log.info("微信支付下单请求的数据" + body);
+ log.info("微信支付下单返回的数据" + response);
+ Document document;
+ try {
+ document = DocumentHelper.parseText(response);
+ Element root = document.getRootElement();
+ Element prepay = root.element("prepay_id");
+ if (prepay != null) {
+ String prepayId = prepay.getTextTrim();
+ return prepayId;
+ }
+ } catch (Exception ex) {
+
+ }
+ return "";
+ }
+
+ @Override
+ public boolean isPayOrder(String oid, String nonce_str, PayConfig weChatConfig) {
+ return false;
+ }
+
+ @Override
+ public String getAccessToken() {
+ return null;
+ }
+}
diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderMapper.xml
new file mode 100644
index 0000000..3b0bfe6
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderMapper.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, out_trade_no, app_id, user_id, pay_status, pay_soure, trade_no, price, mch_id, pay_time, create_time,level from app_order
+
+
+
+
+
+
+
+ insert into app_order
+
+ out_trade_no,
+ app_id,
+ user_id,
+ pay_status,
+ pay_soure,
+ trade_no,
+ price,
+ mch_id,
+ pay_time,
+ create_time,
+ level,
+
+
+ #{outTradeNo},
+ #{appId},
+ #{userId},
+ #{payStatus},
+ #{paySoure},
+ #{tradeNo},
+ #{price},
+ #{mchId},
+ #{payTime},
+ #{createTime},
+ #{level},
+
+
+
+
+ update app_order
+
+ out_trade_no = #{outTradeNo},
+ app_id = #{appId},
+ user_id = #{userId},
+ pay_status = #{payStatus},
+ pay_soure = #{paySoure},
+ trade_no = #{tradeNo},
+ price = #{price},
+ mch_id = #{mchId},
+ pay_time = #{payTime},
+ create_time = #{createTime},
+
+ where id = #{id}
+
+
+
+ delete from app_order where id = #{id}
+
+
+
+ delete from app_order where id in
+
+ #{id}
+
+
+
\ No newline at end of file
diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderPayMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderPayMapper.xml
new file mode 100644
index 0000000..02222f7
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderPayMapper.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, appid, outtradeno, resultcode, noncestr, totalfee, transactionid, timeend from app_order_pay
+
+
+
+
+
+
+
+ insert into app_order_pay
+
+ appid,
+ outtradeno,
+ resultcode,
+ noncestr,
+ totalfee,
+ transactionid,
+ timeend,
+
+
+ #{appid},
+ #{outtradeno},
+ #{resultcode},
+ #{noncestr},
+ #{totalfee},
+ #{transactionid},
+ #{timeend},
+
+
+
+
+ update app_order_pay
+
+ appid = #{appid},
+ outtradeno = #{outtradeno},
+ resultcode = #{resultcode},
+ noncestr = #{noncestr},
+ totalfee = #{totalfee},
+ transactionid = #{transactionid},
+ timeend = #{timeend},
+
+ where id = #{id}
+
+
+
+ delete from app_order_pay where id = #{id}
+
+
+
+ delete from app_order_pay where id in
+
+ #{id}
+
+
+
\ No newline at end of file
diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml
index 7cc540b..a19bf28 100644
--- a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml
+++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserDynamicMapper.xml
@@ -48,7 +48,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
u.school as "school",
u.major as "major",
u.start_time as "startTime",
- u.end_time as "endTime"
+ u.end_time as "endTime",
+ u.is_member as "isMember"
from app_user_dynamic a
left join app_user u on u.id = a.user_id
diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserExtendsMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserExtendsMapper.xml
new file mode 100644
index 0000000..2986e14
--- /dev/null
+++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserExtendsMapper.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, user_id, level, remark, create_time, update_time, create_by, updateBy, start_time, end_time, code from app_user_extends
+
+
+
+
+
+
+
+ insert into app_user_extends
+
+ user_id,
+ level,
+ remark,
+ create_time,
+ update_time,
+ create_by,
+ updateBy,
+ start_time,
+ end_time,
+ code,
+
+
+ #{userId},
+ #{level},
+ #{remark},
+ #{createTime},
+ #{updateTime},
+ #{createBy},
+ #{updateBy},
+ #{startTime},
+ #{endTime},
+ #{code},
+
+
+
+
+ update app_user_extends
+
+ user_id = #{userId},
+ level = #{level},
+ remark = #{remark},
+ create_time = #{createTime},
+ update_time = #{updateTime},
+ create_by = #{createBy},
+ updateBy = #{updateBy},
+ start_time = #{startTime},
+ end_time = #{endTime},
+ code = #{code},
+
+ where id = #{id}
+
+
+
+ delete from app_user_extends where id = #{id}
+
+
+
+ delete from app_user_extends where id in
+
+ #{id}
+
+
+
\ No newline at end of file
diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml
index 3b8c9c2..2516561 100644
--- a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml
+++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml
@@ -38,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
a.id as "id",
@@ -71,11 +72,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.idea as "idea",
a.is_partner as "isPartner",
a.hobby as "hobby",
- a.other as "other"
+ a.other as "other",
+ a.is_member as "isMember"
- select id, username, password, nickname, email, phone, address, create_time, update_time, avatar_url, education, school, major, start_time, end_time, experience, company_name, industry, job_time, job_name, job_type, skill_id, job_content, type from app_user
+ select id, username, password, nickname, email, phone, address, create_time, update_time, avatar_url, education, school, major, start_time, end_time, experience, company_name, industry, job_time, job_name, job_type, skill_id, job_content, type,is_member from app_user