From efdb99f8cecc4afb592afad79c761081d5d5cf22 Mon Sep 17 00:00:00 2001 From: lee <4766465@qq.com> Date: Wed, 18 Dec 2024 13:27:00 +0800 Subject: [PATCH] init --- yami-shop-api/src/main/java/com/yami/shop/api/controller/QrcodeTicketController.java | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 109 insertions(+), 0 deletions(-) diff --git a/yami-shop-api/src/main/java/com/yami/shop/api/controller/QrcodeTicketController.java b/yami-shop-api/src/main/java/com/yami/shop/api/controller/QrcodeTicketController.java new file mode 100644 index 0000000..142f055 --- /dev/null +++ b/yami-shop-api/src/main/java/com/yami/shop/api/controller/QrcodeTicketController.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ +package com.yami.shop.api.controller; + + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.yami.shop.bean.model.QrcodeTicket; +import com.yami.shop.common.exception.YamiShopBindException; +import com.yami.shop.common.response.ServerResponseEntity; +import com.yami.shop.common.util.IdUtil; +import com.yami.shop.config.WxConfig; +import com.yami.shop.service.QrcodeTicketService; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.Operation; +import lombok.AllArgsConstructor; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.util.Date; +import java.util.Objects; + + +/** + * 二维码数据信息 + * + * @author LGH + * @date 2020-03-12 16:29:39 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/qrcodeTicket" ) +@Tag(name = "二维码数据") +public class QrcodeTicketController { + + private final QrcodeTicketService qrcodeTicketService; + + private final WxConfig wxConfig; + + private final IdUtil idUtil; + + @GetMapping("/miniQrCode") + @Operation(summary = "获取小程序二维码", description ="获取小程序二维码,返回二维码图片流,小程序跳到二维码的页面之后," + + "需要根据获取的scene请求获取线上保存的content,为什么要这么麻烦,以为scene的内容有限,只能在数据库保存") + @Parameters({ + @Parameter(name = "content", description = "要保存的内容" , required = true), + @Parameter(name = "type", description = "类型:1. 小程序团购商品 2.小程序分销商品二维码" , required = true) + }) + public ResponseEntity<FileSystemResource> save(String content, Integer type) throws WxErrorException { + String page; + if(Objects.equals(type, 1) || Objects.equals(type, 2)) { + page = "pages/prod/prod"; + } else { + // 无法获取页面信息 + throw new YamiShopBindException("yami.unable.get.page"); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.set("type", type); + jsonObject.set("content", content); + + String ticket = idUtil.nextShortId(); + QrcodeTicket qrcodeTicket = new QrcodeTicket(); + qrcodeTicket.setContent(jsonObject.toString()); + qrcodeTicket.setCreateTime(new Date()); + qrcodeTicket.setType(type); + qrcodeTicket.setTicket(ticket); + qrcodeTicket.setTicketUrl(page); + qrcodeTicketService.save(qrcodeTicket); + File file = wxConfig.getWxMaService().getQrcodeService().createWxaCodeUnlimit(ticket, page); + return ResponseEntity + .ok() + .contentLength(file.length()) + .contentType(MediaType.IMAGE_PNG) + .body(new FileSystemResource(file)); + } + + @GetMapping("/getContent") + @Operation(summary = "根据Ticket获取保存的内容" , description = "小程序里的scene就是你要的Ticket") + @Parameters({ + @Parameter(name = "ticket", description = "小程序里的scene就是你要的Ticket" , required = true) + }) + public ServerResponseEntity<QrcodeTicket> getContent(String ticket) { + QrcodeTicket qrcodeTicket = qrcodeTicketService.getOne(new LambdaQueryWrapper<QrcodeTicket>().eq(QrcodeTicket::getTicket, ticket)); + if (qrcodeTicket == null) { + // 二维码已过期 + throw new YamiShopBindException("yami.constant.code.expire"); + } + if (qrcodeTicket.getExpireTime() !=null + && qrcodeTicket.getExpireTime().getTime() < System.currentTimeMillis()) { + throw new YamiShopBindException("yami.constant.code.expire"); + } + return ServerResponseEntity.success(qrcodeTicket); + } +} -- Gitblit v1.9.3