|
@@ -13,6 +13,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
|
|
import com.yami.shop.bean.dto.OrderRefundDto;
|
|
|
import com.yami.shop.bean.dto.hb.HBBaseReq;
|
|
|
+import com.yami.shop.bean.dto.hb.OrderPaymentRequest;
|
|
|
+import com.yami.shop.bean.dto.hb.ProductRequest;
|
|
|
+import com.yami.shop.bean.dto.hb.ThirdPartyRefundRequest;
|
|
|
import com.yami.shop.bean.enums.*;
|
|
|
import com.yami.shop.bean.event.OrderRefundSuccessEvent;
|
|
|
import com.yami.shop.bean.event.ReceiptOrderEvent;
|
|
@@ -27,6 +30,7 @@ import com.yami.shop.common.enums.PayType;
|
|
|
import com.yami.shop.common.exception.GlobalException;
|
|
|
import com.yami.shop.common.exception.YamiShopBindException;
|
|
|
import com.yami.shop.common.util.Arith;
|
|
|
+import com.yami.shop.common.util.hb.HBR;
|
|
|
import com.yami.shop.dao.OrderMapper;
|
|
|
import com.yami.shop.dao.OrderRefundMapper;
|
|
|
import com.yami.shop.dao.OrderSettlementMapper;
|
|
@@ -305,7 +309,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
// 是否同意退款
|
|
|
if (Objects.equals(orderRefundParam.getRefundSts(), RefundStsType.DISAGREE.value())) {
|
|
|
// 不同意退款
|
|
|
- disagreeRefund(orderRefundParam, orderRefundDto,1);
|
|
|
+ disagreeRefund(orderRefundParam, orderRefundDto, 1);
|
|
|
} else {
|
|
|
// 正在处理退款的状态
|
|
|
orderRefundDto.setReturnMoneySts(ReturnMoneyStsType.PROCESSING.value());
|
|
@@ -380,7 +384,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
agreeRefund(orderRefundDto);
|
|
|
|
|
|
} else {
|
|
|
- disagreeRefund(orderRefundParam, orderRefundDto,2);
|
|
|
+ disagreeRefund(orderRefundParam, orderRefundDto, 2);
|
|
|
}
|
|
|
|
|
|
// 是否收到货
|
|
@@ -462,11 +466,12 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
|
|
|
/**
|
|
|
* 不同意退款
|
|
|
+ *
|
|
|
* @param orderRefundParam
|
|
|
* @param orderRefundDto
|
|
|
- * @param type 1 用户发起是拒绝 2 商家收货后拒绝
|
|
|
+ * @param type 1 用户发起是拒绝 2 商家收货后拒绝
|
|
|
*/
|
|
|
- private void disagreeRefund(OrderRefundParam orderRefundParam, OrderRefundDto orderRefundDto,Integer type) {
|
|
|
+ private void disagreeRefund(OrderRefundParam orderRefundParam, OrderRefundDto orderRefundDto, Integer type) {
|
|
|
// 不同意退款
|
|
|
orderRefundDto.setReturnMoneySts(ReturnMoneyStsType.REJECT.value());
|
|
|
orderRefundDto.setReturnMoneySts(ReturnMoneyStsType.FAIL.value());
|
|
@@ -485,7 +490,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
} else {
|
|
|
order.setRefundStatus(RefundStatusEnum.DISAGREE.value());
|
|
|
}
|
|
|
- if(type==2){
|
|
|
+ if (type == 2) {
|
|
|
order.setStatus(OrderStatus.CLOSE.value());
|
|
|
}
|
|
|
orderService.updateById(order);
|
|
@@ -736,14 +741,14 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void cancelWhenTimeOut(List<OrderRefund> orderRefundList) {
|
|
|
- if(CollectionUtils.isEmpty(orderRefundList)) {
|
|
|
+ if (CollectionUtils.isEmpty(orderRefundList)) {
|
|
|
return;
|
|
|
}
|
|
|
Date now = new Date();
|
|
|
for (OrderRefund orderRefund : orderRefundList) {
|
|
|
orderRefund.setReturnMoneySts(ReturnMoneyStsType.FAIL.value());
|
|
|
Order order = orderService.getById(orderRefund.getOrderId());
|
|
|
- if(ObjectUtil.isNotEmpty(order)){
|
|
|
+ if (ObjectUtil.isNotEmpty(order)) {
|
|
|
order.setRefundStatus(4);
|
|
|
orderService.updateById(order);
|
|
|
}
|
|
@@ -777,8 +782,8 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
@Override
|
|
|
public void overTimeRefundOrder(com.yami.shop.bean.app.param.OrderRefundParam orderRefundParam) {
|
|
|
// 获取订单信息
|
|
|
- Order order=orderService.getOrderByOrderNumber(orderRefundParam.getOrderNumber());
|
|
|
- if(ObjectUtil.isEmpty(order)){
|
|
|
+ Order order = orderService.getOrderByOrderNumber(orderRefundParam.getOrderNumber());
|
|
|
+ if (ObjectUtil.isEmpty(order)) {
|
|
|
throw new GlobalException("此订单不存在,无法退货退款");
|
|
|
}
|
|
|
if (!Objects.equals(order.getIsPayed(), 1)) {
|
|
@@ -821,8 +826,6 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
// 生成退款单信息
|
|
|
OrderRefund newOrderRefund = new OrderRefund();
|
|
|
|
|
@@ -940,10 +943,9 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
//*************************** 售后接口 ***************************
|
|
|
@Override
|
|
|
- public String createRefundOrder(String channelOrderId,String afterSaleOrder) {
|
|
|
+ public String createRefundOrder(String channelOrderId, String afterSaleOrder) {
|
|
|
HBBaseReq<Object> build = HBBaseReq.create();
|
|
|
build.setAppId(hbSignUtil.getAppId());
|
|
|
|
|
@@ -956,17 +958,183 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
|
|
|
|
|
build.setSign(hbSignUtil.signMd5(build));
|
|
|
log.info("post 订单推送单号参数:{}", JSON.toJSONString(build));
|
|
|
- String post = post(hbSignUtil.getHBHost() + "/api/order/asyncSave", build);
|
|
|
+ String post = post(hbSignUtil.getHBHost() + "/api/refund/asyncSave", build);
|
|
|
+ log.info("post 订单推送结果:{}", post);
|
|
|
+ return post;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String changeStatus(String afterSaleOrder) {
|
|
|
+ HBBaseReq<Object> build = HBBaseReq.create();
|
|
|
+ build.setAppId(hbSignUtil.getAppId());
|
|
|
+ OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, afterSaleOrder));
|
|
|
+
|
|
|
+ // 3. 构建外层请求体
|
|
|
+ JSONObject requestBody = new JSONObject();
|
|
|
+ requestBody.put("afterSaleOrder", afterSaleOrder);
|
|
|
+// 退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成
|
|
|
+ requestBody.put("refundStatus", refundHbStatus(orderRefund.getReturnMoneySts()));
|
|
|
+ requestBody.put("timestamp", orderRefund.getApplyTime().getTime());
|
|
|
+
|
|
|
+// deliveryMan 退货的配送员名称
|
|
|
+// deliveryMobile 退货的配送员电话
|
|
|
+// deliveryManNo 退货的配送员编号
|
|
|
+
|
|
|
+ // 4. 将整个JSON对象序列化为字符串并设置
|
|
|
+ build.setBody(JSON.toJSONString(requestBody));
|
|
|
+ build.setSign(hbSignUtil.signMd5(build));
|
|
|
+ log.info("post 订单推送单号参数:{}", JSON.toJSONString(build));
|
|
|
+ String post = post(hbSignUtil.getHBHost() + "/api/refund/changeStatus", build);
|
|
|
log.info("post 订单推送结果:{}", post);
|
|
|
return post;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public String details(JSONObject hBRequest) {
|
|
|
-// try {
|
|
|
-// JSONObject bodyStr = hBRequest.getObject("body");
|
|
|
-// log.info("退款订单信息,body:{}", bodyStr);
|
|
|
+ public HBR details(JSONObject hBRequest) {
|
|
|
+ ThirdPartyRefundRequest thirdPartyRefundRequest = new ThirdPartyRefundRequest();
|
|
|
+ try {
|
|
|
+ JSONObject bodyStr = hBRequest.getJSONObject("body");
|
|
|
+ log.info("退款订单信息,body:{}", bodyStr);
|
|
|
+ OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
|
|
|
+ ShopDetail shopDetailByShopId = shopDetailService.getShopDetailByShopId(orderRefund.getShopId());
|
|
|
+
|
|
|
+ thirdPartyRefundRequest.setChannelOrderId(bodyStr.getString("channelOrderId"));
|
|
|
+ thirdPartyRefundRequest.setOutStationNo(shopDetailByShopId.getHbStationNo());
|
|
|
+ thirdPartyRefundRequest.setAfterSaleOrder(orderRefund.getRefundSn());
|
|
|
+ thirdPartyRefundRequest.setSaleType(2);
|
|
|
+ thirdPartyRefundRequest.setReason(orderRefund.getBuyerReason());
|
|
|
+ thirdPartyRefundRequest.setProblemDescription(orderRefund.getBuyerDesc());
|
|
|
+ thirdPartyRefundRequest.setPictures(orderRefund.getPhotoFiles());
|
|
|
+
|
|
|
+ Integer returnMoneySts = orderRefund.getReturnMoneySts();
|
|
|
+ thirdPartyRefundRequest.setRefundStatus(refundHbStatus(returnMoneySts));
|
|
|
+ Integer applyType = orderRefund.getApplyType();
|
|
|
+ if (Objects.equals(applyType, 2)) {
|
|
|
+ thirdPartyRefundRequest.setApplyDeal(40);
|
|
|
+ } else {
|
|
|
+ thirdPartyRefundRequest.setApplyDeal(10);
|
|
|
+ }
|
|
|
|
|
|
- return null;
|
|
|
+ thirdPartyRefundRequest.setPickAddress(orderRefund.getBuyerMobile());
|
|
|
+ thirdPartyRefundRequest.setRefundType(orderRefund.getRefundType());
|
|
|
+ thirdPartyRefundRequest.setMoney((long) (orderRefund.getRefundAmount() * 100));
|
|
|
+ thirdPartyRefundRequest.setTimestamp(orderRefund.getApplyTime().getTime());
|
|
|
+ thirdPartyRefundRequest.setRefundSource(1);
|
|
|
+
|
|
|
+
|
|
|
+ List<ProductRequest> productRequests = new ArrayList<>();
|
|
|
+ orderItemService.list(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, orderRefund.getOrderId())).forEach(orderItem -> {
|
|
|
+ Sku sku = skuService.getById(orderItem.getSkuId());
|
|
|
+ ProductRequest productRequest = new ProductRequest();
|
|
|
+ productRequest.setSkuName(orderItem.getSkuName());
|
|
|
+ productRequest.setSkuId(orderItem.getSkuId());
|
|
|
+ productRequest.setChannelSkuId(sku.getHbSkuId());
|
|
|
+// productRequest.setUpcCode(orderItem.getSkuId());
|
|
|
+ productRequest.setRefundCount(orderItem.getProdCount());
|
|
|
+ productRequest.setRefundMoney((long) (orderItem.getProductTotalAmount() * 100));
|
|
|
+ productRequest.setTransId(sku.getSkuId().toString());
|
|
|
+ productRequests.add(productRequest);
|
|
|
+
|
|
|
+ });
|
|
|
+ thirdPartyRefundRequest.setProducts(productRequests);
|
|
|
+
|
|
|
+ List<OrderPaymentRequest> orderPaymentRequests = new ArrayList<>();
|
|
|
+ OrderPaymentRequest orderPaymentRequest = new OrderPaymentRequest();
|
|
|
+ orderPaymentRequest.setPaymentType(1002);
|
|
|
+ orderPaymentRequest.setPaymentAmount((long) (orderRefund.getRefundAmount() * 100));
|
|
|
+ orderPaymentRequest.setPaymentNum(1);
|
|
|
+ orderPaymentRequests.add(orderPaymentRequest);
|
|
|
+ thirdPartyRefundRequest.setOrderPayments(orderPaymentRequests);
|
|
|
+ log.info("退款订单信息,参数:{}", thirdPartyRefundRequest);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("海博退款订单查询异常:{}", e);
|
|
|
+ HBR.error("未知异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ return HBR.success(thirdPartyRefundRequest);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HBR audit(JSONObject hBRequest) {
|
|
|
+ try {
|
|
|
+ JSONObject bodyStr = hBRequest.getJSONObject("body");
|
|
|
+ log.info("售后审核接口-回调接口,body:{}", bodyStr);
|
|
|
+ OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("海博退款订单查询异常:{}", e);
|
|
|
+ HBR.error("未知异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ return HBR.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HBR confirmOrder(JSONObject hBRequest) {
|
|
|
+ try {
|
|
|
+ JSONObject bodyStr = hBRequest.getJSONObject("body");
|
|
|
+ log.info("售后确认接口-回调接口,body:{}", bodyStr);
|
|
|
+ OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("海博退款订单查询异常:{}", e);
|
|
|
+ HBR.error("未知异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ return HBR.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HBR partRefund(JSONObject hBRequest) {
|
|
|
+ try {
|
|
|
+ JSONObject bodyStr = hBRequest.getJSONObject("body");
|
|
|
+ log.info("部分退款接口-回调接口,body:{}", bodyStr);
|
|
|
+ OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("海博退款订单查询异常:{}", e);
|
|
|
+ HBR.error("未知异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ return HBR.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HBR createResult(JSONObject hBRequest) {
|
|
|
+ try {
|
|
|
+ JSONObject bodyStr = hBRequest.getJSONObject("body");
|
|
|
+ log.info("创建退款结果接口-回调接口,body:{}", bodyStr);
|
|
|
+ OrderRefund orderRefund = orderRefundMapper.selectOne(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getRefundSn, bodyStr.getString("afterSaleOrder")));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("海博退款订单查询异常:{}", e);
|
|
|
+ HBR.error("未知异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ return HBR.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 系统订单状态转换为海博订单状态
|
|
|
+ * 退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成
|
|
|
+ * 处理退款状态:(1.买家申请 2.卖家接受 3.买家发货 4.卖家收货 5.退款成功 6.买家撤回申请 7.商家拒绝 -1.退款关闭)详情见ReturnMoneyStsType
|
|
|
+ *
|
|
|
+ * @param returnMoneySts 退款单状态
|
|
|
+ * @return HB退款单状态
|
|
|
+ */
|
|
|
+ private Integer refundHbStatus(Integer returnMoneySts) {
|
|
|
+ switch (returnMoneySts) {
|
|
|
+ case 1:
|
|
|
+ return 10;
|
|
|
+ case 2:
|
|
|
+ return 60;
|
|
|
+ case 3:
|
|
|
+ return 10;
|
|
|
+ case 4:
|
|
|
+ return 20;
|
|
|
+ case 6:
|
|
|
+ return 40;
|
|
|
+ case 7:
|
|
|
+ return 30;
|
|
|
+ case 5:
|
|
|
+ return 70;
|
|
|
+ }
|
|
|
+ return 10;
|
|
|
}
|
|
|
}
|