<?php

//
// Stone大叔💯 
// ============================================================================
// ----------------------------------------------------------------------------
// <><><><><><><><><><><><><>有妹子加微信不哦！~<><><><><><><><><><><><><><><><>
// ----------------------------------------------------------------------------
// ============================================================================
// $Author: Stone大叔💯 $
// $Z Stone大叔💯 $
//

class Service_Exception extends Common_Service {
    /**
     * @var null
     */
    public static $_modelClass = null;

    /**
     * @return Table_Customer|null
     */
    public static function getModelInstance(){
        if (is_null(self::$_modelClass)){
            self::$_modelClass = new Table_Exception();
        }
        return self::$_modelClass;
    }

    /**
     * @param $row
     * @return mixed
     */
    public static function add($row)
    {
        $model = self::getModelInstance();
        return $model->add($row);
    }

    /**
     * @param $row
     * @param $value
     * @param string $field
     * @return mixed
     */
    public static function update($row, $value, $field = "e_id")
    {
        $model = self::getModelInstance();
        return $model->update($row, $value, $field);
    }

    /**
     * @param $value
     * @param string $field
     * @return mixed
     */
    public static function delete($value, $field = "e_id")
    {
        $model = self::getModelInstance();
        return $model->delete($value, $field);
    }

    /**
     * @param $value
     * @param string $field
     * @param string $colums
     * @return mixed
     */
    public static function getByField($value, $field = 'e_id', $colums = "*")
    {
        $model = self::getModelInstance();
        return $model->getByField($value, $field, $colums);
    }

    public function getAllByEid($e_id) {
        $model = self::getModelInstance();
        return $model->getAllByEid($e_id);
    }
    /**
     * @return mixed
     */
    public static function getAll()
    {
        $model = self::getModelInstance();
        return $model->getAll();
    }

    /**
     * @param array $condition
     * @param string $type
     * @param int $pageSize
     * @param int $page
     * @param string $order
     * @return mixed
     */
    public static function getByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = "")
    {
        $model = self::getModelInstance();
        return $model->getByCondition($condition, $type, $pageSize, $page, $order);
    }
    
    /**
     * @param array $condition
     * @param string $type
     * @param int $pageSize
     * @param int $page
     * @param string $order
     * @return mixed
     */
    public static function getAllByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = "")
    {
        $model = self::getModelInstance();
        return $model->getAllByCondition($condition, $type, $pageSize, $page, $order);
    }
    /**
     * 
     * @param type $etCode
     * @param string $e_refer_no  参考号
     */
    public function addExceptionByCode($etCode , $e_refer_no , $explain = '' , $repeat = false , $title='') {
        //重复发送
        if($repeat === true){
            $count  =   Service_Exception::getByCondition(array(
                'et_code'=>$etCode,
                'e_refer_no'    =>  $e_refer_no ,
                'array_e_status'    =>  array(
                    0,1
                )
            ),'count(*)');
            
            if($count > 0){
                return false;
            }
        }
        $exceptionType  =   Service_ExceptionType::getjoinUserPositionByField($etCode,'et_code');
        if($exceptionType && $exceptionType['et_status'] == 1){
            $row = array(
                'et_code' => $etCode,
                'e_refer_no'    =>  $e_refer_no,
                'e_title'       =>  ($title == '') ? "{$exceptionType['et_name']}【模型：{$exceptionType['et_model']} 参考号：{$e_refer_no}】": $title,
//                'e_explain'     =>  ($explain == '') ? "{$exceptionType['et_name']}<br />模型：{$exceptionType['et_model']} <br />说明: {$exceptionType['et_msg']} <br />参考号：{$e_refer_no}" : $explain 
            );
            if(!is_array($explain)){
                $row['e_explain']   =   ($explain == '') ? "{$exceptionType['et_name']}<br />模型：{$exceptionType['et_model']} <br />说明: {$exceptionType['et_msg']} <br />参考号：{$e_refer_no}" : $explain ;
            }
            $e_id   =   self::add($row);     
            
            if(is_array($explain) && !empty($explain)){
                foreach($explain AS $value){
                    $value =   serialize($value);
                    $row = ['e_id'=>$e_id , 'refer_no'=>$value];
                    Service_ExceptionDetail::add($row);
                }
            }
            #通知处理用户
            $users  =   array();
            if($exceptionType['user_id'] == 0){
                $users =   Service_User::getByCondition(array(
                    'up_id'=>$exceptionType['up_id'],
                    'user_status'   =>  1
                    ),array('user_id'));
            }else{
                $user  = Service_User::getByField($exceptionType['user_id']);
                if($user['user_status'] == 1){
                    $users[]    =   $user;
                }
            }
            if(count($users) > 0){
                foreach ($users as  $value) {
                    Service_ExceptionUser::add(array(
                        'e_id'  =>  $e_id,
                        'user_id'   =>  $value['user_id']
                    ));
                }
            }
            #写入日志
            Service_ExceptionLog::add(array(
                'e_id'      =>    $e_id,
                'el_msg'    =>      "更增{$exceptionType['et_name']}异常" 
            ));
        }else{#异常类型不存在，或者异常没有开启
            
        }
    }
}
