This commit is contained in:
zhouwentao 2024-06-26 14:27:41 +08:00
parent 774d539630
commit 9001d70b6d
9 changed files with 54 additions and 119 deletions

View File

@ -28,7 +28,7 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.AssertUtils;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.mini.douyin.config.DouYinConfig;
import org.jeecg.modules.mini.douyin.model.DouYinOrderSyncModel;
import org.jeecg.modules.mini.douyin.model.ItemStruct;
import org.jeecg.modules.mini.douyin.util.DouWayPaymentMethod;
@ -36,6 +36,7 @@ import org.jeecg.modules.mini.douyin.util.DouYinUtil;
import org.jeecg.modules.mini.douyin.util.Sign;
import org.jeecg.modules.mini.dto.VipDTO;
import org.jeecg.modules.mini.service.MiniUserService;
import org.jeecg.modules.mini.wx.config.WeXinConfig;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.util.OrderNumberGenerator;
@ -53,7 +54,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.security.cert.X509Certificate;
import java.util.*;
@ -79,58 +79,9 @@ public class MiniPayApiController {
@Autowired
private MiniUserService miniUserService;
@Resource
private RedisUtil redisUtil;
@Value("${dy.appId}")
String douyinAppId;
@Value("${dy.appSecret}")
String douyinSecret;
@Value("${dy.token}")
String douyinToken;
@Value("${dy.notifyUrl}")
String douyinNotifyUrl;
@Value("${dy.salt}")
String douyinSalt;
/**
* 微信小程序appid
**/
@Value("${wx.appId}")
String appid;
/**
* 微信小程序secretId
**/
@Value("${wx.appSecret}")
String secret;
/**
* 商户号
**/
@Value("${wx.mchid}")
String mchid;
/**
* 商户密钥
**/
@Value("${wx.mchKey}")
String mchKey;
/**
* 回调地址
**/
@Value("${wx.notifyUrl}")
String notifyUrl;
/**
* 证书地址
**/
@Value("${wx.certPath}")
String certPath;
/**
* 证书密钥地址
**/
@Value("${wx.certKeyPath}")
String certKeyPath;
/**
* 微信平台证书
**/
@Value("${wx.platFormPath}")
String platFormPath;
private DouYinConfig douYinConfig;
@Resource
private WeXinConfig weXinConfig;
/**
* 小程序支付
@ -183,21 +134,21 @@ public class MiniPayApiController {
//判断是抖音平台 还是 微信平台 小程序操作
if ("toutiao".equals(provider)) {
//抖音
String douyinSign = DouYinUtil.main(douyinAppId, douyinToken, douyinNotifyUrl, douyinSalt, orderCode, totalAmount.intValue(),yxVipSku.getSkuName(), description);
String douyinSign = DouYinUtil.main(douYinConfig.getAppId(), douYinConfig.getToken(),douYinConfig.getNotifyUrl(), douYinConfig.getSalt(), orderCode, totalAmount.intValue(),yxVipSku.getSkuName(), description);
yxOrder.setOrderSign(douyinSign);
}
else {
String timeExpire = DateTimeZoneUtil.dateToTimeZone(System.currentTimeMillis() + 1000 * 60 * 3);
UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel()
// APPID
.setAppid(appid)
.setAppid(weXinConfig.getAppId())
// 商户号
.setMchid(mchid)
.setMchid(weXinConfig.getMchId())
.setDescription(description)
.setOut_trade_no(orderCode)
.setTime_expire(timeExpire)
.setAttach("艺体志愿宝"+yxVipSku.getSkuName())
.setNotify_url(notifyUrl)
.setNotify_url(weXinConfig.getNotifyUrl())
.setAmount(new Amount().setTotal(totalAmount.intValue()))
.setPayer(new Payer().setOpenid(openId));
log.info("统一下单参数 {}", JSONUtil.toJsonStr(unifiedOrderModel));
@ -205,21 +156,21 @@ public class MiniPayApiController {
RequestMethodEnum.POST,
WxDomainEnum.CHINA.toString(),
BasePayApiEnum.JS_API_PAY.toString(),
mchid,
weXinConfig.getMchId(),
getSerialNumber(),
null,
certKeyPath,
weXinConfig.getCertKeyPath(),
JSONUtil.toJsonStr(unifiedOrderModel)
);
log.info("统一下单响应 {}", response);
// 根据证书序列号查询对应的证书来验证签名结果
boolean verifySignature = WxPayKit.verifySignature(response, platFormPath);
boolean verifySignature = WxPayKit.verifySignature(response, weXinConfig.getPlatFormPath());
log.info("verifySignature: {}", verifySignature);
if (response.getStatus() == HttpStatus.HTTP_OK && verifySignature) {
String body = response.getBody();
JSONObject jsonObject = JSONObject.parseObject(body);
String prepayId = jsonObject.getString("prepay_id");
Map<String, String> map = WxPayKit.jsApiCreateSign(appid, prepayId, certKeyPath);
Map<String, String> map = WxPayKit.jsApiCreateSign(weXinConfig.getAppId(), prepayId, weXinConfig.getCertKeyPath());
log.info("唤起支付参数:{}", map);
String jsonStr = JSONUtil.toJsonStr(map);
//==============创建订单信息 Start
@ -259,7 +210,7 @@ public class MiniPayApiController {
log.info("支付通知密文 {}", result);
// 需要通过证书序列号查找对应的证书verifyNotify 中有验证证书的序列号
String plainText = WxPayKit.verifyNotify(serialNo, result, signature, nonce, timestamp,
mchKey, platFormPath);
weXinConfig.getMchKey(), weXinConfig.getPlatFormPath());
log.info("支付通知明文 {}", plainText);
if (StrUtil.isNotEmpty(plainText)) {
com.alibaba.fastjson.JSONObject plainTextJson = JSONObject.parseObject(plainText);
@ -291,7 +242,7 @@ public class MiniPayApiController {
//生成本地签名
List<String> sortedString = new ArrayList<>();
//token
sortedString.add(douyinToken);
sortedString.add(douYinConfig.getToken());
//时间戳
sortedString.add(requestJson.getString("timestamp"));
//随机数
@ -339,7 +290,7 @@ public class MiniPayApiController {
}
itemList.add(new ItemStruct(yxOrder.getSkuCode(),img,"艺体志愿宝-"+yxOrder.getSkuName(),null,1,yxOrder.getTotalAmount().longValue()));
douYinOrderSyncModel.setItem_list(itemList);
DouYinUtil.orderSync(douYinOrderSyncModel,douyinAppId,douyinSecret,sysUser.getDyOpenId());
DouYinUtil.orderSync(douYinOrderSyncModel,douYinConfig.getAppId(),douYinConfig.getAppSecret(),sysUser.getDyOpenId());
response.setStatus(200);
map.put("code", "SUCCESS");
map.put("message", "SUCCESS");
@ -378,7 +329,7 @@ public class MiniPayApiController {
// 验证签名一致性
List<String> sortedString = new ArrayList<>();
//token
sortedString.add(douyinToken);
sortedString.add(douYinConfig.getToken());
//时间戳
sortedString.add(requestJson.getStr("timestamp"));
//随机数
@ -427,11 +378,11 @@ public class MiniPayApiController {
private String getSerialNumber() {
// 获取证书序列号
X509Certificate certificate = PayKit.getCertificate(certPath);
X509Certificate certificate = PayKit.getCertificate(weXinConfig.getCertPath());
if (null != certificate) {
String serialNo = certificate.getSerialNumber().toString(16).toUpperCase();
// 提前两天检查证书是否有效
boolean isValid = PayKit.checkCertificateIsValid(certificate, mchid, -2);
boolean isValid = PayKit.checkCertificateIsValid(certificate, weXinConfig.getMchId(), -2);
log.info("证书是否可用 {} 证书有效期为 {}", isValid, DateUtil.format(certificate.getNotAfter(), DatePattern.NORM_DATETIME_PATTERN));
System.out.println("serialNo:" + serialNo);
return serialNo;

View File

@ -71,7 +71,7 @@ import java.util.Map;
@RestController
@RequestMapping("/wx/pay/v1")
@Scope("prototype")
public class WxPayApiController {
public class WxPayApiController {
@Autowired
private ISysUserService sysUserService;
@ -88,8 +88,8 @@ public class WxPayApiController {
@Value("${wx.appSecret}")
String secret;
/**商户号**/
@Value("${wx.mchid}")
String mchid;
@Value("${wx.mchId}")
String mchId;
/**商户密钥**/
@Value("${wx.mchKey}")
String mchKey;
@ -152,7 +152,7 @@ public class WxPayApiController {
// APPID
.setAppid(appid)
// 商户号
.setMchid(mchid)
.setMchid(mchId)
.setDescription(description)
.setOut_trade_no(orderCode)
.setTime_expire(timeExpire)
@ -165,7 +165,7 @@ public class WxPayApiController {
RequestMethodEnum.POST,
WxDomainEnum.CHINA.toString(),
BasePayApiEnum.JS_API_PAY.toString(),
mchid,
mchId,
getSerialNumber(),
null,
certKeyPath,
@ -253,7 +253,7 @@ public class WxPayApiController {
if (null != certificate) {
String serialNo = certificate.getSerialNumber().toString(16).toUpperCase();
// 提前两天检查证书是否有效
boolean isValid = PayKit.checkCertificateIsValid(certificate, mchid, -2);
boolean isValid = PayKit.checkCertificateIsValid(certificate, mchId, -2);
log.info("证书是否可用 {} 证书有效期为 {}", isValid, DateUtil.format(certificate.getNotAfter(), DatePattern.NORM_DATETIME_PATTERN));
System.out.println("serialNo:" + serialNo);
return serialNo;
@ -272,7 +272,7 @@ public class WxPayApiController {
RequestMethodEnum.GET,
WxDomainEnum.CHINA.toString(),
OtherApiEnum.GET_CERTIFICATES.toString(),
mchid,
mchId,
getSerialNumber(),
null,
certKeyPath,

View File

@ -1,4 +1,4 @@
package org.jeecg.config;
package org.jeecg.modules.mini.douyin.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@ -1,4 +1,4 @@
package org.jeecg.modules.mini.wx.model;
package org.jeecg.modules.mini.wx.config;
import lombok.Data;
import lombok.ToString;
@ -17,16 +17,21 @@ import org.springframework.stereotype.Component;
public class WeXinConfig {
private String appId;
private String mchId;
private String mchSerialNo;
private String appSecret;
private String apiKey;
// mchId
private String mchId;
// api密钥
private String mchKey;
// 证书序列号
private String mchSerialNo;
// 回调接口地址
private String notifyUrl;
// 证书地址
private String certPath;
// 证书密钥地址
private String certKeyPath;
// 微信平台证书
private String platFormPath;
private String keyPath;

View File

@ -10,7 +10,6 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.*;
import org.jeecg.modules.mini.wx.model.WeXinConfig;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.model.SysLoginModel;
import org.jeecg.modules.system.service.ISysUserService;
@ -20,7 +19,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
@ -36,10 +34,6 @@ public class WebUserController {
private ISysUserService sysUserService;
@Resource
private WebUserService webUserService;
@Resource
private WeXinConfig weXinConfig;
@Resource
private RedisUtil redisUtil;
@RequestMapping(value = "checkPhoneAvailable")
@ApiOperation(value = "判断手机号是否可用")

View File

@ -1,16 +1,13 @@
package org.jeecg.modules.web.controller;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.mini.wx.constant.WeiXinConstant;
import org.jeecg.modules.mini.wx.model.WeXinConfig;
import org.jeecg.modules.mini.wx.config.WeXinConfig;
import org.jeecg.modules.mini.wx.util.WeXinUtil;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.web.service.WebUserService;
import org.springframework.web.bind.annotation.*;
@ -32,8 +29,6 @@ public class WeiXinController {
@Resource
private WebUserService webUserService;
@Resource
private ISysUserService sysUserService;
@Resource
private RedisUtil redisUtil;

View File

@ -3,11 +3,6 @@ package org.jeecg.modules.yx.controller;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -16,8 +11,7 @@ import org.apache.commons.lang.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.AssertUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.DouYinConfig;
import org.jeecg.modules.mini.douyin.config.DouYinConfig;
import org.jeecg.modules.mini.douyin.util.DouYinUtil;
import org.jeecg.modules.yx.constant.YxConstant;
import org.jeecg.modules.yx.entity.YxOrder;
@ -28,19 +22,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;

View File

@ -571,12 +571,17 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl<YxCalculationMajo
recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0);
continue;
}
//判断录取方式分数是否过省控线
if (!ScoreUtil.crossingControlLine(rulesEnrollProbability, culturalScore, professionalScore, culturalControlLine, specialControlLine)) {
recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0);
continue;
// 体育类不判断分数过线
if (!professionalCategory.equals("体育类")) {
//判断录取方式分数是否过省控线
if (!ScoreUtil.crossingControlLine(rulesEnrollProbability, culturalScore, professionalScore, culturalControlLine, specialControlLine)) {
recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0);
continue;
}
}
//算分用
studentScore = ScoreUtil.convertIntoScore(rulesEnrollProbability, activeCurrentUserScore.getCulturalScore(), activeCurrentUserScore.getProfessionalScore(), recommendMajorDTO.getFirstLevelDiscipline(), probabilityOperator);
recommendMajorDTO.setPrivateStudentScore(studentScore);

View File

@ -9,11 +9,11 @@ wx:
appSecret: ed3fd9089dcfbd1d886eddeca69c07bd
# 微信小程序支付配置信息
# 商户号
mchid: 1667485494
mchId: 1667485494
# api密钥
mchKey: hnjdsyxxkj1509067963615090658223
# 证书序列号
mch-serial-no: 46DB385431D56209508BFE80D43940BCC636C7B7
mchSerialNo: 46DB385431D56209508BFE80D43940BCC636C7B7
# 回调接口地址
notifyUrl: https://yitisheng.vip/jbt/wx/pay/v1/payNotify
# 证书地址