【第二更】WEB系统版本及自动更新管理系统

昨天写到的登录功能,大家可以使用postman测试下

 

接下来我们开始写业务模块了,更新包管理与客户端管理都是属于单表操作,所以只要做个GRUD功能即可。以更新包管理为例;

首先我们还是在控制器目录下创建一个更新包管理的控制器 Upgradepackage.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Upgradepackage extends BaseController {

    private $upgradepackage_path = '';

    public function __construct()
    {
        parent::__construct();

        $this->upgradepackage_path = APPPATH.'../upgradepackages/';

        $this->load->model('M_upgradepackage',"m_upgradepackage");       // 加载模型
    }

    public function pagelist()
    {
        $result = $this->m_upgradepackage->getPage($this->_pdata);
        IResponse::responseJson($result, 'success');
    }

    public function detail()
    {
        list($result, $data) = $this->m_upgradepackage->detail($this->_pdata);
        if($result == 'success') {
            IResponse::responseJson($data, 'success');
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }

    public function update()
    {
        $this->_pdata['package_path'] = $this->upgradepackage_path;
        list($result, $dataid) = $this->m_upgradepackage->update($this->_pdata);
        if($result == 'success') {
            IResponse::responseJson([], 'success', 'info', $this->lang->line('update_success'));
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }

    public function delete()
    {
        list($result, $dataid) = $this->m_upgradepackage->delete($this->_pdata);
        if($result == 'success') {
            IResponse::responseJson([], 'success', 'info', $this->lang->line('delete_success'));
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }

    public function upload()
    {
        // 保存数据
        $this->_pdata = $this->input->post();
        $filename = '';
        if(isset($this->_pdata['id']) && intval($this->_pdata['id']) > 0) {
            list($result, $dataid) = $this->m_upgradepackage->update($this->_pdata);
            $packagepath = $this->_pdata['package_path'];
            $filename = $this->_pdata['filename'];
        } else {
            $this->_pdata['package_path'] = $this->upgradepackage_path;
            list($result, $dataid, $packagepath) = $this->m_upgradepackage->add($this->_pdata);
            $filename = md5($this->_pdata['version']);
        }
        if($result === 'success') {
            $config['upload_path']      = $packagepath;
            $config['allowed_types']    = 'zip';
            $config['max_size']     = 1024*100;
            $config['file_ext_tolower']     = true;
            $config['overwrite']     = true;
            $config['file_name']     = $filename;

            $this->load->library('upload', $config);
            if ( !$this->upload->do_upload('file'))
            {
                // 删除记录
                $this->m_upgradepackage->delete(['id'=>$dataid]);
                IResponse::responseJson([], 'faild', 'info', $this->upload->display_errors());

                return;
            } else {
                if(isset($this->_pdata['id']) && intval($this->_pdata['id']) > 0) {
                    IResponse::responseJson([], 'success', 'info', $this->lang->line('update_success'));
                } else {
                    IResponse::responseJson([], 'success', 'info', $this->lang->line('add_success'));
                }

                return;
            }
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }
}

有了控制器当然少了一个数据模型啦!在 models 中创建 M_upgradepackage.php

<?php
/**
* @author      Tim
* @version     1.0
* @since       1.0
*/
defined('BASEPATH') OR exit('No direct script access allowed');

class M_upgradepackage extends BaseModel
{
    private $TBN_SYSTEMMANAGER;     // 表名

    public function __construct()
    {
        parent::__construct();
        $this->TBN = $this->db->dbprefix('upgradepackage');
        $this->TBN_SYSTEMMANAGER = $this->db->dbprefix('systemmanager');
    }

   /**
    * [getPage 获取分页数据]
    * @Author Tim
    * @param  array $filter  过滤条件
    * @param  int $pagenum  每页显示数量
    * @param  int $pagenow  当前页码
    * @param  string $sortby   排序
    * @param  string $sorttype 排序方式
    * @return array
    */
    public function getPage(array $filter)
    {
        $result = array();

        if(isset($filter['search'])) {
            $this->orLikeFilter($this->db, $this->TBN, 'upgrade_description', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'package_path', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'note', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'version', $filter['search'])
                ->whereFilter($this->db, $this->TBN, 'system_id', $filter['search']);
        }
        $this->db->join($this->TBN_SYSTEMMANAGER, $this->TBN_SYSTEMMANAGER.'.id='.$this->TBN.'.system_id', 'left');
        $totalrecord = $this->db->count_all_results($this->TBN);

        // 处理分页参数
        list($pagenum, $sortby, $sorttype, $offset, $result) = $this->pagesFilter($filter, $totalrecord, $result);

        if(isset($filter['search'])) {
            $this->orLikeFilter($this->db, $this->TBN, 'upgrade_description', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'package_path', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'note', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'version', $filter['search'])
                ->whereFilter($this->db, $this->TBN, 'system_id', $filter['search']);
        }
        $this->db->join($this->TBN_SYSTEMMANAGER, $this->TBN_SYSTEMMANAGER.'.id='.$this->TBN.'.system_id', 'left');
        $query = $this->db->select($this->TBN.'.*,'.$this->TBN_SYSTEMMANAGER.'.system_name,'.$this->TBN_SYSTEMMANAGER.'.system_flag')->from($this->TBN)->limit($pagenum)->offset($offset)->order_by($sortby, $sorttype)->get();
        $result['entitys'] = $query->result_array();
        $query->free_result();

        return $result;
    }

    /**
     * [add 添加]
     * @Author Tim
     * @param  array $data 添加数据
     *
     * @return array
     */
    public function add($data)
    {
        $this->db->trans_start();

        $verify_result = $this->modelRule($data);
        $data['filename'] = md5($data['version']).'.zip';
        if($verify_result !== 'success') {
            return [$verify_result, 0, ''];
        }

        if($this->checkPackageVersion($data['version'], $data['system_id'])) {
            return [$this->lang->line('upgradepackage_version_exist'), 0, ''];
        }

        // get system flag
        $this->db->select('*')->from($this->TBN_SYSTEMMANAGER)->where('id', $data['system_id']);
        $query = $this->db->get();
        $systemEntity = $query->row_array();
        $query->free_result();

        if(empty($systemEntity)) {
            return [$this->lang->line('not_found'), 0, ''];
        }

        $path = $data['package_path'].$systemEntity['system_flag'];
        log_message('error', $path.'-->'.json_encode($systemEntity));
        if(!is_dir($path) && !mkdir($path, 0777, true)) {
            return [$this->lang->line('create_filepath_faild'), 0, ''];
        }
        $data['package_path'] = $path;

        $this->db->insert($this->TBN, $this->getModel($data, 1));

        $id = $this->db->insert_id();

        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('add_faild'), 0, ''];
        } else {
            return ['success', $id, $path];
        }
    }

    /**
     * [detail 详情]
     * @Author Tim
     * @param  array $data 详情数据
     *
     * @return array
     */
    public function detail($data)
    {
        $id = isset($data['id'])?$data['id']:0;
        $this->db->trans_start();

        $this->db->select($this->TBN.'.*,'.$this->TBN_SYSTEMMANAGER.'.system_name,'.$this->TBN_SYSTEMMANAGER.'.system_flag')->from($this->TBN);
        $this->db->join($this->TBN_SYSTEMMANAGER, $this->TBN_SYSTEMMANAGER.'.id='.$this->TBN.'.system_id', 'left');
        $this->db->where($this->TBN.'.id', $data['id']);
        $query = $this->db->get();
        $result = $query->row_array();
        $query->free_result();

        return ['success', $result];
    }

    /**
     * [update 修改信息]
     * @Author Tim
     * @param  array $data 修改数据
     *
     * @return array
     */
    public function update($data)
    {
        $this->db->trans_start();
        log_message('error', 'update data:'.json_encode($data));
        $id = isset($data['id'])?intval($data['id']):'';
        if(empty($id)) {
            return [$this->lang->line('illegal_param'), 0, ''];
        }

        $verify_result = $this->modelRule($data);
        if($verify_result !== 'success') {
            return [$verify_result, $id];
        }

        if($this->checkPackageVersion($data['version'], $data['system_id'], $id)) {
            return [$this->lang->line('upgradepackage_version_exist'), $id];
        }

        $this->db->where('id', $id)->update($this->TBN, $this->getModel($data, 2));
        $num = $this->db->affected_rows();
        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('update_faild'), $id, ''];
        } else {
            return ['success', $id];
        }
    }

    /**
     * [delete 删除]
     * @Author Tim
     * @param  int $id 数据ID
     *
     * @return array
     */
    public function delete($data)
    {
        $id = isset($data['id'])?$data['id']:'';
        if(empty($id)) {
            return [$this->lang->line('illegal_param'), 0];
        }
        $entity = $this->findById($id);
        if(empty($entity)) {
            return [$this->lang->line('not_found'), $id];
        }
        // get system flag
        $this->db->select('*')->from($this->TBN_SYSTEMMANAGER)->where('id', $entity['system_id']);
        $query = $this->db->get();
        $systemEntity = $query->row_array();
        $query->free_result();

        $this->db->trans_start();
        $this->db->where('id', intval($id))->delete($this->TBN);
        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('delete_faild'), $id];
        } else {
            // remove file
            $filename = $entity['package_path'].'/'.$systemEntity['system_flag'].'/'.$entity['filename'];
            log_message('error', 'delete file:'.$filename);
            if(file_exists($filename)) {
                @unlink($filename);
            }
            return ['success', $id];
        }
    }

    /**
     * [modelRule 模型规则]
     * @Author Tim
     * @param  [array] $data [参数]
     * @return string
     */
    private function modelRule($data)
    {
        if(!isset($data['system_id']) || empty($data['system_id'])) {
            return $this->lang->line('system_flag_required');
        }
        if(!isset($data['version']) || empty($data['version'])) {
            return $this->lang->line('upgradepackage_version_required');
        }
        if(!isset($data['git_version']) || empty($data['git_version'])) {
            return $this->lang->line('upgradepackage_git_version_required');
        }

        return 'success';
    }

    /**
     * [getModel 转换数据模型]
     * @Author Tim
     * @param  [array] $data [前端传入参数]
     * @param  [int] $action 1=新增 2=修改
     * @return [array]
     */
    private function getModel($data, $action)
    {
        $adata = [];
        $adata['system_id'] = $data['system_id'];
        if($action == 1) {
            $adata['package_path'] = $data['package_path'];
            $adata['upload_time'] = time();
            $adata['filename'] = $data['filename'];
            $adata['version'] = $data['version'];
        }
        $adata['git_version'] = $data['git_version'];
        $adata['can_upgrade'] = $data['can_upgrade']=='true'?1:2;
        $adata['upgrade_description'] = $data['upgrade_description'];
        $adata['note'] = $data['note'];

        return $adata;
    }

    /**
     * [checkPackageVersion 检测系统版本号是否存在]
     * @Author Tim
     * @param  string $version 系统版本
     * @param  string $systemid 系统标识
     * @return bool
     */
    private function checkPackageVersion($version, $systemid, $id=0)
    {
        // 验证分组名字是否存在
        $query = $this->db->select('id')->from($this->TBN)->where('version', $version)->where('system_id', $systemid);
        if($id > 0) {
            $query->where('id !=', $id);
        }
        $query = $query->get();
        $entity = $query->result_array();
        $query->free_result();

        if(empty($entity)) {
            return false;
        } else {
            return true;
        }
    }

    /**
    * findById
    * 获取用户数据
    *
    * @access public
    * @param int $id 用户id
    * @since 1.0
    * @return array
    */
    public function findById($id)
    {
        $result = NULL;
        $this->db->select('*')->from($this->TBN)->where('id', $id);
        $query = $this->db->get();
        // 返回多条数据,判定为异常数据
        if($query->num_rows() == 1)
        {
            $result = $query->row_array();
        } else {
            log_message('error', '返回多条或没有!id='.$id);
        }
        $query->free_result();

        return $result;
    }

    /**
     * [getUpgradePackage 获取更新包]
     * @Author Tim
     * @param  [string] $system_flag [系统标识]
     * @param  [decimal] $version     [当前系统]
     * @return [type]              [description]
     */
    public function getUpgradePackage($system_flag, $version)
    {
        $this->db->join($this->TBN_SYSTEMMANAGER, $this->TBN_SYSTEMMANAGER.'.id='.$this->TBN.'.system_id', 'left');
        $query = $this->db->select($this->TBN.'.*,'.$this->TBN_SYSTEMMANAGER.'.system_name,'.$this->TBN_SYSTEMMANAGER.'.system_flag')
                ->from($this->TBN)->where($this->TBN_SYSTEMMANAGER.'.system_flag', $system_flag)
                ->where($this->TBN.'.version >',$version)->where($this->TBN.'.can_upgrade',1)->order_by('version', 'desc')->get();
        $result = $query->result_array();
        $query->free_result();

        return $result;
    }
}

为了代码的可重用性,我对控制器与数据模型做了个简单的封装,每个业务控制器与数据模型都要先继承父类;CI框架重写核心类需要在指定目录下创建,我们在前面有提过。所以父类控制器与父类数据模型都放在了 core 下

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class BaseController extends CI_Controller {

    public $__needlogin__ = true;   // 是否需要验证登录
    public $__lang__ = '';   // 当前语言
    public $_pdata = [];
    public $_ajax_type = 'form';    // form/json

    public function __construct()
    {
        parent::__construct();

        // 加载语言包
        $this->lang->load('base_lang', $this->__lang__);

        // 统一请求方式
        if($this->requestMethod()) {
            // 是否需要验证登录
            if($this->__needlogin__ === false) {
            } else {
                // 判断是否已登录
                if($this->auth->isLogin()) {
                    // log_message('error', '登录成功');
                    // 登录成功
                    // do something
                } else {
                    IResponse::responseJson(['recirect'=>'login'], 'faild', 'redirect', $this->lang->line('illegal_request_without'));

                    die;
                }
            }
        } else {
            IResponse::responseJson(['recirect'=>'login'], 'faild', 'redirect', $this->lang->line('illegal_request'));

            die;
        }
    }

    /**
     * [reloadLang 重新加载语言]
     * @Author Tim
     * @return void
     */
    public function reloadLang() {
        $this->lang->load('base_lang', $this->__lang__);
    }

    /**
     * [requestMethod 纺一请求方式]
     * @Author Tim
     * @return bool
     */
    private function requestMethod()
    {
        return true; // todo
        // 请求方式强制使用ajax
        if($this->input->is_ajax_request()) {
            return true;
        } else {
            return false;
        }
    }

}
<?php
/**
* 父模型
*
* 数据模型父类
* @author      Tim
* @version     1.0
* @since       1.0
*/
defined('BASEPATH') OR exit('No direct script access allowed');

class BaseModel extends CI_Model
{
    protected $_default_page = 20;
    private $_nav_length = 5;     // 导航长度
    public $TBN = '';            // 默认表名

    public function __construct()
    {
        parent::__construct();
    }

    /**
     * [findById 根据ID查找数据]
     * @Author Tim
     * @param  [int] $id [主键]
     * @return array
     */
    public function findById($id)
    {
        $result = NULL;
        $this->db->select('*')->from($this->TBN)->where('id',$id);
        $query = $this->db->get();
        $result = $query->row_array();

        $query->free_result();

        return $result;
    }

    /**
     * [whereFilter 创建查询条件]
     * @Author Tim
     * @param  object $db  数据库对像
     * @param  string $prefix 字段名前缀
     * @param  string $key 字段名
     * @return object
     */
    protected function whereFilter($db, $prefix, $key, $filter)
    {
        if(isset($filter[$key]) && !empty($filter[$key])) {
            $this->db->where($prefix.'.'.$key, $filter[$key]);
        }

        return $this;
    }

    /**
     * [pagesFilter 处理分页参数]
     * @Author Tim
     * @param  array $filter 条件参数
     *               $filter['pagination']['pagesize']    每页显示条数
     *               $filter['pagination']['pagenow']    当前页码
     *               $filter['pagination']['sortby']     排序
     *               $filter['pagination']['sorttype']   排序方式
     * @param  int $totalrecord 总数据条数
     * @param  array $result 分页结果
     * @return array
     */
    protected function pagesFilter($filter, $totalrecord, $result)
    {
        $pagesize = intval(isset($filter['pagination']['pagesize'])?$filter['pagination']['pagesize']:100);
        $pagenow = intval(isset($filter['pagination']['pagecurrent'])?$filter['pagination']['pagecurrent']:1);
        $sortby = isset($filter['pagination']['sortby'])?$filter['pagination']['sortby']:'id';
        $sorttype = isset($filter['pagination']['sorttype'])?$filter['pagination']['sorttype']:'desc';

        $pagesize = empty($pagesize) ? $this->_default_page : ($pagesize == 999999999999999 ? ($totalrecord == 0 ? 1 : $totalrecord) : $pagesize); // 每页显示数
        $totalpage = $totalrecord % $pagesize == 0 ? ($totalrecord / $pagesize == 0 ? 1 : $totalrecord / $pagesize) : ($totalrecord / $pagesize < 1 ? 1 : (floor($totalrecord/$pagesize)+1));    // 总页数
        $pagenow = empty($pagenow) ? 1 : (($pagenow >= $totalpage) ? $totalpage : ($pagenow < 1 ? 1 : $pagenow));

        $offset = ($pagenow - 1) * $pagesize;
        $navstart = $pagenow - 2 <= 1 ? 1 : $pagenow - 2;    // 导航页开始码
        $navend = (($navstart + $this->_nav_length - 1) > $totalpage) ? $totalpage : ($navstart + $this->_nav_length - 1);    // 导航页结束码
        $navstart = ($navend - $navstart < $this->_nav_length - 1 && $navend - $this->_nav_length - 1 > 0) ? $navend - $this->_nav_length - 1 : $navstart;  // 如果总长度小于导航长度 重新计算起始页

        $result['navstart'] = $navstart;
        $result['navend'] = $navend;
        $result['totalpage'] = $totalpage;
        $result['pagenow'] = $pagenow;
        $result['pagesize'] = $pagesize;

        return [$pagesize, $sortby, $sorttype, $offset, $result];
    }

    /**
     * [likeFilter 创建查询条件]
     * @Author Tim
     * @param  object $db  数据库对像
     * @param  string $prefix 字段名前缀
     * @param  string $key 字段名
     * @return object
     */
    protected function likeFilter($db, $prefix, $key, $filter, $match='both')
    {
        if(isset($filter['filtervalue']) && !empty($filter['filtervalue'])) {
            $this->db->like($prefix.'.'.$key, $filter['filtervalue'], $match);
        }

        return $this;
    }

    /**
     * [orLikeFilter 创建查询条件]
     * @Author Tim
     * @param  object $db  数据库对像
     * @param  string $prefix 字段名前缀
     * @param  string $key 字段名
     * @return object
     */
    protected function orLikeFilter($db, $prefix, $key, $filter, $match='both')
    {
        if(isset($filter['filtervalue']) && !empty($filter['filtervalue'])) {
            $this->db->or_like($prefix.'.'.$key, $filter['filtervalue'], $match);
        }

        return $this;
    }
}

至此 更新包管理功能已经可以使用了,我们用postman测试下,因为更新包管理还涉及到文件上传,postman对文件上传的测试不方便,所以我把他放在前端代码写好后再测试。

接下来继续写客户端的管理功能,做法与更新包管理功能一样,直接上代码

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Clientmanager extends BaseController {

    public function __construct()
    {
        parent::__construct();

        $this->load->model('M_clientmanager',"m_clientmanager");       // 加载模型
    }

    public function pagelist()
    {
        $result = $this->m_clientmanager->getPage($this->_pdata);
        IResponse::responseJson($result, 'success');
    }

    public function add()
    {
        list($result, $dataid) = $this->m_clientmanager->add($this->_pdata);
        if($result == 'success') {
            IResponse::responseJson([], 'success', 'info', $this->lang->line('add_success'));
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }

    public function detail()
    {
        list($result, $data) = $this->m_clientmanager->detail($this->_pdata);
        if($result == 'success') {
            IResponse::responseJson($data, 'success');
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }

    public function update()
    {
        list($result, $dataid) = $this->m_clientmanager->update($this->_pdata);
        if($result == 'success') {
            IResponse::responseJson([], 'success', 'info', $this->lang->line('update_success'));
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }

    public function delete()
    {
        list($result, $dataid) = $this->m_clientmanager->delete($this->_pdata);
        if($result == 'success') {
            IResponse::responseJson([], 'success', 'info', $this->lang->line('delete_success'));
        } else {
            IResponse::responseJson([], 'faild', 'info', $result);
        }
    }
}
<?php
/**
* @author      Tim
* @version     1.0
* @since       1.0
*/
defined('BASEPATH') OR exit('No direct script access allowed');

class M_clientmanager extends BaseModel
{
    public function __construct()
    {
        parent::__construct();
        $this->TBN = $this->db->dbprefix('clientmanager');
    }

   /**
    * [getPage 获取分页数据]
    * @Author Tim
    * @param  array $filter  过滤条件
    * @param  int $pagenum  每页显示数量
    * @param  int $pagenow  当前页码
    * @param  string $sortby   排序
    * @param  string $sorttype 排序方式
    * @return array
    */
    public function getPage(array $filter)
    {
        $result = array();

        if(isset($filter['search'])) {
            $this->orLikeFilter($this->db, $this->TBN, 'client_name', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'client_url', $filter['search']);
        }
        $totalrecord = $this->db->count_all_results($this->TBN);

        // 处理分页参数
        list($pagenum, $sortby, $sorttype, $offset, $result) = $this->pagesFilter($filter, $totalrecord, $result);

        if(isset($filter['search'])) {
            $this->orLikeFilter($this->db, $this->TBN, 'client_name', $filter['search'])
                ->orLikeFilter($this->db, $this->TBN, 'client_url', $filter['search']);
        }
        $query = $this->db->select('*')->from($this->TBN)->limit($pagenum)->offset($offset)->order_by($sortby, $sorttype)->get();
        $result['entitys'] = $query->result_array();
        $query->free_result();

        return $result;
    }

    /**
     * [add 添加]
     * @Author Tim
     * @param  array $data 添加数据
     *
     * @return array
     */
    public function add($data)
    {
        $this->db->trans_start();

        $verify_result = $this->modelRule($data);
        if($verify_result !== 'success') {
            return [$verify_result, 0];
        }

        $origin = trim(substr($data['client_url'], stripos($data['client_url'], '://')+3), '/');
        $data['auth_code'] = md5($origin);

        if(!empty($this->findByAuthcode($origin))) {
            return [$this->lang->line('clientmanager_url_exist'), 0];
        }

        $this->db->insert($this->TBN, $this->getModel($data, 1));

        $id = $this->db->insert_id();

        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('add_faild'), 0];
        } else {
            return ['success', $id];
        }
    }

    /**
     * [detail 详情]
     * @Author Tim
     * @param  array $data 详情数据
     *
     * @return array
     */
    public function detail($data)
    {
        $id = isset($data['id'])?$data['id']:0;
        $this->db->trans_start();

        $this->db->select($this->TBN.'.*')->from($this->TBN);
        $this->db->where($this->TBN.'.id', $id);
        $query = $this->db->get();
        $result = $query->row_array();
        $query->free_result();

        return ['success', $result];
    }

    /**
     * [update 修改信息]
     * @Author Tim
     * @param  array $data 修改数据
     *
     * @return array
     */
    public function update($data)
    {
        $this->db->trans_start();
        $id = isset($data['id'])?$data['id']:'';
        if(empty($id)) {
            return [$this->lang->line('illegal_param'), 0];
        }

        $verify_result = $this->modelRule($data);
        if($verify_result !== 'success') {
            return [$verify_result, $id];
        }

        $this->db->where('id', intval($id))->update($this->TBN, $this->getModel($data, 2));
        $num = $this->db->affected_rows();
        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('update_faild'), 0];
        } else {
            return ['success', $id];
        }
    }

    /**
     * [delete 删除]
     * @Author Tim
     * @param  int $id 数据ID
     *
     * @return array
     */
    public function delete($data)
    {
        $id = isset($data['id'])?$data['id']:'';
        if(empty($id)) {
            return [$this->lang->line('illegal_param'), 0];
        }
        $this->db->trans_start();
        $this->db->where('id', intval($id))->delete($this->TBN);
        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('delete_faild'), 0];
        } else {
            return ['success', $id];
        }
    }

    /**
     * [modelRule 模型规则]
     * @Author Tim
     * @param  [array] $data [参数]
     * @return string
     */
    private function modelRule($data)
    {
        if(!isset($data['client_name']) || empty($data['client_name'])) {
            return $this->lang->line('clientmanager_client_name_required');
        }
        if(!isset($data['client_url']) || empty($data['client_url'])) {
            return $this->lang->line('clientmanager_client_url_required');
        }
        if(!isset($data['expire_time']) || empty($data['expire_time'])) {
            return $this->lang->line('clientmanager_expire_time_required');
        }

        if(strtotime($data['expire_time']) - strtotime($data['auth_time']) <= 0) {
            return $this->lang->line('clientmanager_expire_time_illegal');
        }

        return 'success';
    }

    /**
     * [getModel 转换数据模型]
     * @Author Tim
     * @param  [array] $data [前端传入参数]
     * @param  [int] $action 1=新增 2=修改
     * @return [array]
     */
    private function getModel($data, $action)
    {
        $adata = [];
        $adata['client_name'] = $data['client_name'];
        $adata['client_url'] = $data['client_url'];
        $adata['system_flag'] = $data['system_flag'];
        if($action == 1) {
            $adata['auth_code'] = $data['auth_code'];
        }
        $adata['expire_time'] = strtotime($data['expire_time']);
        $adata['allow_server'] = $data['allow_server'];
        $adata['allow_line'] = $data['allow_line'];
        $adata['note'] = $data['note'];

        return $adata;
    }

    /**
     * [findByAuthcode 根据授权码获取客户端]
     * @Author Tim
     * @param  [string] $authcode [授权码]
     * @return [array]
     */
    public function findByAuthcode($authcode)
    {
        $result = NULL;
        $this->db->select('*')->from($this->TBN)->where('auth_code', $authcode);
        $query = $this->db->get();
        $result = $query->row_array();
        $query->free_result();

        return $result;
    }

    /**
    * findById
    * 获取数据
    *
    * @access public
    * @param int $id id
    * @since 1.0
    * @return array
    */
    public function findById($id)
    {
        $result = NULL;
        $this->db->select('*')->from($this->TBN)->where('id', $id);
        $query = $this->db->get();
        // 返回多条数据,判定为异常数据
        if($query->num_rows() == 1)
        {
            $result = $query->row_array();
        } else {
            log_message('error', '返回多条或没有!id='.$id);
        }
        $query->free_result();

        return $result;
    }

    /**
     * [updateAuthcode 更新授权码]
     * @Author Tim
     * @param  [int] $id       [id]
     * @param  [array] $udata [更新参数]
     * @return bool
     */
    public function updateAuthcode($id, $udata)
    {
        $this->db->where('id', $id)->update($this->TBN,
            ['auth_code_shadow'=>$udata['auth_code_shadow'], 'init_auth'=>1,
            'client_ip'=>$udata['client_ip'], 'auth_time'=>$udata['auth_time']]);

        $num = $this->db->affected_rows();
        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('update_faild'), $id];
        } else {
            return ['success', $id];
        }
    }

    /**
     * [updateVersion 更新版本信息]
     * @Author Tim
     * @param  [int] $id       [id]
     * @param  [decimal] $version [当前版本号]
     * @return bool
     */
    public function updateVersion($id, $version)
    {
        $this->db->where('id', $id)->update($this->TBN, ['current_version'=>$version]);

        $num = $this->db->affected_rows();
        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('update_faild'), $id];
        } else {
            return ['success', $id];
        }
    }



    /**
     * [updateStatus 更新状态]
     * @Author Tim
     * @param  [int] $id       [id]
     * @param  [string] $status [状态码]
     * @return bool
     */
    public function updateStatus($id, $status)
    {
        $this->db->where('id', $id)->update($this->TBN, ['update_status'=>$status]);

        $num = $this->db->affected_rows();
        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('update_faild'), $id];
        } else {
            return ['success', $id];
        }
    }

    /**
     * [updateDownloadCode 更新下载码]
     * @Author Tim
     * @param  [int] $id               [id]
     * @param  [string] $downloadcode     [下载码]
     * @param  [int] $downloadcodetime [下载码到期时间]
     * @return bool
     */
    public function updateDownloadCode($id, $downloadcode, $downloadcodetime)
    {
        $this->db->where('id', $id)->update($this->TBN, ['download_code'=>$downloadcode, 'download_code_time'=>$downloadcodetime]);

        $num = $this->db->affected_rows();
        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
        {
            return [$this->lang->line('update_faild'), $id];
        } else {
            return ['success', $id];
        }
    }
}

postman 测试结果

好了,后端业务模块基本上完成了,等前端写完录入基础数据后,再回来写升级那块的逻辑,那部分的逻辑才是这个项目的核心,哈哈。明天开始搭建Vue 开发环境。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值