'天', /* 2 => '周',*/ 3 => '月'/*, 4 => '年'*/ ]; public static $graduatedSchool = [6 => '大专',1 => '统招本科', 2 => '重点院校', 3 => '双一流', 4 => '211', 5 => '985']; public static $experience = [1 => '在校干部', 2 => '实习经验']; public static $levelList = ['基础配置']; public static $amountUnit = [1 => '个', 2 => '份' , 3 => '次']; public static $unit = [1 => '个', 2 => '份' , 3 => '次', 4 => '天']; public static $calculateMethod = [1 => '天', 2 => '个']; public static $monthData = [30 => '一个月', 90 => '三个月', 180 => '六个月' , 365 => '一年']; public static $dayData = [10 => '10天', 30 => '30天', 50 => '50天' , 100 => '100天']; public static $numData = [10 => '10次', 30 => '30次', 50 => '50次' , 100 => '100次']; public static $copyData = [10 => '10份', 30 => '30份', 50 => '50份' , 100 => '100份']; public static function dump($data,$is_die = true) { echo "
";
        var_dump($data);
        if ($is_die) die;
    }

    public static function getRightsBagAll () {
        return pdo_getall(PDO_NAME . 'rights_bag',['status' => 1]);
    }

    public static function getRightsList() {
        return pdo_getall(self::$tableName,['status' => 1]);
    }

    /**
     * 权益合并显示列表
     * @return array
     */
    public static function getRightsMergeList()
    {
        $list = [];

        $res = self::getRightsList();

        foreach ($res as $row) {

            $base_rights = '';
            $vip_rights = '';
            $specRes = pdo_getall(PDO_NAME . 'rights_spec',['rightsid' => $row['id']]);
            foreach ($specRes as $specRow) {
                if ($specRow['rights_bagid'] == 1) {
                    $base_rights = self::getSpecInfo($specRow,$row['rights_type']);
                } elseif ($specRow['rights_bagid'] == 2) {
                    $vip_rights = self::getSpecInfo($specRow,$row['rights_type']);
                }
            }
            $list[] = [
                'rights_type' => $row['rights_type'],
                'base_rights' => $base_rights,
                'vip_rights'  => $vip_rights
            ];
        }

        return $list;
    }

    /**
     * 获取规格信息
     * @param $item         // 权益规格数据
     * @param $rights_type  // 权益类型
     * @return string
     */
    protected static function getSpecInfo($item,$rights_type) {
        $rights_str = '';

        if ($item['amount'] > 0) {
            $rights_str .= $item['amount'] . self::$amountUnit[$item['amount_unit']];
        }
        if ($item['date_amount'] > 0) {
            if (!empty($rights_str)) $rights_str .= '/';
            $rights_str .= $item['date_amount'] . self::$dateUnit[$item['date_unit']];
        }

        if ($rights_type == '精准人才卡' && !empty($rights_str) && $item['date_amount'] <= 0) {
            $rights_str .= '/简历';
        }
        return $rights_str;
    }

    /**
     * 获取用户权益使用信息
     * @param $mid
     * @return array
     */
    public static function getMemberRightsUsageInfo($mid) {

        $diyData = [];

        $rightsRes = self::getRightsList();

        foreach ($rightsRes as $rightsRow) {

            $memberRightsWhere = ['mid' => $mid,'status' => 1,'rightsid' => $rightsRow['id']];
            $memberRights = pdo_get(PDO_NAME .'member_rights',$memberRightsWhere);
            $use_amount = $memberRights['use_amount'] ?: 0;
            $diyData[] = [
                'name' => $rightsRow['rights_type'],
                'total_amount' => $memberRights['total_amount'] ?: 0,
                'use_amount' => self::getUseAmount($rightsRow['id'],$memberRights['id'],$use_amount,$memberRights['total_amount']),
                'unit' => self::$calculateMethod[$rightsRow['calculate_method']],
                'rights_id' => $rightsRow['id']
            ];
        }

        # 特殊标题
        $arr = ['猎头服务', '视频号直播', '企业视频制作'];
        foreach ($arr as $name) {
            $diyData[] = [
                'name' => $name,
                'total_amount' => '',
                'use_amount' => '',
                'unit'  => '',
                'rights_id' => ''
            ];
        }

        return $diyData;
    }

    /**
     * 获取剩余数量
     * @param $rightsid         // 权益ID
     * @param $member_rightsid  // 用户权益ID
     * @param $use_amount       // 使用权益数量
     * @param $total_amount     // 总权益数量
     * @return int|mixed
     */
    public static function getUseAmount($rightsid,$member_rightsid,$use_amount,$total_amount) {
        if (!in_array($rightsid,[2,5])) return $total_amount - $use_amount;  // 置顶权益和精准人才卡特殊处理
        $useTotalAmount = 0;
        $rightsUse = pdo_getall(PDO_NAME . 'member_rights_use',['member_rightsid' => $member_rightsid],['use_total_amount']);
        foreach ($rightsUse as $rightsUseValue) {
            $useTotalAmount += $rightsUseValue['use_total_amount'];
        }
        return $total_amount - $useTotalAmount;
    }

    /**
     * 获取企业招聘岗位信息
     * @param $mid
     * @return array
     */
    public static function getStoreRecruitInfo($mid) {
        $data = [];

        $storeIdArr = [];
        $storeUser = pdo_getall(PDO_NAME . 'merchantuser',['mid' => $mid],['storeid']);
        foreach ($storeUser as $storeUserRow) {
            $storeIdArr[] = $storeUserRow['storeid'];
        }

        $recruit = pdo_getall(PDO_NAME . 'recruit_recruit',['release_sid' => $storeIdArr, 'status' => 4],['id','release_sid','title']);
        foreach ($recruit as $recruit_row) {
            $data[] = [
                'recruit_id' => $recruit_row['id'],
                'recruit_title' => $recruit_row['title']
            ];
        }
        return $data;
    }

    /**
     * 权益支付成功 生成用户权益
     * @param $mid
     * @param $orderid      // 订单id
     * @param $orderData    // 订单数据
     * @return void
     */
    public static function rightsPaySuccess($mid,$orderid, $orderData = array()) {
        global $_W;

        if (empty($orderData)) {
            $orderData = pdo_get(PDO_NAME . 'order',['id' => $orderid,'plugin' => 'rights']);
        }

        if ($orderData) {

            $rightsid = $orderData['fkid'];     // 权益id 或是 权益包id
            $payfor = $orderData['payfor'];     // rights-权益 rightsBag-权益包
            $num = $orderData['num'];           // 购买数量

            switch ($payfor) {
                case 'rights':

                    self::createMemberRights($_W['uniacid'],$rightsid,$mid,$num);
                    break;
                case 'rightsBag':

                    $rightsSpec = pdo_getall(PDO_NAME . 'rights_spec',['rights_bagid' => $rightsid]);
                    foreach ($rightsSpec as $row) {
                        if ($row['calculate_method'] == 1) {
                            $num = $row['date_amount'];
                        } elseif ($row['calculate_method'] == 2) {
                            $num = $row['amount'];
                        }
                        self::createMemberRights($_W['uniacid'],$row['rightsid'],$mid,$num,$rightsid);
                    }
                break;
            }
        }
    }

    /**
     * 初始商家创建基础权益
     * @param $mid
     * @param $uniacid
     * @return string|void
     */
    public static function createBaseRights($mid,$uniacid) {
        $queryExists = pdo_get(PDO_NAME . 'member_rights',['mid' => $mid]);
        if ($queryExists) return '';
        $rightsBag = pdo_getall(PDO_NAME . 'rights_spec',['rights_bagid' => 1]);
        foreach ($rightsBag as $value) {
            if ($value['rightsid'] == 3) continue;
            if ($value['amount'] > 0) {
                self::createMemberRights($uniacid,$value['rightsid'],$mid,$value['amount'],1);
            }
        }
    }

    /**
     * 创建|修改 用户权益
     * @param $uniacid
     * @param $rightsid
     * @param $mid
     * @param $num
     * @param $rights_bagid
     * @return void
     */
    protected static function createMemberRights($uniacid,$rightsid,$mid,$num,$rights_bagid = 0) {
        $memberRightsWhere = ['rightsid' => $rightsid,'mid' => $mid,'status' => 1];
        $memberRights = pdo_get(PDO_NAME . 'member_rights',$memberRightsWhere,['id','total_amount']);
        $member_rightsid = $memberRights['id'];
        if ($memberRights) {
            $updateData = ['total_amount' => $memberRights['total_amount'] + $num];
            pdo_update(PDO_NAME . 'member_rights',$updateData,['id' => $member_rightsid]);
        } else {
            $insertData = [
                'uniacid'       => $uniacid,
                'rightsid'      => $rightsid,
                'rights_bagid'  => $rights_bagid,
                'mid'           => $mid,
                'total_amount'  => $num,
                'create_time'   => time(),
            ];
            pdo_insert(PDO_NAME . 'member_rights',$insertData);
            $member_rightsid = pdo_insertid();
        }
        if (in_array($rightsid,[1,3,4])) {
            $relation_type = pdo_getcolumn(self::$tableName,['id' => $rightsid],'relation_type');
            self::saveMemberRightsUse($rightsid,$member_rightsid,$num,0,$relation_type);
        }
    }

    /**
     * 获取权益商品名称
     * @param $fkid
     * @param $payfor
     * @return mixed|string
     */
    public static function getRightsGoodname($fkid,$payfor)
    {
        if (empty($fkid)) return '';
        if (empty($payfor) || !in_array($payfor,['rights','rightsBag'])) return '';

        if ($payfor == 'rights') {
            $rights = pdo_get(self::$tableName,['id' => $fkid],['rights_type']);
            return $rights['rights_type'];
        } elseif ($payfor == 'rightsBag') {
            $rightsBag = pdo_get(PDO_NAME . 'rights_bag',['id' => $fkid],['title']);
            return $rightsBag['title'];
        }
        return '';
    }

    /**
     * 创建|追加 用户使用权益记录
     * @param $rightsid             // 权益id
     * @param $member_rightsid      // 用户权益id
     * @param $num                  // 使用数量
     * @param $relation_id          // 关联id
     * @param $relation_type        // 关联类型 ad_exposure=广告曝光 recruit_top=招聘置顶 chat=畅聊 recruit_bout=招聘次数 recruit_resume=精准人才
     * @param $data
     * @return array|bool[]
     */
    public static function saveMemberRightsUse($rightsid,$member_rightsid,$num,$relation_id,$relation_type = 'recruit_top',$data = []) {
        global $_W;

        $rightsUseWhere = [
            'rightsid' => $rightsid,
            'member_rightsid' => $member_rightsid,
            'status' => [0,1],
            'relation_id' => $relation_id,
            'relation_type' => $relation_type
        ];
        $rightsUse = pdo_get(PDO_NAME . 'member_rights_use',$rightsUseWhere);

        if ($rightsUse) {

            $updateArr = ['use_total_amount' => $rightsUse['use_total_amount'] + $num];
            $updateRes = pdo_update(PDO_NAME . 'member_rights_use',$updateArr,['id' => $rightsUse['id']]);
            if (!$updateRes) return ['status' => false,'msg' => '使用失败'];
        } else {

            $insertArr = [
                'uniacid'           => $_W['uniacid'],
                'member_rightsid'   => $member_rightsid,
                'rightsid'          => $rightsid,
                'relation_type'     => $relation_type,
                'relation_id'       => $relation_id,
                'use_total_amount'  => $num,
                'filter'            => serialize($data),
                'create_time'       => time()
            ];

            $insertRes = pdo_insert(PDO_NAME . 'member_rights_use',$insertArr);
            if (!$insertRes) return ['status' => false,'msg' => '使用失败'];
        }

        return ['status' => true];
    }

    /**
     * 获取用户权益
     * @param $mid
     * @param $rightsid
     * @return false|mixed
     */
    public static function getMemberRights($mid,$rightsid) {
        $memberRightsSql = 'select * from ims_' . PDO_NAME . "member_rights where `mid` = '{$mid}' "
            ." and `rightsid` = '{$rightsid}' order by id desc limit 1";
        return pdo_fetch($memberRightsSql);
    }

    /**
     * 使用权益
     * @param $rightsid
     * @param $mid
     * @param $relation_id
     * @param $relation_type
     * @param $amount
     * @return array|bool[]|void
     */
    public static function useMemberRights($rightsid,$mid,$relation_id = 0,$relation_type = 'recruit_bout',$amount = 1) {

        // 只限制商家,企业身份的用户
        $member = pdo_get(PDO_NAME . 'member',['id' => $mid],['identity_id']);
        if (!in_array($member['identity_id'],[4,5])) return ['status' => true];

        $rights = pdo_get(self::$tableName,['id' => $rightsid],['rights_type']);

        $isBuyStr = self::isBuyRights($mid,$rightsid);
        $memberRights = self::getMemberRights($mid,$rightsid);
        $rights_type = $rights['rights_type'];
        if (strpos($rights_type,'权益') === false) $rights_type .= '权益';
        if (!$memberRights) return ['status' => false, 'msg' => "您未开通: {$rights_type},请前往购买后使用"];
        if ($memberRights['status'] == 0) return ['status' => false, 'msg' => $isBuyStr."{$rights_type}已用完,请前往购买后使用"];
        if ($memberRights['use_amount'] >= $memberRights['total_amount']) return ['status' => false, 'msg' => $isBuyStr."{$rights_type}已用完,请前往购买后使用"];
        $member_rightsid = $memberRights['id'];

        $rightsUseWhere = [
            'rightsid' => $rightsid,
            'member_rightsid' => $member_rightsid,
            'relation_id' => $relation_id,
            'relation_type' => $relation_type,
            'status' => [0,1]
        ];
        $rightsUse = pdo_get(PDO_NAME . 'member_rights_use',$rightsUseWhere);
        $rights_useid = $rightsUse['id'];
        if (!$rightsUse) return ['status' => false, 'msg' => "{$rights_type},购买的使用次数已全部使用"];
        if ($rightsUse['use_amount'] >= $rightsUse['use_total_amount']) return ['status' => false, 'msg' => "{$rights_type},购买的使用次数已全部使用"];

        $use_amount = $rightsUse['use_amount'] + $amount;
        if ($use_amount > $rightsUse['use_total_amount']) return ['status' => false, 'msg' => "{$rights_type},使用超出设定使用次数"];

        // 扣减次数(子)
        $updateData = ['use_amount' => $use_amount];
        if ($rightsUse['status'] == 0) {
            $updateData['status'] = 1;
            $updateData['start_time'] = time();
        }
        $updateRes = pdo_update(PDO_NAME . 'member_rights_use',$updateData,['id' => $rights_useid]);
        if (!$updateRes) return ['status' => false, 'msg' => "系统错误"];

        $memberRightsUpData = ['use_amount' => $memberRights['use_amount'] + $amount];
        $updateRes = pdo_update(PDO_NAME . 'member_rights',$memberRightsUpData,['id' => $member_rightsid]);
        if (!$updateRes) return ['status' => false, 'msg' => "系统错误"];

        // 同步判断是否完结
        self::syncMemberRightsStatus($member_rightsid,$rights_useid);

        return ['status' => true];
    }

    /**
     * 判断用户是否购买过该权益
     * @param $mid
     * @param $rightsid
     * @return string
     * @author whj
     * @date 2023-08-14 15:22
     */
    protected static function isBuyRights($mid,$rightsid)
    {
        # 是否购买过权益包
        $orderWhere1 = ['mid' => $mid, 'fkid' => 2,'payfor' => 'rightsBag','plugin' => 'rights','status' => 3];
        $order1 = pdo_get(PDO_NAME . 'order',$orderWhere1);
        if ($order1) return '购买的';
        # 是否有单独购买过
        $orderWhere2 = ['mid' => $mid, 'fkid' => $rightsid,'payfor' => 'rights','plugin' => 'rights','status' => 3];
        $order2 = pdo_get(PDO_NAME . 'order',$orderWhere2);
        return $order2 ? '购买的' : '免费的';
    }

    /**
     * 同步修改用户权益状态,判断权益是否全部完成
     * @param $member_rightsid
     * @param $rights_useid
     * @return void
     */
    protected static function syncMemberRightsStatus($member_rightsid,$rights_useid)
    {
        $rightsUse = pdo_get(PDO_NAME . 'member_rights_use',['id' => $rights_useid]);
        // 判断用户权益是否使用完(子)
        if ($rightsUse['use_amount'] >= $rightsUse['use_total_amount']) {
            // 使用完自动完结
            $rightsUseData = ['status' => 2, 'end_time' => time()];
            // 判断用户全部权益是否使用完
            $rightsUseUpRes = pdo_update(PDO_NAME . 'member_rights_use',$rightsUseData,['id' => $rights_useid]);
            if ($rightsUseUpRes) {
                self::syncCancelTop($rightsUse['rightsid'],$rightsUse['relation_id']);
                $memberRights = pdo_get(PDO_NAME . 'member_rights',['id' => $member_rightsid]);
                if (
                    $memberRights['use_amount'] >= $memberRights['total_amount']
                    || $rightsUse['use_amount'] >= $memberRights['total_amount']
                ) {
                    // 完结用户总权益(父)
                    $memberRightsData = ['status' => 0];
                    if ($rightsUse['use_amount'] >= $memberRights['total_amount']) {
                        $memberRightsData['use_amount'] = $rightsUse['use_amount'];
                    }
                    pdo_update(PDO_NAME . 'member_rights',$memberRightsData,['id' => $member_rightsid]);
                }
            }
        }
    }

    /**
     * 招聘取消置顶
     * @param $rightsid     // 权益id
     * @param $recruit_id   // 招聘信息id
     * @return void
     */
    protected static function syncCancelTop($rightsid,$recruit_id) {
        if ($rightsid == 2 && !empty($recruit_id)) {
            pdo_update(PDO_NAME . 'recruit_recruit',['is_top' => 0],['id' => $recruit_id]);
        }
    }

    /**
     * 判断招聘是否可以置顶 rightsid = 2
     * @param $recruit_id
     * @param $member_rightsid
     * @param $memberRights
     * @param $num
     * @return int  0-未置顶不扣减 1-置顶扣减 2-置顶先不扣减
     */
    public static function recruitIsTop($recruit_id,$member_rightsid,$memberRights = array(),$num = 1)
    {
        // 判断招聘信息是否置顶
        $recruit = pdo_get(PDO_NAME . 'recruit_recruit',['id' => $recruit_id]);
        if ($recruit['is_top'] == 1) return 1;
        // 根据配置获取置顶个数
        if (empty($memberRights)) $memberRights = pdo_get(PDO_NAME .'member_rights',['id' => $member_rightsid]);
        $rightsSpec = pdo_get(PDO_NAME . 'rights_spec',['rightsid' => $memberRights['rightsid'], 'rights_bagid' => $memberRights['rights_bagid']]);
        if ($rightsSpec) {
            $amount = 5;
            $count = pdo_count(PDO_NAME . 'member_rights_use',['member_rightsid' => $member_rightsid,'status' => 1]);
            if ($count >= $amount) return 0;
        }
        // 判断招聘信息置顶条数已满
        $topRecruit = pdo_getall(PDO_NAME . 'recruit_recruit',['cc_id' => $recruit['cc_id'],'is_top' => 1]);
        $topCount = count($topRecruit);
        if ($topCount >= 5) return 0;
        // 修改招聘信息置顶
        $top_end_time = strtotime(date("Y-m-d 00:00:00",strtotime("+{$num} day")));
        $updateRes = pdo_update(PDO_NAME . 'recruit_recruit',['is_top' => 1,'top_end_time' => $top_end_time],['id' => $recruit_id]);
        if (!$updateRes) return 0;
        return 2;
    }

    /**
     * 判断是否有畅聊权益 rightsid = 3
     * @param $mid
     * @return array|bool[]
     */
    public static function memberIsChat($mid)
    {
        $rightsid = 3;

        // 只限制商家,企业身份的用户
        $identity_id = pdo_getcolumn(PDO_NAME . 'member',['id' => $mid],'identity_id');
        if (!in_array($identity_id,[4,5])) return ['status' => true];

        $rights = pdo_get(self::$tableName,['id' => $rightsid],['rights_type']);
        $isBuyStr = self::isBuyRights($mid,$rightsid);
        $memberRights = self::getMemberRights($mid,$rightsid);
        $rights_type = $rights['rights_type'];
        if (!$memberRights) return ['status' => false, 'msg' => "您未开通: {$rights_type},请前往购买后使用"];
        if ($memberRights['status'] == 0) return ['status' => false, 'msg' => $isBuyStr."{$rights_type}已用完,请前往购买后使用"];

        return ['status' => true];
    }

    /**
     * Comment: 招聘信息支付回调处理
     * Date: 2021/1/8 17:04
     * @param $params
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public static function payRightsOrderNotify($params) {
        global $_W;
        //写入异步日志记录
        Util::wl_log('rights_notify', PATH_DATA . "rights/data/", $params);
        $order = pdo_get(PDO_NAME."order",['orderno' => $params['tid']],['plugin','id','fkid','fightstatus','num','payfor','mid']);
        //更新订单
        $data = array('status' => $params['result'] == 'success' ? 3 : 0);
        $data['paytype'] = $params['type'];
        if ($params['tag']['transaction_id']) $data['transid'] = $params['tag']['transaction_id'];
        $data['paytime'] = TIMESTAMP;
        $result = pdo_update(PDO_NAME . 'order', $data, array('id' => $order['id']));
        if ($result) {
            Rights::rightsPaySuccess($order['mid'],$order['id'],$order);
        }
    }

    /**
     * 免费畅聊卡人数限制
     * @param $mid          // 用户ID
     * @param $send_type    // 发送方类型(1=用户;2=商户)
     * @return bool
     */
    public static function freeChatRights($mid,$send_type)
    {
        $identity_id = pdo_getcolumn(PDO_NAME .'member',['id' => $mid],'identity_id');
        if (!in_array($identity_id,[4,5])) return true;
        if ($send_type != 2) return true;

        $amount = pdo_getcolumn(PDO_NAME . 'rights_spec',['rightsid' => 3,'rights_bagid' => 1],'amount');
        if ($amount <= 0) return false;

        $storeid = pdo_getcolumn(PDO_NAME.'merchantuser',['mid' => $mid],'storeid');
        if (!$storeid) return false;

        $start_times = strtotime('today');

        $imWhere = " send_id = {$storeid} AND send_type = {$send_type} AND create_time >= {$start_times} ";
        $imCountRes = pdo_fetch("select COUNT(DISTINCT receive_id) AS num FROM ims_".PDO_NAME."im where {$imWhere}");
        $imCount = $imCountRes['num'];

        return $imCount < $amount ? true : false;
    }

    /**
     * 获取精准推送的简历
     * @param $recruit_id
     * @return array
     */
    public static function getRightsRecruitResume($recruit_id) {
        $resume_id = [];
        $rightsUseWhere = ['rightsid' => 5,'relation_id' => $recruit_id];
        $rightsUse = pdo_getall(PDO_NAME . 'member_rights_use',$rightsUseWhere);
        foreach ($rightsUse as $value) {
            $filter = unserialize($value['filter']);
            if (isset($filter['resume_id'])) {
                $resume_id = array_merge($resume_id,$filter['resume_id']);
            }
        }
        return array_unique($resume_id);
    }

    /**
     * 获取权益名称
     * @param $rightsfor
     * @param $rightsid
     * @return array
     */
    public static function getRightsInfo($rightsfor,$rightsid)
    {
        if ($rightsfor == 'rights') {
            $rights = pdo_get(PDO_NAME . 'rights',['id' => $rightsid]);
            $goodsname = $rights['rights_type'];
            $goodsprice = $rights['price'];
        } else {
            $rightsBag = pdo_get(PDO_NAME . 'rights_bag',['id' => $rightsid]);
            $goodsname = $rightsBag['title'];
            $goodsprice = $rightsBag['price'];
        }
        return [
            'name' => $goodsname,
            'price' => $goodsprice,
        ];
    }
}