From ec888af920c7600192de160ae3a3799d3af8ffa7 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 1 Jun 2023 13:49:22 +0800 Subject: [PATCH] //..refund --- .../controller/WxOrderController.java | 26 +- .../douyin/payv2/result/EnumRefundSource.java | 45 +++ .../com/iformall/douyin/web/bean/Product.java | 49 ++++ .../java/com/iformall/enums/EnumPayType.java | 2 + .../com/iformall/service/WxMallService.java | 2 + .../impl/TtCouponGoodsServiceImpl.java | 12 + .../service/impl/WxMallServiceImpl.java | 36 +++ .../impl/WxRefundOrderServiceImpl.java | 256 +++++++++--------- 8 files changed, 288 insertions(+), 140 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/douyin/payv2/result/EnumRefundSource.java diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 2dbc885a7..792b16ab6 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -777,12 +777,12 @@ public class WxOrderController extends BaseController { String open_id = msgObject.getString("open_id"); String cp_extra = msgObject.getString("cp_extra"); String tenantId = getTenantId(cp_extra); - if(StringUtils.isBlank(tenantId)){ - map.put("err_no",ErrorCode.SYS_PARAMETER_NOT_NULL.getCode()); - map.put("err_tips","缺少cp_extra"); - return map; - } - WxMall mall = mallService.getByTenantId(tenantId); +// if(StringUtils.isBlank(tenantId)){ +// map.put("err_no",ErrorCode.SYS_PARAMETER_NOT_NULL.getCode()); +// map.put("err_tips","缺少cp_extra"); +// return map; +// } +// WxMall mall = mallService.getByTenantId(tenantId); //验证app WxAppinfo appinfo = wxAppinfoService.getOnlyByAppIdFromRedis(app_id); @@ -799,8 +799,6 @@ public class WxOrderController extends BaseController { return map; } - TenantEntity tenantEntity = new TenantEntity();; - tenantEntity.updateTenantInfo(mall); //验证用户 Long memberId = null; TtCUser cuser = (TtCUser) cuserFactory.getCUserService(EnumAppPlat.TOUTIAO).getByOpenId(open_id, appinfo.getTenantId()); @@ -816,13 +814,23 @@ public class WxOrderController extends BaseController { TtPayService ttPayService = maUtil.getTtPayService(appinfo, payAccount); RefundOrderCallback refundOrderCallback = ttPayService.refundOrderNotifyV2Result(body, header); + TenantEntity tenantEntity = new TenantEntity(); + if(StringUtils.isNotBlank(tenantId)){ + WxMall mall = mallService.getByTenantId(tenantId); + tenantEntity.updateTenantInfo(mall); + }else{ + String randmKey = "refund_callback:" + refundOrderCallback.getOutOrderNo(); + WxMall mall = mallService.getRandomMall(randmKey,appinfo.getTenantId()); + tenantEntity.updateTenantInfo(mall); + } + ResultData resultData = wxRefundOrderService.ttCallBackCreateRefundOrder(tenantEntity,memberId,refundOrderCallback); if(resultData.code == 200){ WxRefundOrder refundOrder = (WxRefundOrder) resultData.data; Map data = new HashMap<>(); data.put("out_refund_no",refundOrder.getId().toString()); - data.put("order_entry_schema",wxOrderService.getOrderEntrySchema(mall.getTenantId(),Long.parseLong(refundOrder.getPayOrderNo()))); + data.put("order_entry_schema",wxOrderService.getOrderEntrySchema(tenantEntity.getTenantId(),Long.parseLong(refundOrder.getPayOrderNo()))); map.put("data",data); map.put("err_no",0); map.put("err_tips",resultData.message); diff --git a/mallinkService/src/main/java/com/iformall/douyin/payv2/result/EnumRefundSource.java b/mallinkService/src/main/java/com/iformall/douyin/payv2/result/EnumRefundSource.java new file mode 100644 index 000000000..fcbaddce6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/payv2/result/EnumRefundSource.java @@ -0,0 +1,45 @@ +package com.iformall.douyin.payv2.result; + +import com.iformall.enums.EnumPayType; + +/** + * + */ +public enum EnumRefundSource { + + user(1, "用户发起退款",EnumPayType.PAY_C_REFUND), + expire_auto(3, "过期自动退",EnumPayType.PAY_AUTO_REFUND), + operate(4, "运营退款",EnumPayType.PAY_OPERATE_REFUND), + res_fail_auto(5, "预约失败自动退款",EnumPayType.PAY_AUTO_REFUND); + + public static EnumRefundSource getEnum(Integer code) { + for (EnumRefundSource value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + private EnumPayType payType; + + EnumRefundSource(Integer code, String message ,EnumPayType payType) { + this.code = code; + this.message = message; + this.payType = payType; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public EnumPayType getPayType() { + return payType; + } +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/web/bean/Product.java b/mallinkService/src/main/java/com/iformall/douyin/web/bean/Product.java index 338f39f4c..fab6de86a 100644 --- a/mallinkService/src/main/java/com/iformall/douyin/web/bean/Product.java +++ b/mallinkService/src/main/java/com/iformall/douyin/web/bean/Product.java @@ -139,6 +139,12 @@ public class Product implements Serializable { @SerializedName(value = "attr_key_value_map") private Map attrKeyValueMap; + /** + * 商品额外信息 + */ + @SerializedName(value = "product_ext") + private ProductExt productExt; + } @Data @@ -257,4 +263,47 @@ public class Product implements Serializable { } + @Data + @NoArgsConstructor + public static class ProductExt implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * true / null - 审核通过自动上架 + * false - 审核通过不自动上架" + */ + @SerializedName(value = "auto_online") + private Boolean autoOnline; + + /** + * 测试商品信息 + */ + @SerializedName(value = "test_extra") + private TestExtra testExtra; + + } + + @Data + @NoArgsConstructor + public static class TestExtra implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * true / null - 审核通过自动上架 + * false - 审核通过不自动上架" + */ + @SerializedName(value = "uids") + private List uids; + + /** + * 标记商品是否为测试商品,当test_flag=true时, + * 1、uids数量需要大于0 + * 2、小程序商品必须传trade_url + * 3、库存数不能大于50 若要取消测试标记:须指定flag=false + */ + @SerializedName(value = "test_flag") + private Boolean testFlag; + + } + } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java index 055934689..99d01ae3c 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java @@ -12,6 +12,8 @@ public enum EnumPayType { PAY_POS_REFUND(4, "POS发起退款"), PAY_C_REFUND(5, "用户自己发起退款"), + PAY_OPERATE_REFUND(6, "运营退款"), + PAY_CARD_RECHARGE(10, "卡充值"); public static EnumPayType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxMallService.java b/mallinkService/src/main/java/com/iformall/service/WxMallService.java index 96cd7ffda..1fad1285d 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMallService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMallService.java @@ -100,4 +100,6 @@ public interface WxMallService { Map getMallMap(WxMall mallQ); EnumDouyinApplicationVersion getDouyinApplicationVersion(TenantEntity tenantEntity); + + WxMall getRandomMall(String randmKey, String tenantId); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java index 5fc92fec9..21e875986 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java @@ -367,6 +367,18 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService { Map productAttrKeyValueMap = ttattrs.getProductAttrKeyValueMap(); productAttrKeyValueMap.put("trade_url",getUpOrderEntrySchema(coupon,wxCouponChannel.getId())); prostruct.setAttrKeyValueMap(productAttrKeyValueMap); + + if (isSaas) { + Product.ProductExt productExt = new Product.ProductExt(); + productExt.setAutoOnline(false); + //测试商品 + Product.TestExtra testExtra = new Product.TestExtra(); + testExtra.setTestFlag(true); + List uids = new ArrayList<>(); + uids.add("4146950717062388"); + testExtra.setUids(uids); + prostruct.setProductExt(productExt); + } product.setProduct(prostruct); Product.SkuStruct skuStruct = new Product.SkuStruct(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java index 585dea74c..8b958062b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java @@ -423,4 +423,40 @@ public class WxMallServiceImpl implements WxMallService { return anEnum; } + /** + * 临时解决方案, 获取不到广场 + * @param randmKey + * @param tenantId + * @return + */ + @Override + public WxMall getRandomMall(String randmKey, String tenantId) { + WxMall mall = this.getByTenantId(tenantId); + if (mall.getGroupSupport().equals(EnumGroupSupport.SUPPORT.getCode()) && + StringUtils.isBlank(mall.getParentTenantId())) { + Integer index = RedisCacheUtils.getCacheInteger(redisTemplate, randmKey); + if(index == null){ + index = 0; + RedisCacheUtils.cache(redisTemplate,randmKey,index,3600*24);//24小时 + return mall; + } + List subMallList = this.getSubByParentTenantId(tenantId); + if(subMallList == null && subMallList.isEmpty()){ + return mall; + } + if(subMallList.size() == 1){ + return subMallList.get(0); + } + if(index >= subMallList.size()){ + index = 0; + } + mall = subMallList.get(index); + + index += 1; + RedisCacheUtils.cache(redisTemplate,randmKey,index,3600*24);//24小时 + return mall; + } + return mall; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index d736b9f2c..947906f92 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -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 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 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 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 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 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