package com.bjtdba.pension.service.impl;

import com.bjtdba.pension.dao.StoreProductDao;
import com.bjtdba.pension.dao.SystemConfigValueDao;
import com.bjtdba.pension.entity.StoreProduct;
import com.bjtdba.pension.entity.StoreProductAttrValue;
import com.bjtdba.pension.service.PensionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

@Service
public class PensionServiceImpl implements PensionService {

    /**
     * 商品表
     */
    @Autowired
    private StoreProductDao storeProductDao;
    /**
     * 配置信息
     */
    @Autowired
    private SystemConfigValueDao systemConfigValueDao;
    /**
     *   养老金    1、查询商品返利类型（1、自定义0、系统）。
     *                商户单独设置商品返利比例养老金计算公式：
     *               【商品价格-商品的价格*手续费（extension_one表 查询config_key = online_yanglao）】*返利比例（商户单独设置商品返利比例）*yanglaojin_admin（rrx_system_config_value表）
     *            2、系统返利分为两种：（1、商户设置的默认返利，2、储蓄保平台设置的返利）
     *            3、查询rrx_system_config_value表，查看商户设置的返利比例是否为0。（查询config_key=base_commission and mer_id = 商户ID）
     *               计算养老金公式：【商品价格-商品的价格*手续费（rrx_system_config_value表 查询config_key = online_yanglao）】*返利比例（商户默认比例）*yanglaojin_admin（rrx_system_config_value表）
     *            4、储蓄保平台默认养老金比例：
     *               【商品价格-商品的价格*手续费（rrx_system_config_value表 查询config_key = online_yanglao）】*返利比例（储蓄保平台默认比例）*yanglaojin_admin（rrx_system_config_value表）
     *
     */
    public BigDecimal pension(StoreProductAttrValue storeProductAttrValue){
        /**
         * 三种返利方式的手续费和养老金比例都是相等  商品价格
         */
        int a = 1000;
        BigDecimal price = storeProductAttrValue.getPrice();//商品价格
        BigDecimal shouxufei = new BigDecimal(systemConfigValueDao.selectConfigValueByKey("online_yanglao")).divide(new BigDecimal(100));//手续费
        BigDecimal yanglaojibili = new BigDecimal(systemConfigValueDao.selectConfigValueByKey("yanglaojin_admin")).divide(new BigDecimal(100));//养老金比例
        BigDecimal fanlibili = null;

        //查询商品查看该商品属于那种返利方式（1、自定义0、系统） extension_type   研究养老相关的数据是否可以独立出来一张表
        StoreProduct StoreProduct = storeProductDao.selectByProductId(storeProductAttrValue.getProduct_id());
        if(StoreProduct.getExtension_type() == 1){
            /**
             * 查询商品表查看商户设置的商品返利比例   如果值为0这走默认返利比例，反之走商品自己的返利比例
             */
            if(storeProductAttrValue.getExtension_one().compareTo(BigDecimal.ZERO)==0){
                //true  == 0
                //BigDecimal yanglaojin = acquiesceIn(storeProductAttrValue);//去搜索两个默认的返利模式    商户默认   平台默认
                //查询那种返利比例  有  商家默认and平台默认
                fanlibili = acquiesceIn(StoreProduct.getMer_id()).divide(new BigDecimal(100));
            }else{
                /**
                 * 商户单独设置商品返利比例养老金计算公式：
                 * 商品价格-商品的价格*手续费（查询config_key = online_yanglao）】*返利比例（商户单独设置商品返利比例   是在商品表中）*yanglaojin_admin（rrx_system_config_value表）
                 */
                fanlibili = storeProductAttrValue.getExtension_one().divide(new BigDecimal(100));//商品返利比例

            }
        }else if(StoreProduct.getExtension_type() == 0){
            //BigDecimal yanglaojin = acquiesceIn(storeProductAttrValue);
            //查询那种返利比例  有  商家默认and平台默认
            fanlibili = acquiesceIn(StoreProduct.getMer_id()).divide(new BigDecimal(100));
        }
        BigDecimal a1 = price.multiply(shouxufei);
        BigDecimal a2 = (price.subtract(price.multiply(shouxufei)));
        BigDecimal a3 = (price.subtract(price.multiply(shouxufei))).multiply(fanlibili);

        BigDecimal yanglaojing = (price.subtract(price.multiply(shouxufei))).multiply(fanlibili).multiply(yanglaojibili);//商品养老金
        return yanglaojing;
    }
    /**
     * 商户默认系统默认养老金算法
     */
    private BigDecimal acquiesceIn(Integer mer_id){
        /**
         * 查询rrx_system_config_value表，查看商户设置的返利比例是否为0。（查询config_key=base_commission and mer_id = 商户ID）   判断商户的返利比例
         *   计算养老金公式：【商品价格-商品的价格*手续费（rrx_system_config_value表 查询config_key = online_yanglao）】*返利比例（商户默认比例）*yanglaojin_admin（rrx_system_config_value表）
         */
        String configValue = "";
        /**
         * 查询商户是否有自己设置返利比例，1、如果设置走商户默认的返利比例，2、反之就要走储蓄宝平台默认的返利比例
         */
        configValue = systemConfigValueDao.selectConfigValueByKeyAndMerId("base_commission",mer_id);//商户默认返利比例
        if(configValue.equals("0")){
            /**
             * 4、储蓄保平台默认养老金比例：
             */
            configValue = systemConfigValueDao.selectConfigValueByKey("extension_one_rate");//储蓄宝平台默认返利比例
        }
        configValue = configValue.replace("\"","");
        BigDecimal fanlibili = new BigDecimal(configValue);//返利比例

        return fanlibili;
    }
}
