|
|
|
@@ -14,6 +14,7 @@ import com.iformall.domain.po.base.BaseEntity; |
|
|
|
import com.iformall.domain.po.base.TenantEntity; |
|
|
|
import com.iformall.domain.po.msg.FmInsideOrderRefundMsg; |
|
|
|
import com.iformall.domain.po.msg.WxMsgRecord; |
|
|
|
import com.iformall.douyin.payv2.result.EnumRefundSource; |
|
|
|
import com.iformall.douyin.payv2.result.RefundOrderCallback; |
|
|
|
import com.iformall.enums.*; |
|
|
|
import com.iformall.exception.MallinkException; |
|
|
|
@@ -870,106 +871,105 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { |
|
|
|
wxOrderQ.updateTenantInfo(tenantEntity); |
|
|
|
wxOrderQ.setComposeOrderId(compseOrderId); |
|
|
|
List<WxOrder> wxOrderList = wxOrderMapper.findList(wxOrderQ); |
|
|
|
if(wxOrderList.size() == 1){ |
|
|
|
if(wxOrderList == null || wxOrderList.isEmpty()){ |
|
|
|
//改广场查不到订单 |
|
|
|
logger.error("订单数据未查询到:compseOrderId " + compseOrderId); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); |
|
|
|
} |
|
|
|
if(wxOrderList.size() > 1){ |
|
|
|
//目前只支持单订单单券 |
|
|
|
logger.error("订单数据异常:compseOrderId " + compseOrderId); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); |
|
|
|
} |
|
|
|
|
|
|
|
WxOrder wxOrder = wxOrderList.get(0); |
|
|
|
if (wxOrder == null) { |
|
|
|
logger.error("交易订单不存在:compseOrderId=" + compseOrderId); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); |
|
|
|
} |
|
|
|
if (wxOrder.getPayment() <= 0) { |
|
|
|
logger.error("订单支付金额小于等于0: " + wxOrder.toString()); |
|
|
|
throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); |
|
|
|
WxOrder wxOrder = wxOrderList.get(0); |
|
|
|
if (wxOrder == null) { |
|
|
|
logger.error("交易订单不存在:compseOrderId=" + compseOrderId); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); |
|
|
|
} |
|
|
|
if (wxOrder.getPayment() <= 0) { |
|
|
|
logger.error("订单支付金额小于等于0: " + wxOrder.toString()); |
|
|
|
throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); |
|
|
|
} |
|
|
|
if(!EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode().equals(wxOrder.getOrderStatus()) |
|
|
|
&& !EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode().equals(wxOrder.getOrderStatus())){ |
|
|
|
logger.error("交易订单状态不支持退款:" + EnumOrderStatus.getEnum(wxOrder.getOrderStatus()).getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); |
|
|
|
} |
|
|
|
|
|
|
|
WxCouponOrder couponOrderQ = new WxCouponOrder(); |
|
|
|
couponOrderQ.updateTenantInfo(tenantEntity); |
|
|
|
couponOrderQ.setOrderId(wxOrder.getId()); |
|
|
|
List<WxCouponOrder> couponOrderList = wxCouponOrderMapper.findList(couponOrderQ); |
|
|
|
if(couponOrderList == null || couponOrderList.isEmpty()){ |
|
|
|
logger.error("数据异常,券未找到:" + wxOrder.getId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
for (WxCouponOrder wxCouponOrder:couponOrderList) { |
|
|
|
if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode())) { |
|
|
|
logger.error("已退款: couponOrder-" + wxCouponOrder.getCouponId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); |
|
|
|
} |
|
|
|
if(!EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode().equals(wxOrder.getOrderStatus()) |
|
|
|
&& !EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode().equals(wxOrder.getOrderStatus())){ |
|
|
|
logger.error("交易订单状态不支持退款:" + EnumOrderStatus.getEnum(wxOrder.getOrderStatus()).getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); |
|
|
|
if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode())) { |
|
|
|
logger.error("已经核销过的券: couponOrder-" + wxCouponOrder.getCouponId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
WxCouponOrder couponOrderQ = new WxCouponOrder(); |
|
|
|
couponOrderQ.updateTenantInfo(tenantEntity); |
|
|
|
couponOrderQ.setOrderId(wxOrder.getId()); |
|
|
|
List<WxCouponOrder> couponOrderList = wxCouponOrderMapper.findList(couponOrderQ); |
|
|
|
if(couponOrderList == null || couponOrderList.isEmpty()){ |
|
|
|
logger.error("数据异常,券未找到:" + wxOrder.getId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); |
|
|
|
} |
|
|
|
EnumRefundSource refundSource = EnumRefundSource.getEnum(refundOrderCallback.getRefundSource()); |
|
|
|
EnumPayType payType = refundSource.getPayType(); |
|
|
|
|
|
|
|
for (WxCouponOrder wxCouponOrder:couponOrderList) { |
|
|
|
if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode())) { |
|
|
|
logger.error("已退款: couponOrder-" + wxCouponOrder.getCouponId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); |
|
|
|
} |
|
|
|
if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode())) { |
|
|
|
logger.error("已经核销过的券: couponOrder-" + wxCouponOrder.getCouponId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); |
|
|
|
} |
|
|
|
} |
|
|
|
Date currentDate = new Date(); |
|
|
|
//这里wx_order不创建退款订单了, 直接修改原订单 |
|
|
|
WxOrder updWxOrder = new WxOrder(); |
|
|
|
updWxOrder.setId(wxOrder.getId()); |
|
|
|
updWxOrder.updateTenantInfo(wxOrder); |
|
|
|
updWxOrder.setPaymentType(payType.getCode()); |
|
|
|
updWxOrder.setRefDetail(refundSource.getMessage()); |
|
|
|
|
|
|
|
Date currentDate = new Date(); |
|
|
|
//这里wx_order不创建退款订单了, 直接修改原订单 |
|
|
|
WxOrder updWxOrder = new WxOrder(); |
|
|
|
updWxOrder.setId(wxOrder.getId()); |
|
|
|
updWxOrder.updateTenantInfo(wxOrder); |
|
|
|
if(refundOrderCallback.getRefundSource().intValue() == 1){ |
|
|
|
updWxOrder.setPaymentType(EnumPayType.PAY_C_REFUND.getCode()); |
|
|
|
updWxOrder.setRefDetail("用户发起退款"); |
|
|
|
}else if(refundOrderCallback.getRefundSource().intValue() == 3){ |
|
|
|
updWxOrder.setPaymentType(EnumPayType.PAY_AUTO_REFUND.getCode()); |
|
|
|
updWxOrder.setRefDetail("过期退款"); |
|
|
|
}else{ |
|
|
|
logger.error("未知退款类型"); |
|
|
|
throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW.getCode(),"未知退款类型"); |
|
|
|
} |
|
|
|
updWxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); |
|
|
|
updWxOrder.setUpdateDate(currentDate); |
|
|
|
|
|
|
|
try { |
|
|
|
wxOrderMapper.updateById(updWxOrder); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("db failed: wxOrder-" + wxOrder.getId() + ", e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); |
|
|
|
} |
|
|
|
|
|
|
|
updWxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); |
|
|
|
updWxOrder.setUpdateDate(currentDate); |
|
|
|
for (WxCouponOrder wxCouponOrder:couponOrderList) { |
|
|
|
// 更改 couponOrder 状态 |
|
|
|
if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { |
|
|
|
wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_RETURNED.getCode()); // 卡线下退款 |
|
|
|
} else { |
|
|
|
wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废 |
|
|
|
} |
|
|
|
wxCouponOrder.setBUserId(payType.getCode().longValue()); |
|
|
|
wxCouponOrder.setAUserId(payType.getCode().longValue()); |
|
|
|
|
|
|
|
wxCouponOrder.setBMerchantId(0L); |
|
|
|
wxCouponOrder.setUpdateDate(new Date()); |
|
|
|
try { |
|
|
|
wxOrderMapper.updateById(updWxOrder); |
|
|
|
wxCouponOrderMapper.updateById(wxCouponOrder); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("db failed: wxOrder-" + wxOrder.getId() + ", e:" + e.getMessage()); |
|
|
|
logger.error("db failed: couponOrder-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); |
|
|
|
} |
|
|
|
|
|
|
|
for (WxCouponOrder wxCouponOrder:couponOrderList) { |
|
|
|
// 更改 couponOrder 状态 |
|
|
|
if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { |
|
|
|
wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_RETURNED.getCode()); // 卡线下退款 |
|
|
|
} else { |
|
|
|
wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废 |
|
|
|
} |
|
|
|
if(refundOrderCallback.getRefundSource().intValue() == 1){ |
|
|
|
wxCouponOrder.setBUserId(EnumPayType.PAY_C_REFUND.getCode().longValue()); |
|
|
|
wxCouponOrder.setAUserId(EnumPayType.PAY_C_REFUND.getCode().longValue()); |
|
|
|
}else if(refundOrderCallback.getRefundSource().intValue() == 3){ |
|
|
|
wxCouponOrder.setBUserId(EnumPayType.PAY_AUTO_REFUND.getCode().longValue()); |
|
|
|
wxCouponOrder.setAUserId(EnumPayType.PAY_AUTO_REFUND.getCode().longValue()); |
|
|
|
} |
|
|
|
|
|
|
|
wxCouponOrder.setBMerchantId(0L); |
|
|
|
wxCouponOrder.setUpdateDate(new Date()); |
|
|
|
// 卡退款,把卡余额设为0 |
|
|
|
if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { |
|
|
|
WxCardInfo updateCardInfo = new WxCardInfo(); |
|
|
|
updateCardInfo.setId(wxCouponOrder.getId()); |
|
|
|
updateCardInfo.setRemainingAmount(0); |
|
|
|
try { |
|
|
|
wxCouponOrderMapper.updateById(wxCouponOrder); |
|
|
|
wxCardInfoMapper.updateById(updateCardInfo); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("db failed: couponOrder-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); |
|
|
|
logger.error("db failed: wxCardInfo-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); |
|
|
|
} |
|
|
|
|
|
|
|
// 卡退款,把卡余额设为0 |
|
|
|
if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { |
|
|
|
WxCardInfo updateCardInfo = new WxCardInfo(); |
|
|
|
updateCardInfo.setId(wxCouponOrder.getId()); |
|
|
|
updateCardInfo.setRemainingAmount(0); |
|
|
|
try { |
|
|
|
wxCardInfoMapper.updateById(updateCardInfo); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("db failed: wxCardInfo-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// WxPayOrder payOrderQ = new WxPayOrder(); |
|
|
|
// payOrderQ.updateTenantInfo(tenantEntity); |
|
|
|
@@ -990,62 +990,56 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { |
|
|
|
// return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND); |
|
|
|
// } |
|
|
|
|
|
|
|
WxRefundOrder record = new WxRefundOrder(); |
|
|
|
record.updateTenantInfo(tenantEntity); |
|
|
|
record.setPayOrderNo(wxOrder.getComposeOrderId().toString()); |
|
|
|
record.setOrderId(wxOrder.getId()); |
|
|
|
record.setNotStatus(EnumRefundStatus.REFUND_FAIL.getCode()); |
|
|
|
// check 是否有退款订单 |
|
|
|
List<WxRefundOrder> refundList = wxRefundOrderMapper.findList(record); |
|
|
|
if (refundList.size() > 0) { |
|
|
|
logger.error("退款订单已存在, 无法再提交退款申请"); |
|
|
|
throw new MallinkException(ErrorCode.REFUND_ORDER_EXIST.getCode(), "退款订单已存在, 无法再提交退款申请"); |
|
|
|
} |
|
|
|
WxRefundOrder record = new WxRefundOrder(); |
|
|
|
record.updateTenantInfo(tenantEntity); |
|
|
|
record.setPayOrderNo(wxOrder.getComposeOrderId().toString()); |
|
|
|
record.setOrderId(wxOrder.getId()); |
|
|
|
record.setNotStatus(EnumRefundStatus.REFUND_FAIL.getCode()); |
|
|
|
// check 是否有退款订单 |
|
|
|
List<WxRefundOrder> refundList = wxRefundOrderMapper.findList(record); |
|
|
|
if (refundList.size() > 0) { |
|
|
|
logger.error("退款订单已存在, 无法再提交退款申请"); |
|
|
|
throw new MallinkException(ErrorCode.REFUND_ORDER_EXIST.getCode(), "退款订单已存在, 无法再提交退款申请"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
// 创建退款订单 |
|
|
|
Long refundId = idWorker.nextId(); |
|
|
|
//String out_refund_id = String.valueOf(refundId); |
|
|
|
|
|
|
|
record.setId(refundId); |
|
|
|
record.setCreateTime(currentDate); |
|
|
|
record.setUpdateTime(currentDate); |
|
|
|
// 微信内部订单号 |
|
|
|
record.setTransactionId(refundOrderCallback.getOrderId()); |
|
|
|
record.setCUserId(memberId); |
|
|
|
record.setTotalFee(wxOrder.getPayment()); |
|
|
|
record.setRefundFee(refundOrderCallback.getRefundTotalAmount()); |
|
|
|
record.setRefundTimeStart(new Date(refundOrderCallback.getCreateRefundTime())); |
|
|
|
record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); |
|
|
|
record.setRefundVendor(wxOrder.getPayVendor()); |
|
|
|
record.setRefundId(refundOrderCallback.getRefundId()); |
|
|
|
record.setRefundReason(JSON.toJSONString(refundOrderCallback.getRefundReason())); |
|
|
|
record.setRefundDescription(refundOrderCallback.getRefundDescription()); |
|
|
|
// 退款订单 |
|
|
|
try { |
|
|
|
int sqlRow = wxRefundOrderMapper.insert(record); |
|
|
|
if (sqlRow != 1) { |
|
|
|
logger.error("退款订单数据库插入出错: " + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
// 创建退款订单 |
|
|
|
Long refundId = idWorker.nextId(); |
|
|
|
//String out_refund_id = String.valueOf(refundId); |
|
|
|
|
|
|
|
record.setId(refundId); |
|
|
|
record.setCreateTime(currentDate); |
|
|
|
record.setUpdateTime(currentDate); |
|
|
|
// 微信内部订单号 |
|
|
|
record.setTransactionId(refundOrderCallback.getOrderId()); |
|
|
|
record.setCUserId(memberId); |
|
|
|
record.setTotalFee(wxOrder.getPayment()); |
|
|
|
record.setRefundFee(refundOrderCallback.getRefundTotalAmount()); |
|
|
|
record.setRefundTimeStart(new Date(refundOrderCallback.getCreateRefundTime())); |
|
|
|
record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); |
|
|
|
record.setRefundVendor(wxOrder.getPayVendor()); |
|
|
|
record.setRefundId(refundOrderCallback.getRefundId()); |
|
|
|
record.setRefundReason(JSON.toJSONString(refundOrderCallback.getRefundReason())); |
|
|
|
record.setRefundDescription(refundOrderCallback.getRefundDescription()); |
|
|
|
// 退款订单 |
|
|
|
try { |
|
|
|
int sqlRow = wxRefundOrderMapper.insert(record); |
|
|
|
if (sqlRow != 1) { |
|
|
|
logger.error("退款订单数据库插入出错: " + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("退款订单数据库插入出错: " + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
sendInsideOrderRefundMsg(wxOrder); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("订单成功通知用户error:" + e.getMessage(),e); |
|
|
|
} |
|
|
|
return new ResultData(Result.SUCCESS, "退款订单申请成功", record); |
|
|
|
|
|
|
|
}else{ |
|
|
|
//目前只支持单订单单券 |
|
|
|
logger.error("订单数据异常:compseOrderId " + compseOrderId); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); |
|
|
|
try { |
|
|
|
sendInsideOrderRefundMsg(wxOrder); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("订单成功通知用户error:" + e.getMessage(),e); |
|
|
|
} |
|
|
|
return new ResultData(Result.SUCCESS, "退款订单申请成功", record); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|