package com.xinelu.applet.mapper.nursingstationgoods;

import com.xinelu.applet.dto.nursingstationgoods.GoodDetails;
import com.xinelu.applet.dto.nursingstationgoods.GoodsList;
import com.xinelu.applet.dto.nursingstationgoods.GoodsOrderPatient;
import com.xinelu.applet.vo.coupon.CouponVO;
import com.xinelu.manage.domain.goodsAttributeDetails.GoodsAttributeDetails;
import com.xinelu.manage.domain.goodsCategory.GoodsCategory;
import com.xinelu.manage.domain.receiveAddressInfo.ReceiveAddressInfo;
import com.xinelu.manage.vo.goodsCategory.GoodsCategoryNameVO;
import com.xinelu.manage.vo.receiveAddressInfo.ReceiveAddressInfoVO;
import com.xinelu.manage.vo.sysarea.SysAreaVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author ljh
 * @version 1.0
 * Create by 2022/10/17 13:31
 */
public interface NursingStationGoodsMapper {

    /**
     * 查询商品分类信息列表
     *
     * @param goodsCategory 商品分类信息
     * @return 商品分类信息集合
     */
    List<GoodsCategory> getGoodsCategoryList(GoodsCategory goodsCategory);

    /**
     * 根据商品分类id查询商品信息
     *
     * @param goodsList 商品信息
     * @return 商品基本信息集合
     */
    List<GoodsList> getGoodsInfoList(GoodsList goodsList);

    /**
     * 查询商品二级分类信息列表
     *
     * @param goodsCategory 商品分类信息
     * @return 商品分类信息集合
     */
    List<GoodsCategoryNameVO> getGoodsCategoryNameList(GoodsCategoryNameVO goodsCategory);

    /**
     * 商品属性信息
     *
     * @param goodsInfoId 商品详细id
     * @return java.util.List<com.xinyilu.nurseapplet.domain.nursingStationGoods.GoodDetailsList>
     **/
    GoodDetails getGoodsDetailsList(Long goodsInfoId);

    /**
     * 根据被护理人id查询基本信息
     *
     * @param patientId 被护理人id
     * @return com.xinyilu.base.domain.patientinfo.PatientInfo
     **/
    List<ReceiveAddressInfoVO> getReceiveAddressInfoList(Long patientId);

    /**
     * 根据被护理人id查询基本信息集合
     *
     * @param patientId 被护理人id
     * @return java.util.List<com.xinyilu.base.domain.receiveAddressInfo.ReceiveAddressInfo>
     **/
    List<ReceiveAddressInfo> selectReceiveAddressInfoByPatientId(Long patientId);

    /**
     * 查询收货人地址信息
     *
     * @param id 收货人地址信息主键
     * @return 收货人地址信息
     */
    ReceiveAddressInfo selectReceiveAddressInfoById(Long id);

    /**
     * 新增收货人地址信息
     *
     * @param receiveAddressInfo 收货人地址信息
     * @return 结果
     */
    int insertReceiveAddressInfo(ReceiveAddressInfo receiveAddressInfo);

    /**
     * 修改收货人地址信息
     *
     * @param receiveAddressInfo 收货人地址信息
     * @return 结果
     */
    int updateReceiveAddressInfo(ReceiveAddressInfo receiveAddressInfo);

    /**
     * 批量删除收货人地址信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteReceiveAddressInfoByIds(Long[] ids);

    /**
     * 下级区域寻找上级区域
     *
     * @param areaCode 区域编码
     * @return com.xinyilu.base.domain.vo.sysarea.SysAreaVO
     **/
    SysAreaVO getSubordinateRegionsFindSuperiorRegions(@Param("areaCode") String areaCode);

    /**
     * 查询商品属性明细
     *
     * @param id 商品属性明细主键
     * @return 商品属性明细
     */
    GoodsAttributeDetails selectGoodsAttributeDetailsGoodsStockById(Long id);

    /**
     * 修改商品属性明细
     *
     * @param goodsAttributeDetails 商品属性明细
     * @return 结果
     */
    int updateGoodsAttributeDetails(GoodsAttributeDetails goodsAttributeDetails);

    /**
     * 根据订单编号查询订单信息
     *
     * @param orderNo 订单信息编号
     * @return com.xinyilu.nurseapplet.domain.nursingStationGoods.GoodsOrderPatient
     **/
    GoodsOrderPatient selectGoodsOrderPatient(String orderNo);

    /**
     * 查询商品分类信息下的所有子id
     *
     * @param goodsCategoryId 当前商品分类id
     * @return com.xinyilu.base.domain.goodsCategory.GoodsCategory
     **/
    String getChildrenCategoryIds(Long goodsCategoryId);

    /**
     * 商品详情查询用户优惠券信息
     *
     * @param patientId 用户信息
     * @param useStatus 优惠券状态
     * @return List<Coupon>
     */
    List<CouponVO> selectCouponListByPatient(@Param("patientId") Long patientId, @Param("useStatus") String useStatus);
}
