zwhui пре 1 година
родитељ
комит
1ac5468218

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/mapper/WebInfoMapper.java

@@ -0,0 +1,23 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cyksj.model.entity.WebInfo;
+import com.cyksj.model.views.WebInfoView;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author zwhui
+ * @date 2025/6/13 14:03
+ */
+public interface WebInfoMapper extends BaseMapper<WebInfo> {
+    Page<WebInfoView> getWebInfo(@Param("page") Page<WebInfoView> objectPage,
+                                 @Param("prefix") String prefix,
+                                 @Param("wholesaleId") Long wholesaleId,
+                                 @Param("shopName") String shopName,
+                                 @Param("userId") Long userId,
+                                 @Param("nickName") String nickName,
+                                 @Param("status") Boolean status);
+
+
+}

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/mapper/WholesaleUserMapper.java

@@ -0,0 +1,10 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.WholesaleUser;
+/**
+ * @author zwhui
+ * @date 2025/6/9 15:44
+ */
+public interface WholesaleUserMapper extends BaseMapper<WholesaleUser> {
+}

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/ExchangeCode.java

@@ -47,7 +47,7 @@ public class ExchangeCode extends BaseEntity{
 	private Long userId;
 
 	/**
-	 * 0平台 1抽奖
+	 * 0平台 1抽奖 2.个人网站
 	 */
 	private Integer type;
 

+ 47 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/WebInfo.java

@@ -0,0 +1,47 @@
+package com.cyksj.model.entity;
+
+import lombok.Data;
+
+/**
+ * @author zwhui
+ * @date 2025/6/3 17:27
+ */
+@Data
+public class WebInfo extends BaseEntity {
+    private String showId;
+    /**
+     * 网站前缀
+     */
+    private String prefix;
+
+    /**
+     * 账号
+     */
+    private String account;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * logo
+     */
+    private String logo;
+
+    /**
+     * 店铺名称
+     */
+    private String shopName;
+
+    /**
+     * 联系我二维码
+     */
+    private String contactMe;
+
+    /**
+     * true运营中||false停止运营
+     */
+    private Boolean status;
+
+}

+ 103 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/WebWholesaleOrderDon.java

@@ -0,0 +1,103 @@
+package com.cyksj.model.entity;
+
+import cn.hutool.core.util.StrUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: WebWholesaleOrderDon
+ * 创建者: JavaZou
+ * 创建时间:2025/6/4 16:12
+ */
+@Getter
+@Setter
+public class WebWholesaleOrderDon extends BaseEntity {
+	private Long userId;
+
+	private Integer num;
+
+	private BigDecimal money;
+
+	private BigDecimal refundMoney;
+
+	private String transactionId;
+
+	private String buyerId;
+
+	private String orderNo;
+
+	/**
+	 * 支付状态
+	 */
+	private Status status;
+
+	/**
+	 * 支付类型
+	 */
+	private Type type;
+
+	private Date payTime;
+
+	/**
+	 * 商户ID
+	 */
+	private String shopId;
+
+	/**
+	 * 支付标题
+	 */
+	private String payTitle;
+
+	/**
+	 * 批发规格ids
+	 */
+	private String skuIds;
+
+	public enum Status {
+		/**
+		 * 订单状态
+		 */
+		close("已关闭"),
+		noPayment("待付款"),
+		hasPayment("已付款"),
+		complete("已完成"),
+		refund("已退款"),
+		;
+
+		private String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+	}
+
+	@Getter
+	@AllArgsConstructor
+	public enum Type{
+		WeChat("wechat","微信"),
+		ALI_PAY("zfb","支付宝"),
+		BALANCE("balance", "余额支付"),
+		PAYPAL("paypal","paypal支付"),
+		STRIPE("stripe","stripe支付")
+		;
+		String type;
+		String desc;
+
+		public static Type getType(String type) {
+			if (StrUtil.isEmpty(type)) {
+				return ALI_PAY;
+			}
+			return Arrays.stream(Type.values()).filter(tp -> tp.getType().equals(type)).findFirst().orElse(ALI_PAY);
+		}
+	}
+}

+ 16 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/WholesaleUser.java

@@ -0,0 +1,16 @@
+package com.cyksj.model.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+/**
+ * @author zwhui
+ * @date 2025/6/9 15:43
+ */
+@Data
+public class WholesaleUser extends BaseEntity {
+    private String username;
+    private String password;
+    private String token;
+    private Date expireTime;
+}

+ 36 - 0
netflix-dao/src/main/java/com/cyksj/model/views/WebInfoView.java

@@ -0,0 +1,36 @@
+package com.cyksj.model.views;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zwhui
+ * @date 2025/6/16 12:14
+ */
+@Data
+public class WebInfoView {
+    private Long id;
+
+    private String showId;
+
+    private Long userId;
+
+    private String nickname;
+    /**
+     * 网站前缀
+     */
+    private String prefix;
+
+    /**
+     * 店铺名称
+     */
+    private String shopName;
+
+    /**
+     * true运营中||false停止运营
+     */
+    private Boolean status;
+
+    private Date updateTime;
+}

+ 69 - 0
netflix-dao/src/main/java/com/cyksj/model/views/WebWholesaleCodeDetailView.java

@@ -0,0 +1,69 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.WebWholesaleOrderDon;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: WebWholesaleCodeDetailView
+ * 创建者: JavaZou
+ * 创建时间:2025/6/5 12:09
+ */
+@Getter
+@Setter
+@SearchBean(tables = "web_wholesale_order_don wod inner join web_wholesale_order_don_code_relate odr on wod.id = odr.order_id" +
+		" left join web_info wo on wo.id = wod.user_id" +
+		" left join user u on u.id = odr.dh_user_id")
+public class WebWholesaleCodeDetailView {
+	/**
+	 * 店铺主id
+	 */
+	@DbField("wod.user_id")
+	private Long userId;
+
+	/**
+	 * 店铺名
+	 */
+	@DbField("wo.shop_name")
+	private String shopName;
+
+	@DbField("wod.id")
+	private Long orderId;
+
+	@DbField("wod.order_no")
+	private String orderNo;
+
+	/**
+	 * 兑换用户id
+	 */
+	@DbField("odr.dh_user_id")
+	private Long dhUserId;
+
+	/**
+	 * 兑换用户
+	 */
+	@DbField("u.nickname")
+	private String dfNickname;
+
+	/**
+	 * 支付状态
+	 */
+	@DbField("wod.status")
+	@JsonIgnore
+	private WebWholesaleOrderDon.Status status;
+
+	/**
+	 * 支付标题
+	 */
+	@DbField("wod.pay_title")
+	private String payTitle;
+
+	@DbField("odr.update_time")
+	private Date updateTime;
+}

+ 55 - 0
netflix-dao/src/main/java/com/cyksj/model/views/WebWholesaleOrderView.java

@@ -0,0 +1,55 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.WebWholesaleOrderDon;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: WebWholesaleOrderView
+ * 创建者: JavaZou
+ * 创建时间:2025/6/5 12:03
+ */
+@Getter
+@Setter
+@SearchBean(tables = "web_wholesale_order_don wod left join web_info wo on wo.id = wod.user_id")
+public class WebWholesaleOrderView {
+	@DbField("wod.user_id")
+	private Long userId;
+
+	@DbField("wod.shop_name")
+	private String shopName;
+
+	@DbField("wod.money")
+	private BigDecimal money;
+
+	@DbField("wod.refund_money")
+	private BigDecimal refundMoney;
+
+	@DbField("wod.transaction_id")
+	private String transactionId;
+
+	@DbField("wod.order_no")
+	private String orderNo;
+
+	/**
+	 * 支付状态
+	 */
+	@DbField("wod.status")
+	private WebWholesaleOrderDon.Status status;
+
+	@DbField("wod.pay_time")
+	private Date payTime;
+
+	/**
+	 * 支付标题
+	 */
+	@DbField("wod.pay_title")
+	private String payTitle;
+
+}

+ 30 - 0
netflix-dao/src/main/resources/mapper/WebInfoMapper.xml

@@ -0,0 +1,30 @@
+<?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.cyksj.mapper.WebInfoMapper">
+
+    <select id="getWebInfo" resultType="com.cyksj.model.views.WebInfoView">
+        select w.id,w.show_id,u.id as userId,u.nickname,w.prefix,w.shop_name,w.status,w.update_time from web_info w left join user u on w.show_id = u.show_id
+        <where>
+            <if test="prefix != null">
+                and w.prefix = #{prefix}
+            </if>
+            <if test="wholesaleId != null">
+                and w.id = #{wholesaleId}
+            </if>
+            <if test="shopName != null">
+                and w.shop_name like '%${shopName}'
+            </if>
+            <if test="userId != null">
+                and u.id = #{userId}
+            </if>
+            <if test="nickName != null">
+                and u.nickname like '%${nickName}%'
+            </if>
+            <if test="status != null">
+                and w.status = #{status}
+            </if>
+        </where>
+        order by w.id desc
+    </select>
+</mapper>

+ 57 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/wholesale/WholesaleCodeController.java

@@ -0,0 +1,57 @@
+package com.cyksj.web.controller.manage.wholesale;
+
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.entity.WebWholesaleOrderDon;
+import com.cyksj.model.views.WebWholesaleCodeDetailView;
+import com.cyksj.model.views.WebWholesaleOrderView;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 兑换码管理
+ * 项目名: yhlxj2
+ * 文件名: WholesaleCodeController
+ * 创建者: JavaZou
+ * 创建时间:2025/6/4 16:31
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/manage/wholesale/code")
+public class WholesaleCodeController {
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	/**
+	 * 兑换码 明细
+	 */
+	@GetMapping("/get/detail")
+	public Result<SearchResult<WebWholesaleCodeDetailView>> getCodeDetail() {
+		SearchResult<WebWholesaleCodeDetailView> search = beanSearcher.search(WebWholesaleCodeDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(WebWholesaleCodeDetailView::getStatus, WebWholesaleOrderDon.Status.complete.name())
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+	/**
+	 * 兑换码订单列表
+	 */
+	@GetMapping("/get/order")
+	public Result<SearchResult<WebWholesaleOrderView>> getOrders() {
+		SearchResult<WebWholesaleOrderView> search = beanSearcher.search(WebWholesaleOrderView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(WebWholesaleOrderView::getStatus, WebWholesaleOrderDon.Status.complete.name())
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+}

+ 51 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/wholesale/WholesaleController.java

@@ -0,0 +1,51 @@
+package com.cyksj.web.controller.manage.wholesale;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.WebInfoMapper;
+import com.cyksj.model.entity.WebInfo;
+import com.cyksj.model.views.WebInfoView;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 批发网站管理
+ * @author zwhui
+ * @date 2025/6/16 12:07
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/manage/wholesale")
+public class WholesaleController {
+
+    private final WebInfoMapper webInfoMapper;
+
+    /**
+     * 查询店铺网站信息
+     */
+    @GetMapping("/list/webInfo")
+    public Result<Page<WebInfoView>> getWebInfo(String prefix,Long wholesaleId,String shopName,Long userId,String nickName,Boolean status,@RequestParam(defaultValue = "1") Integer start,@RequestParam(defaultValue = "10") Integer limit) {
+        log.info("查询店铺网站信息 prefix:{},wholesaleId:{},shopName:{},userId:{},nickName:{}",prefix,wholesaleId,shopName,userId,nickName);
+        Page<WebInfoView> page = webInfoMapper.getWebInfo(new Page<>(start,limit),prefix,wholesaleId,shopName,userId,nickName,status);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(page);
+    }
+
+
+    /**
+     * 上下架店铺
+     */
+    @PutMapping("/updStatus/{id}")
+    public Result<Void> updateStatus(@PathVariable Long id) {
+        WebInfo webInfo = webInfoMapper.selectById(id);
+        if (webInfo == null) {
+            throw new BusinessRuntimeException("店铺不存在");
+        }
+        webInfo.setStatus(!webInfo.getStatus());
+        webInfoMapper.updateById(webInfo);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+}

+ 45 - 11
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MirrorController.java

@@ -15,6 +15,8 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GroupsMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.WebInfoMapper;
+import com.cyksj.mapper.WholesaleUserMapper;
 import com.cyksj.mapper.renew.RenewUpgradePackageMapper;
 import com.cyksj.model.dto.ChatgptUserVerifyDto;
 import com.cyksj.model.entity.*;
@@ -98,6 +100,10 @@ public class MirrorController {
 
     private final GrokService grokService;
 
+    private final WholesaleUserMapper wholesaleUserMapper;
+
+    private final WebInfoMapper webInfoMapper;
+
 
     /**
      * GPT车票跳转登录
@@ -122,14 +128,19 @@ public class MirrorController {
             log.info("用户通过userToken:{}", userToken);
             ChatgptUser user = chatGptAccountService.findByUserTokenAndExpireTimeAfter(userToken, LocalDateTime.now());
             if (user == null) {
+                WholesaleUser wholesaleUser = wholesaleUserMapper.selectOne(Wrappers.lambdaQuery(WholesaleUser.class).eq(WholesaleUser::getToken, userToken).gt(WholesaleUser::getExpireTime, LocalDateTime.now()).last("limit 1"));
+                if (wholesaleUser == null) {
+                    JSONObject result = new JSONObject();
+                    result.putOpt("code", 0);
+                    result.putOpt("msg", "用户不存在或已过期");
+                    return result.toString();
+                }
                 JSONObject result = new JSONObject();
-                result.putOpt("code",0);
-                result.putOpt("msg","用户不存在或已过期");
+                result.putOpt("code",1);
+                result.putOpt("msg","登录成功");
+                result.putOpt("nickname", wholesaleUser.getUsername());
                 return result.toString();
             }
-
-            //ChatgptSession session = chatGptAccountService.checkSession(carId);
-            //
             JSONObject result = new JSONObject();
             result.putOpt("code",1);
             result.putOpt("msg","登录成功");
@@ -137,7 +148,6 @@ public class MirrorController {
             result.putOpt("nickname",user.getName());
             result.putOpt("uid",user.getRelationId());
             return result.toString();
-            //}
         } catch (Exception e) {
             log.error("服务器错误", e);
             JSONObject result = new JSONObject();
@@ -375,9 +385,12 @@ public class MirrorController {
             log.info("用户通过userToken:{}访问claude镜像车队carId:{}", userToken, carId);
             ClaudeUser user = claudeService.findByUserTokenAndExpireTimeAfter(userToken, LocalDateTime.now());
             if (user == null) {
-                return GatewayResponse.SUCCESS.newBuilder().setMsg("用户不存在或已过期").setCode(0).toResult();
+                WholesaleUser wholesaleUser = wholesaleUserMapper.selectOne(Wrappers.lambdaQuery(WholesaleUser.class).eq(WholesaleUser::getToken, userToken).gt(WholesaleUser::getExpireTime, LocalDateTime.now()).last("limit 1"));
+                if (wholesaleUser == null) {
+                    return GatewayResponse.SUCCESS.newBuilder().setMsg("用户不存在或已过期").setCode(0).toResult();
+                }
+                return GatewayResponse.SUCCESS.newBuilder().setMsg("登陆成功").setCode(1).toResult();
             }
-
             return GatewayResponse.SUCCESS.newBuilder().setMsg("登陆成功").setCode(1).toResult(StringUtil.getString(user.getRelationId()));
         } catch (Exception e) {
             log.error("服务器错误", e);
@@ -528,10 +541,19 @@ public class MirrorController {
             log.info("用户通过userToken:{}访问grok镜像", userToken);
             GrokUser user = grokService.findByUserTokenAndExpireTimeAfter(userToken, LocalDateTime.now());
             JSONObject result = new JSONObject();
-
             if (user == null) {
-                result.putOpt("code",0);
-                result.putOpt("msg","用户不存在或已过期");
+                WholesaleUser wholesaleUser = wholesaleUserMapper.selectOne(Wrappers.lambdaQuery(WholesaleUser.class).eq(WholesaleUser::getToken, userToken).gt(WholesaleUser::getExpireTime, LocalDateTime.now()).last("limit 1"));
+                if (wholesaleUser == null) {
+                    result.putOpt("code",0);
+                    result.putOpt("msg","用户不存在或已过期");
+                    return result.toString();
+                }
+                result.putOpt("code",1);
+                result.putOpt("msg","登陆成功");
+                result.putOpt("isPro",true);
+                result.putOpt("usertoken",userToken);
+                result.putOpt("userToken",userToken);
+                result.putOpt("expireTime", new DateTime(wholesaleUser.getExpireTime()).toString());
                 return result.toString();
             }
             result.putOpt("code",1);
@@ -572,4 +594,16 @@ public class MirrorController {
         return GatewayResponse.SUCCESS.newBuilder().toResult(url);
     }
 
+
+    /**
+     * 根据showId 查询批发网站
+     */
+    @GetMapping("/wholesale/{showId}")
+    public Result<WebInfo> wholesale(@PathVariable String showId) {
+        WebInfo webInfo = webInfoMapper.selectOne(Wrappers.lambdaQuery(WebInfo.class)
+                .select(WebInfo::getAccount, WebInfo::getPrefix,WebInfo::getLogo,WebInfo::getShopName,WebInfo::getContactMe)
+                .eq(WebInfo::getShowId, showId).last("limit 1"));
+        return GatewayResponse.SUCCESS.newBuilder().toResult(webInfo);
+    }
+
 }