package com.zm.order.tool.server.dao;

import com.zm.order.tool.server.model.ItemProduction;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 商品制作表
 *
 * @author nianchang
 */
@Repository
public interface ItemProductionDao {

    /**
     * 新增一条记录
     *
     * @param record ItemProductions
     * @return 影响行数
     */
    int insert(ItemProduction record);

    /**
     * 批量新增
     *
     * <p>
     *
     * </p>
     *
     * @param list 制作单列表
     * @return 执行成功行数
     */
    int insertList(List<ItemProduction> list);

    /**
     * 修改
     *
     * @param record ItemProductions
     * @return 影响行数
     */
    int update(ItemProduction record);

    /**
     * 查询商品制作单列表
     *
     * <p>
     *
     * </p>
     *
     * @param orderNo 订单号
     * @param userId 用户id && 分片键
     * @return 制作单列表 || []
     */
    List<ItemProduction> selectByOrderNo(@Param("orderNo") String orderNo, @Param("userId") Long userId);


    /**
     * 查询单个商品制作单
     *
     * <p>
     *
     * </p>
     *
     * @param orderNo 订单号
     * @param userId 用户id && 分片键
     * @param productionSign 制作单唯一标识（单个订单维度，全局不唯一）
     * @return 制作单 || null
     */
    ItemProduction selectOne(@Param("userId") Long userId,
                             @Param("orderNo") String orderNo,
                             @Param("productionSign") String productionSign);

    /**
     * 主键查询
     * @param userId
     * @param id
     * @return
     */
    ItemProduction selectById(@Param("userId") Long userId, @Param("id") Long id);

    /**
     * 根据制作单号查询商品制作单
     *
     * <p>
     *
     * </p>
     *
     * @param userId 用户id（分片键）
     * @param productionNo 制作单号
     * @return ItemProduction
     */
    List<ItemProduction> selectByNo(@Param("userId") Long userId,
                                    @Param("productionNo") String productionNo);

    /**
     * 批量删除制作单
     *
     * <p>
     *      逻辑删除，将删除字段设置为-1
     * </p>
     *
     * @param idList 主键列表
     * @param userId 用户id && 分片键
     * @param deleteType 删除类型 此处设置为-1
     * @return 影响条数
     */
    int delete(@Param("idList") List<Long> idList,
               @Param("userId") Long userId,
               @Param("deleteType") Integer deleteType);


    int updateSellerUser(
            @Param("sellerId") Long sellerId,
            @Param("storeId") Long storeId,
            @Param("oldUserId") Long oldUserId,
            @Param("newUserId") Long newUserId,
            @Param("orderNo") String orderNo);

    int deleteByOrderNo(@Param("orderNo") String orderNo, @Param("userId") Long userId);

}
