增加系统自动退款 相关逻辑。
This commit is contained in:
parent
a39a0ab475
commit
ff2b096a39
@ -280,7 +280,7 @@ public class StateCode {
|
||||
public static final int RETURN_PROCESS_CHECK = 3105; //退单审核1ReturnReturn
|
||||
public static final int RETURN_PROCESS_RECEIVED = 3110; //收货确认0ReturnReturn
|
||||
public static final int RETURN_PROCESS_REFUND = 3115; //退款确认0ReturnReturn
|
||||
public static final int RETURN_PROCESS_RECEIPT_CONFIRMATION = 3120; //客户】收款确认0ReturnReturn
|
||||
public static final int RETURN_PROCESS_RECEIPT_CONFIRMATION = 3120; //【客户】收款确认0ReturnReturn
|
||||
public static final int RETURN_PROCESS_FINISH = 3125; //完成1ReturnReturn3130-商家拒绝退货
|
||||
public static final int RETURN_PROCESS_REFUSED = 3130; //-商家拒绝退货
|
||||
public static final int RETURN_PROCESS_CANCEL = 3135; //-买家取消
|
||||
|
||||
@ -134,6 +134,15 @@ public interface PayService {
|
||||
@PostMapping(value = "/admin/pay/payController/aliPayRefund")
|
||||
ShopOrderReturn aliPayRefund(@RequestBody ShopOrderReturn return_row);
|
||||
|
||||
/**
|
||||
* 拉卡拉退款接口
|
||||
*
|
||||
* @param orderReturn
|
||||
* @return
|
||||
*/
|
||||
@PostMapping(value = "/lklPayRefund")
|
||||
ShopOrderReturn lklPayRefund(@RequestBody ShopOrderReturn orderReturn);
|
||||
|
||||
// 次卡处理发卡
|
||||
@PostMapping(value = "/card/pay/pay-card-info/editPayCard")
|
||||
boolean editPayCard(@RequestParam(name = "order_id") String order_id,
|
||||
|
||||
@ -385,6 +385,12 @@ public class PayController {
|
||||
return shopOrderReturn;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "拉卡拉退款", notes = "拉卡拉退款")
|
||||
@RequestMapping(value = "/lklPayRefund", method = RequestMethod.POST)
|
||||
public ShopOrderReturn lklPayRefund(@RequestBody ShopOrderReturn orderReturn) {
|
||||
return payUserPayService.wxPayRefund(orderReturn);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取用户资源信息", notes = "获取用户资源信息")
|
||||
@RequestMapping(value = "/resource", method = RequestMethod.GET)
|
||||
public CommonResult resourceIndex() {
|
||||
|
||||
@ -49,6 +49,14 @@ public interface PayUserPayService extends IBaseService<PayUserPay> {
|
||||
*/
|
||||
ShopOrderReturn wxPayRefund(ShopOrderReturn orderReturn);
|
||||
|
||||
/**
|
||||
* 拉卡拉 退款接口
|
||||
*
|
||||
* @param orderReturn
|
||||
* @return
|
||||
*/
|
||||
ShopOrderReturn lklPayRefund(ShopOrderReturn orderReturn);
|
||||
|
||||
void wxRefundNotify(HttpServletRequest request);
|
||||
|
||||
ShopOrderReturn aliPayRefund(ShopOrderReturn orderReturn);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1687,6 +1687,47 @@ public class PayUserPayServiceImpl extends BaseServiceImpl<PayUserPayMapper, Pay
|
||||
return shopOrderReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* 拉卡拉退款
|
||||
*
|
||||
* @param orderReturn
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ShopOrderReturn lklPayRefund(ShopOrderReturn orderReturn) {
|
||||
String deposit_trade_no = orderReturn.getDeposit_trade_no();
|
||||
if (CheckUtil.isEmpty(deposit_trade_no)) {
|
||||
deposit_trade_no = "";
|
||||
}
|
||||
BigDecimal trade_payment_amount = orderReturn.getTrade_payment_amount();
|
||||
String refundAmount = Integer.toString(NumberUtil.mul(trade_payment_amount, 100).intValue());
|
||||
WxPayApiConfig wxPayApiConfig = WxPayApiConfigKit.getWxPayApiConfig();
|
||||
Map<String, String> params = RefundModel.builder().appid(wxPayApiConfig.getAppId()).mch_id(wxPayApiConfig.getMchId()).nonce_str(WxPayKit.generateStr()).transaction_id(deposit_trade_no).out_refund_no(WxPayKit.generateStr()).total_fee(refundAmount).refund_fee(refundAmount).build().createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5);
|
||||
logger.info(String.format(I18nUtil._("微信退款请求参数参数: params【%s】"), params.toString()));
|
||||
InputStream certInStream = PayKit.getFileToStream(wxPayApiConfig.getCertPath());
|
||||
//IJPAY低版本jdk环境使用退款方法jdk1.8.0_111以下
|
||||
//String xmlResult = WxPayApi.orderRefund(false, params, certInStream, wxPayApiConfig.getMchId());
|
||||
//下面的方法解决IJPAY高版本jdk导致退款协议不支持问题jdk1.8.0_111以上
|
||||
String xmlResult = HttpKit.getDelegate().post(WxPayApi.getReqUrl(WxApiType.REFUND, null, false), WxPayKit.toXml(params), certInStream, wxPayApiConfig.getMchId(), "");
|
||||
logger.info(String.format(I18nUtil._("微信退款返回参数: xmlResult【%s】"), xmlResult));
|
||||
Map<String, String> resultMap = WxPayKit.xmlToMap(xmlResult);
|
||||
String returnCode = resultMap.get("return_code");
|
||||
String resultCode = resultMap.get("result_code");
|
||||
|
||||
if (!WxPayKit.codeIsOk(returnCode) || !WxPayKit.codeIsOk(resultCode)) {
|
||||
LogUtil.error("微信退款异常!" + resultMap);
|
||||
return null;
|
||||
}
|
||||
|
||||
ShopOrderReturn shopOrderReturn = new ShopOrderReturn();
|
||||
shopOrderReturn.setReturn_channel_flag(1);
|
||||
shopOrderReturn.setDeposit_trade_no(deposit_trade_no);
|
||||
shopOrderReturn.setOrder_id(orderReturn.getOrder_id());
|
||||
shopOrderReturn.setReturn_channel_trans_id(resultMap.get("refund_id"));
|
||||
shopOrderReturn.setReturn_channel_time(new Date());
|
||||
return shopOrderReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信退款成功回调
|
||||
*
|
||||
|
||||
@ -10,10 +10,10 @@ package com.suisung.mall.shop.lakala.controller.mobile;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.service.GeTuiPushService;
|
||||
import com.suisung.mall.common.service.impl.BaseControllerImpl;
|
||||
import com.suisung.mall.shop.lakala.service.LakalaApiService;
|
||||
import com.suisung.mall.shop.library.service.LibraryProductService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderReturnService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -35,7 +35,7 @@ public class LakalaController extends BaseControllerImpl {
|
||||
private LakalaApiService lakalaPayService;
|
||||
|
||||
@Resource
|
||||
private GeTuiPushService geTuiPushService;
|
||||
private ShopOrderReturnService shopOrderReturnService;
|
||||
|
||||
@Resource
|
||||
private LibraryProductService libraryProductService;
|
||||
@ -43,7 +43,8 @@ public class LakalaController extends BaseControllerImpl {
|
||||
@ApiOperation(value = "测试案例", notes = "测试案例")
|
||||
@RequestMapping(value = "/testcase", method = RequestMethod.POST)
|
||||
public Object testcase(@RequestBody JSONObject paramsJSON) {
|
||||
return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile"));
|
||||
return shopOrderReturnService.sfExpressExpiredForceRefund(paramsJSON.getStr("orderId"), paramsJSON.getInt("returnFlag"));
|
||||
// return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile"));
|
||||
// return lakalaPayService.LedgerMerEcDownload(975790666910121984L);
|
||||
|
||||
// return geTuiPushService.pushMessageToSingleByCid("f9da7081a7951cff6d7f1d4e2d2f270b", "", "从 shop 发消息", "none", "");
|
||||
|
||||
@ -1632,7 +1632,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String errorMsg = String.format("店铺[%s]未绑定平台方接收账户,跳过分账", shopOrderLkl.getStore_id());
|
||||
log.error(errorMsg);
|
||||
errorMessages.append(errorMsg).append("; ");
|
||||
lklOrderSeparateService.updateRemark(lklOrderSeparateExist.getId(), errorMsg);
|
||||
// lklOrderSeparateService.updateRemark(lklOrderSeparateExist.getId(), errorMsg);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1641,7 +1641,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
if (!canSplit) {
|
||||
String errorMsg = String.format("店铺[%s]分账比例为0,仅扣除运费", shopOrderLkl.getStore_id());
|
||||
log.error(errorMsg);
|
||||
lklOrderSeparateService.updateRemark(lklOrderSeparateExist.getId(), errorMsg);
|
||||
}
|
||||
|
||||
// 构建分账请求对象
|
||||
@ -1752,8 +1751,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
lklOrderSeparate.setTotal_separate_value(totalSeparateValue);
|
||||
|
||||
try {
|
||||
lklOrderSeparateService.addOrUpdateByReceiverNo(lklOrderSeparate);
|
||||
successCount++;
|
||||
if (lklOrderSeparateService.addOrUpdateByReceiverNo(lklOrderSeparate)) {
|
||||
successCount++;
|
||||
} else {
|
||||
lklOrderSeparateService.updateRemark(lklOrderSeparate.getId(), errorMessages.toString());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("保存分账记录失败: {}", e.getMessage(), e);
|
||||
errorMessages.append("保存分账记录失败; ");
|
||||
@ -1763,6 +1765,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
// 返回最终处理结果
|
||||
if (successCount == 0) {
|
||||
return Pair.of(false, "分账全部失败: " + errorMessages);
|
||||
|
||||
} else if (successCount < totalCount) {
|
||||
return Pair.of(true, "部分分账成功,处理中: " + errorMessages);
|
||||
} else {
|
||||
|
||||
@ -82,6 +82,15 @@ public interface ShopOrderReturnService extends IBaseService<ShopOrderReturn> {
|
||||
|
||||
CommonResult doForceRefund(String return_id, Integer return_flag);
|
||||
|
||||
/**
|
||||
* 支付订单,顺丰同城配送超时,自动取消订单并退款,加库存
|
||||
*
|
||||
* @param orderId 订单Id
|
||||
* @param returnFlag 退货类型(ENUM): 0-不用退货;1-需要退货
|
||||
* @return
|
||||
*/
|
||||
Boolean sfExpressExpiredForceRefund(String orderId, Integer returnFlag);
|
||||
|
||||
CommonResult editRefund(String return_id, BigDecimal return_refund_amount);
|
||||
|
||||
/**
|
||||
|
||||
@ -56,6 +56,7 @@ import com.suisung.mall.shop.store.service.ShopStoreBaseService;
|
||||
import com.suisung.mall.shop.store.service.ShopStoreConfigService;
|
||||
import com.suisung.mall.shop.store.service.ShopStoreShippingAddressService;
|
||||
import io.seata.spring.annotation.GlobalTransactional;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -79,6 +80,7 @@ import static com.suisung.mall.common.utils.ContextUtil.getCurrentUser;
|
||||
* @author Xinze
|
||||
* @since 2021-05-06
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnMapper, ShopOrderReturn> implements ShopOrderReturnService {
|
||||
|
||||
@ -861,7 +863,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
* 强制退货
|
||||
*
|
||||
* @param return_id
|
||||
* @param return_flag
|
||||
* @param return_flag 退货类型(ENUM): 0-不用退货;1-需要退货
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@ -873,11 +875,12 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
UserDto user = getCurrentUser();
|
||||
Integer store_id = Convert.toInt(user.getStore_id());
|
||||
|
||||
// 判断条件有问题吧?,平台 Platform 没有店铺id 的
|
||||
if (user.isPlatform() || CheckUtil.checkDataRights(store_id, shopOrderReturn, ShopOrderReturn::getStore_id)) {
|
||||
//平台方 强制退款, 想将退款订单状态设置待审核状态。 直接执行修改状态, 然后再走退款流程。
|
||||
ShopOrderReturn orderReturn = new ShopOrderReturn();
|
||||
orderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_CHECK);
|
||||
editReturnNextState(return_ids, StateCode.RETURN_PROCESS_REFUSED, orderReturn);
|
||||
editShopOrderReturnAndItemNextState(return_ids, StateCode.RETURN_PROCESS_REFUSED, orderReturn);
|
||||
|
||||
shopOrderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_CHECK);
|
||||
// end 待审核状态
|
||||
@ -895,6 +898,61 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
return CommonResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付订单,顺丰同城配送超时,自动取消订单并退款,加库存
|
||||
*
|
||||
* @param orderId
|
||||
* @param returnFlag 退货类型(ENUM): 0-不用退货;1-需要退货
|
||||
* @return
|
||||
*/
|
||||
@GlobalTransactional
|
||||
@Override
|
||||
public Boolean sfExpressExpiredForceRefund(String orderId, Integer returnFlag) {
|
||||
|
||||
// 先整单退货申请
|
||||
CommonResult commonResult = addWholeItems(orderId);
|
||||
commonResult.checkFenResult();
|
||||
|
||||
QueryWrapper<ShopOrderReturn> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("order_id", orderId);
|
||||
ShopOrderReturn shopOrderReturn = findOne(queryWrapper);
|
||||
if (shopOrderReturn == null) {
|
||||
throw new ApiException(I18nUtil._("订单信息异常!"));
|
||||
}
|
||||
|
||||
returnFlag = CheckUtil.isEmpty(returnFlag) ? 0 : returnFlag;
|
||||
|
||||
// RETURN_PROCESS_SUBMIT = 3100; //【客户】提交退单1ReturnReturn
|
||||
// RETURN_PROCESS_CHECK = 3105; //退单审核1ReturnReturn
|
||||
// RETURN_PROCESS_RECEIVED = 3110; //收货确认0ReturnReturn
|
||||
// RETURN_PROCESS_REFUND = 3115; //退款确认0ReturnReturn
|
||||
// RETURN_PROCESS_RECEIPT_CONFIRMATION = 3120; //[【客户】收款确认0 ReturnReturn
|
||||
// RETURN_PROCESS_FINISH = 3125; //完成1退货退款
|
||||
// RETURN_PROCESS_REFUSED = 3130; //-商家拒绝退货
|
||||
// RETURN_PROCESS_CANCEL = 3135; //-买家取消退款
|
||||
|
||||
List<String> return_ids = Collections.singletonList(shopOrderReturn.getReturn_id());
|
||||
|
||||
//订单已支付,但拣货超时,顺丰同城配送异常超时被取消, 强制退款
|
||||
ShopOrderReturn orderReturn = new ShopOrderReturn();
|
||||
orderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_RECEIVED);
|
||||
orderReturn.setReturn_flag(returnFlag);
|
||||
if (!editShopOrderReturnAndItemNextState(return_ids, StateCode.RETURN_PROCESS_CHECK, orderReturn)) {
|
||||
throw new ApiException(I18nUtil._("修改订单信息失败!"));
|
||||
}
|
||||
|
||||
shopOrderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_RECEIVED);
|
||||
shopOrderReturn.setReturn_flag(returnFlag);
|
||||
// end 待审核状态
|
||||
|
||||
if (!edit(shopOrderReturn)) {
|
||||
throw new ApiException(I18nUtil._("修改订单信息失败!"));
|
||||
}
|
||||
|
||||
// 订单审核
|
||||
return processReviewList(return_ids, Collections.singletonList(shopOrderReturn), StateCode.RETURN_PROCESS_RECEIVED, StateCode.RETURN_PROCESS_FINISH);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改退款退货记录
|
||||
*
|
||||
@ -979,7 +1037,8 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
|
||||
order_item_row.setOrder_item_return_num(order_item_row.getOrder_item_return_num() + return_item_num);
|
||||
order_item_row.setOrder_item_return_subtotal(NumberUtil.add(order_item_row.getOrder_item_return_subtotal(), return_item_subtotal));
|
||||
|
||||
// 乐观锁
|
||||
order_item_row.setVersion(Optional.ofNullable(order_item_row.getVersion()).orElse(0) + 1);
|
||||
if (!shopOrderItemService.edit(order_item_row)) {
|
||||
throw new ApiException(I18nUtil._("修改订单信息失败!"));
|
||||
}
|
||||
@ -1239,8 +1298,23 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param return_ids 退单编号 return_ids 或 return_rows 必须一个有值
|
||||
* @param return_rows 退单数据 return_ids 或 return_rows 必须一个有值
|
||||
* @param return_curr_state_id 当前退单状态
|
||||
* RETURN_PROCESS_SUBMIT = 3100; //【客户】提交退单1ReturnReturn
|
||||
* RETURN_PROCESS_CHECK = 3105; //退单审核1ReturnReturn
|
||||
* RETURN_PROCESS_RECEIVED = 3110; //收货确认0ReturnReturn
|
||||
* RETURN_PROCESS_REFUND = 3115; //退款确认0ReturnReturn
|
||||
* RETURN_PROCESS_RECEIPT_CONFIRMATION = 3120; //[【客户】收款确认0 ReturnReturn
|
||||
* RETURN_PROCESS_FINISH = 3125; //完成1退货退款
|
||||
* RETURN_PROCESS_REFUSED = 3130; //-商家拒绝退货
|
||||
* RETURN_PROCESS_CANCEL = 3135; //-买家取消退款
|
||||
* @param return_next_state_id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean processReviewList(List<String> return_ids, List<ShopOrderReturn> return_rows, Integer state_id, Integer return_next_state_id) {
|
||||
public boolean processReviewList(List<String> return_ids, List<ShopOrderReturn> return_rows, Integer return_curr_state_id, Integer return_next_state_id) {
|
||||
if (CollUtil.isEmpty(return_ids)) {
|
||||
throw new ApiException(I18nUtil._("请选择需要审核的退单!"));
|
||||
}
|
||||
@ -1256,7 +1330,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
Integer return_state_id = return_row.getReturn_state_id();
|
||||
String return_id = return_row.getReturn_id();
|
||||
|
||||
switch (state_id) {
|
||||
switch (return_curr_state_id) {
|
||||
|
||||
case StateCode.RETURN_PROCESS_CHECK:
|
||||
// 退单审核1ReturnReturn
|
||||
@ -1290,13 +1364,15 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
|
||||
ShopOrderReturn return_row = return_rows.get(0);
|
||||
Integer store_id = return_row.getStore_id();
|
||||
editNextState(review_ids, store_id, state_id, return_rows, return_next_state_id);
|
||||
|
||||
// 重要:退款 加库存,改状态
|
||||
editNextState(review_ids, store_id, return_curr_state_id, return_rows, return_next_state_id);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重要:修改订单为下一个待处理状态,并实时退款
|
||||
* 重要:修改订单为下一个待处理状态,并加库存、实时退款
|
||||
*
|
||||
* @param return_ids 退货订单id
|
||||
* @param store_id 所属店铺
|
||||
@ -1306,9 +1382,9 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
* RETURN_PROCESS_RECEIVED = 3110; //收货确认0ReturnReturn
|
||||
* RETURN_PROCESS_REFUND = 3115; //退款确认0ReturnReturn
|
||||
* RETURN_PROCESS_RECEIPT_CONFIRMATION = 3120; //[【客户】收款确认0 ReturnReturn
|
||||
* RETURN_PROCESS_FINISH = 3125; //完成1 ReturnReturn3130-商家拒绝退货
|
||||
* RETURN_PROCESS_FINISH = 3125; //完成1退货退款
|
||||
* RETURN_PROCESS_REFUSED = 3130; //-商家拒绝退货
|
||||
* RETURN_PROCESS_CANCEL = 3135; //-买家取消
|
||||
* RETURN_PROCESS_CANCEL = 3135; //-买家取消退款
|
||||
* @param return_rows 退货订单列表
|
||||
* @param return_next_state_id 下一个退单状态
|
||||
* @return
|
||||
@ -1381,7 +1457,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
}
|
||||
|
||||
//修改退货订单及其相关商品为下一个待处理状态
|
||||
editReturnNextState(return_ids, return_state_id, shopOrderReturn);
|
||||
editShopOrderReturnAndItemNextState(return_ids, return_state_id, shopOrderReturn);
|
||||
|
||||
// 当前状态(旧状态)
|
||||
if (ObjectUtil.equal(return_state_id, StateCode.RETURN_PROCESS_CHECK)) {
|
||||
@ -1499,13 +1575,13 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
* 修改退货订单及其相关商品为下一个待处理状态
|
||||
* 这段代码实现了一个方法,用于将退货订单及其相关商品的状态更新为下一个待处理状态。
|
||||
*
|
||||
* @param return_ids 退货订单id
|
||||
* @param return_state_id 前订单状态
|
||||
* @param return_ids 退货订单id
|
||||
* @param return_curr_state_id 前订单状态
|
||||
* @return
|
||||
*/
|
||||
public boolean editReturnNextState(List<String> return_ids, Integer return_state_id, ShopOrderReturn shopOrderReturn) {
|
||||
public boolean editShopOrderReturnAndItemNextState(List<String> return_ids, Integer return_curr_state_id, ShopOrderReturn shopOrderReturn) {
|
||||
QueryWrapper<ShopOrderReturn> returnQueryWrapper = new QueryWrapper<>();
|
||||
returnQueryWrapper.in("return_id", return_ids).eq("return_state_id", return_state_id);
|
||||
returnQueryWrapper.in("return_id", return_ids).eq("return_state_id", return_curr_state_id);
|
||||
if (!edit(shopOrderReturn, returnQueryWrapper)) {
|
||||
throw new ApiException(I18nUtil._("修改退单状态失败!"));
|
||||
}
|
||||
@ -1735,41 +1811,65 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
@Override
|
||||
public List<String> getOnlineRefundReturnId() {
|
||||
QueryWrapper<ShopOrderReturn> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("return_channel_flag", 0)
|
||||
.in("return_channel_code", "alipay", "wx_native");
|
||||
queryWrapper.eq("return_channel_flag", 0) //渠道是否退款(ENUM): 0-待退; 1-已退; 2-异常
|
||||
.in("return_channel_code", "alipay", "wx_native", "lakala");
|
||||
return Convert.toList(String.class, findKey(queryWrapper));
|
||||
}
|
||||
|
||||
/**
|
||||
* (支付宝、微信)在线原路退款
|
||||
* <p>
|
||||
* TODO 拉卡拉退款
|
||||
* 在线原路退款(支持支付宝、微信、拉卡拉)
|
||||
*
|
||||
* @param return_id
|
||||
* @return
|
||||
* @param return_id 退单ID
|
||||
* @return 退款操作是否成功
|
||||
* <p>
|
||||
* 功能说明:根据退单ID获取退单信息,依据支付渠道执行对应的退款操作,并更新退款状态。
|
||||
*/
|
||||
@Override
|
||||
public boolean doOnlineRefund(String return_id) {
|
||||
ShopOrderReturn shopOrderReturn = get(return_id);
|
||||
String return_channel_code = shopOrderReturn.getReturn_channel_code();
|
||||
if (StrUtil.equals(return_channel_code, "alipay")) {
|
||||
|
||||
shopOrderReturn = payService.aliPayRefund(shopOrderReturn);
|
||||
if (shopOrderReturn == null) {
|
||||
return false;
|
||||
}
|
||||
return updateRefundOrderReturn(shopOrderReturn);
|
||||
|
||||
} else if (StrUtil.equals(return_channel_code, "wx_native")) {
|
||||
|
||||
shopOrderReturn = payService.wxPayRefund(get(return_id));
|
||||
if (shopOrderReturn == null) {
|
||||
return false;
|
||||
}
|
||||
return updateRefundOrderReturn(shopOrderReturn);
|
||||
|
||||
// 输入验证
|
||||
if (StrUtil.isBlank(return_id)) {
|
||||
log.error("Invalid return_id: blank");
|
||||
return false;
|
||||
}
|
||||
|
||||
ShopOrderReturn shopOrderReturn = get(return_id);
|
||||
if (shopOrderReturn == null) {
|
||||
log.error("Order return not found: {}", return_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
String return_channel_code = shopOrderReturn.getReturn_channel_code();
|
||||
if (StrUtil.isBlank(return_channel_code)) {
|
||||
log.error("Empty return_channel_code for return_id: {}", return_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
// 统一处理不同支付渠道
|
||||
switch (return_channel_code.toLowerCase()) {
|
||||
case "alipay":
|
||||
shopOrderReturn = payService.aliPayRefund(shopOrderReturn);
|
||||
break;
|
||||
case "wx_native":
|
||||
shopOrderReturn = payService.wxPayRefund(shopOrderReturn);
|
||||
break;
|
||||
case "lakala":
|
||||
shopOrderReturn = payService.lklPayRefund(shopOrderReturn);
|
||||
break;
|
||||
default:
|
||||
log.warn("Unsupported payment channel: {}", return_channel_code);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (shopOrderReturn == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return updateRefundOrderReturn(shopOrderReturn);
|
||||
} catch (Exception e) {
|
||||
log.error("Error occurred during refund processing for return_id: {}", return_id, e);
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1786,16 +1886,17 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
queryWrapper.eq("order_id", shopOrderReturn.getOrder_id())
|
||||
.eq("deposit_trade_no", shopOrderReturn.getDeposit_trade_no());
|
||||
ShopOrderReturn orderReturn = findOne(queryWrapper);
|
||||
|
||||
if (orderReturn != null && CheckUtil.isEmpty(orderReturn.getReturn_channel_flag())) {
|
||||
logger.info(String.format("更新退款订单状态!return_id : %s", orderReturn.getReturn_id()));
|
||||
orderReturn.setReturn_channel_trans_id(shopOrderReturn.getReturn_channel_trans_id());
|
||||
orderReturn.setReturn_channel_time(shopOrderReturn.getReturn_channel_time());
|
||||
orderReturn.setReturn_channel_flag(shopOrderReturn.getReturn_channel_flag());
|
||||
if (!edit(orderReturn)) {
|
||||
LogUtil.error(String.format("return_id : %s 退款失败!", orderReturn.getReturn_id()));
|
||||
return false;
|
||||
if (edit(orderReturn)) {
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
|
||||
LogUtil.error(String.format("return_id : %s 退款失败!", orderReturn.getReturn_id()));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -28,6 +28,7 @@ import com.suisung.mall.common.utils.JsonUtil;
|
||||
import com.suisung.mall.shop.message.service.PushMessageService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderBaseService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderInfoService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderReturnService;
|
||||
import com.suisung.mall.shop.sfexpress.service.SFExpressApiService;
|
||||
import com.suisung.mall.shop.store.service.ShopStoreSameCityTransportBaseService;
|
||||
import com.suisung.mall.shop.store.service.ShopStoreSfOrderService;
|
||||
@ -67,6 +68,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
@Autowired
|
||||
private ShopOrderInfoService shopOrderInfoService;
|
||||
|
||||
@Autowired
|
||||
private ShopOrderReturnService shopOrderReturnService;
|
||||
|
||||
@Lazy
|
||||
@Autowired
|
||||
private ShopStoreSameCityTransportBaseService shopStoreSameCityTransportBaseService;
|
||||
@ -265,7 +269,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
}
|
||||
|
||||
// 转换 json 字符串参数
|
||||
String orderId = params.get("order_id").toString();
|
||||
String sfOrderId = params.get("order_id").toString(); // 这是顺丰的订单号,不是商城的订单号
|
||||
params.putAll(buildCommonParams());
|
||||
|
||||
String paramJSON = JsonUtil.toJSONString(params);
|
||||
@ -290,7 +294,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
}
|
||||
|
||||
// 判断订单的状态,是否已经取消了?已取消,不再执行
|
||||
ShopStoreSfOrder shopStoreSfOrderExist = shopStoreSfOrderService.getBySfOrderId(orderId);
|
||||
ShopStoreSfOrder shopStoreSfOrderExist = shopStoreSfOrderService.getByShopOrderId(sfOrderId);
|
||||
if (shopStoreSfOrderExist == null) {
|
||||
return new ThirdApiRes().fail(2, "订单有误!");
|
||||
}
|
||||
@ -301,11 +305,11 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
return new ThirdApiRes().success("订单已取消过!");
|
||||
}
|
||||
|
||||
// 更改商城订单状态为:已取消,注意事务问题
|
||||
List<String> orderList = new ArrayList<>();
|
||||
orderList.add(shopStoreSfOrderExist.getShop_order_id());
|
||||
// // 更改商城订单状态为:已取消,注意事务问题
|
||||
// List<String> orderList = new ArrayList<>();
|
||||
// orderList.add(shopStoreSfOrderExist.getShop_order_id());
|
||||
// 取消订单, 流程:订单状态;积分、众宝、库存、礼包、优惠券 有就统统退还
|
||||
Boolean success = shopOrderBaseService.cancel(orderList, null, false); // 不检查订单付款状态
|
||||
Boolean success = shopOrderReturnService.sfExpressExpiredForceRefund(shopStoreSfOrderExist.getShop_order_id(), 0); // 不检查订单付款状态
|
||||
if (!success) {
|
||||
throw new ApiException(I18nUtil._("取消商家订单失败!"));
|
||||
}
|
||||
@ -549,9 +553,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
// 更改顺丰同城订单状态
|
||||
ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData);
|
||||
|
||||
String orderId = shopStoreSfOrder.getShop_order_id();
|
||||
String shopOrderId = shopStoreSfOrder.getShop_order_id();
|
||||
String sfOrderId = shopStoreSfOrder.getSf_order_id();
|
||||
// 判断订单的状态,是否已经取消了?已取消,不再执行
|
||||
ShopStoreSfOrder shopStoreSfOrderExist = shopStoreSfOrderService.getBySfOrderId(orderId);
|
||||
ShopStoreSfOrder shopStoreSfOrderExist = shopStoreSfOrderService.getBySfOrderId(sfOrderId);
|
||||
if (shopStoreSfOrderExist != null && shopStoreSfOrderExist.getOrder_status() != null
|
||||
&& (shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELED) ||
|
||||
(shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELING)))) {
|
||||
@ -564,15 +569,18 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
}
|
||||
|
||||
// 更改商城订单状态为:已取消,注意事务问题
|
||||
List<String> orderList = new ArrayList<>();
|
||||
orderList.add(shopStoreSfOrder.getShop_order_id());
|
||||
success = shopOrderBaseService.cancel(orderList, null, false);
|
||||
// List<String> orderList = new ArrayList<>();
|
||||
// orderList.add(shopStoreSfOrder.getShop_order_id());
|
||||
|
||||
// 重要:订单取消
|
||||
// success = shopOrderBaseService.cancel(orderList, null, false);
|
||||
success = shopOrderReturnService.sfExpressExpiredForceRefund(shopOrderId, 0);
|
||||
if (!success) {
|
||||
return new ThirdApiRes().fail(-1, "取消订单业务处理失败!");
|
||||
}
|
||||
|
||||
// 个推推送消息
|
||||
pushMessageService.noticeMerchantEmployeeOrderAction(null, orderId, "您有一笔取消订单", "您有一笔取消订单[" + orderId + "],请及时处理。", null);
|
||||
pushMessageService.noticeMerchantEmployeeOrderAction(null, shopOrderId, "您有一笔取消订单", "您有一笔取消订单[" + shopOrderId + "],请及时处理。", null);
|
||||
|
||||
|
||||
return new ThirdApiRes().success("success");
|
||||
|
||||
@ -201,22 +201,28 @@ public class ShopStoreConfigServiceImpl extends BaseServiceImpl<ShopStoreConfigM
|
||||
/**
|
||||
* 检查是否需要退款
|
||||
*
|
||||
* @param return_state_id RETURN_PROCESS_SUBMIT = 3100; //【客户】提交退单1ReturnReturn
|
||||
* @param return_state_id 当前退单状态
|
||||
* RETURN_PROCESS_SUBMIT = 3100; //【客户】提交退单1ReturnReturn
|
||||
* RETURN_PROCESS_CHECK = 3105; //退单审核1ReturnReturn
|
||||
* RETURN_PROCESS_RECEIVED = 3110; //收货确认0ReturnReturn
|
||||
* RETURN_PROCESS_REFUND = 3115; //退款确认0ReturnReturn
|
||||
* RETURN_PROCESS_RECEIPT_CONFIRMATION = 3120; //【客户】收款确认0ReturnReturn
|
||||
* RETURN_PROCESS_FINISH = 3125; //完成1ReturnReturn3130-商家拒绝退货
|
||||
* RETURN_PROCESS_RECEIPT_CONFIRMATION = 3120; //【客户】收款确认0 ReturnReturn
|
||||
* RETURN_PROCESS_FINISH = 3125; //完成1退货退款
|
||||
* RETURN_PROCESS_REFUSED = 3130; //-商家拒绝退货
|
||||
* RETURN_PROCESS_CANCEL = 3135; //-买家取消
|
||||
* RETURN_PROCESS_CANCEL = 3135; //-买家取消退款
|
||||
* @param return_next_state_id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean checkNeedRefund(Integer return_state_id, Integer return_next_state_id) {
|
||||
|
||||
//退款确认0ReturnReturn
|
||||
Integer return_process_refund = StateCode.RETURN_PROCESS_MAP.get(StateCode.RETURN_PROCESS_REFUND);
|
||||
//【客户】收款确认
|
||||
Integer return_process_receipt_confirmation = StateCode.RETURN_PROCESS_MAP.get(StateCode.RETURN_PROCESS_RECEIPT_CONFIRMATION);
|
||||
// 当前退货状态
|
||||
Integer return_process_return_state_id = StateCode.RETURN_PROCESS_MAP.get(return_state_id);
|
||||
// 下一个退货状态
|
||||
Integer return_process_return_next_state_id = StateCode.RETURN_PROCESS_MAP.get(return_next_state_id);
|
||||
|
||||
return ObjectUtil.notEqual(return_state_id, return_next_state_id)
|
||||
|
||||
24
pom.xml
24
pom.xml
@ -317,18 +317,18 @@
|
||||
<!-- sentinel配置 -->
|
||||
<sentinel.transport.dashboard>114.132.210.208:8718</sentinel.transport.dashboard>
|
||||
<!-- mysql配置 -->
|
||||
<mysql.host>42.194.196.179</mysql.host>
|
||||
<mysql.port>3306</mysql.port>
|
||||
<mysql.db>mall_dev</mysql.db>
|
||||
<mysql.user>webdev</mysql.user>
|
||||
<mysql.pwd>jbFr9YewcA9Mihx6fnw51Kzq</mysql.pwd>
|
||||
<mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>
|
||||
<!-- <mysql.host>127.0.0.1</mysql.host>-->
|
||||
<!-- <mysql.port>3306</mysql.port>-->
|
||||
<!-- <mysql.db>mall_dev</mysql.db>-->
|
||||
<!-- <mysql.user>root</mysql.user>-->
|
||||
<!-- <mysql.pwd>123456</mysql.pwd>-->
|
||||
<!-- <mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>-->
|
||||
<!-- <mysql.host>42.194.196.179</mysql.host>-->
|
||||
<!-- <mysql.port>3306</mysql.port>-->
|
||||
<!-- <mysql.db>mall_dev</mysql.db>-->
|
||||
<!-- <mysql.user>webdev</mysql.user>-->
|
||||
<!-- <mysql.pwd>jbFr9YewcA9Mihx6fnw51Kzq</mysql.pwd>-->
|
||||
<!-- <mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>-->
|
||||
<mysql.host>42.194.196.179</mysql.host>
|
||||
<mysql.port>3306</mysql.port>
|
||||
<mysql.db>mall_prod</mysql.db>
|
||||
<mysql.user>root</mysql.user>
|
||||
<mysql.pwd>J0XivNvAcR14}pA6Cysm.E27</mysql.pwd>
|
||||
<mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>
|
||||
<!-- redis配置 -->
|
||||
<redis.host>114.132.210.208</redis.host>
|
||||
<redis.database>15</redis.database>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user