revoke fulfillment and payment for cancel sale order
This commit is contained in:
+5
-1
@@ -237,8 +237,12 @@ public class GaoOrderPaymentServiceImplement implements GaoOrderPaymentService {
|
|||||||
TimiException.required(request, "not found fund revoke request");
|
TimiException.required(request, "not found fund revoke request");
|
||||||
String requestNo = requiredText(request.getRequestNo(), "not found requestNo");
|
String requestNo = requiredText(request.getRequestNo(), "not found requestNo");
|
||||||
String reason = requiredText(request.getReason(), "资金冲正原因不能为空");
|
String reason = requiredText(request.getReason(), "资金冲正原因不能为空");
|
||||||
|
GaoFundRecord sourceSnapshot = fundRecordService.detail(request.getFundRecordId());
|
||||||
|
TimiException.requiredTrue(sourceSnapshot.getBizType() == GaoFundRecord.BizType.SALES_ORDER, "资金记录不是销售订单资金");
|
||||||
|
TimiException.required(sourceSnapshot.getBizId(), "not found salesOrderId");
|
||||||
|
GaoSalesOrder order = orderService.getForUpdate(sourceSnapshot.getBizId());
|
||||||
GaoFundRecord source = lockOrderRecord(request.getFundRecordId());
|
GaoFundRecord source = lockOrderRecord(request.getFundRecordId());
|
||||||
GaoSalesOrder order = orderService.getForUpdate(source.getBizId());
|
TimiException.requiredTrue(order.getId().equals(source.getBizId()), "资金流水所属订单已变化");
|
||||||
GaoFundRecord existing = fundRecordService.getByRequestNo(order.getStoreId(), requestNo);
|
GaoFundRecord existing = fundRecordService.getByRequestNo(order.getStoreId(), requestNo);
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
TimiException.requiredTrue(existing.getOperationType() == GaoFundRecord.OperationType.REVOKE && source.getId().equals(existing.getSourceRecordId()), "requestNo 已被其他资金操作使用");
|
TimiException.requiredTrue(existing.getOperationType() == GaoFundRecord.OperationType.REVOKE && source.getId().equals(existing.getSourceRecordId()), "requestNo 已被其他资金操作使用");
|
||||||
|
|||||||
+53
-1
@@ -9,6 +9,7 @@ import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
|||||||
import com.imyeyu.api.modules.gao.entity.GaoCustomer;
|
import com.imyeyu.api.modules.gao.entity.GaoCustomer;
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoEventRecord;
|
import com.imyeyu.api.modules.gao.entity.GaoEventRecord;
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoFundRecord;
|
import com.imyeyu.api.modules.gao.entity.GaoFundRecord;
|
||||||
|
import com.imyeyu.api.modules.gao.entity.GaoOrderFulfillment;
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoProduct;
|
import com.imyeyu.api.modules.gao.entity.GaoProduct;
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoProductSku;
|
import com.imyeyu.api.modules.gao.entity.GaoProductSku;
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoProductSkuUnit;
|
import com.imyeyu.api.modules.gao.entity.GaoProductSkuUnit;
|
||||||
@@ -21,6 +22,7 @@ import com.imyeyu.api.modules.gao.service.GaoCustomerService;
|
|||||||
import com.imyeyu.api.modules.gao.service.GaoEventRecordService;
|
import com.imyeyu.api.modules.gao.service.GaoEventRecordService;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoFundRecordService;
|
import com.imyeyu.api.modules.gao.service.GaoFundRecordService;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoOrderFulfillmentService;
|
import com.imyeyu.api.modules.gao.service.GaoOrderFulfillmentService;
|
||||||
|
import com.imyeyu.api.modules.gao.service.GaoOrderPaymentService;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoOrderStraightThroughService;
|
import com.imyeyu.api.modules.gao.service.GaoOrderStraightThroughService;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoPointTriggerService;
|
import com.imyeyu.api.modules.gao.service.GaoPointTriggerService;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoProductService;
|
import com.imyeyu.api.modules.gao.service.GaoProductService;
|
||||||
@@ -35,6 +37,8 @@ import com.imyeyu.api.modules.gao.vo.GaoCustomerProductCustomerView;
|
|||||||
import com.imyeyu.api.modules.gao.vo.GaoCustomerProductPage;
|
import com.imyeyu.api.modules.gao.vo.GaoCustomerProductPage;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoCustomerProductSummaryView;
|
import com.imyeyu.api.modules.gao.vo.GaoCustomerProductSummaryView;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoCustomerProductView;
|
import com.imyeyu.api.modules.gao.vo.GaoCustomerProductView;
|
||||||
|
import com.imyeyu.api.modules.gao.vo.GaoOrderFulfillmentRevokeRequest;
|
||||||
|
import com.imyeyu.api.modules.gao.vo.GaoOrderPaymentRevokeRequest;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoProductSkuUnitSelection;
|
import com.imyeyu.api.modules.gao.vo.GaoProductSkuUnitSelection;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoSalesOrderCancelRequest;
|
import com.imyeyu.api.modules.gao.vo.GaoSalesOrderCancelRequest;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoSalesOrderItemRequest;
|
import com.imyeyu.api.modules.gao.vo.GaoSalesOrderItemRequest;
|
||||||
@@ -88,6 +92,7 @@ public class GaoSalesOrderServiceImplement extends AbstractEntityService<GaoSale
|
|||||||
private final GaoSalesOrderItemMapper itemMapper;
|
private final GaoSalesOrderItemMapper itemMapper;
|
||||||
private final GaoFundRecordService fundRecordService;
|
private final GaoFundRecordService fundRecordService;
|
||||||
private final ObjectProvider<GaoOrderFulfillmentService> fulfillmentServiceProvider;
|
private final ObjectProvider<GaoOrderFulfillmentService> fulfillmentServiceProvider;
|
||||||
|
private final ObjectProvider<GaoOrderPaymentService> paymentServiceProvider;
|
||||||
private final ObjectProvider<GaoOrderStraightThroughService> straightThroughServiceProvider;
|
private final ObjectProvider<GaoOrderStraightThroughService> straightThroughServiceProvider;
|
||||||
private final GaoCustomerService customerService;
|
private final GaoCustomerService customerService;
|
||||||
private final GaoProductService productService;
|
private final GaoProductService productService;
|
||||||
@@ -326,7 +331,54 @@ public class GaoSalesOrderServiceImplement extends AbstractEntityService<GaoSale
|
|||||||
}
|
}
|
||||||
TimiException.requiredTrue(order.getStatus() == GaoSalesOrder.Status.ACTIVE, "当前订单不可取消");
|
TimiException.requiredTrue(order.getStatus() == GaoSalesOrder.Status.ACTIVE, "当前订单不可取消");
|
||||||
TimiException.requiredTrue(fundRecordService.countPendingReceiveByBizId(order.getId()) == 0, "订单存在待核销收款,不能取消");
|
TimiException.requiredTrue(fundRecordService.countPendingReceiveByBizId(order.getId()) == 0, "订单存在待核销收款,不能取消");
|
||||||
TimiException.requiredTrue(fulfillmentServiceProvider.getObject().countPendingBySalesOrderId(order.getId()) == 0, "订单存在待履约操作,不能取消");
|
GaoOrderFulfillmentService fulfillmentService = fulfillmentServiceProvider.getObject();
|
||||||
|
TimiException.requiredTrue(fulfillmentService.countPendingBySalesOrderId(order.getId()) == 0, "订单存在待履约操作,不能取消");
|
||||||
|
|
||||||
|
List<GaoOrderFulfillmentRevokeRequest> fulfillmentRevokeList = request.getFulfillmentRevokeList();
|
||||||
|
Set<String> fulfillmentIdSet = new HashSet<>();
|
||||||
|
Set<String> selectedFulfillmentIdSet = new HashSet<>();
|
||||||
|
if (fulfillmentRevokeList != null && !fulfillmentRevokeList.isEmpty()) {
|
||||||
|
TimiException.requiredTrue(permissionChecker.hasAny(ModuleCode.GAO, GaoPermissionCode.ORDER_FULFILLMENT_REVOKE.getValue()), "缺少履约冲正权限");
|
||||||
|
for (GaoOrderFulfillment fulfillment : fulfillmentService.listBySalesOrderId(order.getId())) {
|
||||||
|
fulfillmentIdSet.add(fulfillment.getId());
|
||||||
|
}
|
||||||
|
for (GaoOrderFulfillmentRevokeRequest revokeRequest : fulfillmentRevokeList) {
|
||||||
|
TimiException.required(revokeRequest, "履约冲正请求不能为空");
|
||||||
|
TimiException.required(revokeRequest.getFulfillmentId(), "not found fulfillmentId");
|
||||||
|
TimiException.requiredTrue(fulfillmentIdSet.contains(revokeRequest.getFulfillmentId()), "履约单不属于当前订单");
|
||||||
|
TimiException.requiredTrue(selectedFulfillmentIdSet.add(revokeRequest.getFulfillmentId()), "履约单不能重复冲正");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<GaoOrderPaymentRevokeRequest> fundRevokeList = request.getFundRevokeList();
|
||||||
|
Set<String> fundRecordIdSet = new HashSet<>();
|
||||||
|
Set<String> selectedFundRecordIdSet = new HashSet<>();
|
||||||
|
if (fundRevokeList != null && !fundRevokeList.isEmpty()) {
|
||||||
|
TimiException.requiredTrue(permissionChecker.hasAny(ModuleCode.GAO, GaoPermissionCode.FUND_REVOKE.getValue()), "缺少资金流水冲正权限");
|
||||||
|
for (GaoFundRecord fundRecord : fundRecordService.listByBizId(order.getId())) {
|
||||||
|
fundRecordIdSet.add(fundRecord.getId());
|
||||||
|
}
|
||||||
|
for (GaoOrderPaymentRevokeRequest revokeRequest : fundRevokeList) {
|
||||||
|
TimiException.required(revokeRequest, "资金冲正请求不能为空");
|
||||||
|
TimiException.required(revokeRequest.getFundRecordId(), "not found fundRecordId");
|
||||||
|
TimiException.requiredTrue(fundRecordIdSet.contains(revokeRequest.getFundRecordId()), "资金流水不属于当前订单");
|
||||||
|
TimiException.requiredTrue(selectedFundRecordIdSet.add(revokeRequest.getFundRecordId()), "资金流水不能重复冲正");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fulfillmentRevokeList != null) {
|
||||||
|
for (GaoOrderFulfillmentRevokeRequest revokeRequest : fulfillmentRevokeList) {
|
||||||
|
fulfillmentService.revoke(revokeRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fundRevokeList != null && !fundRevokeList.isEmpty()) {
|
||||||
|
GaoOrderPaymentService paymentService = paymentServiceProvider.getObject();
|
||||||
|
for (GaoOrderPaymentRevokeRequest revokeRequest : fundRevokeList) {
|
||||||
|
paymentService.revoke(revokeRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
order = getForUpdate(order.getId());
|
||||||
String userId = userLoginService.getRequireLoginUserId();
|
String userId = userLoginService.getRequireLoginUserId();
|
||||||
GaoSalesOrder.RefundStatus refundStatus = safe(order.getPaidAmount()) == 0 ? GaoSalesOrder.RefundStatus.REFUNDED : GaoSalesOrder.RefundStatus.PENDING;
|
GaoSalesOrder.RefundStatus refundStatus = safe(order.getPaidAmount()) == 0 ? GaoSalesOrder.RefundStatus.REFUNDED : GaoSalesOrder.RefundStatus.PENDING;
|
||||||
Long cancelledAt = Time.now();
|
Long cancelledAt = Time.now();
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package com.imyeyu.api.modules.gao.vo;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/// GAO 销售订单取消请求
|
/// GAO 销售订单取消请求
|
||||||
///
|
///
|
||||||
/// @author Codex
|
/// @author Codex
|
||||||
@@ -17,4 +19,10 @@ public class GaoSalesOrderCancelRequest {
|
|||||||
|
|
||||||
/// 幂等请求号
|
/// 幂等请求号
|
||||||
private String requestNo;
|
private String requestNo;
|
||||||
|
|
||||||
|
/// 取消时冲正的已核销履约单,按整张履约单冲正
|
||||||
|
private List<GaoOrderFulfillmentRevokeRequest> fulfillmentRevokeList;
|
||||||
|
|
||||||
|
/// 取消时冲正的资金流水,按整条流水冲正
|
||||||
|
private List<GaoOrderPaymentRevokeRequest> fundRevokeList;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user