编写禁止退货的方法

This commit is contained in:
Jack 2025-10-20 21:30:56 +08:00
parent 501d3761e6
commit 10bc17df0e
8 changed files with 136 additions and 24 deletions

View File

@ -110,6 +110,9 @@ public class LklOrderDraw {
@ApiModelProperty(value = "商户订单号", example = "MER2023100100001")
private String mer_order_no;
@ApiModelProperty(value = "商城订单Id")
private String order_id;
/**
* 结算流水号
*/

View File

@ -49,7 +49,7 @@ public class LakalaAdminController extends BaseControllerImpl {
}
// 执行业务逻辑
Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("summary"));
Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("orderId"), paramsJSON.getStr("summary"));
if (success) {
return CommonResult.success("账户D1提现提交成功");
}

View File

@ -340,9 +340,10 @@ public interface LakalaApiService {
* @param mercId 822商户号或receiveNo
* @param merOrderNo 商户订单号
* @param drawAmt 提现金额
* @param orderId 商城订单Id
* @param summary
*/
Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary);
Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String orderId, String summary);
/**
* 拉卡拉账户D1提现结果通知

View File

@ -29,4 +29,12 @@ public interface LklOrderDrawService extends IBaseService<LklOrderDraw> {
* @return
*/
LklOrderDraw getByByMercIdAndMerOrderNo(String mercId, String merOrderNo);
/**
* 判断订单是否已经提现完成
*
* @param orderId
* @return
*/
Boolean isOrderDrawed(String orderId);
}

View File

@ -2808,11 +2808,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
public JSONObject sacsSeparateNotify(HttpServletRequest request, String merchantNoParam, String separateNoParam) {
String channel = "";
try {
JSONObject paramsJson = null;
JSONObject paramsJson;
if (!StrUtil.hasBlank(merchantNoParam, separateNoParam)) {
channel = "(补偿)";
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调{}merchantNoParam={}separateNoParam={}",
channel, merchantNoParam, separateNoParam);
// 主动从拉卡拉获取分账结果
paramsJson = sacsQuery(merchantNoParam, separateNoParam);
} else {
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调");
@ -2931,13 +2932,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
continue;
}
// 分账成功之后立即申请提现
String recvNo = Convert.toStr(detailData.get("recv_no"), "");
String amt = Convert.toStr(detailData.get("amt"), "");
if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) {
String outSeparateNoTemp = String.format("%s_%d", outSeparateNo, idx);
Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNoTemp, amt, JSONUtil.toJsonStr(detailDatas));
String merOrderNo = String.format("%s_%d", outSeparateNo, idx);
// 账户D1提现
Boolean drawSuccess = ewalletWithDrawD1(recvNo, merOrderNo, amt, outSeparateNo, JSONUtil.toJsonStr(detailDatas));
log.info("[拉卡拉分账通知] 账户D1提现{},商户号={},分账单号={},金额={}分",
Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, outSeparateNoTemp, amt);
Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, merOrderNo, amt);
idx++;
}
}
@ -3508,11 +3511,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* @param mercId 822商户号或receiveNo
* @param merOrderNo 商户订单号
* @param drawAmt 提现金额
* @param orderId 商城订单Id
* @param summary 摘要信息
* @return 操作结果成功返回true失败返回false
*/
@Override
public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary) {
public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String orderId, String summary) {
// 1. 参数校验
if (StrUtil.hasBlank(mercId, merOrderNo, drawAmt)) {
log.warn("[D1提现申请] D1提现参数校验失败关键参数为空: mercId={}, merOrderNo={}, drawAmt={}",
@ -3557,7 +3561,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (StrUtil.isNotBlank(summary)) {
request.setSummary(summary);
}
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/ewallet/drawNotify");
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/drawNotify");
// 4. 发送请求
String responseStr = LKLSDK.httpPost(request);
@ -3583,6 +3588,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
LklOrderDraw lklOrderDraw = new LklOrderDraw();
lklOrderDraw.setMerc_id(mercId);
lklOrderDraw.setMer_order_no(merOrderNo);
lklOrderDraw.setOrder_id(orderId);
lklOrderDraw.setDraw_jnl(Convert.toStr(drawJnl));
lklOrderDraw.setDraw_amt(drawAmtYuan);
lklOrderDraw.setBatch_auto_settle(payType);
@ -3654,7 +3660,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
log.info("[拉卡拉D1提现结果通知] 提现通知参数: drawState={}, mercId={}, merOrderNo={}", drawState, mercId, merOrderNo);
if (StrUtil.isBlank(mercId) || StrUtil.isBlank(merOrderNo) || StrUtil.isBlank(drawState)) {
if (StrUtil.hasBlank(mercId, merOrderNo, drawState)) {
log.warn("[拉卡拉提现结果通知] 回调参数缺失: drawState={}, mercId={}, merOrderNo={}", drawState, mercId, merOrderNo);
return JSONUtil.createObj()
.set("code", "FAIL")
@ -3665,7 +3671,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (!"DRAW.SUCCESS".equals(drawState)) {
log.debug("[拉卡拉D1提现结果通知] 提现状态未成功,忽略处理: drawState={}", drawState);
return JSONUtil.createObj()
.set("code", "SUCCESS") // 返回成功避免重复通知
.set("code", "FAIL") // 返回成功避免重复通知
.set("message", "状态未成功,忽略处理");
}

View File

@ -38,7 +38,7 @@ public class LklOrderDrawServiceImpl extends BaseServiceImpl<LklOrderDrawMapper,
queryWrapper.eq("draw_jnl", record.getDraw_jnl());
}
LklOrderDraw existsRecord = getOne(queryWrapper);
LklOrderDraw existsRecord = findOne(queryWrapper);
if (existsRecord != null && existsRecord.getId() != null && existsRecord.getId() > 0) {
// 更新记录
log.info("[LklOrderDraw] 记录已存在执行更新操作ID={}", existsRecord.getId());
@ -102,4 +102,39 @@ public class LklOrderDrawServiceImpl extends BaseServiceImpl<LklOrderDrawMapper,
return null;
}
}
/**
* 判断订单是否已经提现完成
*
* @param orderId 订单ID
* @return 如果订单已提现完成返回true否则返回false
*/
@Override
public Boolean isOrderDrawed(String orderId) {
// 参数校验
if (StrUtil.isBlank(orderId)) {
log.warn("订单ID为空无法判断提现状态");
return false;
}
try {
// 查询提现成功的记录
LklOrderDraw lklOrderDraw = findOne(new QueryWrapper<LklOrderDraw>()
.eq("order_id", orderId)
.eq("draw_state", "DRAW.SUCCESS")
.orderByDesc("id"));
// 根据查询结果判断是否已提现
if (lklOrderDraw != null) {
log.debug("订单[{}]提现已完成", orderId);
return true;
} else {
log.debug("订单[{}]提现未完成或不存在提现记录", orderId);
return false;
}
} catch (Exception e) {
log.error("查询订单[{}]提现状态异常", orderId, e);
return false;
}
}
}

View File

@ -85,7 +85,8 @@ public class UserReturnController extends BaseControllerImpl {
return CommonResult.failed(ResultCode.NEED_LOGIN);
}
return shopOrderReturnService.addWholeItems(order_id, false, "");
// return shopOrderReturnService.addWholeItems(order_id, false, "");
return shopOrderReturnService.addRemainingItems(order_id, true, "");
}
@ApiOperation(value = "取消退款订单", notes = "取消退款订单")

View File

@ -43,6 +43,7 @@ import com.suisung.mall.shop.base.service.ShopBaseStateCodeService;
import com.suisung.mall.shop.distribution.service.ShopDistributionUserCommissionService;
import com.suisung.mall.shop.distribution.service.ShopDistributionUserOrderItemService;
import com.suisung.mall.shop.distribution.service.ShopDistributionUserOrderService;
import com.suisung.mall.shop.lakala.service.LklOrderDrawService;
import com.suisung.mall.shop.lakala.service.LklOrderSeparateService;
import com.suisung.mall.shop.message.service.PushMessageService;
import com.suisung.mall.shop.number.service.ShopNumberSeqService;
@ -195,7 +196,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
@Lazy
@Autowired
private ShopOrderLklService shopOrderLklService;
private LklOrderDrawService lklOrderDrawService;
@Lazy
@Autowired
@ -2090,7 +2091,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
}
/**
* 该函数用于判断某个订单商品是否禁止退货
* 该函数用于判断订单某个商品是否禁止退货判断订单的商品
* 参数校验检查订单商品和商品信息是否为空若为空则抛出异常
* 商品是否禁止退货从商品信息中获取消费者保障类型如果包含"禁止退货"则标记为不可退货
* 订单状态是否超过退货期限
@ -2103,10 +2104,11 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
*/
public boolean ifDenyReturn(ShopOrderInfo shopOrderInfo, ShopOrderItem shopOrderItem, ShopProductIndex shopProductIndex) {
// 是否禁止退货默认允许退货
boolean is_denyreturn = false;
boolean is_deny_return = false;
if (shopOrderItem == null) {
throw new ApiException(I18nUtil._("此订单商品订单数据有误!"));
log.error("此订单商品订单数据有误!");
return true;
}
if (shopProductIndex == null) {
@ -2114,16 +2116,17 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
}
if (shopProductIndex == null) {
throw new ApiException(I18nUtil._("此订单商品数据有误!"));
log.error("此订单商品数据有误!");
return true;
}
List<Integer> contractTypeIds = Convert.toList(Integer.class, shopProductIndex.getContract_type_ids());
//start判断是否可以申请退款
// 1商品是否允许
// 1商品是否禁止退货
if (contractTypeIds.contains(new Integer(StateCode.CONTRACT_TYPE_DENY_RETURN))) {
is_denyreturn = true;
// throw new ApiException(I18nUtil._("此商品不允许退货!"));
log.error("此商品不允许退货!");
return true;
}
// 2是否已经可结算, 进入可结算不允许退货
@ -2133,14 +2136,69 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
//order_deal_time
if (withdrawTime.compareTo(shopOrderInfo.getOrder_deal_time()) > 0) {
is_denyreturn = true;
//throw new ApiException(I18nUtil._("此商品已过退货期,不允许退货!"));
log.error("此商品已过退货期,不允许退货!");
return true;
}
}
return is_denyreturn;
return is_deny_return;
}
/**
* 判断订单是否禁止退货
*
* @param orderId 订单ID
* @return 如果订单禁止退货返回true否则返回false
*/
public boolean isOrderDenyReturn(String orderId) {
// 参数校验
if (StrUtil.isBlank(orderId)) {
log.warn("订单ID为空无法判断退货状态");
return true;
}
try {
// 获取订单信息
ShopOrderInfo shopOrderInfo = shopOrderInfoService.get(orderId);
if (shopOrderInfo == null) {
log.error("订单信息不存在订单ID: {}", orderId);
return true;
}
// 检查订单状态是否已收货或已完成
Integer orderStateId = shopOrderInfo.getOrder_state_id();
if (ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_RECEIVED) ||
ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_FINISH)) {
// 获取可提现时间戳
Long withdrawTime = shopOrderBaseService.getWithdrawTime();
Long orderDealTime = shopOrderInfo.getOrder_deal_time();
// 如果订单成交时间早于可提现时间说明已过退货期
if (orderDealTime != null && withdrawTime.compareTo(orderDealTime) > 0) {
log.debug("订单[{}]已过退货期,不允许退货", orderId);
return true;
}
}
// 检查拉卡拉分账和提现状态
if (lklOrderSeparateService.isOrderSeparated(orderId) &&
lklOrderDrawService.isOrderDrawed(orderId)) {
log.debug("订单[{}]已提现,不允许退货", orderId);
return true;
}
// 默认允许退货
return false;
} catch (Exception e) {
log.error("查询订单[{}]退货状态异常", orderId, e);
return true;
}
}
/**
* 该函数用于判断指定订单商品是否禁止退货
* 根据 order_item_id 获取订单商品信息
@ -2284,7 +2342,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
}
if (StrUtil.isBlank(remark)) {
remark = "剩余商品退款!";
remark = "整单退款!";
}
// 获取订单中所有商品