From f44e4d609e7efaed9eac545137970b1e334f8106 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期六, 21 九月 2024 09:01:36 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/MemberGoodsCollectionController.java | 266 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 264 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/MemberGoodsCollectionController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/MemberGoodsCollectionController.java index 098d61d..e894486 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/MemberGoodsCollectionController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/MemberGoodsCollectionController.java @@ -1,8 +1,54 @@ package com.ruoyi.goods.controller.inner; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; +import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; +import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.CertAlipayRequest; +import com.alipay.api.AlipayConfig; +import com.alipay.api.domain.AlipayOpenAppMiniTemplatemessageSendModel; +import com.alipay.api.response.AlipayOpenAppMiniTemplatemessageSendResponse; +import com.alipay.api.request.AlipayOpenAppMiniTemplatemessageSendRequest; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.security.annotation.InnerAuth; +import com.ruoyi.goods.domain.GoodsSeckillAppointment; +import com.ruoyi.goods.domain.MemberGoodsCollection; +import com.ruoyi.goods.mapper.GoodsSeckillMapper; +import com.ruoyi.goods.mapper.GoodsSkuMapper; +import com.ruoyi.goods.service.IGoodsSeckillAppointmentService; +import com.ruoyi.goods.service.IMemberGoodsCollectionService; +import com.ruoyi.goods.service.impl.MemberGoodsCollectionServiceImpl; +import com.ruoyi.goods.utli.HttpUtils; +import com.ruoyi.system.api.domain.GoodsSeckill; +import com.ruoyi.system.api.domain.GoodsSku; +import com.ruoyi.system.api.domain.Member; +import com.ruoyi.system.api.feignClient.MemberClient; +import me.chanjar.weixin.common.error.WxErrorException; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.utils.HttpClientUtils; +import org.apache.http.util.EntityUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * <p> @@ -16,4 +62,220 @@ @RequestMapping("/member-goods-collection") public class MemberGoodsCollectionController { + private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; + + private static final String WX_APPID = "wx69e3ac6e13a889b7"; + + private static final String WX_SECRET = "1b8bcfcb681524ac553e72054e5271ef"; + + + /** + * appID + **/ + private static final String APP_ID_PROD = "2021004150664294"; + /** + * 私钥 + */ + private static final String APP_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC3ap1qQ5GTe+syB8Tu/fH8nRdpjA7yNgLINR/kFq1VFzxDref7DQDUDWXt+s5QZyBjL1UfbQWtA96F+OpgmIiNMdZSn9FH/w5XSqSd7B4nAa1sgfdLdZDvm+crqzn8OzyEJTrO8tihF+9K+btBl37s3QfmmzCRl1PAAMGqfy/JcQ2aivY+hxb25V0kD5AAXM7mVC2zzcBrykzafQCXEnDC7ls4Hjy0agmq1bKSx8SLYTsXAzZiGk9E7yh76nDAB+P1+kKPEYJXociU3k4YRR7l+6tzBPd+/mVkL34nuV5IiAK/795CrP/9gC50nZK/6CqSPDlQlOaAaJ2uZvAOeKx3AgMBAAECggEAMzw5+swjJ0KvYYtgDK6tYTZ0qswwBKLnxgto/CsFgkZ6VCGJMszgFVwkxASSi00zc+Ft8thehIUXLO9qcU9Knb51MyFnsafi1qmIMIEbryO90RjA/rg5o2U2fzFWgkn9zqAjvFmEAAQSmSwHjfwGvZ3Erjtdpt3RzEmpz7m1nJxYuZ2JLdo8AIY+iYn1NeDxHMi27RtqsZje7RV5YXrqKtMMzW2atmj+Dbn/E1pxpF0Dz6l0TqQh5B+9j1XlPTZKcYOYHNI0ACV+dV1NZsqmdhX0lKtQbsj/Q67vhq7uCmQRKcEka/5Z0X/TOKbwJE6i2/YEuA4PUGLpBMZQXhSGYQKBgQD50IuUTG6fg1dqFt9bJXxq2i1lkIHvzaCkHqVnTMyTDs+VcO2S6YaAFy6BLSI933qvHLogkhqnHiN+BRHe/M5+4TAOx30SQlJYa5ojpNFwMnRSZgxLoEddwlfj6qTnCgDW3CsUPR85x85NjIhONy75muNnNG8GHdn3blk2Y7KhpwKBgQC79TQhz5eJ6cwiWPWMWnnSAVvFKW4iPZjkbk+Sl7JXuqzvsdE47gGN0Vk8iYWEc2WrnQY6vf7WnamQYi+Gr5ySfTSt9qwvRx0IRzHdSZkOsHJLBCnAt+Pf+pSBc2Z788iUXVbDRAIfF6YYG44P3jHspbnGPJt14PP0sHbPmh7YsQKBgGzGGYChJyndjpprCyYs1FfSWCH5IhrAdkn/7hVko08FC+4OFeP6Os5bSayFcntua4UEBSdZdrF9tgaRPo7RlTg55SsKQbNJnYFSmPMcOPWZgny+YmwrheeVT5+188eF24eypi9Rzd7i2Tl7D36/GH0mrA2sDwuiw92w9rdwAb/RAoGAf6RDZPqvNI87e8/h4RDITd9yTPCXxFUEcYygKTMvf/hb3ONq7DhlgcO70CqsK4iacPLP+jBw0Zp8PnsPP24e7DRvA/zSbcDjbG285URH1vvogh0vpZq7+60WENsnq+GgQ3EnrK+QqUDMIO8FiK0iRk09XexmvqSnx3HXHaDSdeECgYB9htO5mOn2/ugIeMw11g+JJkZ/hzE55/6fLf7zh3yel5EflmAdYRv0lHafjyXIzNrAnBgD95x4LKGLi9A5AMo9SJJu0ZOg1KujKPVY4ByCm9SO7ErJDuHI4AhtewdHhYDpnXMakoxm/medSjlt7GCVv7E/eDpNZs+MLi9MiTFx2g=="; + /** + * 支付宝公钥 + */ + private static final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlW2RMACojdqTa8H+j6411Lm5UipGXXbQiswq50rUflwjTj843zNVaVpk8uJmbdmtUBJlmblgBS/a31O4L4LrHB8WxJ+w0f9DBNTq9T6b80MiAVnU/3gXK365DmbzPWS5pR9wEgJVHnfOFUbsB5AVFHV0m9hUZcPv7xveuEp3BEoD5smaDJByR+KgFw0Q0JgINhhE6bsEa3UgJ198af269LtQ5HJl1TWLI8aeqW14HrxyADIt49NB9KZ8MOdKP+66HWcrXlipKFHtccy3dff72DqPmFdESoXfLXKZyhU5w9v4Q5F6UoAGTPwl9KQwikTobNeJ/7su7X3AB6+C14J4sQIDAQAB"; + + + @Resource + private IGoodsSeckillAppointmentService iGoodsSeckillAppointmentService; + + @Resource + private MemberClient memberClient; + + @Resource + private GoodsSeckillMapper goodsSeckillMapper; + @Resource + private GoodsSkuMapper goodsSkuMapper; + + @InnerAuth + @GetMapping("/tusonUser/{tusonUserId}") + R<?> tusonUser(@PathVariable("tusonUserId") Long tusonUserIdId){ + GoodsSeckill goodsSeckill = goodsSeckillMapper.selectById(tusonUserIdId); + LambdaQueryWrapper<GoodsSeckillAppointment> wrapper3= Wrappers.lambdaQuery(); + wrapper3.eq(GoodsSeckillAppointment::getGoodsSeckillId,tusonUserIdId); + List<GoodsSeckillAppointment> list = iGoodsSeckillAppointmentService.list(wrapper3); + for (GoodsSeckillAppointment li:list) { + Member data = memberClient.getMembeOne(li.getMemberId(), SecurityConstants.INNER).getData(); + + GoodsSku goodsSku = goodsSkuMapper.selectById(goodsSeckill.getGoodsSkuId()); + if (data.getZfbOpenid()!=null){ + try { + push1(data.getZfbOpenid(),li.getFormId(),goodsSku.getSkuName(),goodsSeckill.getSeckillPrice(),goodsSeckill.getStartTime()); + } catch (AlipayApiException e) { + throw new RuntimeException(e); + } + }if (data.getMiniOpenid()!=null){ + push(data.getMiniOpenid(),li.getFormId(),goodsSku.getSkuName(),goodsSeckill.getSeckillPrice(),goodsSeckill.getStartTime()); + } + } + + + return R.ok(); + } + + + public String push1 (String openid, String formid, String skuName, BigDecimal seckillPrice, LocalDateTime startTime) throws AlipayApiException { + + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("APP_ID_PROD"); + alipayConfig.setPrivateKey(APP_PRIVATE_KEY); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(ALIPAY_PUBLIC_KEY); + alipayConfig.setCharset("UTF8"); + alipayConfig.setSignType("RSA2"); + AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); + AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest(); + AlipayOpenAppMiniTemplatemessageSendModel model = new AlipayOpenAppMiniTemplatemessageSendModel(); + model.setFormId(formid); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + model.setData("{\"keyword1\": {\"value\" : \""+skuName+"\"},\"keyword2\": {\"value\" : \""+seckillPrice+"\"},\"keyword3\": {\"value\" : \""+startTime.format(formatter)+"\"}}"); + model.setPage("page/component/index"); + model.setUserTemplateId("1b6b60e0511a40b49197e83ed3d74fb2"); + model.setToUserId(openid); + request.setBizModel(model); + AlipayOpenAppMiniTemplatemessageSendResponse response = alipayClient.execute(request); + System.out.println(response.getBody()); + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); + } + return null; + } + + /** + * 发送消息 + * @param template_id 所需下发的订阅模板id + * @param page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转 + * @param touser 接收者(用户)的 openid + * @param data 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object + * @param miniprogram_state 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 + * @param lang 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN + * @return + */ + public String push(String openid, String formid, String skuName, BigDecimal seckillPrice, LocalDateTime startTime) { + + //1,配置小程序信息 + + String accessToken = null; + try { + accessToken = getAccessTokenByWX(); + } catch (Exception e) { + throw new RuntimeException(e); + } + JSONObject jsonObject = JSONObject.parseObject(accessToken); + String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+jsonObject.get("access_token"); + Map<String, Object> params = new HashMap<>(); + params.put("template_id", "NHmHEbK8SjzafWgnErAxNR0b2XJzSehv2kPqbQefolU"); + params.put("page", null); + params.put("touser", openid); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm"); + String data = "{\"thing1\":{\"value\":\""+skuName+"\"},\"amount3\":{\"value\":\""+seckillPrice.toString()+"\"}"+ + ",\"time4\":{\"value\":\""+startTime.format(formatter)+"\"}"+ + ",\"thing5\":{\"value\":\"优质老酒限时秒杀即将开始!点击参与秒杀哈\"}}"; + + params.put("data", JSON.parseObject(data)); + params.put("miniprogram_state", "trial"); + params.put("lang", "zh_CN"); + try { + Map<String, Object> payloadMapData = JSONObject.parseObject(HttpUtils.httpPost(url, JSONObject.toJSONString(params))); + if (payloadMapData.containsKey("errCode")) { + System.out.println("返回code码:"+payloadMapData.get("errCode").toString()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + + /* WxMaInMemoryConfig wxConfig = new WxMaInMemoryConfig(); + wxConfig.setAppid("wx69e3ac6e13a889b7");//小程序appid + + wxConfig.setSecret("1b8bcfcb681524ac553e72054e5271ef");//小程序AppSecret + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + WxMaService wxMaService = new WxMaServiceImpl(); + + wxMaService.setWxMaConfig(wxConfig); + String responseAccessToken=null; + try { + responseAccessToken = getAccessTokenByWX(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + + //2,设置模版信息(keyword1:类型,keyword2:内容) + + + List<WxMaTemplateData> templateDataList = new ArrayList<>(4); + + WxMaTemplateData data1 = new WxMaTemplateData("thing1", skuName); + + WxMaTemplateData data2 = new WxMaTemplateData("amount3", seckillPrice.toString()); + + WxMaTemplateData data3 = new WxMaTemplateData("thing4", startTime.format(formatter)); + + WxMaTemplateData data4 = new WxMaTemplateData("thing5","优质老酒限时秒杀即将开始!点击参与秒杀哈"); + + templateDataList.add(data1); + + templateDataList.add(data2); + + templateDataList.add(data3); + + templateDataList.add(data4); + + + + //3,设置推送消息 + + WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder() + + .toUser(openid)//要推送的用户openid + + .formId(formid)//收集到的formid + + .templateId("NHmHEbK8SjzafWgnErAxNR0b2XJzSehv2kPqbQefolU")//推送的模版id(在小程序后台设置) + + .data(templateDataList)//模版信息 + + .page("pages/index/index")//要跳转到小程序那个页面 + + .build(); + + //4,发起推送 + + try { + wxMaService.getMsgService().sendTemplateMsg(templateMessage); + + } catch (WxErrorException e) { + + System.out.println("推送失败:" + e.getMessage()); + + return e.getMessage(); + + } +*/ + return "推送成功"; + + } + + public static String getAccessTokenByWX() throws Exception { + String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential"; + Map<String, String> headers = new HashMap<>(8); + HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null); + return EntityUtils.toString(response.getEntity()); + } + } -- Gitblit v1.7.1