All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sinszm.sofa.service.OrderApplicationService Maven / Gradle / Ivy

Go to download

高可用服务框架,业务订单基础功能操作组件 Copyright © 2021 智慧程序猿(sinsz.com) All rights reserved.

There is a newer version: 1.3.6
Show newest version
package com.sinszm.sofa.service;

import cn.hutool.core.lang.Assert;
import com.sinszm.sofa.enums.Evaluative;
import com.sinszm.sofa.model.TsAftermarket;
import com.sinszm.sofa.model.TsEvaluative;
import com.sinszm.sofa.model.TsOperationRecord;
import com.sinszm.sofa.vo.*;

import java.util.List;

import static com.sinszm.sofa.support.Constant.error;

/**
 * 订单应用服务
 *
 * @author admin
 */
public interface OrderApplicationService {

    /**
     * 生成订单
     *
     * @param orderNo 商户订单号
     * @param goods   货物
     * @param seller  卖方
     * @param buyer   买家
     * @return {OrderDetailVo}
     */
    OrderDetailVo generateOrder(String orderNo, Goods goods, Seller seller, Buyer buyer);

    /**
     * 支付订单
     * 将订单状态变更为进行中,强制需要支付参数payNo
     *
     * @param orderId   订单id
     * @param orderNo   商户订单号
     * @param payNo     支付号
     * @param payUserId 支付用户id
     * @return boolean  true表示成功,false表示失败
     */
    boolean payOrder(String orderId, String orderNo, String payNo, String payUserId);

    /**
     * 完成订单,一般是订单处理到一定阶段之后业务触发订单为已完成
     *
     * @param orderId   订单id
     * @param orderNo   商户订单号
     * @param opUserId  操作用户id
     * @return boolean  true表示成功,false表示失败
     */
    boolean completeOrder(String orderId, String orderNo, String opUserId);

    /**
     * 取消订单,订单未支付才可以直接取消订单,如果是已经支付在进行中或已完成的订单均只能走售后流程。
     *
     * @param orderId   订单id
     * @param orderNo   商户订单号
     * @param opUserId  操作用户id
     * @return boolean  true表示成功,false表示失败
     */
    boolean cancelOrder(String orderId, String orderNo, String opUserId);

    /**
     * 根据订单ID或商户订单号获取订单详情信息
     *
     * @param orderId   订单id
     * @param orderNo   商户订单号
     * @return {OrderDetailVo}
     */
    OrderDetailVo getOrderDetail(String orderId, String orderNo);

    /**
     * 评价订单,只有已完成的订单才可以进行评价操作
     *
     * @param orderId   订单id
     * @param orderNo   商户订单号
     * @param opUserId  操作用户id
     * @param level     评价等级
     * @param describes 评价描述
     */
    void appraiseOrder(String orderId, String orderNo, String opUserId, Evaluative level, String describes);

    /**
     * 评价订单,只有已完成的订单才可以进行评价操作
     *
     * @param evaluativeInfo 评价信息
     */
    default void appraiseOrder(EvaluativeInfo evaluativeInfo) {
        Assert.notNull(evaluativeInfo, error("评价信息不能为空"));
        evaluativeInfo.checkAll();
        appraiseOrder(evaluativeInfo.getOrderId(), null, evaluativeInfo.getUserId(), evaluativeInfo.getLevel(), evaluativeInfo.getDescribe());
    }

    /**
     * 根据订单ID或商户订单号获取订单评价信息,当订单没有完成时查询的评价信息详情设置为空信息返回
     *
     * @param orderId   订单id
     * @param orderNo   商户订单号
     * @return {TsEvaluative}
     */
    TsEvaluative getOrderEvaluative(String orderId, String orderNo);

    /**
     * 根据订单ID或商户订单号获取订单日志列表
     *
     * @param orderId   订单id
     * @param orderNo   商户订单号
     * @return {List}
     */
    List logsByOrderId(String orderId, String orderNo);

    /**
     * 创建售后,订单已支付且订单状态在进行中或已完成时才可以创建售后
     *
     * @param aftermarketInfo 售后信息
     * @return {String}   售后ID
     */
    default String createAftermarket(AftermarketInfo aftermarketInfo) {
        Assert.notNull(aftermarketInfo, error("售后信息不能为空"));
        aftermarketInfo.checkAll();
        return createAftermarket(
                aftermarketInfo.getOrderId(),
                null,
                aftermarketInfo.getUserId(),
                aftermarketInfo.getRefundFee(),
                aftermarketInfo.getRefundGoodsNum(),
                aftermarketInfo.getRefundReasons()
        );
    }

    /**
     * 创建售后,订单已支付且订单状态在进行中或已完成时才可以创建售后
     *
     * @param orderId        订单id
     * @param orderNo        商户订单号
     * @param opUserId       发起售后的用户id
     * @param refundFee      退费
     * @param refundGoodsNum 退货数量
     * @param refundReasons  退款原因
     * @return {String}   售后ID
     */
    String createAftermarket(String orderId, String orderNo, String opUserId, Double refundFee, Integer refundGoodsNum, String refundReasons);

    /**
     * 触发售后到进行中,该状态一般情况是在审核机制的保证下才能变更到进行中,普通场景时可以创建和进行中在一个流程步骤中
     * 

* 当售后状态为CREATE时,调用该方法则变更售后状态为AFTER_SALES; * 当售后状态为AFTER_SALES时,调用该方法则变更售后状态为COMPLETED; *

* * @param aftermarketId 售后id * @param opUserId 操作的用户id * @return boolean true表示成功,false表示失败 */ boolean executeAftermarket(String aftermarketId, String opUserId); /** * 取消售后,只有在售后未变更到进行中之前才可以取消售后。 * * @param aftermarketId 售后id * @param opUserId 操作的用户id * @return boolean true表示成功,false表示失败 */ boolean cancelAftermarket(String aftermarketId, String opUserId); /** * 根据订单ID、商户订单号或售后ID获取订单售后信息 * * @param aftermarketId 售后id * @return {TsAftermarket} */ TsAftermarket getAftermarketDetail(String aftermarketId); /** * 根据订单ID或商户订单号查询售后列表 * * @param orderId 订单id * @param orderNo 商户订单号 * @return {List} */ List getAftermarketList(String orderId, String orderNo); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy