
package com.tmerclub.cloud.group.service;

import com.tmerclub.cloud.api.group.vo.GroupOrderVO;
import com.tmerclub.cloud.common.order.bo.PayNotifyBO;
import com.tmerclub.cloud.group.bo.GroupOrderBO;
import com.tmerclub.cloud.group.bo.mongo.MongoGroupOrderBO;
import com.tmerclub.cloud.group.vo.mongo.MongoAppGroupUserVO;

import java.util.List;

/**
 * 拼团订单表
 *
 * @author YXF
 * @date 2021-03-20 10:39:32
 */
public interface GroupOrderService {

    /**
     * 保存到mongodb
     * @param mongoGroupOrderBO
     */
    void saveToMongodb(MongoGroupOrderBO mongoGroupOrderBO);

    /**
     * 批量保存到mongodb
     * @param list
     */
    void saveBatchToMongodb(List<MongoGroupOrderBO> list);

    /**
     * 根据
     * @param orderId
     * @return
     */
    GroupOrderVO getByOrderId(Long orderId);

    /**
     * 获取参团的用户列表
     * @param groupTeamId
     * @return
     */
    List<MongoAppGroupUserVO> listApiGroupUserDto(Long groupTeamId);

    /**
     * 获取用户团购订单信息
     * @param groupTeamId
     * @return
     */
    GroupOrderVO getUserGroupOrderByGroupTeamId(Long groupTeamId);

    /**
     * 用户在该活动中有的商品数量
     * @param userId
     * @param groupActivityId
     * @return
     */
    Integer getUserHadSpuCountByGroupActivityId(Long userId, Long groupActivityId);

    /**
     * 团购活动提交订单
     * @param groupOrderBO
     */
    void submit(GroupOrderBO groupOrderBO);

    /**
     * 取消团购订单
     * @param groupOrder
     * @param orderIds 团购订单ids
     */
    void cancelGroupOrder(GroupOrderVO groupOrder, List<Long> orderIds);

    /**
     * 订单支付成功通知
     * @param message
     */
    void payNotifyGroupOrder(PayNotifyBO message);

    /**
     * 拼团失败
     * @param groupTeamId
     */
    void unSuccess(Long groupTeamId);

    /**
     * 根据商品及用户id，获取用户订单数量
     * @param groupActivityId 团购id
     * @param spuId 商品id
     * @param userId 用户id
     * @return
     */
    Integer getOrderBySpuIdAndUserId(Long groupActivityId, Long spuId, Long userId);

    /**
     * 根据活动id更新活动订单数
     * @param groupActivityId
     */
    void updateGroupOrderInfo(Long groupActivityId);

    /**
     * 更新订单状态为待成团
     *
     * @param orderId               订单id
     * @param identityType          1代表开团
     * @param groupTeamId           拼团团队id
     */
    void updateToPaySuccess(Long orderId, Integer identityType, Long groupTeamId);

    /**
     * 初始化拼团数据到mongodb
     */
    void initGroupOrderToMongo();
}
