dev-discount
袁野 4 years ago
commit 454c740acc
  1. 2
      hai-cweb/src/main/java/com/cweb/config/AuthConfig.java
  2. 75
      hai-cweb/src/main/java/com/cweb/controller/HighTestController.java
  3. 185
      hai-cweb/src/main/java/com/cweb/controller/OutRechargeOrderController.java
  4. 2
      hai-cweb/src/main/resources/dev/application.yml
  5. 3
      hai-service/src/main/java/com/hai/common/pay/entity/OrderType.java
  6. 36
      hai-service/src/main/java/com/hai/common/utils/WxUtils.java
  7. 418
      hai-service/src/main/java/com/hai/dao/OutRechargeOrder.java
  8. 1704
      hai-service/src/main/java/com/hai/dao/OutRechargeOrderExample.java
  9. 10
      hai-service/src/main/java/com/hai/dao/OutRechargeOrderMapper.java
  10. 28
      hai-service/src/main/java/com/hai/dao/OutRechargeOrderSqlProvider.java
  11. 34
      hai-service/src/main/java/com/hai/entity/OutRechargeOrder.java
  12. 130
      hai-service/src/main/java/com/hai/entity/OutRechargeOrderExample.java
  13. 186
      hai-service/src/main/java/com/hai/model/OrderRefundModel.java
  14. 5
      hai-service/src/main/java/com/hai/service/pay/impl/GoodsOrderServiceImpl.java
  15. 55
      hai-service/src/main/java/com/hai/service/pay/impl/RechargeOrderServiceImpl.java
  16. BIN
      hai-service/src/main/java/privatekey/1289663601_apiclient_cert.p12

@ -108,6 +108,8 @@ public class AuthConfig implements WebMvcConfigurer {
.excludePathPatterns("/user/getUnionId")
.excludePathPatterns("/order/orderToH5Pay")
.excludePathPatterns("/order/orderToPay")
.excludePathPatterns("/test/*")
.excludePathPatterns("/outRechargeOrder/refundOrder")
.excludePathPatterns("/wechat/*")
.excludePathPatterns("/outRechargeOrder/*")
.excludePathPatterns("/outRechargePrice/*")

@ -0,0 +1,75 @@
package com.cweb.controller;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.common.security.SessionObject;
import com.hai.common.security.UserCenter;
import com.hai.common.utils.*;
import com.hai.entity.*;
import com.hai.model.HighUserModel;
import com.hai.model.ResponseData;
import com.hai.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Auther: 胡锐
* @Description:
* @Date: 2021/3/26 23:08
*/
@Controller
@RequestMapping(value = "/test")
@Api(value = "订单接口")
public class HighTestController {
private static Logger log = LoggerFactory.getLogger(HighTestController.class);
@RequestMapping(value = "/getOrderById", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "根据id查询订单详情")
public ResponseData getOrderById() {
try {
Map<String,Object> map = new HashMap<>();
map.put("app_key", "208241666939552");
//map.put("app_secret", "adecc3cff077834cb8632c8ab3bec0e6");
map.put("timestamp", new Date().getTime());
map.put("pageIndex", 1);
map.put("pageSize", 10);
String signStr = "adecc3cff077834cb8632c8ab3bec0e6" + WxUtils.generateSignature(map,"adecc3cff077834cb8632c8ab3bec0e6") + "adecc3cff077834cb8632c8ab3bec0e6";
System.out.println("加密前:" + signStr);
String sign = MD5Util.encode(signStr.getBytes()).toLowerCase();
System.out.println("加密后:" + sign);
map.put("sign", sign);
return ResponseMsgUtil.success(HttpsUtils.doPost("https://test02-motorcade-hcs.czb365.com/services/vp/openapi/queryGasInfoListByPage", JSON.toJSONString(map)));
} catch (Exception e) {
log.error("HighOrderController --> getOrderById() error!", e);
return ResponseMsgUtil.exception(e);
}
}
}

@ -1,25 +1,41 @@
package com.cweb.controller;
import com.alibaba.fastjson.JSONObject;
import com.cweb.config.SysConst;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.common.pay.WechatPayUtil;
import com.hai.common.pay.entity.WeChatPayReqInfo;
import com.hai.common.pay.util.MD5Util;
import com.hai.common.pay.util.XmlUtil;
import com.hai.common.pay.util.sdk.WXPayConstants;
import com.hai.common.security.SessionObject;
import com.hai.common.security.UserCenter;
import com.hai.common.utils.DateUtil;
import com.hai.common.utils.IDGenerator;
import com.hai.common.utils.ResponseMsgUtil;
import com.hai.common.utils.*;
import com.hai.entity.HighChildOrder;
import com.hai.entity.HighCoupon;
import com.hai.entity.HighOrder;
import com.hai.entity.OutRechargeOrder;
import com.hai.model.HighUserModel;
import com.hai.model.OrderRefundModel;
import com.hai.model.ResponseData;
import com.hai.model.ResultProfitSharing;
import com.hai.service.OutRechargeOrderService;
import com.hai.service.TelApiService;
import com.hai.service.pay.impl.GoodsOrderServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -28,9 +44,12 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.concurrent.ThreadLocalRandom;
@Controller
@RequestMapping(value = "/outRechargeOrder")
@ -47,6 +66,12 @@ public class OutRechargeOrderController {
@Resource
private TelApiService telApiService;
@Resource
private WechatPayUtil wechatPayUtil;
@Resource
private GoodsOrderServiceImpl goodsOrderService;
@RequestMapping(value="/addOrder",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "增加订单")
@ -183,4 +208,158 @@ public class OutRechargeOrderController {
return ResponseMsgUtil.exception(e);
}
}
@RequestMapping(value="/orderToPay",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "订单支付发起支付")
public ResponseData orderToPay(@RequestBody String reqBodyStr) {
try {
if (StringUtils.isBlank(reqBodyStr)) {
log.error("orderToPay error!", "参数错误");
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
JSONObject jsonObject = JSONObject.parseObject(reqBodyStr);
Long orderId = jsonObject.getLong("orderId");
String openId = jsonObject.getString("openId"); // openId
if (orderId == null || StringUtils.isBlank(openId)) {
log.error("orderToPay error!", "参数错误");
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
// 订单
OutRechargeOrder order = outRechargeOrderService.findByOrderId(orderId);
if (order == null) {
log.error("orderToPay error!", "未找到订单信息");
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到订单信息");
}
// 订单状态 : 1.待支付 2.已支付 3.已完成 4.已退款 5.已取消
if (order.getStatus() != 1) {
log.error("orderToPay error!", "无法支付,订单不处于待支付状态");
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "无法支付,订单不处于待支付状态");
}
Map<String,Object> map = new HashMap<>();
map.put("orderNo", order.getOrderNo());
map.put("payPrice", order.getPayPrice());
map.put("orderScene", "RECHARGE_ORDER");
map.put("body","购买产品");
map.put("subject","购买产品");
//微信支付
String nonce_str = MD5Util.MD5Encode(String.valueOf(ThreadLocalRandom.current().nextInt(10000)), "UTF-8");
int total_fee = MathUtils.objectConvertBigDecimal(map.get("payPrice")).multiply(new BigDecimal("100")).intValue();
WeChatPayReqInfo weChatPayReqInfo = new WeChatPayReqInfo();
weChatPayReqInfo.setAppid(SysConst.getSysConfig().getWxMchAppId()); //公众号id
weChatPayReqInfo.setMch_id(SysConst.getSysConfig().getWxMchId()); //商户号
weChatPayReqInfo.setSub_appid(SysConst.getSysConfig().getWxSubAppId()); //商户号
weChatPayReqInfo.setSub_mch_id(SysConst.getSysConfig().getWxSubMchId()); //子商户号
// weChatPayReqInfo.setOpenid(openId);
weChatPayReqInfo.setSub_openid(openId);
weChatPayReqInfo.setNonce_str(nonce_str); //随机字符串
weChatPayReqInfo.setBody(map.get("body").toString()); //商品描述
weChatPayReqInfo.setOut_trade_no(map.get("orderNo").toString()); //商户订单号
weChatPayReqInfo.setTotal_fee(total_fee); //总金额
weChatPayReqInfo.setSpbill_create_ip("139.159.177.244"); //终端ip
weChatPayReqInfo.setNotify_url(SysConst.getSysConfig().getNotifyUrl()); //通知url
weChatPayReqInfo.setTrade_type("JSAPI"); //交易类型
weChatPayReqInfo.setAttach(map.get("orderScene").toString());
weChatPayReqInfo.setProfit_sharing("Y");
//附加数据,区分订单类型
Map<String,String> payMap = new HashMap<>();
payMap.put("app_id",SysConst.getSysConfig().getWxSubAppId());
payMap.put("api_key",SysConst.getSysConfig().getWxApiKey());
payMap.put("unified_order_url",SysConst.getSysConfig().getWxUnifiedOrderUrl());
SortedMap<Object, Object> sortedMap = wechatPayUtil.goWechatPay(weChatPayReqInfo,payMap);
return ResponseMsgUtil.success(sortedMap);
} catch (Exception e) {
log.error("orderToPay error!", e);
return ResponseMsgUtil.exception(e);
}
}
@RequestMapping(value = "/orderToRefund", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "订单退款")
public ResponseData orderToRefund(@RequestParam(name = "orderId", required = false) Long orderId,
HttpServletRequest request) {
try {
OutRechargeOrder order = outRechargeOrderService.findByOrderId(orderId);
if (order == null) {
log.error("orderToPay error!", "未找到充值订单");
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到充值订单");
}
// 订单状态 : 1.待支付 2.已支付 3.已完成 4.已取消 5.已退款
if (order.getStatus() != 2) {
log.error("orderToPay error!", "无法退款,订单不处于已支付状态");
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "无法退款,订单不处于已支付状态");
}
Map<String,String> param = new HashMap<>();
param.put("appid", "wx637bd6f7314daa46");
param.put("mch_id", "1289663601");
param.put("sub_mch_id" , "1609882817");
param.put("nonce_str", WxUtils.makeNonStr());
param.put("transaction_id", order.getPaySerialNo());
param.put("out_refund_no", "HFR"+new Date().getTime());
param.put("total_fee", String.valueOf(order.getPayRealPrice().multiply(new BigDecimal("100")).intValue()));
param.put("refund_fee", String.valueOf(order.getPayRealPrice().multiply(new BigDecimal("100")).intValue()));
param.put("sign_type", "HMAC-SHA256");
String signStr = WxUtils.generateSignature(param, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256);
param.put("sign", signStr);
String resultXmL = doRefundRequest(param.get("mch_id"), null, WxUtils.mapToXml(param));
OrderRefundModel orderRefundModel = XmlUtil.getObjectFromXML(resultXmL, OrderRefundModel.class);
if(orderRefundModel.getResult_code().equals("SUCCESS")) {
order.setStatus(5);
order.setRefundTime(new Date());
order.setOutRefundNo(orderRefundModel.getOut_refund_no());
order.setRefundId(orderRefundModel.getRefund_id());
order.setRefundFee(new BigDecimal(orderRefundModel.getRefund_fee()).divide(new BigDecimal("100")));
outRechargeOrderService.updateOrder(order);
return ResponseMsgUtil.success("退款成功");
}
return ResponseMsgUtil.success("退款失败!错误代码:"+orderRefundModel.getErr_code()+",错误描述"+orderRefundModel.getErr_code_des());
} catch (Exception e) {
log.error("HighOrderController --> getUserOrderList() error!", e);
return ResponseMsgUtil.exception(e);
}
}
public String doRefundRequest(String mchId, String url, String data) throws Exception {
//小程序退款需要调用双向证书的认证
CloseableHttpClient httpClient = goodsOrderService.readCertificate(mchId);
try {
HttpPost httpost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/refund"); // 设置响应头信息
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept", "*/*");
httpost.addHeader("Content-Type", "text/xml");
httpost.addHeader("Host", "api.mch.weixin.qq.com");
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
httpost.addHeader("Cache-Control", "max-age=0");
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
httpost.setEntity(new StringEntity(data, "UTF-8"));
CloseableHttpResponse response = httpClient.execute(httpost);
try {
HttpEntity entity = response.getEntity();
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
EntityUtils.consume(entity);
return jsonStr;
} finally {
response.close();
}
} catch (Exception e){
throw new RuntimeException(e);
} finally {
httpClient.close();
}
}
}

@ -9,7 +9,7 @@ debug: false
#datasource数据源设置
spring:
datasource:
url: jdbc:mysql://139.159.177.244:3306/hsg_pre?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://139.159.177.244:3306/hfkj?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: HF123456.
type: com.alibaba.druid.pool.DruidDataSource

@ -3,7 +3,8 @@ package com.hai.common.pay.entity;
public enum OrderType {
// 建议将支付频率高的模块放在前面
GOODS_ORDER("GOODS_ORDER", "goodsOrderService", "购买商品"),
TEST("TEST", "testPayService", "支付测试")
RECHARGE_ORDER("RECHARGE_ORDER", "rechargeOrderService", "充值订单"),
TEST("TEST", "testPayService", "支付测试"),
;
private String moduleCode;

@ -247,6 +247,42 @@ public class WxUtils {
}
}
public static String generateSignature(final Map<String, Object> data, String key) throws Exception {
Set<String> keySet = data.keySet();
String[] keyArray = keySet.toArray(new String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb = new StringBuilder();
for (String k : keyArray) {
if (k.equals(WXPayConstants.FIELD_SIGN)) {
continue;
}
if (data.get(k) != null) // 参数值为空,则不参与签名
sb.append(k).append("").append(data.get(k)).append("");
}
if (key != null) {
//sb.append("app_secret=").append(key);
}
return sb.toString();
}
public static String generateSignature2(final Map<String, Object> data, String sign, String key) throws Exception {
Set<String> keySet = data.keySet();
String[] keyArray = keySet.toArray(new String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb = new StringBuilder();
for (String k : keyArray) {
if (k.equals(WXPayConstants.FIELD_SIGN)) {
continue;
}
if (data.get(k) != null) // 参数值为空,则不参与签名
sb.append(k).append("=").append(data.get(k)).append("&");
}
if (key != null) {
sb.append("app_secret=").append(key);
}
return sb.toString();
}
/**
* 生成 MD5
*

@ -0,0 +1,418 @@
package com.hai.dao;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* out_recharge_order
* @author
*/
/**
*
* 代码由工具生成
*
**/
public class OutRechargeOrder implements Serializable {
/**
* 主键
*/
private Long id;
/**
* 订单流水号
*/
private String orderNo;
/**
* 用户表ID
*/
private Long userId;
/**
* 用户名称
*/
private String userName;
/**
* 用户电话
*/
private String userPhone;
/**
* 充值模式1 话费充值 2. 中石化 3. 中石油
*/
private Integer rechargeModel;
/**
* 1.微信
*/
private Integer payType;
/**
* 支付金额
*/
private BigDecimal payPrice;
/**
* 订单充值金额
*/
private BigDecimal orderPrice;
/**
* 实际金额
*/
private BigDecimal payRealPrice;
/**
* 支付流水号
*/
private String paySerialNo;
/**
* 订单状态 1.待支付 2.已支付 3.已完成 4.已取消 5.已退款
*/
private Integer status;
/**
* 充值内容电话号码 卡号
*/
private String rechargeContent;
/**
* 中石油需要的持卡人姓名
*/
private String rechargeName;
/**
* 中石油需要持卡人身份证
*/
private String idCard;
/**
* 生成时间
*/
private Date createTimed;
/**
* 支付时间
*/
private Date payTime;
/**
* 取消时间
*/
private Date cancelTime;
/**
* 完成时间
*/
private Date finishTime;
/**
* 备注
*/
private String remarks;
/**
* 内部退款订单号
*/
private String outRefundNo;
/**
* 第三方退款订单号
*/
private String refundId;
/**
* 退款金额
*/
private BigDecimal refundFee;
private static final long serialVersionUID = 1L;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPhone() {
return userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
public Integer getRechargeModel() {
return rechargeModel;
}
public void setRechargeModel(Integer rechargeModel) {
this.rechargeModel = rechargeModel;
}
public Integer getPayType() {
return payType;
}
public void setPayType(Integer payType) {
this.payType = payType;
}
public BigDecimal getPayPrice() {
return payPrice;
}
public void setPayPrice(BigDecimal payPrice) {
this.payPrice = payPrice;
}
public BigDecimal getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(BigDecimal orderPrice) {
this.orderPrice = orderPrice;
}
public BigDecimal getPayRealPrice() {
return payRealPrice;
}
public void setPayRealPrice(BigDecimal payRealPrice) {
this.payRealPrice = payRealPrice;
}
public String getPaySerialNo() {
return paySerialNo;
}
public void setPaySerialNo(String paySerialNo) {
this.paySerialNo = paySerialNo;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getRechargeContent() {
return rechargeContent;
}
public void setRechargeContent(String rechargeContent) {
this.rechargeContent = rechargeContent;
}
public String getRechargeName() {
return rechargeName;
}
public void setRechargeName(String rechargeName) {
this.rechargeName = rechargeName;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public Date getCreateTimed() {
return createTimed;
}
public void setCreateTimed(Date createTimed) {
this.createTimed = createTimed;
}
public Date getPayTime() {
return payTime;
}
public void setPayTime(Date payTime) {
this.payTime = payTime;
}
public Date getCancelTime() {
return cancelTime;
}
public void setCancelTime(Date cancelTime) {
this.cancelTime = cancelTime;
}
public Date getFinishTime() {
return finishTime;
}
public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getOutRefundNo() {
return outRefundNo;
}
public void setOutRefundNo(String outRefundNo) {
this.outRefundNo = outRefundNo;
}
public String getRefundId() {
return refundId;
}
public void setRefundId(String refundId) {
this.refundId = refundId;
}
public BigDecimal getRefundFee() {
return refundFee;
}
public void setRefundFee(BigDecimal refundFee) {
this.refundFee = refundFee;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
OutRechargeOrder other = (OutRechargeOrder) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getOrderNo() == null ? other.getOrderNo() == null : this.getOrderNo().equals(other.getOrderNo()))
&& (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
&& (this.getUserName() == null ? other.getUserName() == null : this.getUserName().equals(other.getUserName()))
&& (this.getUserPhone() == null ? other.getUserPhone() == null : this.getUserPhone().equals(other.getUserPhone()))
&& (this.getRechargeModel() == null ? other.getRechargeModel() == null : this.getRechargeModel().equals(other.getRechargeModel()))
&& (this.getPayType() == null ? other.getPayType() == null : this.getPayType().equals(other.getPayType()))
&& (this.getPayPrice() == null ? other.getPayPrice() == null : this.getPayPrice().equals(other.getPayPrice()))
&& (this.getOrderPrice() == null ? other.getOrderPrice() == null : this.getOrderPrice().equals(other.getOrderPrice()))
&& (this.getPayRealPrice() == null ? other.getPayRealPrice() == null : this.getPayRealPrice().equals(other.getPayRealPrice()))
&& (this.getPaySerialNo() == null ? other.getPaySerialNo() == null : this.getPaySerialNo().equals(other.getPaySerialNo()))
&& (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
&& (this.getRechargeContent() == null ? other.getRechargeContent() == null : this.getRechargeContent().equals(other.getRechargeContent()))
&& (this.getRechargeName() == null ? other.getRechargeName() == null : this.getRechargeName().equals(other.getRechargeName()))
&& (this.getIdCard() == null ? other.getIdCard() == null : this.getIdCard().equals(other.getIdCard()))
&& (this.getCreateTimed() == null ? other.getCreateTimed() == null : this.getCreateTimed().equals(other.getCreateTimed()))
&& (this.getPayTime() == null ? other.getPayTime() == null : this.getPayTime().equals(other.getPayTime()))
&& (this.getCancelTime() == null ? other.getCancelTime() == null : this.getCancelTime().equals(other.getCancelTime()))
&& (this.getFinishTime() == null ? other.getFinishTime() == null : this.getFinishTime().equals(other.getFinishTime()))
&& (this.getRemarks() == null ? other.getRemarks() == null : this.getRemarks().equals(other.getRemarks()))
&& (this.getOutRefundNo() == null ? other.getOutRefundNo() == null : this.getOutRefundNo().equals(other.getOutRefundNo()))
&& (this.getRefundId() == null ? other.getRefundId() == null : this.getRefundId().equals(other.getRefundId()))
&& (this.getRefundFee() == null ? other.getRefundFee() == null : this.getRefundFee().equals(other.getRefundFee()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getOrderNo() == null) ? 0 : getOrderNo().hashCode());
result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
result = prime * result + ((getUserName() == null) ? 0 : getUserName().hashCode());
result = prime * result + ((getUserPhone() == null) ? 0 : getUserPhone().hashCode());
result = prime * result + ((getRechargeModel() == null) ? 0 : getRechargeModel().hashCode());
result = prime * result + ((getPayType() == null) ? 0 : getPayType().hashCode());
result = prime * result + ((getPayPrice() == null) ? 0 : getPayPrice().hashCode());
result = prime * result + ((getOrderPrice() == null) ? 0 : getOrderPrice().hashCode());
result = prime * result + ((getPayRealPrice() == null) ? 0 : getPayRealPrice().hashCode());
result = prime * result + ((getPaySerialNo() == null) ? 0 : getPaySerialNo().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
result = prime * result + ((getRechargeContent() == null) ? 0 : getRechargeContent().hashCode());
result = prime * result + ((getRechargeName() == null) ? 0 : getRechargeName().hashCode());
result = prime * result + ((getIdCard() == null) ? 0 : getIdCard().hashCode());
result = prime * result + ((getCreateTimed() == null) ? 0 : getCreateTimed().hashCode());
result = prime * result + ((getPayTime() == null) ? 0 : getPayTime().hashCode());
result = prime * result + ((getCancelTime() == null) ? 0 : getCancelTime().hashCode());
result = prime * result + ((getFinishTime() == null) ? 0 : getFinishTime().hashCode());
result = prime * result + ((getRemarks() == null) ? 0 : getRemarks().hashCode());
result = prime * result + ((getOutRefundNo() == null) ? 0 : getOutRefundNo().hashCode());
result = prime * result + ((getRefundId() == null) ? 0 : getRefundId().hashCode());
result = prime * result + ((getRefundFee() == null) ? 0 : getRefundFee().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", orderNo=").append(orderNo);
sb.append(", userId=").append(userId);
sb.append(", userName=").append(userName);
sb.append(", userPhone=").append(userPhone);
sb.append(", rechargeModel=").append(rechargeModel);
sb.append(", payType=").append(payType);
sb.append(", payPrice=").append(payPrice);
sb.append(", orderPrice=").append(orderPrice);
sb.append(", payRealPrice=").append(payRealPrice);
sb.append(", paySerialNo=").append(paySerialNo);
sb.append(", status=").append(status);
sb.append(", rechargeContent=").append(rechargeContent);
sb.append(", rechargeName=").append(rechargeName);
sb.append(", idCard=").append(idCard);
sb.append(", createTimed=").append(createTimed);
sb.append(", payTime=").append(payTime);
sb.append(", cancelTime=").append(cancelTime);
sb.append(", finishTime=").append(finishTime);
sb.append(", remarks=").append(remarks);
sb.append(", outRefundNo=").append(outRefundNo);
sb.append(", refundId=").append(refundId);
sb.append(", refundFee=").append(refundFee);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -49,6 +49,7 @@ public interface OutRechargeOrderMapper extends OutRechargeOrderMapperExt {
"create_timed, pay_time, ",
"cancel_time, finish_time, ",
"remarks, out_refund_no, ",
"refund_time, refund_id, ",
"refund_fee)",
"values (#{orderNo,jdbcType=VARCHAR}, #{userId,jdbcType=BIGINT}, ",
"#{userName,jdbcType=VARCHAR}, #{userPhone,jdbcType=VARCHAR}, ",
@ -60,6 +61,7 @@ public interface OutRechargeOrderMapper extends OutRechargeOrderMapperExt {
"#{createTimed,jdbcType=TIMESTAMP}, #{payTime,jdbcType=TIMESTAMP}, ",
"#{cancelTime,jdbcType=TIMESTAMP}, #{finishTime,jdbcType=TIMESTAMP}, ",
"#{remarks,jdbcType=VARCHAR}, #{outRefundNo,jdbcType=VARCHAR}, ",
"#{refundTime,jdbcType=TIMESTAMP}, #{refundId,jdbcType=VARCHAR}, ",
"#{refundFee,jdbcType=DECIMAL})"
})
@Options(useGeneratedKeys=true,keyProperty="id")
@ -92,6 +94,8 @@ public interface OutRechargeOrderMapper extends OutRechargeOrderMapperExt {
@Result(column="finish_time", property="finishTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="remarks", property="remarks", jdbcType=JdbcType.VARCHAR),
@Result(column="out_refund_no", property="outRefundNo", jdbcType=JdbcType.VARCHAR),
@Result(column="refund_time", property="refundTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="refund_id", property="refundId", jdbcType=JdbcType.VARCHAR),
@Result(column="refund_fee", property="refundFee", jdbcType=JdbcType.DECIMAL)
})
List<OutRechargeOrder> selectByExample(OutRechargeOrderExample example);
@ -101,7 +105,7 @@ public interface OutRechargeOrderMapper extends OutRechargeOrderMapperExt {
"id, order_no, user_id, user_name, user_phone, recharge_model, pay_type, pay_price, ",
"order_price, pay_real_price, pay_serial_no, `status`, recharge_content, recharge_name, ",
"id_card, create_timed, pay_time, cancel_time, finish_time, remarks, out_refund_no, ",
"refund_fee",
"refund_time, refund_id, refund_fee",
"from out_recharge_order",
"where id = #{id,jdbcType=BIGINT}"
})
@ -127,6 +131,8 @@ public interface OutRechargeOrderMapper extends OutRechargeOrderMapperExt {
@Result(column="finish_time", property="finishTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="remarks", property="remarks", jdbcType=JdbcType.VARCHAR),
@Result(column="out_refund_no", property="outRefundNo", jdbcType=JdbcType.VARCHAR),
@Result(column="refund_time", property="refundTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="refund_id", property="refundId", jdbcType=JdbcType.VARCHAR),
@Result(column="refund_fee", property="refundFee", jdbcType=JdbcType.DECIMAL)
})
OutRechargeOrder selectByPrimaryKey(Long id);
@ -162,6 +168,8 @@ public interface OutRechargeOrderMapper extends OutRechargeOrderMapperExt {
"finish_time = #{finishTime,jdbcType=TIMESTAMP},",
"remarks = #{remarks,jdbcType=VARCHAR},",
"out_refund_no = #{outRefundNo,jdbcType=VARCHAR},",
"refund_time = #{refundTime,jdbcType=TIMESTAMP},",
"refund_id = #{refundId,jdbcType=VARCHAR},",
"refund_fee = #{refundFee,jdbcType=DECIMAL}",
"where id = #{id,jdbcType=BIGINT}"
})

@ -108,6 +108,14 @@ public class OutRechargeOrderSqlProvider {
sql.VALUES("out_refund_no", "#{outRefundNo,jdbcType=VARCHAR}");
}
if (record.getRefundTime() != null) {
sql.VALUES("refund_time", "#{refundTime,jdbcType=TIMESTAMP}");
}
if (record.getRefundId() != null) {
sql.VALUES("refund_id", "#{refundId,jdbcType=VARCHAR}");
}
if (record.getRefundFee() != null) {
sql.VALUES("refund_fee", "#{refundFee,jdbcType=DECIMAL}");
}
@ -142,6 +150,8 @@ public class OutRechargeOrderSqlProvider {
sql.SELECT("finish_time");
sql.SELECT("remarks");
sql.SELECT("out_refund_no");
sql.SELECT("refund_time");
sql.SELECT("refund_id");
sql.SELECT("refund_fee");
sql.FROM("out_recharge_order");
applyWhere(sql, example, false);
@ -244,6 +254,14 @@ public class OutRechargeOrderSqlProvider {
sql.SET("out_refund_no = #{record.outRefundNo,jdbcType=VARCHAR}");
}
if (record.getRefundTime() != null) {
sql.SET("refund_time = #{record.refundTime,jdbcType=TIMESTAMP}");
}
if (record.getRefundId() != null) {
sql.SET("refund_id = #{record.refundId,jdbcType=VARCHAR}");
}
if (record.getRefundFee() != null) {
sql.SET("refund_fee = #{record.refundFee,jdbcType=DECIMAL}");
}
@ -277,6 +295,8 @@ public class OutRechargeOrderSqlProvider {
sql.SET("finish_time = #{record.finishTime,jdbcType=TIMESTAMP}");
sql.SET("remarks = #{record.remarks,jdbcType=VARCHAR}");
sql.SET("out_refund_no = #{record.outRefundNo,jdbcType=VARCHAR}");
sql.SET("refund_time = #{record.refundTime,jdbcType=TIMESTAMP}");
sql.SET("refund_id = #{record.refundId,jdbcType=VARCHAR}");
sql.SET("refund_fee = #{record.refundFee,jdbcType=DECIMAL}");
OutRechargeOrderExample example = (OutRechargeOrderExample) parameter.get("example");
@ -368,6 +388,14 @@ public class OutRechargeOrderSqlProvider {
sql.SET("out_refund_no = #{outRefundNo,jdbcType=VARCHAR}");
}
if (record.getRefundTime() != null) {
sql.SET("refund_time = #{refundTime,jdbcType=TIMESTAMP}");
}
if (record.getRefundId() != null) {
sql.SET("refund_id = #{refundId,jdbcType=VARCHAR}");
}
if (record.getRefundFee() != null) {
sql.SET("refund_fee = #{refundFee,jdbcType=DECIMAL}");
}

@ -115,10 +115,20 @@ public class OutRechargeOrder implements Serializable {
private String remarks;
/**
* 退款订单号
* 内部退款订单号
*/
private String outRefundNo;
/**
* 退款时间
*/
private Date refundTime;
/**
* 第三方退款订单号
*/
private String refundId;
/**
* 退款金额
*/
@ -294,6 +304,22 @@ public class OutRechargeOrder implements Serializable {
this.outRefundNo = outRefundNo;
}
public Date getRefundTime() {
return refundTime;
}
public void setRefundTime(Date refundTime) {
this.refundTime = refundTime;
}
public String getRefundId() {
return refundId;
}
public void setRefundId(String refundId) {
this.refundId = refundId;
}
public BigDecimal getRefundFee() {
return refundFee;
}
@ -335,6 +361,8 @@ public class OutRechargeOrder implements Serializable {
&& (this.getFinishTime() == null ? other.getFinishTime() == null : this.getFinishTime().equals(other.getFinishTime()))
&& (this.getRemarks() == null ? other.getRemarks() == null : this.getRemarks().equals(other.getRemarks()))
&& (this.getOutRefundNo() == null ? other.getOutRefundNo() == null : this.getOutRefundNo().equals(other.getOutRefundNo()))
&& (this.getRefundTime() == null ? other.getRefundTime() == null : this.getRefundTime().equals(other.getRefundTime()))
&& (this.getRefundId() == null ? other.getRefundId() == null : this.getRefundId().equals(other.getRefundId()))
&& (this.getRefundFee() == null ? other.getRefundFee() == null : this.getRefundFee().equals(other.getRefundFee()));
}
@ -363,6 +391,8 @@ public class OutRechargeOrder implements Serializable {
result = prime * result + ((getFinishTime() == null) ? 0 : getFinishTime().hashCode());
result = prime * result + ((getRemarks() == null) ? 0 : getRemarks().hashCode());
result = prime * result + ((getOutRefundNo() == null) ? 0 : getOutRefundNo().hashCode());
result = prime * result + ((getRefundTime() == null) ? 0 : getRefundTime().hashCode());
result = prime * result + ((getRefundId() == null) ? 0 : getRefundId().hashCode());
result = prime * result + ((getRefundFee() == null) ? 0 : getRefundFee().hashCode());
return result;
}
@ -394,6 +424,8 @@ public class OutRechargeOrder implements Serializable {
sb.append(", finishTime=").append(finishTime);
sb.append(", remarks=").append(remarks);
sb.append(", outRefundNo=").append(outRefundNo);
sb.append(", refundTime=").append(refundTime);
sb.append(", refundId=").append(refundId);
sb.append(", refundFee=").append(refundFee);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");

@ -1476,6 +1476,136 @@ public class OutRechargeOrderExample {
return (Criteria) this;
}
public Criteria andRefundTimeIsNull() {
addCriterion("refund_time is null");
return (Criteria) this;
}
public Criteria andRefundTimeIsNotNull() {
addCriterion("refund_time is not null");
return (Criteria) this;
}
public Criteria andRefundTimeEqualTo(Date value) {
addCriterion("refund_time =", value, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeNotEqualTo(Date value) {
addCriterion("refund_time <>", value, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeGreaterThan(Date value) {
addCriterion("refund_time >", value, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeGreaterThanOrEqualTo(Date value) {
addCriterion("refund_time >=", value, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeLessThan(Date value) {
addCriterion("refund_time <", value, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeLessThanOrEqualTo(Date value) {
addCriterion("refund_time <=", value, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeIn(List<Date> values) {
addCriterion("refund_time in", values, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeNotIn(List<Date> values) {
addCriterion("refund_time not in", values, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeBetween(Date value1, Date value2) {
addCriterion("refund_time between", value1, value2, "refundTime");
return (Criteria) this;
}
public Criteria andRefundTimeNotBetween(Date value1, Date value2) {
addCriterion("refund_time not between", value1, value2, "refundTime");
return (Criteria) this;
}
public Criteria andRefundIdIsNull() {
addCriterion("refund_id is null");
return (Criteria) this;
}
public Criteria andRefundIdIsNotNull() {
addCriterion("refund_id is not null");
return (Criteria) this;
}
public Criteria andRefundIdEqualTo(String value) {
addCriterion("refund_id =", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdNotEqualTo(String value) {
addCriterion("refund_id <>", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdGreaterThan(String value) {
addCriterion("refund_id >", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdGreaterThanOrEqualTo(String value) {
addCriterion("refund_id >=", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdLessThan(String value) {
addCriterion("refund_id <", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdLessThanOrEqualTo(String value) {
addCriterion("refund_id <=", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdLike(String value) {
addCriterion("refund_id like", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdNotLike(String value) {
addCriterion("refund_id not like", value, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdIn(List<String> values) {
addCriterion("refund_id in", values, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdNotIn(List<String> values) {
addCriterion("refund_id not in", values, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdBetween(String value1, String value2) {
addCriterion("refund_id between", value1, value2, "refundId");
return (Criteria) this;
}
public Criteria andRefundIdNotBetween(String value1, String value2) {
addCriterion("refund_id not between", value1, value2, "refundId");
return (Criteria) this;
}
public Criteria andRefundFeeIsNull() {
addCriterion("refund_fee is null");
return (Criteria) this;

@ -0,0 +1,186 @@
package com.hai.model;
public class OrderRefundModel {
private String err_code;
private String err_code_des;
private String return_code;
private String return_msg;
private String appid;
private String mch_id;
private String sub_mch_id;
private String sign;
private String result_code;
private String transaction_id;
private String out_trade_no;
private String out_refund_no;
private String refund_id;
private String refund_channel;
private String refund_fee;
private String coupon_refund_fee;
private String total_fee;
private String cash_fee;
private String coupon_refund_count;
private String cash_refund_fee;
public String getErr_code() {
return err_code;
}
public void setErr_code(String err_code) {
this.err_code = err_code;
}
public String getErr_code_des() {
return err_code_des;
}
public void setErr_code_des(String err_code_des) {
this.err_code_des = err_code_des;
}
public String getReturn_code() {
return return_code;
}
public void setReturn_code(String return_code) {
this.return_code = return_code;
}
public String getReturn_msg() {
return return_msg;
}
public void setReturn_msg(String return_msg) {
this.return_msg = return_msg;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getSub_mch_id() {
return sub_mch_id;
}
public void setSub_mch_id(String sub_mch_id) {
this.sub_mch_id = sub_mch_id;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getResult_code() {
return result_code;
}
public void setResult_code(String result_code) {
this.result_code = result_code;
}
public String getTransaction_id() {
return transaction_id;
}
public void setTransaction_id(String transaction_id) {
this.transaction_id = transaction_id;
}
public String getOut_trade_no() {
return out_trade_no;
}
public void setOut_trade_no(String out_trade_no) {
this.out_trade_no = out_trade_no;
}
public String getOut_refund_no() {
return out_refund_no;
}
public void setOut_refund_no(String out_refund_no) {
this.out_refund_no = out_refund_no;
}
public String getRefund_id() {
return refund_id;
}
public void setRefund_id(String refund_id) {
this.refund_id = refund_id;
}
public String getRefund_channel() {
return refund_channel;
}
public void setRefund_channel(String refund_channel) {
this.refund_channel = refund_channel;
}
public String getRefund_fee() {
return refund_fee;
}
public void setRefund_fee(String refund_fee) {
this.refund_fee = refund_fee;
}
public String getCoupon_refund_fee() {
return coupon_refund_fee;
}
public void setCoupon_refund_fee(String coupon_refund_fee) {
this.coupon_refund_fee = coupon_refund_fee;
}
public String getTotal_fee() {
return total_fee;
}
public void setTotal_fee(String total_fee) {
this.total_fee = total_fee;
}
public String getCash_fee() {
return cash_fee;
}
public void setCash_fee(String cash_fee) {
this.cash_fee = cash_fee;
}
public String getCoupon_refund_count() {
return coupon_refund_count;
}
public void setCoupon_refund_count(String coupon_refund_count) {
this.coupon_refund_count = coupon_refund_count;
}
public String getCash_refund_fee() {
return cash_refund_fee;
}
public void setCash_refund_fee(String cash_refund_fee) {
this.cash_refund_fee = cash_refund_fee;
}
}

@ -187,14 +187,15 @@ public class GoodsOrderServiceImpl implements PayService {
}
}
//微信小程序读取双向证书
private static CloseableHttpClient readCertificate(String mchId) throws Exception{
public CloseableHttpClient readCertificate(String mchId) throws Exception{
/**
* 注意PKCS12证书 是从微信商户平台-账户设置- API安全 中下载的
*/
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//P12文件目录 证书路径,这里需要你自己修改,linux下还是windows下的根路径
FileInputStream instream = new FileInputStream("/home/project/wx_cert/1289663601_apiclient_cert.p12");
// FileInputStream instream = new FileInputStream("G:\\hurui-project/hai-parent/hai-service/src/main/java/privatekey/1289663601_apiclient_cert.p12");
try {
keyStore.load(instream, "1289663601".toCharArray());//这里写密码..默认是你的MCHID
} finally {

@ -0,0 +1,55 @@
package com.hai.service.pay.impl;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.entity.*;
import com.hai.service.*;
import com.hai.service.pay.PayService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
/**
* @Auther: 胡锐
* @Description:
* @Date: 2021/3/27 00:35
*/
@Service("rechargeOrderService")
public class RechargeOrderServiceImpl implements PayService {
private static Logger log = LoggerFactory.getLogger(RechargeOrderServiceImpl.class);
@Resource
private OutRechargeOrderService outRechargeOrderService;
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW)
public void paySuccess(Map<String, String> map, String payType) throws Exception {
if (payType.equals("Alipay")) {
// 支付宝支付 todo 暂未开发
return;
}
if (payType.equals("WechatPay")) {
// 查询订单信息
OutRechargeOrder order = outRechargeOrderService.findByOrderNo(map.get("out_trade_no"));
if (order == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_ORDER, "");
}
if (order.getStatus() == 1) {
order.setPaySerialNo(map.get("transaction_id")); // 支付流水号
order.setPayRealPrice(new BigDecimal(map.get("total_fee")).divide(new BigDecimal("100"))); // 实付金额
order.setPayTime(new Date()); // 支付时间
order.setStatus(2); // 订单状态 : 1.待支付 2.已支付 3.已完成 4.已取消 5.已退款
outRechargeOrderService.updateOrder(order);
}
}
}
}
Loading…
Cancel
Save