MyTest.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446
  1. package com.qs.mp.task;
  2. import cn.hutool.core.codec.Base62;
  3. import cn.hutool.core.date.LocalDateTimeUtil;
  4. import cn.hutool.core.util.HashUtil;
  5. import cn.hutool.core.util.IdUtil;
  6. import cn.hutool.core.util.NumberUtil;
  7. import cn.hutool.crypto.SecureUtil;
  8. import cn.hutool.crypto.symmetric.DES;
  9. import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
  10. import cn.hutool.crypto.symmetric.SymmetricCrypto;
  11. import cn.hutool.http.HttpRequest;
  12. import com.alibaba.fastjson.JSON;
  13. import com.alibaba.fastjson.JSONObject;
  14. import com.alibaba.fastjson.parser.Feature;
  15. import com.alibaba.fastjson.serializer.SerializerFeature;
  16. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  17. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  18. import com.eptok.yspay.opensdkjava.fund.BankAuthorityApi;
  19. import com.eptok.yspay.opensdkjava.fund.MercFundApi;
  20. import com.eptok.yspay.opensdkjava.pojo.vo.OnlineReqDataVo;
  21. import com.eptok.yspay.opensdkjava.util.Base64Utils;
  22. import com.eptok.yspay.opensdkjava.util.DateUtil;
  23. import com.eptok.yspay.opensdkjava.util.SrcDesUtil;
  24. import com.eptok.yspay.opensdkjava.util.YsOnlineSignUtils;
  25. import com.eptok.yspay.opensdkjava.util.YsfSignUtil;
  26. import com.qs.mp.admin.domain.Coupon;
  27. import com.qs.mp.admin.domain.CouponTicket;
  28. import com.qs.mp.admin.domain.GoodsCard;
  29. import com.qs.mp.admin.domain.Marketing;
  30. import com.qs.mp.admin.service.ICouponChannelService;
  31. import com.qs.mp.admin.service.ICouponService;
  32. import com.qs.mp.admin.service.ICouponTicketService;
  33. import com.qs.mp.admin.service.IGoodsCardService;
  34. import com.qs.mp.common.constant.YsServerApiConstants;
  35. import com.qs.mp.common.core.redis.DistributedLocker;
  36. import com.qs.mp.common.core.redis.RedisCache;
  37. import com.qs.mp.common.enums.UserTypeEnum;
  38. import com.qs.mp.common.utils.AESUtil;
  39. import com.qs.mp.common.utils.DateUtils;
  40. import com.qs.mp.common.utils.RSAUtil;
  41. import com.qs.mp.common.utils.WebhookService;
  42. import com.qs.mp.common.utils.html.EscapeUtil;
  43. import com.qs.mp.common.utils.http.OkHttpUtil;
  44. import com.qs.mp.common.utils.uuid.IdUtils;
  45. import com.qs.mp.common.utils.uuid.UUID;
  46. import com.qs.mp.framework.service.IWxSubscribeMessage;
  47. import com.qs.mp.pay.service.IWalletService;
  48. import com.qs.mp.quartz.task.DayStatTask;
  49. import com.qs.mp.quartz.task.MarketingTask;
  50. import com.qs.mp.quartz.task.TicketOrderTask;
  51. import com.qs.mp.system.service.id.BizIdGenerator;
  52. import com.qs.mp.user.domain.MarketingUserCode;
  53. import com.qs.mp.user.service.IMarketingUserCodeService;
  54. import com.qs.mp.utils.SecurityUtils;
  55. import com.taobao.api.Constants;
  56. import java.util.concurrent.TimeUnit;
  57. import org.apache.commons.lang3.RandomStringUtils;
  58. import org.apache.commons.lang3.StringUtils;
  59. import org.apache.http.client.methods.HttpRequestBase;
  60. import org.junit.jupiter.api.Test;
  61. import org.slf4j.Logger;
  62. import org.slf4j.LoggerFactory;
  63. import org.springframework.beans.factory.annotation.Autowired;
  64. import org.springframework.beans.factory.annotation.Value;
  65. import org.springframework.boot.test.context.SpringBootTest;
  66. import java.io.IOException;
  67. import java.time.LocalDateTime;
  68. import java.util.*;
  69. /**
  70. * @author Cup
  71. * @date 2022/4/26
  72. */
  73. @SpringBootTest
  74. public class MyTest {
  75. protected final Logger logger = LoggerFactory.getLogger(this.getClass());
  76. @Autowired
  77. private IWalletService walletService;
  78. @Autowired
  79. private MarketingTask marketingTask;
  80. @Autowired
  81. private RedisCache redisCache;
  82. @Autowired
  83. private BizIdGenerator bizIdGenerator;
  84. @Autowired
  85. private IWxSubscribeMessage wxSubscribeMessage;
  86. @Autowired
  87. private IMarketingUserCodeService marketingUserCodeService;
  88. @Autowired
  89. private DayStatTask dayStatTask;
  90. @Autowired
  91. private ICouponService couponService;
  92. @Autowired
  93. private ICouponChannelService couponChannelService;
  94. @Autowired
  95. private ICouponTicketService couponTicketService;
  96. @Autowired
  97. private IGoodsCardService goodsCardService;
  98. @Autowired
  99. private DistributedLocker distributedLocker;
  100. @Autowired
  101. private TicketOrderTask ticketOrderTask;
  102. @Value("${ys-pay.serverUrl}")
  103. private String serverUrl;
  104. @Value("${ys-pay.partner-id}")
  105. private String partnerId;
  106. @Value("${ys-pay.private-key-pass}")
  107. private String privateKeyPass;
  108. @Value("${ys-pay.private-key-path}")
  109. private String privateKeyPath;
  110. @Value("${ys-pay.public-key-path}")
  111. private String publicKeyPath;
  112. @Value("${ys-pay.withdraw-notify-url}")
  113. private String ysWithdrawNotifyUrl;
  114. /**
  115. * 提现测试方法
  116. */
  117. @Test
  118. void test20() {
  119. String tradeNo = DateUtil.getDateNowYmd() + DateUtil.getRandom(14);
  120. OnlineReqDataVo req = new OnlineReqDataVo();
  121. req.setReqUrl(YsServerApiConstants.COMMON_API);
  122. req.setPrivateKeyFilePath(privateKeyPath);
  123. req.setYsPublicKeyFilePath(publicKeyPath);
  124. req.setPrivateKeyPassword(privateKeyPass);
  125. req.setNotifyUrl(ysWithdrawNotifyUrl);
  126. req.setPartnerId(partnerId);
  127. //实时提现(一般户到银行卡)业务参数
  128. Map<String, Object> bizContent = new HashMap<>();
  129. //商户生成的订单号,生成规则前8位必须为交易日期,如20180525,范围跨度支持包含当天在内的前后一天
  130. bizContent.put("out_trade_no", tradeNo);
  131. //商户号
  132. bizContent.put("merchant_usercode", partnerId);
  133. //暂时只支持币种:CNY(人民币)
  134. bizContent.put("currency", "CNY");
  135. //提现的总金额。单位为:RMB Yuan。取值范围为[0.01,99999999.99],精确到小数点后两位。Number(10,2)指10位长度,2位精度
  136. bizContent.put("total_amount", "0.04");
  137. //订单说明
  138. bizContent.put("subject", "提现了");
  139. //商户日期(该参数做交易与查询时需要一致) 该日期需在当日的前后一天时间范围之内
  140. bizContent.put("shopdate", DateUtil.getDateNowYmd());
  141. //银行帐号
  142. bizContent.put("bank_account_no", "6212260488888888888");
  143. req.setParamData(bizContent);
  144. String result = null;
  145. try{
  146. logger.info("实时提现(一般户到银行卡)调用sdk接口addScanMerc请求入参为:"+ JSONObject.toJSONString(req));
  147. //根据返回结果处理自己的业务逻辑,result内容详见接口文档
  148. result = MercFundApi.withdrawQuick(req);
  149. }catch (Exception e){
  150. logger.info("实时提现(一般户到银行卡)失败:"+ e.getMessage());
  151. }
  152. System.out.println("result = " + result);
  153. }
  154. @Test
  155. void test19() {
  156. // 调用接口校验
  157. OnlineReqDataVo req = new OnlineReqDataVo();
  158. req.setReqUrl(YsServerApiConstants.OPEN_API);
  159. req.setPartnerId(partnerId);
  160. req.setPrivateKeyFilePath(privateKeyPath);
  161. req.setYsPublicKeyFilePath(publicKeyPath);
  162. req.setPrivateKeyPassword(privateKeyPass);
  163. //银行实名认证三要素下单业务参数
  164. Map<String, Object> bizContent = new HashMap<>();
  165. String tradeNo = DateUtil.getDateNowYmd() + DateUtil.getRandom(14);
  166. //商户生成的订单号,生成规则前8位必须为交易日期,如20180525,范围跨度支持包含当天在内的前后一天
  167. bizContent.put("out_trade_no", tradeNo);
  168. //商户日期(该参数做交易与查询时需要一致)该日期需在当日的前后一天时间范围之内
  169. bizContent.put("shopdate", DateUtil.getDateNowYmd());
  170. //实名认证姓名--请填写真实信息
  171. bizContent.put("bank_account_name", "张三");
  172. //银行帐号,支持对公对私
  173. bizContent.put("bank_account_no", "6212260488888888888");
  174. //证件号码,目前只支持身份证
  175. bizContent.put("id_card", "41022319940916602X");
  176. req.setParamData(bizContent);
  177. String result = null;
  178. try {
  179. logger.info("银行实名认证三要素调用sdk接口addScanMerc请求入参为:" + JSONObject.toJSONString(req));
  180. //根据返回结果处理自己的业务逻辑,result内容详见接口文档
  181. result = BankAuthorityApi.sendBankAuthThreePrecise(req);
  182. } catch (Exception e) {
  183. logger.info("银行实名认证三要素失败:" + e.getMessage());
  184. }
  185. System.out.println("result = " + result);
  186. }
  187. @Test
  188. void test18() {
  189. walletService.h5Pay(null, "0239021091224323", 100, "测试测试测试");
  190. }
  191. /**
  192. * 实名认证方法
  193. */
  194. @Test
  195. void test17() {
  196. OnlineReqDataVo req = new OnlineReqDataVo();
  197. //商户在银盛支付平台开设的用户号[商户号],接入时需要替换成自己的
  198. req.setPartnerId(partnerId);
  199. req.setReqUrl(YsServerApiConstants.OPEN_API);
  200. req.setPrivateKeyFilePath(privateKeyPath);
  201. req.setPrivateKeyPassword(privateKeyPass);
  202. req.setYsPublicKeyFilePath(publicKeyPath);
  203. //银行实名认证三要素下单业务参数
  204. Map<String, Object> bizContent = new HashMap<>();
  205. bizContent.put("out_trade_no", DateUtil.getDateNowYmd() + DateUtil.getRandom(6));//商户生成的订单号,生成规则前8位必须为交易日期,如20180525,范围跨度支持包含当天在内的前后一天
  206. bizContent.put("shopdate", DateUtil.getDateNowYmd());//商户日期(该参数做交易与查询时需要一致)该日期需在当日的前后一天时间范围之内
  207. bizContent.put("bank_account_name", "李四");//实名认证姓名--请填写真实信息
  208. bizContent.put("bank_account_no", "6212260488888888888");//银行帐号,支持对公对私
  209. bizContent.put("id_card","41022319940916602X");//证件号码,目前只支持身份证
  210. req.setParamData(bizContent);
  211. String result = null;
  212. try{
  213. logger.info("银行实名认证三要素调用sdk接口addScanMerc请求入参为:"+ JSONObject.toJSONString(req));
  214. //根据返回结果处理自己的业务逻辑,result内容详见接口文档
  215. result = BankAuthorityApi.sendBankAuthThreePrecise(req);
  216. }catch (Exception e){
  217. logger.info("银行实名认证三要素失败:"+ e.getMessage());
  218. }
  219. System.out.println("result = " + result);
  220. }
  221. /**
  222. * 实名认证测试方法
  223. * @throws Exception
  224. */
  225. @Test
  226. void test16() throws Exception {
  227. Map<String, String> mapData = new HashMap<>();
  228. mapData.put("partner_id", partnerId);
  229. mapData.put("method", "ysepay.authenticate.three.key.element.precise");
  230. mapData.put("timestamp", DateUtil.getDateNow());
  231. mapData.put("sign_type", "RSA");
  232. mapData.put("charset", "utf-8");
  233. mapData.put("version", "3.0");
  234. // mapData.put("out_trade_no", "202003276843192280647119");
  235. JSONObject json = new JSONObject();
  236. json.put("out_trade_no", DateUtil.getDateNowYmd() + DateUtil.getRandom(6));
  237. json.put("shopdate", DateUtil.getDateNowYmd());
  238. json.put("bank_account_name", "蒋浩");
  239. json.put("bank_account_no", "6212260488888888888");
  240. json.put("id_card", SrcDesUtil.encryptData(partnerId, "331081199909124619"));
  241. mapData.put("biz_content", json.toString());
  242. //参数签名
  243. try {
  244. String sign = YsOnlineSignUtils.sign(mapData, privateKeyPass, privateKeyPath);
  245. mapData.put("sign", sign);
  246. System.out.println("sign = " + sign);
  247. } catch (Exception e) {
  248. System.err.println("签名异常" + e);
  249. }
  250. String result = OkHttpUtil.post("https://openapi.ysepay.com/gateway.do", mapData);
  251. // 结果验签
  252. JSONObject jsonObject = JSON.parseObject(result, Feature.OrderedField);
  253. // 加签内容
  254. String content = JSONObject.toJSONString(
  255. jsonObject.get("ysepay_authenticate_three_key_element_precise_response"),
  256. SerializerFeature.WriteMapNullValue);
  257. System.out.println("返回" + result);
  258. System.out.println("content = " + content);
  259. }
  260. @Test
  261. void test15() {
  262. ticketOrderTask.cancel();
  263. }
  264. @Test
  265. void test14() {
  266. distributedLocker.tryLock("goods_card_lock_key_466", 0, -1, TimeUnit.SECONDS);
  267. }
  268. @Test
  269. void test13() {
  270. List<GoodsCard> goodsCardList = goodsCardService.list(new QueryWrapper<GoodsCard>()
  271. .eq("is_use", 1));
  272. goodsCardList.forEach(System.out::println);
  273. }
  274. @Test
  275. void test12() {
  276. Coupon coupon = couponService.getById(56);
  277. String description = coupon.getDescription();
  278. String s = description.replaceAll("\\n", "<br>");
  279. System.out.println("coupon.getDescription() = " + s);
  280. }
  281. @Test
  282. void test11() {
  283. boolean remove = couponTicketService.remove(
  284. new LambdaQueryWrapper<CouponTicket>().eq(CouponTicket::getCouponId, 11));
  285. System.out.println("remove = " + remove);
  286. }
  287. @Test
  288. void test10() {
  289. for (int i = 0; i < 1; i++) {
  290. couponService.distributeByMarketing(188L, "56");
  291. }
  292. }
  293. @Test
  294. void test9() {
  295. Marketing marketing = new Marketing();
  296. marketing.setId(44L);
  297. marketing.setTitle("测试测试");
  298. wxSubscribeMessage.sendMarketingLottery(187L, marketing);
  299. }
  300. @Test
  301. void test8() {
  302. dayStatTask.stat("20220713");
  303. }
  304. @Test
  305. void test7() {
  306. String hellow = AESUtil.encrypt("hellow");
  307. System.out.println("hellow = " + hellow);
  308. String decrypt = AESUtil.decrypt("hahaha");
  309. System.out.println("decrypt = " + decrypt);
  310. }
  311. @Test
  312. void test6() {
  313. // List<MarketingUserCode> userCodeList = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
  314. // .select(MarketingUserCode::getUserId)
  315. // .eq(MarketingUserCode::getMarketingId, 102)
  316. //// .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue())
  317. // .groupBy(MarketingUserCode::getUserId));
  318. List<MarketingUserCode> userCodeList = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
  319. .select(MarketingUserCode::getUserId)
  320. .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue())
  321. .groupBy(MarketingUserCode::getUserId));
  322. userCodeList.forEach(System.out::println);
  323. }
  324. @Test
  325. void test5() {
  326. Set<String> testSet = new HashSet<>();
  327. testSet.add("test1");
  328. testSet.add("test2");
  329. testSet.add("test3");
  330. testSet.add("test4");
  331. redisCache.setCacheSet("testSet", testSet);
  332. List<Object> list = new ArrayList<>();
  333. list.add("test1");
  334. list.add("test3");
  335. list.add("test5");
  336. list.add("test6");
  337. list.add("test7");
  338. redisCache.removeSetValueByKey("testSet", list);
  339. }
  340. @Test
  341. void test4() {
  342. Marketing marketing = new Marketing();
  343. marketing.setId(45L);
  344. marketing.setTitle("测试订阅通");
  345. wxSubscribeMessage.sendMarketingLottery(188L, marketing);
  346. wxSubscribeMessage.sendMarketingLottery(79L, marketing);
  347. // wxSubscribeMessage.sendMarketingStart(188L, marketing);
  348. // wxSubscribeMessage.sendMarketingStart(79L, marketing);
  349. // wxSubscribeMessage.sendMarketingHelp(188L, marketing);
  350. // wxSubscribeMessage.sendMarketingHelp(79L, marketing);
  351. }
  352. @Test
  353. void test2() throws IOException {
  354. marketingTask.lottery();
  355. }
  356. @Test
  357. void test3() {
  358. for (int i = 0; i < 20; i++) {
  359. System.out.println("bizIdGenerator = " + bizIdGenerator.newId());
  360. }
  361. }
  362. @Test
  363. void test1() {
  364. walletService.refund("968527112497659906", 10, "测试");
  365. }
  366. }