打印分账出错信息

This commit is contained in:
Jack 2025-10-16 21:20:56 +08:00
parent f754f41b55
commit e11cf54167
3 changed files with 101 additions and 111 deletions

View File

@ -98,6 +98,8 @@ public class ShopOrderLkl implements Serializable {
private String separate_remark;
private String separate_msg;
private Integer status;
private Date created_at;

View File

@ -855,7 +855,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
log.warn("[确认收货通知] 未能获取到商品子单信息,使用原始参数进行处理");
}
} else {
log.debug("[确认收货通知] 非合单订单,使用原始参数进行处理");
// 非合单订单确认收货响应数据{"trade_no":"20251015110110000066202154232129","log_no":"66202154232129","trade_state":"SUCCESS",
// "total_amount":"2950","trade_time":"20251015165538",
// "complete_notify_url":"https://mall.gpxscs.cn/api/mobile/shop/lakala/trans/receive/completeNotify",
// "merchant_no":"8226330541100H4","sub_mch_id":"812310610","origin_trade_no":"20251015110113130266250075936522",
// "origin_log_no":"66250075936522","origin_out_trade_no":"DD_20251015_2"}
log.debug("[确认收货通知] 从订单信息中获取原始交易号: originTradeNo={} originLogNo={}", originTradeNo, originLogNo);
}
@ -892,11 +897,19 @@ public class LakalaApiServiceImpl implements LakalaApiService {
}
log.info("[确认收货通知] 订单信息更新成功: orderId={}", shopOrderLkl.getOrder_id());
// 准备发起分账指令
// 重要准备发起分账指令
log.info("[确认收货通知] 开始发起分账指令: merchantNo={}, receiveTradeNo={}, logNo={}",
merchantNo, shopOrderLkl.getLkl_receive_trade_no(), logNo);
Pair<Boolean, String> separateResult = innerDoOrderSeparateByMerchantAndLogNo(merchantNo, shopOrderLkl.getLkl_receive_trade_no(), shopOrderLkl.getLkl_receive_log_no());
if (!separateResult.getFirst()) {
shopOrderLkl.setSeparate_msg(separateResult.getSecond());
updateResult = shopOrderLklService.addOrUpdateByStoreOrder(shopOrderLkl);
if (Boolean.FALSE.equals(updateResult)) {
log.error("[确认收货通知] 更新订单信息失败: orderId={}", shopOrderLkl.getOrder_id());
return JSONUtil.createObj().set("code", "FAIL").set("message", "更新订单信息失败!");
}
log.error("[确认收货通知] 发起分账指令失败: orderId={}, reason={}", shopOrderLkl.getOrder_id(), separateResult.getSecond());
return JSONUtil.createObj().set("code", "FAIL").set("message", "发起分账指令失败:" + separateResult.getSecond());
}
@ -2450,9 +2463,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
return Pair.of(false, "缺少必要参数");
}
ShopOrderLkl shopOrderLkl = null;
try {
// 2. 查询订单信息
ShopOrderLkl shopOrderLkl = shopOrderLklService.getByLklMchNoAndReceiveTradeNoAndReceiveLogNo(lklMerchantNo, receiveTradeNo, receiveLogNo);
shopOrderLkl = shopOrderLklService.getByLklMchNoAndReceiveTradeNoAndReceiveLogNo(lklMerchantNo, receiveTradeNo, receiveLogNo);
if (shopOrderLkl == null) {
log.warn("[分账操作] 未找到对应订单记录, lklMerchantNo={}, receiveTradeNo={}, receiveLogNo={}",
lklMerchantNo, receiveTradeNo, receiveLogNo);
@ -2566,6 +2581,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (calcResult == null || !calcResult.getFirst() || calcResult.getSecond() == null) {
log.error("[分账操作] 分账参数评估失败,无法分账, orderId={}, merchantNo={}", orderId, merchantNo);
// 更新分账出错信息
shopOrderLkl.setSeparate_msg("分账数据评估,结果无法分账");
shopOrderLklService.safeUpdate(shopOrderLkl);
return Pair.of(false, "分账数据评估,结果无法分账");
}
LklSeparateWithTotalAmountDTO lklSeparateDTO = calcResult.getSecond();
@ -2588,6 +2608,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (existingSeparateRecord != null) {
lklOrderSeparateService.updateRemark(existingSeparateRecord.getId(), errorMsg);
}
// 更新分账出错信息
shopOrderLkl.setSeparate_msg("订单可分账金额低于1分钱无法分账");
shopOrderLklService.safeUpdate(shopOrderLkl);
return Pair.of(false, "订单可分账金额低于1分钱");
}
@ -2596,9 +2621,13 @@ public class LakalaApiServiceImpl implements LakalaApiService {
Integer agent1stAmount = lklSeparateDTO.getAgent1stAmount();
Integer agent2ndAmount = lklSeparateDTO.getAgent2ndAmount();
log.info("[分账操作] 分账金额明细: orderId={}, merchantNo={}, 总金额={}分, 可分金额={}分, 商家分得={}分, 平台分得={}分, 省级代理商分得={}分, 县级代理商分得={}分, 配送费={}分",
orderId, merchantNo, shopOrderLkl.getTotal_amt(), refCanSeparateAmt, merchantAmount,
platformAmount, agent1stAmount, agent2ndAmount, shoppingFeeInner);
String logMsg = String.format("[分账操作] 分账金额计算完成, orderId=%s, merchantNo=%s, 总金额=%d分, 可分金额=%d分, 配送费=%d分",
orderId, merchantNo, shopOrderLkl.getTotal_amt(), refCanSeparateAmt, shoppingFeeInner);
log.info(logMsg);
// 更新分账计算结果
shopOrderLkl.setSeparate_msg(logMsg);
shopOrderLklService.safeUpdate(shopOrderLkl);
// 构建分账接收方分账列表参数
List<V3SacsSeparateRecvDatas> recvDatas = new ArrayList<>();
@ -2675,7 +2704,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (StrUtil.isBlank(response)) {
String errorMsg = String.format("[分账操作] 拉卡拉无响应, orderId=%s, merchantNo=%s, receiveLogNo=%s",
orderId, merchantNo, shopOrderLkl.getLkl_receive_log_no());
shopOrderLklService.updateSeparateStatusByReceiveLogNo(shopOrderLkl.getLkl_receive_log_no(), CommonConstant.Sta_Separate_Fail, "");
shopOrderLklService.updateSeparateStatusByReceiveLogNo(shopOrderLkl.getLkl_receive_log_no(), CommonConstant.Sta_Separate_Fail, errorMsg);
log.error(errorMsg);
return Pair.of(false, "拉卡拉无响应");
}
@ -2687,13 +2716,13 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (respJson == null || !lklSacsSuccessCode.equals(respJson.getStr("code")) || respJson.getJSONObject("resp_data") == null) {
String errorMsg = String.format("[分账操作] 拉卡拉返回格式异常, orderId=%s, merchantNo=%s, receiveLogNo=%s, response=%s",
orderId, merchantNo, shopOrderLkl.getLkl_receive_log_no(), response);
shopOrderLklService.updateSeparateStatusByReceiveLogNo(shopOrderLkl.getLkl_receive_log_no(), CommonConstant.Sta_Separate_Fail, "");
shopOrderLklService.updateSeparateStatusByReceiveLogNo(shopOrderLkl.getLkl_receive_log_no(), CommonConstant.Sta_Separate_Fail, errorMsg);
log.error(errorMsg);
return Pair.of(false, "拉卡拉分账异常:[" + (respJson != null ? respJson.getStr("code") : "未知错误码") + "]" +
(respJson != null ? respJson.getStr("msg") : "未知错误"));
}
// 只有在分账请求成功发送后更新分账备注
// 分账请求成功发送后更新分账备注
shopOrderLklService.safeUpdate(shopOrderLkl);
// 保存分账记录
@ -2729,6 +2758,13 @@ public class LakalaApiServiceImpl implements LakalaApiService {
} catch (Exception e) {
String errorMsg = String.format("[分账操作] 系统异常, receiveLogNo=%s, 错误=%s", receiveLogNo, e.getMessage());
log.error(errorMsg, e);
if (shopOrderLkl != null) {
shopOrderLkl.setSeparate_msg(errorMsg);
shopOrderLkl.setSeparate_status(CommonConstant.Sta_Separate_Fail);
shopOrderLklService.safeUpdate(shopOrderLkl);
}
return Pair.of(false, "系统异常,请稍后重试");
}
}

View File

@ -1519,14 +1519,11 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
//修改退货订单及其相关商品为下一个待处理状态
editShopOrderReturnAndItemNextState(return_ids, return_state_id, shopOrderReturn);
// 运费退款
ShopOrderReturn return_order_shipping_fee_row = null;
// return_state_id 是当前状态旧状态
if (ObjectUtil.equal(return_state_id, StateCode.RETURN_PROCESS_CHECK)) {
// 同意退款退货判断是否全部都退款退货修改订单状态
UserDto user = getCurrentUser();
// UserDto user = getCurrentUser();
for (ShopOrderReturn return_row : return_rows) {
String order_id = return_row.getOrder_id();
@ -1600,99 +1597,53 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
StateCode.ORDER_STATE_RECEIVED,
StateCode.ORDER_STATE_FINISH);
if (order_state_id != null && !forbiddenStates.contains(order_state_id)) {
// 取消订单,更改订单的状态为已取消
// shopOrderBaseService.cancel(order_id, info_row, false);
logger.info("处理运费和打包费事宜:{}", order_id);
ShopOrderData order_data_row = shopOrderDataService.get(order_id);
// 如果有打包费最后的退款订单的退款金额加上 打包费
if (order_data_row != null &&
order_data_row.getPacking_fee() != null &&
order_data_row.getPacking_fee().compareTo(BigDecimal.ZERO) > 0) {
// 退款金额+打包费
BigDecimal orderRefundAmountAddFee = NumberUtil.add(
order_data_row.getOrder_refund_amount(),
order_data_row.getPacking_fee());
// 最后一个退款订单如果有打包费加上打包费
return_row.setReturn_refund_amount(orderRefundAmountAddFee);
logger.debug("最后一个商品已添加打包费到退款金额订单ID: {}", order_id);
}
if (order_data_row != null) {
BigDecimal additionalFees = BigDecimal.ZERO;
List<String> feeTypes = new ArrayList<>();
// 有运费的重新生成一个运费退单
// if (order_data_row != null &&
// order_data_row.getOrder_shipping_fee_inner() != null &&
// order_data_row.getOrder_shipping_fee_inner().compareTo(BigDecimal.ZERO) > 0) {
// 注意商家配置的配送费
if (order_data_row != null &&
order_data_row.getOrder_shipping_fee() != null &&
order_data_row.getOrder_shipping_fee().compareTo(BigDecimal.ZERO) > 0) {
// 运费大于0的 执行退运费操作, 有两种方案1生成退运费售后服务单 2直接执行退款
// 1生成独立退运费售后服务单需注意运费是退给运费代理商的需要获取代理商的交易单号
return_order_shipping_fee_row = new ShopOrderReturn();
Integer buyer_user_id = info_row.getBuyer_user_id();
Integer storeId = info_row.getStore_id();
// // 平台内部订单配送费
// BigDecimal orderShippingFeeInner = order_data_row.getOrder_shipping_fee_inner();
// if (orderShippingFeeInner == null || orderShippingFeeInner.compareTo(BigDecimal.ZERO) <= 0) {
// orderShippingFeeInner = shopOrderLklService.getOrderShippingFeeInnerToDecimal(storeId, order_id);
// }
// 商家设置的配送费
BigDecimal orderShippingFee = order_data_row.getOrder_shipping_fee();
return_order_shipping_fee_row.setReturn_refund_amount(orderShippingFee); // 平台内部配送费退款金额
BigDecimal order_points_fee = ObjectUtil.defaultIfNull(order_data_row.getOrder_points_fee(), BigDecimal.ZERO);
BigDecimal order_refund_agree_points = ObjectUtil.defaultIfNull(order_data_row.getOrder_refund_agree_points(), BigDecimal.ZERO);
BigDecimal return_refund_point = NumberUtil.round(NumberUtil.sub(order_points_fee, order_refund_agree_points), 2);
return_order_shipping_fee_row.setOrder_id(order_id); // 订单编号
return_order_shipping_fee_row.setBuyer_user_id(buyer_user_id);
return_order_shipping_fee_row.setReturn_is_shipping_fee(1); //退货类型(BOOL): 0-退款单;1-退运费单
return_order_shipping_fee_row.setReturn_reason_id(0);
return_order_shipping_fee_row.setReturn_buyer_message(I18nUtil._("订单(配送费)退款"));
return_order_shipping_fee_row.setStore_id(storeId);
return_order_shipping_fee_row.setReturn_refund_point(NumberUtil.min(return_refund_point, orderShippingFee));
return_order_shipping_fee_row.setReturn_add_time(now); // 添加时间
return_order_shipping_fee_row.setReturn_tel("");
// 店铺审核操作员
Integer storeUserId = user != null ? user.getId() : 0;
return_order_shipping_fee_row.setReturn_store_user_id(storeUserId);
return_order_shipping_fee_row.setReturn_telephone("");
return_order_shipping_fee_row.setSubsite_id(info_row.getSubsite_id());
// update 2025-07-24
return_order_shipping_fee_row.setReturn_flag(0); // 退货标识(BOOL): 0-正常退货;1-退货换货
return_order_shipping_fee_row.setReturn_store_message(I18nUtil._("订单(配送费)退款"));
return_order_shipping_fee_row.setReturn_finish_time(now);
return_order_shipping_fee_row.setReturn_state_id(StateCode.RETURN_PROCESS_FINISH);
return_order_shipping_fee_row.setReturn_is_paid(1);// 退款完成
return_order_shipping_fee_row.setReturn_channel_code("lakala");
return_order_shipping_fee_row.setPayment_channel_id(1416);
return_order_shipping_fee_row.setReturn_year(DateUtil.year(now)); // 退单年份-索引查询
return_order_shipping_fee_row.setReturn_month(DateUtil.month(now) + 1); // 退单月份-索引查询
return_order_shipping_fee_row.setReturn_day(DateUtil.dayOfMonth(now)); // 退单日-索引查询
// 生成退货单
String type_code = stateCodeService.getCode(StateCode.ORDER_TYPE_FX, "state_code_code");
String return_id = shopNumberSeqService.createNextSeq(type_code);
return_order_shipping_fee_row.setReturn_id(return_id);
// 运费独立加一条退单记录
if (!add(return_order_shipping_fee_row)) {
logger.error("配送费退款订单生成失败订单ID: {}", order_id);
// 1生成退运费售后服务单
throw new ApiException(I18nUtil._("配送费退款订单生成失败!"));
// 处理打包费
if (order_data_row.getPacking_fee() != null &&
order_data_row.getPacking_fee().compareTo(BigDecimal.ZERO) > 0) {
additionalFees = additionalFees.add(order_data_row.getPacking_fee());
feeTypes.add("打包费");
logger.debug("添加打包费: {}订单ID: {}", order_data_row.getPacking_fee(), order_id);
}
logger.info("配送费退款订单生成成功,退单号: {}", return_id);
// 处理配送费
if (order_data_row.getOrder_shipping_fee() != null &&
order_data_row.getOrder_shipping_fee().compareTo(BigDecimal.ZERO) > 0) {
additionalFees = additionalFees.add(order_data_row.getOrder_shipping_fee());
feeTypes.add("配送费");
logger.debug("添加配送费: {}订单ID: {}", order_data_row.getOrder_shipping_fee(), order_id);
}
// 更新退款金额和说明
if (additionalFees.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal newRefundAmount = return_row.getReturn_refund_amount().add(additionalFees);
return_row.setReturn_refund_amount(newRefundAmount);
return_row.setReturn_state_id(StateCode.RETURN_PROCESS_FINISH);
// 构建费用说明
String feeDescription = String.join("+", feeTypes);
String returnStoreMessage = return_row.getReturn_store_message();
if (StrUtil.isBlank(returnStoreMessage)) {
returnStoreMessage = "商品退款";
}
return_row.setReturn_store_message(returnStoreMessage + "+" + feeDescription);
// 保存更新
if (StrUtil.isNotBlank(return_row.getReturn_id()) && !edit(return_row)) {
logger.error("更新退货单退款金额失败退货单ID: {}", return_row.getReturn_id());
throw new ApiException(ResultCode.FAILED);
}
logger.debug("成功更新退款金额,新增费用: {},总退款金额: {}订单ID: {}",
additionalFees, newRefundAmount, order_id);
}
} else {
logger.warn("未找到订单数据无法处理费用订单ID: {}", order_id);
}
}
@ -1711,7 +1662,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
// 修改订单同步状态 可重新同步
ShopOrderInfo orderInfo = new ShopOrderInfo();
orderInfo.setOrder_id(order_id);
orderInfo.setOrder_is_sync(0); // 订单同步状态
orderInfo.setOrder_is_sync(0); // 是否ERP同步(BOOL):0-未同步; 1-已同步
if (!shopOrderInfoService.edit(orderInfo)) {
logger.error("修改订单同步状态失败订单ID: {}", order_id);
throw new ApiException(I18nUtil._("修改订单同步状态失败!"));
@ -1726,20 +1677,18 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
// 卖家账户扣款买家账户增加
// 佣金问题
shopOrderReturn.setReturn_is_paid(CommonConstant.Enable); // 0-退货未完成1-退货完成
shopOrderReturn.setReturn_finish_time(now);
List<ShopOrderReturn> returnOrder = new ArrayList<>();
if (return_rows != null) {
returnOrder.addAll(return_rows);
}
if (return_order_shipping_fee_row != null) {
returnOrder.add(return_order_shipping_fee_row);
}
// List<ShopOrderReturn> returnOrder = new ArrayList<>();
// if (return_rows != null) {
// returnOrder.addAll(return_rows);
// }
// if (return_order_shipping_fee_row != null) {
// returnOrder.add(return_order_shipping_fee_row);
// }
// 重要执行退款操作
try {
if (!payService.doRefund(returnOrder)) {
if (!payService.doRefund(return_rows)) {
logger.error("执行退款操作失败!退单列表: {}", return_ids);
throw new ApiException("余额不足,请稍后重试");
}
@ -1752,6 +1701,9 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
logger.info("退款操作执行成功,退单列表: {}", return_ids);
// 更新退货单的退款完成状态和完成时间
// shopOrderReturn.setReturn_is_paid(CommonConstant.Enable); // 0-退货未完成1-退货完成
// shopOrderReturn.setReturn_finish_time(now);
//
ShopOrderReturn updateRefundStatus = new ShopOrderReturn();
updateRefundStatus.setReturn_is_paid(1); // 0-退货未完成1-退货完成
updateRefundStatus.setReturn_finish_time(now);