Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
478b935936
@ -1,6 +1,7 @@
|
||||
package com.cdzy.ebikeoperate.model.dto.request;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@ -24,7 +25,7 @@ public class ReqEbikeSysOperateSetSaveDto {
|
||||
/**
|
||||
* 星期几;,分隔;null为按时间段运营
|
||||
*/
|
||||
private String weekday;
|
||||
private JSONArray weekday;
|
||||
|
||||
/**
|
||||
* 工作开始时间;HH:mm:ss
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cdzy.ebikeoperate.model.dto.request;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -84,12 +85,12 @@ public class ReqEbikeSysRbacksetDto implements Serializable {
|
||||
/**
|
||||
* 规范还车跳过类型
|
||||
*/
|
||||
private String ignoreRegularType;
|
||||
private JSONArray ignoreRegularType;
|
||||
|
||||
/**
|
||||
* 学习免调度费还车类型
|
||||
*/
|
||||
private String freeReturnType;
|
||||
private JSONArray freeReturnType;
|
||||
|
||||
/**
|
||||
* 学习免调度费次数
|
||||
|
||||
@ -5,6 +5,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@ -177,7 +178,7 @@ public class ReqEbikeSysRoperatesetDto implements Serializable {
|
||||
/**
|
||||
* 开票开始时间
|
||||
*/
|
||||
private LocalDateTime issueAnInvoiceStartTime;
|
||||
private LocalDate issueAnInvoiceStartTime;
|
||||
|
||||
/**
|
||||
* 0公里申诉自动退款
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.cdzy.ebikeoperate.model.dto.response;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@ -27,7 +28,7 @@ public class ResEbikeSysOperateSetDto {
|
||||
/**
|
||||
* 星期几;,分隔;null为按时间段运营
|
||||
*/
|
||||
private String weekday;
|
||||
private JSONArray weekday;
|
||||
|
||||
/**
|
||||
* 工作开始时间;HH:mm:ss
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cdzy.ebikeoperate.model.dto.response;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -78,12 +79,12 @@ public class ResEbikeSysRbacksetDto implements Serializable {
|
||||
/**
|
||||
* 规范还车跳过类型
|
||||
*/
|
||||
private String ignoreRegularType;
|
||||
private JSONArray ignoreRegularType;
|
||||
|
||||
/**
|
||||
* 学习免调度费还车类型
|
||||
*/
|
||||
private String freeReturnType;
|
||||
private JSONArray freeReturnType;
|
||||
|
||||
/**
|
||||
* 学习免调度费次数
|
||||
|
||||
@ -6,6 +6,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@ -178,7 +179,7 @@ public class ResEbikeSysRoperatesetDto implements Serializable {
|
||||
/**
|
||||
* 开票开始时间
|
||||
*/
|
||||
private LocalDateTime issueAnInvoiceStartTime;
|
||||
private LocalDate issueAnInvoiceStartTime;
|
||||
|
||||
/**
|
||||
* 0公里申诉自动退款
|
||||
|
||||
@ -37,7 +37,7 @@ public class EbikeSysLinktel implements Serializable {
|
||||
/**
|
||||
* 区域ID
|
||||
*/
|
||||
private String reginId;
|
||||
private String regionId;
|
||||
|
||||
/**
|
||||
* 电话号码
|
||||
|
||||
@ -37,7 +37,7 @@ public class EbikeSysOperateSet implements Serializable {
|
||||
/**
|
||||
* 区域ID
|
||||
*/
|
||||
private String reginId;
|
||||
private String regionId;
|
||||
|
||||
/**
|
||||
* 星期几;,分隔;null为按时间段运营
|
||||
|
||||
@ -37,7 +37,7 @@ public class EbikeSysRbackset implements Serializable {
|
||||
/**
|
||||
* 区域ID
|
||||
*/
|
||||
private String reginId;
|
||||
private String regionId;
|
||||
|
||||
/**
|
||||
* 是否站点还车
|
||||
|
||||
@ -36,7 +36,7 @@ public class EbikeSysRlockset implements Serializable {
|
||||
/**
|
||||
* 区域ID
|
||||
*/
|
||||
private String reginId;
|
||||
private String regionId;
|
||||
|
||||
/**
|
||||
* 自动锁车(分钟)
|
||||
|
||||
@ -2,8 +2,10 @@ package com.cdzy.ebikeoperate.model.pojo;
|
||||
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
@ -38,7 +40,7 @@ public class EbikeSysRoperateset implements Serializable {
|
||||
/**
|
||||
* 区域ID
|
||||
*/
|
||||
private String reginId;
|
||||
private String regionId;
|
||||
|
||||
/**
|
||||
* 是否运营;1运营中 0停止运营
|
||||
@ -193,7 +195,7 @@ public class EbikeSysRoperateset implements Serializable {
|
||||
/**
|
||||
* 开票开始时间
|
||||
*/
|
||||
private LocalDateTime issueAnInvoiceStartTime;
|
||||
private LocalDate issueAnInvoiceStartTime;
|
||||
|
||||
/**
|
||||
* 0公里申诉自动退款
|
||||
|
||||
@ -37,7 +37,7 @@ public class EbikeSysRusecondset implements Serializable {
|
||||
/**
|
||||
* 区域ID
|
||||
*/
|
||||
private String reginId;
|
||||
private String regionId;
|
||||
|
||||
/**
|
||||
* 禁止用户借车电量;百分比,默认30
|
||||
|
||||
@ -1,22 +1,28 @@
|
||||
package com.cdzy.ebikeoperate.service.impl;
|
||||
|
||||
import com.cdzy.ebikeoperate.mapper.EbikeSysLinktelMapper;
|
||||
import com.cdzy.ebikeoperate.mapper.EbikeSysOperateSetMapper;
|
||||
import com.cdzy.ebikeoperate.mapper.*;
|
||||
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeSysOperateSetSaveDto;
|
||||
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeSysRoperatesetDto;
|
||||
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeSysRoperatesetsDto;
|
||||
import com.cdzy.ebikeoperate.model.pojo.EbikeSysOperateSet;
|
||||
import com.cdzy.ebikeoperate.model.pojo.EbikeSysRcostset;
|
||||
import com.cdzy.ebikeoperate.service.EbikeSysRcostsetService;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cdzy.ebikeoperate.model.pojo.EbikeSysRoperateset;
|
||||
import com.cdzy.ebikeoperate.mapper.EbikeSysRoperatesetMapper;
|
||||
import com.cdzy.ebikeoperate.service.EbikeSysRoperatesetService;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSysLinktelTableDef.EBIKE_SYS_LINKTEL;
|
||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSysOperateSetTableDef.EBIKE_SYS_OPERATE_SET;
|
||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSysRoperatesetTableDef.EBIKE_SYS_ROPERATESET;
|
||||
|
||||
/**
|
||||
@ -33,11 +39,19 @@ public class EbikeSysRoperatesetServiceImpl extends ServiceImpl<EbikeSysRoperate
|
||||
private EbikeSysOperateSetMapper ebikeSysOperateSetMapper;
|
||||
@Resource
|
||||
private EbikeSysLinktelMapper ebikeSysLinktelMapper;
|
||||
@Autowired
|
||||
private EbikeSysRlocksetMapper ebikeSysRlocksetMapper;
|
||||
@Autowired
|
||||
private EbikeSysRusecondsetMapper ebikeSysRusecondsetMapper;
|
||||
@Autowired
|
||||
private EbikeSysRbacksetMapper ebikeSysRbacksetMapper;
|
||||
@Autowired
|
||||
private EbikeSysRoperatesetMapper ebikeSysRoperatesetMapper;
|
||||
|
||||
@Override
|
||||
public EbikeSysRoperateset getByRegionId(String regionId) {
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.where(EBIKE_SYS_ROPERATESET.REGIN_ID.eq(regionId));
|
||||
.where(EBIKE_SYS_ROPERATESET.REGION_ID.eq(regionId));
|
||||
return getOne(query);
|
||||
}
|
||||
|
||||
@ -45,9 +59,9 @@ public class EbikeSysRoperatesetServiceImpl extends ServiceImpl<EbikeSysRoperate
|
||||
@Override
|
||||
public Boolean deleteByRegionId(String regionId) {
|
||||
try {
|
||||
ebikeSysOperateSetMapper.deleteByCondition(EBIKE_SYS_LINKTEL.REGIN_ID.eq(regionId));
|
||||
ebikeSysLinktelMapper.deleteByCondition(EBIKE_SYS_LINKTEL.REGIN_ID.eq(regionId));
|
||||
remove(EBIKE_SYS_ROPERATESET.REGIN_ID.eq(regionId));
|
||||
ebikeSysOperateSetMapper.deleteByCondition(EBIKE_SYS_LINKTEL.REGION_ID.eq(regionId));
|
||||
ebikeSysLinktelMapper.deleteByCondition(EBIKE_SYS_LINKTEL.REGION_ID.eq(regionId));
|
||||
remove(EBIKE_SYS_ROPERATESET.REGION_ID.eq(regionId));
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.error("删除区域运营信息配置表失败, regionId:{}", regionId, e);
|
||||
@ -62,11 +76,32 @@ public class EbikeSysRoperatesetServiceImpl extends ServiceImpl<EbikeSysRoperate
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public Boolean save(ReqEbikeSysRoperatesetsDto reqEbikeSysRoperatesetsDto) {
|
||||
|
||||
|
||||
ReqEbikeSysRoperatesetDto reqEbikeSysRoperatesetDto = reqEbikeSysRoperatesetsDto.getReqEbikeSysRoperatesetDto();
|
||||
String regionId = reqEbikeSysRoperatesetDto.getRegionId();
|
||||
EbikeSysRoperateset ebikeSysRoperateset = new EbikeSysRoperateset();
|
||||
BeanUtils.copyProperties(reqEbikeSysRoperatesetDto,ebikeSysRoperateset);
|
||||
BeanUtils.copyProperties(reqEbikeSysRoperatesetDto, ebikeSysRoperateset);
|
||||
ebikeSysRoperatesetMapper.insert(ebikeSysRoperateset);
|
||||
QueryWrapper query = QueryWrapper.create();
|
||||
query.eq(EBIKE_SYS_OPERATE_SET.REGION_ID.getName(), regionId);
|
||||
ebikeSysOperateSetMapper.deleteByQuery(query);
|
||||
List<ReqEbikeSysOperateSetSaveDto> operateTime = reqEbikeSysRoperatesetDto.getOperateTime();
|
||||
List<EbikeSysOperateSet> ebikeSysOperateSets = new ArrayList<>();
|
||||
for (ReqEbikeSysOperateSetSaveDto reqEbikeSysOperateSetSaveDto : operateTime) {
|
||||
EbikeSysOperateSet ebikeSysOperateSet = new EbikeSysOperateSet();
|
||||
BeanUtils.copyProperties(reqEbikeSysOperateSetSaveDto, ebikeSysOperateSet);
|
||||
if (reqEbikeSysOperateSetSaveDto.getWeekday() != null) {
|
||||
ebikeSysOperateSet.setWeekday(reqEbikeSysOperateSetSaveDto.getWeekday().toString());
|
||||
}
|
||||
ebikeSysOperateSets.add(ebikeSysOperateSet);
|
||||
}
|
||||
if (!ebikeSysOperateSets.isEmpty()) {
|
||||
ebikeSysOperateSetMapper.insertBatch(ebikeSysOperateSets);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,9 +16,10 @@ public class RspBikeDto {
|
||||
private Integer soc;
|
||||
private Double longitude;
|
||||
private Double latitude;
|
||||
// TODO:判断车辆状态
|
||||
// TODO:判断车辆状态、车辆编号
|
||||
private String status = "正常";
|
||||
private Float mileage = 35.5F;
|
||||
private String bikeCode = "1111111111111111111";
|
||||
|
||||
public RspBikeDto(String ecuSn, Integer soc, Double longitude, Double latitude) {
|
||||
this.ecuSn = ecuSn;
|
||||
|
||||
@ -70,6 +70,18 @@ public class EbikeWxPaymentController {
|
||||
return r == null?JsonResult.failed(String.format("骑行订单号{%s}查询支付订单失败", outTradeNo)):JsonResult.success(r);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过交易订单号查询支付订单状态
|
||||
*
|
||||
* @param transactionId 微信支付订单号
|
||||
* @return 支付订单信息
|
||||
*/
|
||||
@GetMapping("/queryOrderStatusById/{transactionId}")
|
||||
public JsonResult<?> queryOrderStatusById(@PathVariable String transactionId) {
|
||||
HandleNotifyResult r = wxPayService.queryOrderStatusById(transactionId);
|
||||
return JsonResult.success(r);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款申请
|
||||
*
|
||||
@ -88,12 +100,14 @@ public class EbikeWxPaymentController {
|
||||
* @param outRefundNo 商户(骑行)退款单号
|
||||
* @return 退款信息
|
||||
*/
|
||||
@GetMapping("/refundQuery/{outRefundNo}")
|
||||
@GetMapping("/queryRefund/{outRefundNo}")
|
||||
public JsonResult<?> refundQuery(@PathVariable String outRefundNo) {
|
||||
Refund r = wxPayService.queryRefundByOutNo(outRefundNo);
|
||||
return r == null?JsonResult.failed(String.format("退款单号{%s}查询退款失败", outRefundNo)):JsonResult.success(r);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ================通知回调接口===============
|
||||
// TODO 通知接口不能鉴权
|
||||
/**
|
||||
|
||||
@ -37,4 +37,11 @@ public interface EbikePaymentService extends IService<EbikePayment> {
|
||||
*/
|
||||
Boolean updatePaymentStatus(Transaction transaction);
|
||||
|
||||
/**
|
||||
* 根据支付订单id查询支付记录
|
||||
*
|
||||
* @param paymentId 支付订单id
|
||||
* @return
|
||||
*/
|
||||
EbikePayment getByPaymentId(String paymentId);
|
||||
}
|
||||
|
||||
@ -26,6 +26,7 @@ public interface WxPayService {
|
||||
* @return
|
||||
*/
|
||||
boolean closeOrder(String outTradeNo);
|
||||
|
||||
/**
|
||||
* JSAPI支付下单
|
||||
*
|
||||
@ -46,6 +47,7 @@ public interface WxPayService {
|
||||
* @return 支付订单信息
|
||||
*/
|
||||
Transaction queryOrderById(String transactionId);
|
||||
|
||||
/**
|
||||
* 通过商户(骑行)订单号查询支付订单
|
||||
*
|
||||
@ -54,6 +56,14 @@ public interface WxPayService {
|
||||
*/
|
||||
Transaction queryOrderByOutTradeNo(String outTradeNo);
|
||||
|
||||
/**
|
||||
* 通过交易订单号查询支付订单状态
|
||||
*
|
||||
* @param transactionId 微信支付订单号
|
||||
* @return 支付订单信息
|
||||
*/
|
||||
HandleNotifyResult queryOrderStatusById(String transactionId);
|
||||
|
||||
/**
|
||||
* 处理支付回调
|
||||
*
|
||||
@ -82,6 +92,14 @@ public interface WxPayService {
|
||||
*/
|
||||
Refund queryRefundByOutNo(String outRefundNo);
|
||||
|
||||
/**
|
||||
* 通过商户退款单号查询退款信息状态
|
||||
*
|
||||
* @param outRefundNo 商户退款订单号
|
||||
* @return 退款信息
|
||||
*/
|
||||
HandleNotifyResult queryRefundStatusByOutNo(String outRefundNo);
|
||||
|
||||
/**
|
||||
* 处理支退款回调
|
||||
*
|
||||
|
||||
@ -58,7 +58,7 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
||||
ebikePayment.setTradeState(String.valueOf(transaction.getTradeState().ordinal()));
|
||||
if (Transaction.TradeStateEnum.SUCCESS.equals(transaction.getTradeState())) {
|
||||
// 支付成功, 更新订单状态
|
||||
double v = transaction.getAmount().getTotal().doubleValue() / 100.0;
|
||||
double v = transaction.getAmount().getPayerTotal().doubleValue() / 100.0;
|
||||
ebikePayment.setTotal(v);
|
||||
String paymentTime = transaction.getSuccessTime();
|
||||
ebikePayment.setPaymentTime(StringUtils.toLocalDatetime(paymentTime));
|
||||
@ -73,4 +73,11 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
||||
.where(EBIKE_PAYMENT.PAYMENT_ID.eq(transaction.getTransactionId()));
|
||||
return update(ebikePayment, query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EbikePayment getByPaymentId(String paymentId) {
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.where(EBIKE_PAYMENT.PAYMENT_ID.eq(paymentId));
|
||||
return this.getOne(query);
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,9 +32,11 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
|
||||
|
||||
@Override
|
||||
public Boolean saveRefundResult(EbikeRefund ebikeRefund) {
|
||||
boolean r = save(ebikeRefund);
|
||||
// 同步发起退款
|
||||
ordersFeignClient.refund(Long.valueOf(ebikeRefund.getOrderId()));
|
||||
return save(ebikeRefund);
|
||||
if(r)
|
||||
ordersFeignClient.refund(Long.valueOf(ebikeRefund.getOrderId()));
|
||||
return r;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -147,26 +147,44 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
|
||||
@Override
|
||||
public Transaction queryOrderById(String transactionId) {
|
||||
try {
|
||||
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
||||
request.setTransactionId(transactionId);
|
||||
return wxJsapiService.queryOrderById(request);
|
||||
}catch (Exception e) {
|
||||
logError("通过交易订单号查询支付订单queryOrderById", e);
|
||||
}
|
||||
return null;
|
||||
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
||||
request.setTransactionId(transactionId);
|
||||
return wxJsapiService.queryOrderById(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Transaction queryOrderByOutTradeNo(String outTradeNo) {
|
||||
try {
|
||||
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
|
||||
request.setOutTradeNo(outTradeNo);
|
||||
return wxJsapiService.queryOrderByOutTradeNo(request);
|
||||
}catch (Exception e) {
|
||||
logError("通过商户(骑行)订单号查询支付订单queryOrderByOutTradeNo", e);
|
||||
return null;
|
||||
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
|
||||
request.setOutTradeNo(outTradeNo);
|
||||
return wxJsapiService.queryOrderByOutTradeNo(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandleNotifyResult queryOrderStatusById(String transactionId) {
|
||||
// 先查本地数据库,如果退款状态不为SUCCESS,需要查询微信支付
|
||||
HandleNotifyResult result = new HandleNotifyResult();
|
||||
EbikePayment ebikePayment = ebikePaymentService.getByPaymentId(transactionId);
|
||||
if (ebikePayment==null){
|
||||
log.error("{}支付订单不存在", transactionId);
|
||||
result.setMessage(String.format("{%s}支付订单不存在", transactionId));
|
||||
return result;
|
||||
}
|
||||
result.setSuccess(String.valueOf(Transaction.TradeStateEnum.SUCCESS.ordinal()).equals(ebikePayment.getTradeState()));
|
||||
if (result.isSuccess()){
|
||||
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
||||
return result;
|
||||
}
|
||||
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
||||
request.setTransactionId(transactionId);
|
||||
Transaction r = wxJsapiService.queryOrderById(request);
|
||||
if(r!=null&& r.getTradeState().equals(Transaction.TradeStateEnum.SUCCESS)) {
|
||||
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
||||
result.setSuccess(true);
|
||||
// 更新支付状态
|
||||
ebikePaymentService.updatePaymentStatus(r);
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -177,14 +195,12 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
String nonce = request.getHeader(WECHAT_PAY_NONCE);
|
||||
String serialNo = request.getHeader(WECHAT_PAY_SERIAL);
|
||||
String signature = request.getHeader(WECHAT_PAY_SIGNATURE);
|
||||
String signatureType = request.getHeader(WECHAT_PAY_SIGNATURE+"-Type");
|
||||
String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);
|
||||
|
||||
try {
|
||||
RequestParam requestParam = new RequestParam.Builder()
|
||||
.serialNumber(serialNo)
|
||||
.signature(signature)
|
||||
.signType(signatureType)
|
||||
.timestamp(timestamp)
|
||||
.body(HttpServletUtils.getRequestBody(request))
|
||||
.nonce(nonce)
|
||||
@ -208,58 +224,76 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
|
||||
@Override
|
||||
public String refund(String transactionId, String outTradeNo, String reason, AmountRefundDto amount) {
|
||||
try {
|
||||
// 雪花算法生成退款单号
|
||||
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
|
||||
EbikeRefund ebikeRefund = new EbikeRefund();
|
||||
ebikeRefund.setCreateTime(LocalDateTime.now());
|
||||
// 发起退款
|
||||
CreateRequest request = new CreateRequest();
|
||||
request.setTransactionId(transactionId);
|
||||
request.setOutTradeNo(outTradeNo);
|
||||
request.setOutRefundNo(outRefundNo);
|
||||
request.setReason(reason);
|
||||
request.setNotifyUrl(wxPayConfig.getRefundNotifyUrl());
|
||||
AmountReq amountReq = new AmountReq();
|
||||
amountReq.setRefund(BigDecimal.valueOf(amount.getRefund() * 100.0).longValue());
|
||||
amountReq.setTotal(BigDecimal.valueOf(amount.getTotal() * 100.0).longValue());
|
||||
amountReq.setCurrency(amount.getCurrency());
|
||||
request.setAmount(amountReq);
|
||||
Refund result = wxRefundService.create(request);
|
||||
// 入库
|
||||
if (result != null) {
|
||||
ebikeRefund.setRefundId(outRefundNo);
|
||||
ebikeRefund.setOrderId(outTradeNo);
|
||||
ebikeRefund.setPaymentId(transactionId);
|
||||
ebikeRefund.setTotal(amount.getTotal());
|
||||
ebikeRefund.setReason(reason);
|
||||
ebikeRefund.setStatus(String.valueOf(result.getStatus().ordinal()));
|
||||
ebikeRefund.setCurrency(amount.getCurrency());
|
||||
if(Status.SUCCESS.equals(result.getStatus())){
|
||||
ebikeRefund.setRefund(result.getAmount().getRefund().doubleValue() / 100.0);
|
||||
ebikeRefund.setRefundTime(LocalDateTime.now());
|
||||
}
|
||||
ebikeRefundService.saveRefundResult(ebikeRefund);
|
||||
return outRefundNo;
|
||||
// 雪花算法生成退款单号
|
||||
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
|
||||
EbikeRefund ebikeRefund = new EbikeRefund();
|
||||
ebikeRefund.setCreateTime(LocalDateTime.now());
|
||||
// 发起退款
|
||||
CreateRequest request = new CreateRequest();
|
||||
request.setTransactionId(transactionId);
|
||||
request.setOutTradeNo(outTradeNo);
|
||||
request.setOutRefundNo(outRefundNo);
|
||||
request.setReason(reason);
|
||||
request.setNotifyUrl(wxPayConfig.getRefundNotifyUrl());
|
||||
AmountReq amountReq = new AmountReq();
|
||||
amountReq.setRefund(BigDecimal.valueOf(amount.getRefund() * 100.0).longValue());
|
||||
amountReq.setTotal(BigDecimal.valueOf(amount.getTotal() * 100.0).longValue());
|
||||
amountReq.setCurrency(amount.getCurrency());
|
||||
request.setAmount(amountReq);
|
||||
Refund result = wxRefundService.create(request);
|
||||
// 入库
|
||||
if (result != null) {
|
||||
ebikeRefund.setRefundId(outRefundNo);
|
||||
ebikeRefund.setOrderId(outTradeNo);
|
||||
ebikeRefund.setPaymentId(transactionId);
|
||||
ebikeRefund.setTotal(amount.getTotal());
|
||||
ebikeRefund.setReason(reason);
|
||||
ebikeRefund.setStatus(String.valueOf(result.getStatus().ordinal()));
|
||||
ebikeRefund.setCurrency(amount.getCurrency());
|
||||
if(Status.SUCCESS.equals(result.getStatus())){
|
||||
ebikeRefund.setRefund(result.getAmount().getRefund().doubleValue() / 100.0);
|
||||
ebikeRefund.setRefundTime(LocalDateTime.now());
|
||||
}
|
||||
log.error("退款申请refund失败,订单号:{}", outTradeNo);
|
||||
return null;
|
||||
}catch (Exception e) {
|
||||
logError("退款申请refund", e);
|
||||
return null;
|
||||
ebikeRefundService.saveRefundResult(ebikeRefund);
|
||||
return outRefundNo;
|
||||
}
|
||||
log.error("退款申请refund失败,订单号:{}", outTradeNo);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Refund queryRefundByOutNo(String outRefundNo) {
|
||||
try {
|
||||
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
|
||||
request.setOutRefundNo(outRefundNo);
|
||||
return wxRefundService.queryByOutRefundNo(request);
|
||||
}catch (Exception e) {
|
||||
logError("通过商户退款单号查询退款queryByOutRefundNo", e);
|
||||
return null;
|
||||
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
|
||||
request.setOutRefundNo(outRefundNo);
|
||||
return wxRefundService.queryByOutRefundNo(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandleNotifyResult queryRefundStatusByOutNo(String outRefundNo) {
|
||||
HandleNotifyResult result = new HandleNotifyResult();
|
||||
// 先查本地数据库,如果退款状态不为SUCCESS,需要查询微信支付
|
||||
EbikeRefund ebikeRefund = ebikeRefundService.getById(outRefundNo);
|
||||
if (ebikeRefund==null){
|
||||
log.error("{}退款订单不存在", outRefundNo);
|
||||
result.setMessage(String.format("{%s}退款订单不存在", outRefundNo));
|
||||
return result;
|
||||
}
|
||||
result.setSuccess(String.valueOf(Status.SUCCESS.ordinal()).equals(ebikeRefund.getStatus()));
|
||||
if (result.isSuccess()){
|
||||
result.setMessage(String.format("退款%s成功", ebikeRefund.getRefundId()));
|
||||
return result;
|
||||
}
|
||||
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
|
||||
request.setOutRefundNo(outRefundNo);
|
||||
Refund r = wxRefundService.queryByOutRefundNo(request);
|
||||
if(r!=null&& r.getStatus().equals(Status.SUCCESS)) {
|
||||
result.setMessage(String.format("退款%s成功", ebikeRefund.getRefundId()));
|
||||
result.setSuccess(true);
|
||||
// 更新退款状态
|
||||
ebikeRefundService.updateRefundStatus(r);
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -270,14 +304,12 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
String nonce = request.getHeader(WECHAT_PAY_NONCE);
|
||||
String serialNo = request.getHeader(WECHAT_PAY_SERIAL);
|
||||
String signature = request.getHeader(WECHAT_PAY_SIGNATURE);
|
||||
String signatureType = request.getHeader(WECHAT_PAY_SIGNATURE+"-Type");
|
||||
String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);
|
||||
|
||||
try {
|
||||
RequestParam requestParam = new RequestParam.Builder()
|
||||
.serialNumber(serialNo)
|
||||
.signature(signature)
|
||||
.signType(signatureType)
|
||||
.timestamp(timestamp)
|
||||
.body(HttpServletUtils.getRequestBody(request))
|
||||
.nonce(nonce)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user