Просмотр исходного кода

gptTeam后台接口;规格付款说明字段

zoujiajian 9 месяцев назад
Родитель
Сommit
3926d7a175

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GptTeamAccountMapper.java

@@ -0,0 +1,14 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GptTeamAccount;
+
+/**
+ * GPT Team账号 Mapper
+ *
+ * @author chan
+ * @date 2025/1/12
+ */
+public interface GptTeamAccountMapper extends BaseMapper<GptTeamAccount> {
+
+}

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonSku.java

@@ -348,4 +348,10 @@ public class GoodsDonSku extends BaseEntity {
      * 是否坐满规格就下架车队 默认false
      */
     private Boolean isDown;
+
+    /**
+     * 付款说明
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String payDesc;
 }

+ 43 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GptTeamAccount.java

@@ -0,0 +1,43 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.cyksj.model.BaseEntity;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Data;
+
+/**
+ * GPT Team账号
+ *
+ * @author chan
+ * @date 2025/1/12
+ */
+@Data
+public class GptTeamAccount extends BaseEntity {
+
+    /**
+     * token
+     */
+    private String token;
+
+    /**
+     * 设备ID
+     */
+    @TableField("device_id")
+    private String deviceId;
+
+    /**
+     * 账号
+     */
+    private String account;
+
+    /**
+     * 状态
+     */
+    private Boolean status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSkuInsert.java

@@ -253,6 +253,11 @@ public class ReqGoodsSkuInsert {
          */
         private Long gptDeepStyleLimitTime;
 
+        /**
+         * 付款说明
+         */
+        private String payDesc;
+
     }
 
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuFrontView.java

@@ -232,6 +232,11 @@ public class GoodsDonSkuFrontView {
 
 	private String remark;
 
+	/**
+	 * 付款说明
+	 */
+	private String payDesc;
+
 	/**
 	 * deepseek限制次数
 	 */

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuSubsidyDetailView.java

@@ -98,6 +98,12 @@ public class GoodsDonSkuSubsidyDetailView {
 	@DbField("sku.detail")
 	private String detail;
 
+	/**
+	 * 付款说明
+	 */
+	@DbField("sku.pay_desc")
+	private String payDesc;
+
 	/**
 	 * 标签
 	 */

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopGoodsSkuFrontView.java

@@ -73,6 +73,12 @@ public class YhShopGoodsSkuFrontView {
 	@DbField("sku.detail")
 	private String detail;
 
+	/**
+	 * 商品详情图
+	 */
+	@DbField("sku.pay_desc")
+	private String payDesc;
+
 	/**
 	 * 标签
 	 */

+ 52 - 0
netflix-service/src/main/java/com/cyksj/service/chatgpt/GptTeamAccountService.java

@@ -0,0 +1,52 @@
+package com.cyksj.service.chatgpt;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.GptTeamAccount;
+import com.ejlchina.searcher.SearchResult;
+
+import java.util.List;
+
+/**
+ * GPT Team账号 Service
+ *
+ * @author chan
+ * @date 2025/1/12
+ */
+public interface GptTeamAccountService extends IService<GptTeamAccount> {
+
+    /**
+     * 分页查询
+     *
+     * @return 分页结果
+     */
+    SearchResult<GptTeamAccount> getPage();
+
+    /**
+     * 新增账号
+     *
+     * @param account 账号信息
+     */
+    void addAccount(GptTeamAccount account);
+
+    /**
+     * 更新账号
+     *
+     * @param account 账号信息
+     */
+    void updateAccount(GptTeamAccount account);
+
+    /**
+     * 删除账号
+     *
+     * @param id 账号ID
+     */
+    void deleteAccount(Long id);
+
+    /**
+     * 批量导入账号
+     *
+     * @param tokens token列表
+     * @return 导入结果信息
+     */
+    void batchImport(List<String> tokens);
+}

+ 158 - 0
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/GptTeamAccountServiceImpl.java

@@ -0,0 +1,158 @@
+package com.cyksj.service.chatgpt.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.GptTeamAccountMapper;
+import com.cyksj.model.entity.GptTeamAccount;
+import com.cyksj.service.chatgpt.GptTeamAccountService;
+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.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * GPT Team账号 Service实现
+ *
+ * @author chan
+ * @date 2025/1/12
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class GptTeamAccountServiceImpl extends ServiceImpl<GptTeamAccountMapper, GptTeamAccount> implements GptTeamAccountService {
+
+    private final BeanSearcher beanSearcher;
+    private final HttpServletRequest request;
+
+    @Override
+    public SearchResult<GptTeamAccount> getPage() {
+        return beanSearcher.search(GptTeamAccount.class, MapUtils.flatBuilder(request.getParameterMap())
+                .orderBy(GptTeamAccount::getId).desc()
+                .build());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addAccount(GptTeamAccount account) {
+        // 验证token唯一性
+        if (StrUtil.isNotBlank(account.getToken())) {
+            Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
+                    .eq(GptTeamAccount::getToken, account.getToken()));
+            if (count > 0) {
+                throw BusinessRuntimeException.getInstance("Token已存在");
+            }
+        }
+
+        // 验证账号唯一性
+        if (StrUtil.isNotBlank(account.getAccount())) {
+            Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
+                    .eq(GptTeamAccount::getAccount, account.getAccount()));
+            if (count > 0) {
+                throw BusinessRuntimeException.getInstance("账号已存在");
+            }
+        }
+
+        this.save(account);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateAccount(GptTeamAccount account) {
+        if (account.getId() == null) {
+            throw BusinessRuntimeException.getInstance("ID不能为空");
+        }
+
+        // 验证token唯一性
+        if (StrUtil.isNotBlank(account.getToken())) {
+            Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
+                    .eq(GptTeamAccount::getToken, account.getToken())
+                    .ne(GptTeamAccount::getId, account.getId()));
+            if (count > 0) {
+                throw BusinessRuntimeException.getInstance("Token已存在");
+            }
+        }
+
+        // 验证账号唯一性
+        if (StrUtil.isNotBlank(account.getAccount())) {
+            Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
+                    .eq(GptTeamAccount::getAccount, account.getAccount())
+                    .ne(GptTeamAccount::getId, account.getId()));
+            if (count > 0) {
+                throw BusinessRuntimeException.getInstance("账号已存在");
+            }
+        }
+
+        this.updateById(account);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAccount(Long id) {
+        if (id == null) {
+            throw BusinessRuntimeException.getInstance("ID不能为空");
+        }
+        this.removeById(id);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchImport(List<String> tokens) {
+        if (CollUtil.isEmpty(tokens)) {
+            throw BusinessRuntimeException.getInstance("导入数据不能为空");
+        }
+
+        // 去重
+        Set<String> tokenSet = new HashSet<>(tokens);
+        
+        // 过滤空白token
+        tokenSet.removeIf(StrUtil::isBlank);
+        
+        if (tokenSet.isEmpty()) {
+            throw BusinessRuntimeException.getInstance("有效token为空");
+        }
+
+        // 查询已存在的token
+        List<GptTeamAccount> existingAccounts = baseMapper.selectList(
+            Wrappers.lambdaQuery(GptTeamAccount.class)
+                .in(GptTeamAccount::getToken, tokenSet)
+        );
+        
+        Set<String> existingTokens = new HashSet<>();
+        for (GptTeamAccount account : existingAccounts) {
+            existingTokens.add(account.getToken());
+        }
+
+        // 准备新增的账号列表
+        List<GptTeamAccount> newAccounts = new ArrayList<>();
+        int skipCount = 0;
+        
+        for (String token : tokenSet) {
+            if (existingTokens.contains(token)) {
+                skipCount++;
+                continue;
+            }
+            
+            GptTeamAccount account = new GptTeamAccount();
+            account.setToken(token);
+            account.setStatus(true); // 默认启用
+            newAccounts.add(account);
+        }
+
+        // 批量保存
+        if (CollUtil.isNotEmpty(newAccounts)) {
+            this.saveBatch(newAccounts);
+        }
+    }
+}

+ 15 - 3
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -709,7 +709,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (isSpecificPrice && (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0 || orderDon.getMoney().compareTo(specificPrice) != 0)) {
 			throw BusinessRuntimeException.getInstance("专属价格不支持使用其他优惠");
 		}
-		orderDon.setPayDesc(goodsDon.getPayDesc());
+		if (sku != null && StrUtil.isNotBlank(sku.getPayDesc())) {
+			orderDon.setPayDesc(sku.getPayDesc());
+		} else {
+			orderDon.setPayDesc(goodsDon.getPayDesc());
+		}
 		//设置订单支付商品信息
 		setOrderDonPayTile(isGiftCardPay, gcPayInfo, giftCards, orderDon, goodsDon, sku, dpSkuIds);
 		//下单手机号
@@ -847,7 +851,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		orderDon.setType(OrderDon.Type.getType(payRequest.getType()));
 		orderDon.setIsWebPay(payRequest.getIsWebPay());
 		orderDon.setSource(payRequest.getSource());
-		orderDon.setPayDesc(goodsDon.getPayDesc());
+		if (sku != null && StrUtil.isNotBlank(sku.getPayDesc())) {
+			orderDon.setPayDesc(sku.getPayDesc());
+		} else {
+			orderDon.setPayDesc(goodsDon.getPayDesc());
+		}
 		orderDon.setPayTitle(goodsDon.getTitle());
 		orderDon.setRelationId(0l);
 		//存在余额
@@ -5017,7 +5025,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		BigDecimal balance = orderPayRequest.getBalance();
 		//存在余额
 		deductBalancePayOrderMoney(orderDon, balance, user);
-		orderDon.setPayDesc(goodsDon.getPayDesc());
+		if (sku != null && StrUtil.isNotBlank(sku.getPayDesc())) {
+			orderDon.setPayDesc(sku.getPayDesc());
+		} else {
+			orderDon.setPayDesc(goodsDon.getPayDesc());
+		}
 		//设置订单支付商品信息
 		setOrderDonPayTile(null, null, null, orderDon, goodsDon, sku, null);
 		this.saveOrUpdate(orderDon);

+ 72 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsGptTeamAccountController.java

@@ -0,0 +1,72 @@
+package com.cyksj.web.controller.manage.account;
+
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.entity.GptTeamAccount;
+import com.cyksj.service.chatgpt.GptTeamAccountService;
+import com.ejlchina.searcher.SearchResult;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * GPT Team账号管理
+ *
+ * @author chan
+ * @date 2025/1/12
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RequestMapping("/manage/account/gptTeam")
+@RestController
+public class CmsGptTeamAccountController {
+
+    private final GptTeamAccountService gptTeamAccountService;
+
+    /**
+     * 获取GPT Team账号列表
+     */
+    @GetMapping("/get")
+    public Result<SearchResult<GptTeamAccount>> getPage() {
+        SearchResult<GptTeamAccount> result = gptTeamAccountService.getPage();
+        return GatewayResponse.SUCCESS.newBuilder().toResult(result);
+    }
+
+    /**
+     * 新增GPT Team账号
+     */
+    @PostMapping("/post")
+    public Result<String> addAccount(@RequestBody GptTeamAccount account) {
+        gptTeamAccountService.addAccount(account);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 更新GPT Team账号
+     */
+    @PutMapping("/update")
+    public Result<String> updateAccount(@RequestBody GptTeamAccount account) {
+        gptTeamAccountService.updateAccount(account);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 删除GPT Team账号
+     */
+    @DeleteMapping("/delete/{id}")
+    public Result<String> deleteAccount(@PathVariable Long id) {
+        gptTeamAccountService.deleteAccount(id);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 批量导入GPT Team账号
+     */
+    @PostMapping("/batchImport")
+    public Result<String> batchImport(@RequestBody List<String> tokens) {
+        gptTeamAccountService.batchImport(tokens);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+}