<?php
namespace Base\Factory;

class SpecialCompoentFactory {

    static $DBModel = "";
    private $user = '';

    public function __construct()
    {
        self::$DBModel = SM("CompanyStatement","tab_");


        $this->user = $_SESSION['onethink_admin']['user_auth']['username'];
    }

    /**
     * 重算特殊补点主方法
     */
    public function updateSpecialStatement($id = 0,$withdraw_type = 0) {

        if (!$id || !$withdraw_type) {
            return false;
        }

        $dbres = self::$DBModel->field("id,verify_status,verify_log,withdraw_type,company_type,company_id,statement_info")->where(['id'=>$id])->find();

        if ($dbres['withdraw_type']!=3) {
            return false;
        }

        $statement_info = json_decode($dbres['statement_info'],true);

        list($statement_info,$platform_amount,$statement_amount,$first_party_info,$second_party_info) =
            $this->caculateFunction($statement_info,$dbres['company_type'],$dbres['company_id'],$statement_info[0]['nickname']?$statement_info[0]['nickname']:'');

        $verify = ["create_user"=>$this->user,"create_time"=>date("Y-m-d H:i:s")];

        self::$DBModel
            ->where(['id'=>$id])
            ->save([
                'statement_info'=>json_encode($statement_info),
                'first_party_info'=>json_encode($first_party_info),
                'second_party_info'=>json_encode($second_party_info),
                'pay_amount'=>$platform_amount,
                'platform_amount'=>$platform_amount,
                'statement_money'=>$statement_amount,
                'verify_log'=>json_encode($verify),
                'verify_status'=>0,
                ]);

        return true;

    }

    /**
     * 重新计算数据
     * @param array $statement_info
     * @param int $company_type
     * @param int $company_id
     * @param string $nickname
     * @return array|bool
     */
    private function caculateFunction($statement_info = [],$company_type=0,$company_id = 0,$nickname = '') {

        if (!$statement_info||!$company_id) {
            return false;
        }

        //工厂模式调用特殊补点重算详细方法
        $baseClass = BaseFactory::getInstance();
        $caculateClass = $baseClass->factoryClass("SpecialCompoentCaculate");

        //订单详细信息重算
        list($statement_info,$platform_amount,$statement_amount) = $caculateClass->caculateStatementInfo($statement_info,$company_type,$company_id);

        //公司信息重新录入
        list($first_party_info,$second_party_info) = $caculateClass->updateCompanyInfo($company_id,$nickname);

        return [$statement_info,$platform_amount,$statement_amount,$first_party_info,$second_party_info];

    }



}