package com.hz.his.feign.service.phis;

import com.hx.resultTool.Result;
import com.hz.his.dto.user.*;
import com.hz.his.dto.user.card.UserCardDto;
import com.hz.his.dto.user.card.UserCardUsedDto;
import com.hz.his.dto.user.coupon.GoodsUsedCouponDto;
import com.hz.his.dto.user.coupon.OrderCanUseCouponDto;
import com.hz.his.dto.user.coupon.UserCanUseCouponDto;
import com.hz.his.dto.user.coupon.UserCouponDto;
import com.hz.his.dto.user.label.UserLabelDto;
import com.hz.his.dto.user.money.*;
import com.hz.his.dto.user.packages.UserPhisPackageDto;
import com.hz.his.dto.user.project.UserProjectDto;
import com.hz.his.dto.user.project.UserProjectUsedDto;
import com.hz.his.dto.user.promotion.UserPromotionUsedDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 这里这个name 需要填写 请求的服务提供者的注册到nacos Server上面的服务名,path 是请求接口前缀
 */
@FeignClient(name="phis-provider",path = "/p-his-data",contextId = "user")
public interface SUserService {

    /**
     * 查询用户列表
     * */
    @PostMapping(value = "/user/list")
    Result userList(@RequestBody UserDto userDto);

    /**
     * 查询用户标识列表
     * */
    @PostMapping(value = "/user/list/ids")
    Result userIdList(@RequestBody UserDto userDto);

    /**
     * 获取到用户详情
     * @param userId 用户标识
     * @return 转化使用UserDt
     */
    @PostMapping(value = "/user/info")
    Result userInfo(@RequestParam("userId") String userId);

    /**
     * 获取用户资金信息
     * */
    @PostMapping(value = "/user/money/info")
    Result userMoneyInfo(@RequestParam("userId") String userId);

    /**
     * 获取用户项目
     */
    @PostMapping(value = "/user/project/list")
    Result userProject(@RequestBody UserProjectDto userProjectDto);

    /**
     * 获取用户子项目
     */
    @PostMapping(value = "/user/project/item/list")
    Result userProjectItem(@RequestBody UserProjectDto userProjectDto);

    /**
     * 获取用户子项目使用记录
     */
    @PostMapping(value = "/user/project/used")
    Result userProjectUsed(@RequestBody UserProjectUsedDto userProjectUsedDto);


    /**
     * 获取用户卡包
     */
    @PostMapping(value = "/user/card")
    Result userCard(@RequestBody UserCardDto userCardDto);


    /**
     * 获取用户的卡项的详情
     * @param cardId 卡包标识
     * @return Result
     */
    @PostMapping(value = "/userCard/detail")
    Result getUserCardDetail(@RequestParam("cardId") String cardId);

    /**
     * 获取用户卡包使用记录
     */
    @PostMapping(value = "/user/card/used")
    Result userCardUsed(@RequestBody UserCardUsedDto userCardUsedDto);


    /**
     * 获取用户促销使用记录
     * */
    @PostMapping(value = "/user/promotion/used")
    Result userPromotionUsed(@RequestBody UserPromotionUsedDto userPromotionUsedDto);


    /**
     * 获取用户优惠券
     * */
    @PostMapping(value = "/user/coupon")
    Result userCoupon(@RequestBody UserCouponDto userCouponDto);

    /**
     * 获取用户优惠券使用记录
     * */
    @PostMapping(value = "/user/coupon/used")
    Result userCouponUsed(@RequestParam UserCouponDto userCouponDto);


    /**
     * 获取用户可用优惠券
     * */
    @PostMapping(value = "/user/can/use/coupon")
    Result userCanUseCoupon(@RequestBody UserCanUseCouponDto userCanUseCouponDto);

    /**
     * 获取商品可用优惠券
     * */
    @PostMapping(value = "/goods/can/use/coupon")
    Result goodsCanUseCoupon(@RequestBody GoodsUsedCouponDto goodsUsedCouponDto);

    /**
     * 判断订单是否可用该优惠券
     * 转化使用 CouponNumberDto
     */
    @PostMapping(value = "/order/can/use/coupon")
    Result orderCanUseCoupon(@RequestBody OrderCanUseCouponDto orderCanUseCouponDto);


    /**
     * 获取用户增值金列表
     * */
    @PostMapping(value = "/user/increment/list")
    Result userIncrementList(@RequestBody UserIncrementDto userIncrementDto);

    /**
     * 获取用户增值金使用记录
     * */
    @PostMapping(value = "/user/increment/used")
    Result userIncrementUsed(@RequestBody UserIncrementDto userIncrementDto);

    /**
     * 获取用户储值金列表
     * */
    @PostMapping(value = "/user/recharge/list")
    Result userRechargeList(@RequestBody UserRechargeDto userRechargeDto);

    /**
     * 获取用户资金使用记录
     * */
    @PostMapping(value = "/user/money/used")
    Result userConsumeDt(@RequestBody UserConsumeDto userConsumeDto);

    /**
     * 获取用户积分列表
     * */
    @PostMapping(value = "/user/integral/list")
    Result userIntegralList(@RequestBody UserIntegralDto userIntegralDto);

    /**
     * 获取用户积分使用记录
     * */
    @PostMapping(value = "/user/integral/used")
    Result userIntegralUsed(@RequestBody UserIntegralDto userIntegralDto);


    /**
     * 获取用户拥有统计
     * 返回使用UserHaveDt
     * */
    @PostMapping(value = "/user/have/count")
    Result userHaveCount(@RequestBody UserHaveDto userHaveDto);


    /**
     * 获取用户标签
     * @param
     * */
    @PostMapping(value = "/user/label")
    Result userLabel(@RequestBody UserLabelDto userLabelDto);


    /**
     * 获取用户消费数据
     * */
    @PostMapping(value = "/user/consume/count")
    Result userConsumeCount(@RequestBody UserConsumeDto userConsumeDto);


    /**
     * 获取用户预约数据
     * */
    @PostMapping(value = "/user/appointment/list")
    Result userAppointment(@RequestBody UserAppointmentDto userAppointmentDto);

    /**
     * 获取用户划扣记录
     * */
    @PostMapping(value = "/user/project/deduction/list")
    Result userProjectDeduction(@RequestBody UserProjectDto userProjectDto);

    /**
     * 获取会员等级变化记录
     * */
    @PostMapping(value = "/user/level/record/list")
    Result userLevelRecord(@RequestBody UserLevelDto userLevelDto);

    /**
     * 获取用户待领取增值金列表
     * */
    @PostMapping(value = "/user/wait/increment/list")
    Result userWaitIncList(@RequestBody UserWaitIncDto userWaitIncDto);

    /**
     * 获取用户颜值规划列表
     * */
    @PostMapping(value = "/user/appearance/list")
    Result userAppearanceList(@RequestBody UserDto userDto);

    /**
     * 获取用户颜值规划详情
     * */
    @PostMapping(value = "/user/appearance/info")
    Result userAppearanceInfo(@RequestParam("appearanceId") String appearanceId);

    /**
     * 获取人群包列表(可传筛选的参数:会员等级,做过的项目,会员创建时间,最后一次消费时间,最后一次到店时间)
     * */
    @PostMapping(value = "/user/package/list")
    Result userPackageList(@RequestBody UserPhisPackageDto userPhisPackageDto);

    /**根据标识集合筛选用户*/
    @PostMapping(value = "/user/idList/list")
    Result userIdSelectList(@RequestBody UserIdsDto userIdsDto);

    /**获取用户信息,短信模板专用
     * 获取根据id或者CIQ或者hisId查找用户
     * @param userDto 只使用id和CIQ
     * @return 转化使用UserDt
     */
    @PostMapping(value = "/user/sms-find")
    Result userSms(@RequestBody UserDto userDto);

    /**
     * 获取用户信息,导入人群包专用
     * 根据CIQ或者名称全匹配查找用户
     * @param userDto 只使用name和CIQ
     * @return 转化使用UserDt
     */
    @PostMapping(value = "/user/crowd/import")
    Result userCrowdImport(@RequestBody UserDto userDto);

    /**
     * 获取用户信息,导入人群包专用
     * 根据CIQ或者名称全匹配查找用户
     */
    @PostMapping(value = "/user/crowd/import/new")
    Result userCrowdImportNew(@RequestBody UserPackListDto userPackListDto);


    /**
     * 获取用户子项目
     */
    @PostMapping(value = "/user/project/items")
    Result findUserProjectItem(@RequestBody UserProjectDto userProjectDto);

    /**
     * 获取到用户详情(同步使用)
     * @param userId 用户标识
     * @return 转化使用UserDt
     */
    @PostMapping(value = "/user/info/baseInfo")
    Result userInfoBaseInfo(@RequestParam("userId") String userId);

    /**
     * 获取到用户
     */
    @PostMapping(value = "/user/sync/by/idList")
    Result userSyncList(@RequestBody List<String> hisIdList);

    /**
     *  判断用户是否是会员
     * @param userDto userId
     * @return
     */
    @PostMapping(value = "/user/check/member")
    Result checkMember(@RequestBody UserDto userDto);

    /**
     * 查询用户会员等级下一级
     * */
    @PostMapping(value = "/user/next/level")
    Result nextLevel(@RequestBody UserDto userDto);

    /**
     * 查询累计返佣
     * */
    @PostMapping(value = "/user/query/rebate")
    Result queryRebate(@RequestBody UserDto userDto);

    /**
     * 查询用户首天消费累计
     * */
    @PostMapping(value = "/user/first/day/consumption")
    Result firstDayConsumption(@RequestBody UserDto userDto);

    /**
     * 查询用户首天消费累计
     * */
    @PostMapping(value = "/user/accumulat/consumption")
    Result accumulateConsumption(@RequestBody UserDto userDto);

    /**
     * 判断用户是否为再升美学会员(是否有购买再升美学卡项订单)
     * */
    @PostMapping(value = "/user/check/upgraded/aesthetics")
    Result checkUpgradedAesthetics(@RequestBody UserDto userDto);

    /**
     * 判断用户是否为再升美学会员(是否有购买再升美学卡项订单)
     * */
    @PostMapping(value = "/user/check/consumption")
    Result checkConsumption(@RequestBody UserDto userDto);

    /**
     * 查询用户累计返佣
     * */
    @PostMapping(value = "/user/rebate/userId")
    Result queryRebateByUserId(@RequestBody UserDto userDto);

    /**
     * 查询用户累计返佣
     * */
    @PostMapping(value = "/user/query/oldNewPerformance")
    Result queryOldNewPerformance(@RequestBody UserDto userDto);


    @PostMapping(value = "/user/draw/list")
    Result drawGetUserDt(@RequestBody UserDto userDto);

    /**
     * 查询用户科室关系
     * */
    @PostMapping(value = "/user/room/list")
    Result userRoomList(@RequestBody UserDto userDto);
}