SaveController.class.php 2.23 KB
<?php
/**
 * Created by IntelliJ IDEA.
 * 保存计算等级规则设置
 * Date: 17/5/24
 * Time: 下午2:19
 */
namespace Apicp\Controller\Level;

use Com\PackageValidate;
use Common\Common\Integral;
use VcySDK\Exception;

class SaveController extends AbstractController
{
    public function Index_post()
    {
        // 获取并验证提交数据
        $validate = new PackageValidate([
            'eilType' => 'requireWithNone:eilId',
            'eilObjId' => 'requireWithNone:eilId',
        ], [
            'eilType.requireWithNone' => L('_ERR_PARAM_CAN_NOT_BE_EMPTY', ['name' => '积分等级计算类型']),
            'eilObjId.requireWithNone' => L('_ERR_PARAM_CAN_NOT_BE_EMPTY', ['name' => '岗位或角色ID']),
        ], [
            'eilId', 'eilType', 'eilObjId', 'eilLevelSetting'
        ]);

        $integralUtil = new Integral();
        // 获取默认计算等级数据
        if (empty($validate->postData['eilLevelSetting'])) {
            $defaultLevel = $integralUtil->getDefaultLevel();
            $validate->postData['eilLevelSetting'] = $defaultLevel['levels'];
        }

        // 验证等级规则合法性
        $this->verificationLevel($validate->postData['eilLevelSetting']);
        // 保存
        settype($validate->postData['eilObjId'], 'array');
        foreach ($validate->postData['eilObjId'] as $eilObjId) {
            $this->levelSave(
                $integralUtil,
                $validate->postData['eilId'],
                $validate->postData['eilType'],
                $eilObjId,
                $validate->postData['eilLevelSetting']);
        }

        return true;
    }

    /**
     * 保存积分等级规则
     * @param $integralUtil
     * @param $eilId
     * @param $eilType
     * @param $eilObjId
     * @param $eilLevelSetting
     */
    private function levelSave($integralUtil, $eilId, $eilType, $eilObjId, $eilLevelSetting)
    {
        try {
            $integralUtil->levelSave($eilId, $eilType, $eilObjId, $eilLevelSetting);
        } catch (Exception $e) {
            // 当抛错不是 已经有重复等级规则 时才抛错
            if (!in_array($e->getSdkCode(), ['EXIST_ROLE_LEVEL', 'EXIST_JOB_LEVEL'])) {
                E($e->getMessage());
            }
        }
    }
}