zoujiajian 3 éve
szülő
commit
0e0ab027b2

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

@@ -187,6 +187,7 @@ public class GoodsDon extends BaseEntity {
     @Getter
     public enum SpecialType {
         recharge("代充"),
+        courseware("课件")
         ;
 
         private String desc;

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/model/request/SpecialGoodsTicketReq.java

@@ -0,0 +1,23 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/*
+ *项目名: netflix
+ *文件名: CoursewareReq
+ *创建者: JavaZou
+ *创建时间:2023/8/23 17:32
+ */
+@Getter
+@Setter
+public class SpecialGoodsTicketReq {
+	@NotNull
+	private Long relationId;
+
+	private String email;
+
+	private Long userId;
+}

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/mail/MailService.java

@@ -16,4 +16,9 @@ public interface MailService {
 	Boolean sendLoginCodeEmailToPeople(String code, String toAddress);
 
 	void sendEmailMsgToPeople(String people, String subject, String msg);
+
+	/**
+	 * 发送课程给用户
+	 */
+	void sendCoursewareByGoodsId(Long goodsId, String goodsTitle, String email) throws Exception;
 }

+ 20 - 0
netflix-service/src/main/java/com/cyksj/service/mail/impl/MailServiceImpl.java

@@ -9,8 +9,12 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.mail.MailException;
 import org.springframework.mail.SimpleMailMessage;
 import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
 import org.springframework.stereotype.Service;
 
+import javax.mail.internet.MimeMessage;
+import java.io.File;
+
 /*
  *项目名: netflix
  *文件名: MailServiceImpl
@@ -28,6 +32,8 @@ public class MailServiceImpl implements MailService {
 
 	private final RedisService redisService;
 
+	private final static String courseware_path = "courseware";
+
 	@Override
 	public String sendLoginCodeEmailToPeople(Integer digit, String toAddress) {
 		// 生成验证码
@@ -60,6 +66,20 @@ public class MailServiceImpl implements MailService {
 		}
 	}
 
+	@Override
+	public void sendCoursewareByGoodsId(Long goodsId, String goodsTitle, String email) throws Exception {
+		//获取当前目前下的课程文件
+		MimeMessage msg = mailSender.createMimeMessage();
+		MimeMessageHelper helper = new MimeMessageHelper(msg,true);
+		//标题
+		helper.setSubject("课程");
+		helper.addAttachment("1.docx", new File("D:\\Java\\yicang\\yhlxj\\courseware\\1.docx"));
+		helper.setText("xxxxx");
+		helper.setFrom(from);
+		helper.setTo(email);
+		mailSender.send(msg);
+	}
+
 
 	public boolean sendMail(String toAddress, String subject, String text) {
 		SimpleMailMessage msg = new SimpleMailMessage();

+ 6 - 1
netflix-service/src/main/java/com/cyksj/service/relation/GroupRelationFrontService.java

@@ -1,8 +1,8 @@
 package com.cyksj.service.relation;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.GroupsRelation;
+import com.cyksj.model.request.SpecialGoodsTicketReq;
 import com.cyksj.model.views.RenewalView;
 import com.cyksj.model.views.UserRecommendGoodsFrontView;
 
@@ -22,4 +22,9 @@ public interface GroupRelationFrontService {
 	GroupsRelation getSimilarExpiredGroupRelation(Long skuId, Integer days, Integer months, List<Long> errorsRelationIds);
 
 	Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(Boolean isPayNf, List<Long> filter_goods_id, Integer start, Integer limit);
+
+	/**
+	 * 通过邮件发送课程
+	 */
+	void sendCourseWare(SpecialGoodsTicketReq request) throws Exception;
 }

+ 41 - 0
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -3,6 +3,8 @@ package com.cyksj.service.relation.impl;
 import cn.hutool.core.date.BetweenFormater;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -11,11 +13,14 @@ import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.GroupsRelationMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.model.entity.CouponUser;
+import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.User;
+import com.cyksj.model.request.SpecialGoodsTicketReq;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.chatgpt.ChatGptAuthService;
+import com.cyksj.service.mail.MailService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.user.UserBindRelationService;
@@ -25,6 +30,7 @@ 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 java.util.ArrayList;
 import java.util.List;
@@ -54,6 +60,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final RedisService redisService;
 
+	private final MailService mailService;
+
 	@Override
 	public List<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize) {
 		User u = userMapper.selectById(userId);
@@ -186,4 +194,37 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 	public Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(Boolean isPayNf, List<Long> filter_goods_id, Integer start, Integer limit) {
 		return groupsRelationMapper.getRecommendGoodsViews(new Page<>(start, limit),filter_goods_id, isPayNf);
 	}
+
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void sendCourseWare(SpecialGoodsTicketReq request) throws Exception {
+		Long userId = request.getUserId();
+		Long relationId = request.getRelationId();
+		String email = request.getEmail();
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		RenewalView relation = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder().field(RenewalView::getRelationId, relationId).build());
+		Assert.notNull(relation, "您的车票不存在");
+		Long relationUserId = relation.getUserId();
+		if (!userIdList.contains(relationUserId)) {
+			throw BusinessRuntimeException.getInstance("您的车票不存在");
+		}
+		if (relation.getSpecialType() != GoodsDon.SpecialType.courseware) {
+			throw BusinessRuntimeException.getInstance("");
+		}
+		//是否已发送
+		if (StrUtil.isNotBlank(relation.getAccount())) {
+			throw BusinessRuntimeException.getInstance("已领取课件,请前往邮箱查看");
+		}
+		if (!Validator.isEmail(email)) {
+			throw BusinessRuntimeException.getInstance("请输入正确的邮箱");
+		}
+		int update = groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+				.set(GroupsRelation::getAccount, email)
+				.isNull(GroupsRelation::getAccount)
+				.eq(GroupsRelation::getId, relationId));
+		if (update > 0) {
+			Long goodsId = relation.getGoodsId();
+			mailService.sendCoursewareByGoodsId(goodsId, relation.getTitle(), email);
+		}
+	}
 }

+ 34 - 0
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -28,9 +28,11 @@ import com.cyksj.model.dto.QuestionnaireView;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.request.OrderPayRequest;
+import com.cyksj.model.request.SpecialGoodsTicketReq;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.chatgpt.ChatGptAuthService;
+import com.cyksj.service.mail.MailService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.mange.ticket.TicketAdvertiseConfigClickRecordService;
 import com.cyksj.service.order.OrderDonService;
@@ -508,4 +510,36 @@ public class GroupRelationController {
         Page<UserRecommendGoodsFrontView> page = groupRelationFrontService.getRecommendGoodsViews(isPayNf, filter_goods_id, start, limit);
         return GatewayResponse.SUCCESS.newBuilder().toResult(page);
     }
+
+    /**
+     * 查看GPT token
+     */
+    @GetMapping("/get/gptAccessToken")
+    public Result<String> getGptAccessToken(Long relationId) throws Exception {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        List<Long> userIds = userBindRelationService.getRelationUserIdList(userId, null);
+        //存在该车票
+        RenewalView renewalView = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder()
+                .field(RenewalView::getRelationId, relationId)
+                .field(RenewalView::getUserId, userIds).op(Operator.InList).build());
+        Assert.notNull(renewalView, "您的车票不存在");
+        if (renewalView.getCategory() != 1) {
+            throw BusinessRuntimeException.getInstance("该平台类型车票无法获取GPT直连token");
+        }
+        String account = renewalView.getAccount();
+        String accessToken = chatGptAuthService.getAccessToken(account);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(accessToken);
+    }
+
+    /**
+     * 获取特殊类型课程 通过邮件发送课程
+     * 领取课件
+     */
+    @PostMapping("/get/courseware")
+    public Result<String> getCourseWare(@RequestBody SpecialGoodsTicketReq request) throws Exception {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        request.setUserId(userId);
+        groupRelationFrontService.sendCourseWare(request);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
 }

+ 2 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java

@@ -1,8 +1,6 @@
 package com.cyksj.web.controller.manage.goods;
 
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.annotation.Log;
 import com.cyksj.common.annotation.Log;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
@@ -20,6 +18,7 @@ import com.cyksj.service.mange.CmsGoodsDonService;
 import com.cyksj.service.mange.CmsGoodsDonSkuService;
 import com.cyksj.service.mange.CmsGoodsDonSpecService;
 import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;