对于后台订单购物流程的API开发小结

    xiaoxiao2021-03-26  23

    springmvc开发订单类api接口

    在接手到这个项目时,我对订单只是模糊的概念,淘宝的购物流程我想在坐的各位都知道,但是具体到开发的时候,考虑的细节那是很多的,如订单状态的判断,支付前的检查等等,下面我就说说订单的业务流程: 首先声明一个订单请求类,用来从客户端传来订单的请求信息 - 订单请求类

    public class AddMemberOrderPaymentItemsRequest { private int orderId; private int memberId; private List<PaymentData> orderPayments; public int getOrderId() { return orderId; } public void setOrderId(int orderId) { this.orderId = orderId; } public int getMemberId() { return memberId; } public void setMemberId(int memberId) { this.memberId = memberId; } public List<PaymentData> getOrderPayments() { return orderPayments; } public void setOrderPayments(List<PaymentData> orderPayments) { this.orderPayments = orderPayments; } } 订单的支付数据类 public class OrderPaymentData { private String orderSn; private String paymentType; private Integer paymentTypeValue; private Integer paymentTypeFee; private Long paymentTime; private String notifyId; private Integer status; private String tradeNo; private String password; private Integer paymentSourceId; private String remark; public String getOrderSn() { return orderSn; } public void setOrderSn(String orderSn) { this.orderSn = orderSn; } public String getPaymentType() { return paymentType; } public void setPaymentType(String paymentType) { this.paymentType = paymentType; } public Integer getPaymentTypeValue() { return paymentTypeValue; } public void setPaymentTypeValue(Integer paymentTypeValue) { this.paymentTypeValue = paymentTypeValue; } public Integer getPaymentTypeFee() { return paymentTypeFee; } public void setPaymentTypeFee(Integer paymentTypeFee) { this.paymentTypeFee = paymentTypeFee; } public Long getPaymentTime() { return paymentTime; } public void setPaymentTime(Long paymentTime) { this.paymentTime = paymentTime; } public String getNotifyId() { return notifyId; } public void setNotifyId(String notifyId) { this.notifyId = notifyId; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getTradeNo() { return tradeNo; } public void setTradeNo(String tradeNo) { this.tradeNo = tradeNo; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getPaymentSourceId() { return paymentSourceId; } public void setPaymentSourceId(Integer paymentSourceId) { this.paymentSourceId = paymentSourceId; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } } 支付数据类 public class PaymentData { private String paymentType; private String paymentValue; private String paymentFee; private String password; private Integer paymentSourceId; private String remark; private Integer orderItemId; public String getPaymentType() { return paymentType; } public void setPaymentType(String paymentType) { this.paymentType = paymentType; } public String getPaymentValue() { return paymentValue; } public void setPaymentValue(String paymentValue) { this.paymentValue = paymentValue; } public String getPaymentFee() { return paymentFee; } public void setPaymentFee(String paymentFee) { this.paymentFee = paymentFee; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getPaymentSourceId() { return paymentSourceId; } public void setPaymentSourceId(Integer paymentSourceId) { this.paymentSourceId = paymentSourceId; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Integer getOrderItemId() { return orderItemId; } public void setOrderItemId(Integer orderItemId) { this.orderItemId = orderItemId; } } 订单记录类 public class MemberOrderRecord extends BaseEntity implements java.io.Serializable { private static final long serialVersionUID = 5245312106507078315L; private String orderSn; private String pickMethod; private ConfigOrderType orderType; private Integer memberId; private Integer checkStatus; private Integer orderStatus; private Integer paymentStatus; private Integer managerId; private Long orderTime; private Long paymentTime; private String description; private String remark; private Integer mallId; private List<MemberOrderItem> orderItems; private List<MemberOrderPaymentList> orderPaymentLists; private MemberOrderDelivery orderDelivery; private Long invalidTime; private Integer isRefund = 0; private Integer invoiced = 0; private String clientSource; private String outSerialNo;// 外部交易序列号,目前用在erp中 private String orderHelperType; private String orderUndoSn;// 交易撤销编号 private String tradeFlag; // 交易标记,判断是否成功 private String tradeMessage;// 交易消息 private String auditMessage; // 审核消息 private Integer auditManagerId; // 审核管理员 private MallInfo pickMallInfo; //提货门店 @Column(name = "order_sn", unique = true, nullable = false, length = 100) public String getOrderSn() { return this.orderSn; } public void setOrderSn(String orderSn) { this.orderSn = orderSn; } @Column(name = "pick_method", nullable = false, length = 25) public String getPickMethod() { return this.pickMethod; } public void setPickMethod(String pickMethod) { this.pickMethod = pickMethod; } @Column(name = "member_id", nullable = false) public Integer getMemberId() { return this.memberId; } public void setMemberId(Integer memberId) { this.memberId = memberId; } @Column(name = "order_status", nullable = false) public Integer getOrderStatus() { return orderStatus; } public void setOrderStatus(Integer orderStatus) { this.orderStatus = orderStatus; } @Column(name = "payment_status", nullable = false) public Integer getPaymentStatus() { if (paymentStatus != OrderConstants.ORDER_PAYMENT_STATUS_PAYED && paymentStatus != OrderConstants.ORDER_PAYMENT_STATUS_CLOSED) { // 未支付的情况下根据各个支付方式的支付记录得到支付状态 int status = OrderConstants.ORDER_PAYMENT_STATUS_WAIT_PAY; boolean hasPayed = false; boolean hasWaitpay = false; boolean hasVerify = false; int closeCount = 0; List<MemberOrderPaymentList> paymentLists = getOrderPaymentLists(); if (paymentLists != null && !paymentLists.isEmpty()) { for (MemberOrderPaymentList memberOrderPaymentList : paymentLists) { if (memberOrderPaymentList.getStatus() == OrderConstants.ORDER_PAYMENT_STATUS_WAIT_PAY) { hasWaitpay = true; } else if (memberOrderPaymentList.getStatus() == OrderConstants.ORDER_PAYMENT_STATUS_PAYED || memberOrderPaymentList.getStatus() == OrderConstants.ORDER_PAYMENT_STATUS_FINISHED) { hasPayed = true; } else if (memberOrderPaymentList.getStatus() == OrderConstants.ORDER_PAYMENT_STATUS_CLOSED) { closeCount++; } else if (memberOrderPaymentList.getStatus() == OrderConstants.ORDER_PAYMENT_STATUS_PAY_VERIFYING) { hasVerify = true; } } if (hasWaitpay) { // 在未支付状态下,有支付或支付确认中,则为部分支付 if (hasPayed || hasVerify) { status = OrderConstants.ORDER_PAYMENT_STATUS_PARTIAL_PAYED; } } else if (hasPayed) { // 有支付完成,有关闭,则为取消中,非退款,退款处理时,订单状态不变 if (closeCount > 0) { status = OrderConstants.ORDER_PAYMENT_STATUS_PARTIAL_CLOSED; } else { // 在有支付完成的状态下,有支付确认中,且没有取消,则为支付确认中。 if (hasVerify) { status = OrderConstants.ORDER_PAYMENT_STATUS_PAY_VERIFYING; } else { status = OrderConstants.ORDER_PAYMENT_STATUS_PAYED; } } } else if (closeCount == paymentLists.size()) { // 订单关闭 status = OrderConstants.ORDER_PAYMENT_STATUS_CLOSED; } else if (hasVerify) { // 仅剩支付确认中 status = OrderConstants.ORDER_PAYMENT_STATUS_PAY_VERIFYING; } paymentStatus = status; } else { paymentStatus = OrderConstants.ORDER_PAYMENT_STATUS_WAIT_PAY; } } return paymentStatus; } public void setPaymentStatus(Integer paymentStatus) { this.paymentStatus = paymentStatus; } @Column(name = "manager_id") public Integer getManagerId() { return this.managerId; } public void setManagerId(Integer managerId) { this.managerId = managerId; } @Column(name = "order_time", nullable = false) public Long getOrderTime() { return this.orderTime; } public void setOrderTime(Long orderTime) { this.orderTime = orderTime; } @Column(name = "payment_time") public Long getPaymentTime() { return this.paymentTime; } public void setPaymentTime(Long paymentTime) { this.paymentTime = paymentTime; } @Column(name = "description") public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } @Column(name = "remark") public String getRemark() { return this.remark; } public void setRemark(String remark) { this.remark = remark; } @ManyToOne @JoinColumn(name = "order_type") public ConfigOrderType getOrderType() { return orderType; } public void setOrderType(ConfigOrderType orderType) { this.orderType = orderType; } @Column(name = "check_status") public Integer getCheckStatus() { return checkStatus; } public void setCheckStatus(Integer checkStatus) { this.checkStatus = checkStatus; } public Integer getMallId() { return mallId; } public void setMallId(Integer mallId) { this.mallId = mallId; } @OneToMany(cascade = CascadeType.ALL, mappedBy = "orderRecord", fetch = FetchType.LAZY) public List<MemberOrderItem> getOrderItems() { return orderItems; } public void setOrderItems(List<MemberOrderItem> orderItems) { this.orderItems = orderItems; } @OneToMany(cascade = CascadeType.ALL, mappedBy = "orderRecord", fetch = FetchType.LAZY) public List<MemberOrderPaymentList> getOrderPaymentLists() { return orderPaymentLists; } public void setOrderPaymentLists( List<MemberOrderPaymentList> orderPaymentLists) { this.orderPaymentLists = orderPaymentLists; } @OneToOne(cascade = CascadeType.ALL, mappedBy = "orderRecord", fetch = FetchType.LAZY) public MemberOrderDelivery getOrderDelivery() { return orderDelivery; } public void setOrderDelivery(MemberOrderDelivery orderDelivery) { this.orderDelivery = orderDelivery; } public Long getInvalidTime() { return invalidTime; } public void setInvalidTime(Long invalidTime) { this.invalidTime = invalidTime; } public Integer getIsRefund() { return isRefund; } public void setIsRefund(Integer isRefund) { this.isRefund = isRefund; } public Integer getInvoiced() { return invoiced; } public void setInvoiced(Integer invoiced) { this.invoiced = invoiced; } public String getClientSource() { return clientSource; } public void setClientSource(String clientSource) { this.clientSource = clientSource; } public String getOutSerialNo() { return outSerialNo; } public void setOutSerialNo(String outSerialNo) { this.outSerialNo = outSerialNo; } public String getOrderHelperType() { return orderHelperType; } public void setOrderHelperType(String orderHelperType) { this.orderHelperType = orderHelperType; } public String getOrderUndoSn() { return orderUndoSn; } public void setOrderUndoSn(String orderUndoSn) { this.orderUndoSn = orderUndoSn; } public String getTradeFlag() { return tradeFlag; } public void setTradeFlag(String tradeFlag) { this.tradeFlag = tradeFlag; } public String getTradeMessage() { return tradeMessage; } public void setTradeMessage(String tradeMessage) { this.tradeMessage = tradeMessage; } public String getAuditMessage() { return auditMessage; } public void setAuditMessage(String auditMessage) { this.auditMessage = auditMessage; } public Integer getAuditManagerId() { return auditManagerId; } public void setAuditManagerId(Integer auditManagerId) { this.auditManagerId = auditManagerId; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pick_mall_id") public MallInfo getPickMallInfo() { return pickMallInfo; } public void setPickMallInfo(MallInfo pickMallInfo) { this.pickMallInfo = pickMallInfo; } @Transient public Integer getTotalPaymentFee() { List<MemberOrderPaymentList> paymentLists = getOrderPaymentLists(); if (paymentLists != null && !paymentLists.isEmpty()) { int totalFee = 0; boolean hasFee = false; for (MemberOrderPaymentList memberOrderPaymentList : paymentLists) { // 只有fee时按fee计算 if (memberOrderPaymentList.getPaymentFee() != null) { totalFee += memberOrderPaymentList.getPaymentFee(); hasFee = true; } } return hasFee ? totalFee : null; } else { return null; } } @Transient public Integer getTotalPaymentValue() { List<MemberOrderPaymentList> paymentLists = getOrderPaymentLists(); if (paymentLists != null && !paymentLists.isEmpty()) { int totalValue = 0; boolean hasValue = false; for (MemberOrderPaymentList memberOrderPaymentList : paymentLists) { // 仅有value时才按value值累计 if (memberOrderPaymentList.getPaymentValue() != null && memberOrderPaymentList.getPaymentFee() == null) { totalValue += memberOrderPaymentList.getPaymentValue(); hasValue = true; } } return hasValue ? totalValue : null; } else { return null; } } @Transient public Integer getItemsTotalFee() { List<MemberOrderItem> orderItems = getOrderItems(); if (orderItems != null && !orderItems.isEmpty()) { int totalFee = 0; boolean hasFee = false; for (MemberOrderItem memberOrderItem : orderItems) { if (memberOrderItem.getTotalFee() != null) { totalFee += memberOrderItem.getTotalFee(); hasFee = true; } } return hasFee ? totalFee : null; } else { return null; } } @Transient public Integer getItemsTotalValue() { List<MemberOrderItem> orderItems = getOrderItems(); if (orderItems != null && !orderItems.isEmpty()) { int totalValue = 0; boolean hasValue = false; for (MemberOrderItem memberOrderItem : orderItems) { if (memberOrderItem.getTotalValue() != null) { totalValue += memberOrderItem.getTotalValue(); hasValue = true; } } return hasValue ? totalValue : null; } else { return null; } } @Transient public MemberOrderPaymentList getOrderPaymentList(String paymentType) { List<MemberOrderPaymentList> paymentLists = getOrderPaymentLists(); if (paymentLists != null && !paymentLists.isEmpty()) { for (MemberOrderPaymentList memberOrderPaymentList : paymentLists) { if (memberOrderPaymentList.getPaymentType().equals(paymentType)) { return memberOrderPaymentList; } } } return null; } @Transient public int getOrderPaymentListIndex(String paymentType) { List<MemberOrderPaymentList> paymentLists = getOrderPaymentLists(); if (paymentLists != null && !paymentLists.isEmpty()) { int index = 0; for (MemberOrderPaymentList memberOrderPaymentList : paymentLists) { if (memberOrderPaymentList.getPaymentType().equals(paymentType)) { return index; } index++; } } return 0; } @Transient public boolean canInvoice() { // 先判断订单类型是否可以开发票,在判断支付清单中是否可以开发票 // 已开发票后不能再开 ConfigOrderType orderType = getOrderType(); if (invoiced == 0 && orderType.getCanInvoice() == 1) { List<MemberOrderPaymentList> paymentLists = getOrderPaymentLists(); if (paymentLists != null && !paymentLists.isEmpty()) { for (MemberOrderPaymentList memberOrderPaymentList : paymentLists) { if (memberOrderPaymentList.getCanInvoice() == 1) { return true; } } } } return false; } @Transient public boolean canRefund() { ConfigOrderType orderType = getOrderType(); return orderType.getCanRefund() == 1; } @Transient public int getCommentStatus() { int commentedCount = 0; List<MemberOrderItem> orderItems = getOrderItems(); for (MemberOrderItem memberOrderItem : orderItems) { if (memberOrderItem.getCommentStatus() == OrderConstants.ORDER_ITEM_COMMENT_STATUS_WAIT_COMMENT) { return OrderConstants.ORDER_ITEM_COMMENT_STATUS_WAIT_COMMENT; } else if (memberOrderItem.getCommentStatus() == OrderConstants.ORDER_ITEM_COMMENT_STATUS_COMMENTED) { commentedCount++; } } if (commentedCount == orderItems.size()) { return OrderConstants.ORDER_ITEM_COMMENT_STATUS_COMMENTED; } else { return OrderConstants.ORDER_ITEM_COMMENT_STATUS_UNAVAILABLE; } } 订单支付类 public class MemberOrderPaymentList extends BaseEntity implements java.io.Serializable { // Fields /** * */ private static final long serialVersionUID = -4484332339445481397L; private MemberOrderRecord orderRecord; private String orderSn; private String paymentType; private String paymentSn; private Integer paymentTypeValue; private Integer paymentTypeFee; private Long paymentTime; private String notifyId; private Integer status; private String tradeNo; private String appTradeStatus; private String remark; private Integer priority; private Integer canInvoice; private String password; private String undoTradeNo; private String paymentSource; // 支付类型来源 private Integer paymentSourceId; // 支付类型的来源Id,可以用来保存优惠券、停车券等的Id @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "order_id", nullable = false) public MemberOrderRecord getOrderRecord() { return orderRecord; } public void setOrderRecord(MemberOrderRecord orderRecord) { this.orderRecord = orderRecord; } @Column(name = "order_sn", nullable = false, length = 64) public String getOrderSn() { return this.orderSn; } public void setOrderSn(String orderSn) { this.orderSn = orderSn; } @Column(name = "payment_type", nullable = false, length = 20) public String getPaymentType() { return this.paymentType; } public void setPaymentType(String paymentType) { this.paymentType = paymentType; } @Column(name = "payment_sn", nullable = false, length = 64) public String getPaymentSn() { return this.paymentSn; } public void setPaymentSn(String paymentSn) { this.paymentSn = paymentSn; } @Column(name = "payment_type_value") public Integer getPaymentTypeValue() { return this.paymentTypeValue; } public void setPaymentTypeValue(Integer paymentTypeValue) { this.paymentTypeValue = paymentTypeValue; } @Column(name = "payment_type_fee") public Integer getPaymentTypeFee() { return this.paymentTypeFee; } public void setPaymentTypeFee(Integer paymentTypeFee) { this.paymentTypeFee = paymentTypeFee; } @Column(name = "payment_time") public Long getPaymentTime() { return this.paymentTime; } public void setPaymentTime(Long paymentTime) { this.paymentTime = paymentTime; } @Column(name = "notify_id", length = 100) public String getNotifyId() { return this.notifyId; } public void setNotifyId(String notifyId) { this.notifyId = notifyId; } @Column(name = "status", nullable = false) public Integer getStatus() { return this.status; } public void setStatus(Integer status) { this.status = status; } @Column(name = "trade_no", length = 100) public String getTradeNo() { return this.tradeNo; } public void setTradeNo(String tradeNo) { this.tradeNo = tradeNo; } public String getAppTradeStatus() { return appTradeStatus; } public void setAppTradeStatus(String appTradeStatus) { this.appTradeStatus = appTradeStatus; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Integer getPriority() { return priority; } public void setPriority(Integer priority) { this.priority = priority; } public Integer getCanInvoice() { return canInvoice; } public void setCanInvoice(Integer canInvoice) { this.canInvoice = canInvoice; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUndoTradeNo() { return undoTradeNo; } public void setUndoTradeNo(String undoTradeNo) { this.undoTradeNo = undoTradeNo; } @Transient public Integer getPaymentFee() { return paymentTypeFee; } @Transient public Integer getPaymentValue() { return paymentTypeValue; } public String getPaymentSource() { return paymentSource; } public void setPaymentSource(String paymentSource) { this.paymentSource = paymentSource; } public Integer getPaymentSourceId() { return paymentSourceId; } public void setPaymentSourceId(Integer paymentSourceId) { this.paymentSourceId = paymentSourceId; } }

    下面开始进行业务处理 首先我们通过order的id取到数据库中的订单记录判断是否为空

    if (!memberOrderRecord.getMemberId().equals( addMemberOrderPaymentItemsRequest.getMemberId()) || !memberOrderRecord.getId().equals( addMemberOrderPaymentItemsRequest.getOrderId())) { throw new OpenapiException("member order not match", OrderErrorCode.ERR_API_APP_MEMBER_ORDER_NOT_MATCH); }

    接着我们取出订单记录中的订单支付类,然后判断支付方式是否存在,如果为空,则添加订单的支付方式,否则报出异常,订单已有支付方式

    List<MemberOrderPaymentList> memberOrderPaymentLists = memberOrderRecord .getOrderPaymentLists(); if ((memberOrderPaymentLists == null || memberOrderPaymentLists .isEmpty())) { // 订单支付方式没有 if (addMemberOrderPaymentItemsRequest == null || addMemberOrderPaymentItemsRequest.getOrderPayments() == null || addMemberOrderPaymentItemsRequest.getOrderPayments() .isEmpty()) { throw new OpenapiException( "member order payment items not set", OrderErrorCode.ERR_API_APP_MEMBER_ORDER_PAYMENT_TYPE_NOT_SET); } else { / 添加订单支付方式 List<OrderPaymentData> orderPaymentDatas = Lists.newArrayList(); List<PaymentData> paymentDatas = addMemberOrderPaymentItemsRequest .getOrderPayments(); OrderDataUtils.setOrderPaymentData(orderPaymentDatas, paymentDatas); /** public static void setOrderPaymentData( List<OrderPaymentData> orderPaymentDatas, List<PaymentData> paymentDatas) { for (PaymentData paymentData : paymentDatas) { OrderPaymentData orderPaymentData = new OrderPaymentData(); orderPaymentData.setPaymentType(paymentData.getPaymentType()); orderPaymentData.setPaymentTypeFee(PaymentConvertUtils .convertFeeStringToInt(paymentData.getPaymentFee())); orderPaymentData.setPaymentTypeValue(PaymentConvertUtils .convertCreditStringToInt(paymentData.getPaymentValue())); orderPaymentData .setStatus(OrderConstants.ORDER_PAYMENT_STATUS_WAIT_PAY); orderPaymentData.setPassword(paymentData.getPassword()); orderPaymentData.setPaymentSourceId(paymentData .getPaymentSourceId()); orderPaymentData.setRemark(paymentData.getRemark()); orderPaymentDatas.add(orderPaymentData); } } **/ try { memberOrderRecordService.addOrderPaymentItems( orderPaymentDatas, memberOrderRecord, false); } catch (OrderException e) { logger.error("error", e); throw new OpenapiException( "member order add payment items failed", OrderErrorCode.ERR_API_APP_MEMBER_ORDER_ADD_PAYMENT_TYPES_FAILED); } } } else { // 订单已有支付方式 if (addMemberOrderPaymentItemsRequest != null && addMemberOrderPaymentItemsRequest.getOrderPayments() != null && !addMemberOrderPaymentItemsRequest.getOrderPayments() .isEmpty()) { throw new OpenapiException( "member order payment items has been set", OrderErrorCode.ERR_API_APP_MEMBER_ORDER_PAYMENT_TYPE_HAS_BEEN_SET); } } 其中涉及的方法在service层 在其中,订单的值传过来后,赋值给订单支付类,订单支付类的值填充好后再加入到订单记录类中,保存订单记录类到数据库 @Override @Transactional public boolean addOrderPaymentItems( List<OrderPaymentData> orderPaymentDatas, MemberOrderRecord orderRecord, boolean allowSamePaymentType) throws OrderException { // 订单支付 if (orderPaymentDatas != null && !orderPaymentDatas.isEmpty()) { List<MemberOrderPaymentList> orderPaymentLists = createOrderPaymentItems( orderPaymentDatas, orderRecord, allowSamePaymentType); if (orderRecord.getOrderPaymentLists() == null) { orderRecord.setOrderPaymentLists(orderPaymentLists); } else { orderRecord.getOrderPaymentLists().addAll(orderPaymentLists); } Integer allFee = orderRecord.getItemsTotalFee(); Integer allValue = orderRecord.getItemsTotalValue(); Integer paymentFee = orderRecord.getTotalPaymentFee(); Integer paymentValue = orderRecord.getTotalPaymentValue(); // 支付费用不能小于商品总价,可以大于。 if ((allFee != null && (paymentFee == null || paymentFee < allFee)) || (allValue != null && (paymentValue == null || paymentValue < allValue))) { throw new OrderException("订单支付金额小于商品总价"); } save(orderRecord); return true; } else { throw new OrderException("订单支付方式为空"); } } private List<MemberOrderPaymentList> createOrderPaymentItems( List<OrderPaymentData> orderPaymentDatas, MemberOrderRecord orderRecord, boolean allowSamePaymentType) throws OrderException { OrderHelper orderHelper = orderHelperMap.get(orderRecord .getOrderHelperType()); Set<String> orderPaymentTypes = Sets.newHashSet(); if (orderPaymentDatas != null && !orderPaymentDatas.isEmpty()) { List<MemberOrderPaymentList> orderPaymentLists = Lists .newArrayList(); for (OrderPaymentData orderPaymentData : orderPaymentDatas) { if ((orderPaymentData.getPaymentTypeFee() == null || orderPaymentData .getPaymentTypeFee() == 0) && (orderPaymentData.getPaymentTypeValue() == null || orderPaymentData .getPaymentTypeValue() == 0)) { // 支付的fee和value都为0则忽略此支付方式的数据 continue; } String paymentType = orderPaymentData.getPaymentType(); if (!allowSamePaymentType) { Integer sourceId = orderPaymentData.getPaymentSourceId(); String key; if (sourceId != null) { // 使用paymentType+sourceId的方式判断是否重复 key = paymentType + sourceId; } else { key = paymentType; } if (orderPaymentTypes.contains(key)) { throw new OrderException("订单支付方式重复", -1); } else { orderPaymentTypes.add(key); } } MemberOrderPaymentList orderPaymentList = new MemberOrderPaymentList(); orderPaymentList.setNotifyId(orderPaymentData.getNotifyId()); orderPaymentList.setOrderRecord(orderRecord); orderPaymentList.setOrderSn(orderRecord.getOrderSn()); orderPaymentList.setPaymentSn(orderHelper .generatePaymentSn(paymentType)); orderPaymentList.setPaymentTime(orderPaymentData .getPaymentTime()); orderPaymentList.setPaymentType(paymentType); // 默认情况source与type相同 orderPaymentList.setPaymentSource(paymentType); orderPaymentList.setPaymentTypeFee(orderPaymentData .getPaymentTypeFee()); orderPaymentList.setPaymentTypeValue(orderPaymentData .getPaymentTypeValue()); orderPaymentList.setStatus(orderPaymentData.getStatus()); orderPaymentList.setTradeNo(orderPaymentData.getTradeNo()); ConfigPaymentType configPaymentType = configPaymentTypeService .find(paymentType); orderPaymentList.setPriority(configPaymentType.getPriority()); orderPaymentList.setCanInvoice(configPaymentType .getCanInvoice()); orderPaymentList.setPassword(orderPaymentData.getPassword()); orderPaymentList.setPaymentSourceId(orderPaymentData .getPaymentSourceId()); orderPaymentList.setRemark(orderPaymentData.getRemark()); checkAndExchangePaymentTypeVaueFee(orderRecord.getOrderType() .getType(), orderPaymentList); checkPaymentItem(orderPaymentList); orderPaymentLists.add(orderPaymentList); } return orderPaymentLists; } else { return null; } } 订单支付controller作为返回的api 其中的bodyToObject()方法是将请求来的json数据进行转化成AddMemberOrderPaymentItemsRequest 对象 // 支付会员订单 @RequestMapping(value = "/{orderId}/payments", method = RequestMethod.POST, produces = "application/json;charset=UTF-8, text/plain;charset=UTF-8") public Object addOrderPayments(@PathVariable Integer orderId, HttpServletRequest request, HttpServletResponse response) { AddMemberOrderPaymentItemsRequest addMemberOrderPaymentItemsRequest = bodyToObject( AddMemberOrderPaymentItemsRequest.class, request); if (addMemberOrderPaymentItemsRequest == null) { return HttpErrorObject .constructHttpErrorObject(OrderErrorCode.ERR_API_APP_ORDER_ADD_PAYMENTS_REQUEST_NULL); } return orderService.addOrderPayments(orderId, addMemberOrderPaymentItemsRequest); }

    对于订单业务的理解,还需要多结合业务场景需求去完成,这儿只是订单支付的一个小程序 希望对你们有所帮助!

    转载请注明原文地址: https://ju.6miu.com/read-660656.html

    最新回复(0)