IDMS系统框架

IDMS系统框架

1.IDMS系统框架简介

IDMS系统简称智能终端管理系统,包含智能终端的OTA及APP升级管理与智能终端的信息查询与修改。
IDMS系统的系统架构来源于 Laravel框架。

2. 基本路由

你可以将所有路由都定义在routes/web.php中。最基本的 Lumen 路由接收一个 URI 和一个闭包:

/**
     * 路由解析
     */
    $api->post('merchant/xmlAnalyze', ['uses' => 'MerchantController@xmlAnalyze']);
    $api->get('merchant/getEndPointNo/{MrchNo}', ['uses' => 'MerchantController@getEndPointNo']);

3. 中间件简介

HTTP中间件提供了一个便利的机制来过滤进入应用的HTTP请求。例如,Lumen包含了一个中间件来验证用户是否经过授权,如果用户没有经过授权,中间件会将用户重定向到登录页面,否则如果用户经过授权,中间件就会允许请求继续往前进入下一步操作。

当然,除了认证之外,中间件还可以被用来处理更多其它任务。比如:CORS中间件可以用于为离开站点的响应添加合适的头(跨域);日志中间件可以记录所有进入站点的请求。

所有中间件存放在 app/Http/Middleware 目录下。

class Authenticate
{
    /**
     * The authentication guard factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {

        if ($this->auth->guard($guard)->guest()) {
            return response('未登录或者已超时.', 401);
        }
        $user = $this->auth->guard($guard)->user();


//        return $next($request);

        //超管放过
        $roles=$user->roles;
        if($roles && count($roles) > 0)
        {
            foreach ($roles as $role)
            {
                if('0000' == $role->id)
                    return $next($request);
            }
        }

        $perms=$user->permissions();

        if(!$perms ||count($perms) <= 0)
            return response('该用户尚未分配权限.', 401);

        foreach ($perms as $perm)
        {
            if($perm->permission == API::router()->currentRouteAction())
                return $next($request);
        }

        return response('未经授权的功能调用.', 403);
    }
}

4. 控制器

将所有的请求处理逻辑都放在单个routes.php中肯定是不合理的,你也许还希望使用控制器类组织管理这些行为。控制器可以将相关的HTTP请求封装到一个类中进行处理。通常控制器存放在app/Http/Controllers目录中。

class AddressController extends Controller
{
    /**
     * @api {get} /api/address/{parent} 地址管理-获取地址子节点
     * @apiName getChildrenByParent
     * @apiDescription 马继康
     * @apiGroup Address
     * @apiVersion 1.0.0
     *
     * @apiParam (param_obj) {string} parent 地址父节点*
     *
     * @apiSuccess (response_obj) {string} code 错误码
     * @apiSuccess (response_obj) {string} msg 错误信息
     * @apiSuccess (response_obj) {obj} data 返回数据
     *
     * @apiSuccess (response_obj->data) {string} id 地址id
     * @apiSuccess (response_obj->data) {string} addr_name 地址名称
     *
     * @apiSuccessExample {json} Success-Response:
     *       {
     *       "code": "00000",
     *       "msg": "操作成功",
     *       "data": [
     *       {
     *       "id": "320100000000",
     *       "addr_name": "南京市"
     *       }
     *       ]
     *       }
     * @apiErrorExample {json} Error-Response:
     *      HTTP/1.1 400 Bad Request
     *     {"message":"\u6279\u91cf\u521b\u5efa\u5931\u8d25","status_code":400}
     */
    public function getChildrenByParent($parent)
    {
        $new = new getAddress();
        $data = $new->getChildrenByParent($parent);
        return $this->formatReturnValue('00000',['data'=>$data]);
    }

    /**
     * @api {get} /api/address/getfulladdress/{id}  地址管理-根据地址id获取完全地址
     * @apiName getFullAddress
     * @apiDescription 马继康
     * @apiGroup Address
     * @apiVersion 1.0.0
     *
     * @apiParam (param_obj) {string} id 地址id*
     *
     * @apiSuccess (response_obj) {string} code 错误码
     * @apiSuccess (response_obj) {string} msg 错误信息
     * @apiSuccess (response_obj) {obj} data 返回数据
     * @apiSuccessExample {json} Success-Response:
     *       {
     *       "code": "00000",
     *       "msg": "操作成功",
     *       "data":{
                "full_address":"江苏省南京市雨花台区铁心桥街道"
     *         }
     *       }
     * @apiErrorExample {json} Error-Response:
     *      HTTP/1.1 400 Bad Request
     *     {"message":"\u6279\u91cf\u521b\u5efa\u5931\u8d25","status_code":400}
     */
    public function getFullAddress($id)
    {
        $new = new getAddress();
        $data = $new->getFullAddress($id);
        return $this->formatReturnValue('00000',["full_address"=>$data]);

    }

5. 访问请求实例

通过依赖注入获取当前HTTP请求实例,应该在控制器的构造函数或方法中对Illuminate\Http\Request类进行类型提示,当前请求实例会被服务容器自动注入:

<?php
/**
 * Created by PhpStorm.
 * User: hll
 * Date: 2017/2/14
 * Time: 14:26
 */

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Group;
use App\Models\GroupUser;
use App\Models\Providers;
use App\Models\Terminal;
use App\Models\TermModel;
use Dingo\Api\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use App\Utils\Helpers;
use Illuminate\Support\Facades\Redis;
use App\Console\Commands\RedisSubscribe;

class  ProviderController extends Controller
{

    /**
     * @api {get} /api/provider/index 获取供应商
     * @apiName index
     * @apiGroup ProviderController
     * @apiVersion 0.1.0
     *
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *      "msg": "",
     *          "code": "000000",
     * "data":"[
     * {
     * "id":"28CA15AD-732C-7D94-0E7F-E5FC7E5AA8DD",
     *  "provider_name":"测试"
     * },
     * {
     *  "id":"28CA15AD-732C-7D94-0E7F-E5FC7E5AA8DS",
     *  "provider_name":"测试12"
     *  }
     *  ]"
     * }
     * @apiErrorExample {json} Error-Response:
     *     HTTP/1.1 400
     *     {
     *          "msg": "errmessage",
     *          "code": "000000",
     *          "data":
     *     }
     * @apiSampleRequest http://192.168.10.179:9011/api/provider/index?id=&provider_phone=
     */
    public function index()
    {
        $request = $this->request;
        $provider = Providers::select('id', 'provider_name', 'provider_address_detail', 'provider_phone', 'note');
        /*测试同步数据代码
        Redis::publish('test-channel', json_encode(['term_provider' => '676E49E6-8ED7-C09D-D538-F64BCFFC2F15','term_model' => '44F09B16-A085-291E-8EB7-2611C60AB703','term_mac' => 'bar1','term_wifi' => 'bar2','term_imei' => 'bar3','term_produce_date' => '2017-02-21']));
        $url = 'http://192.168.10.179:9011/api/termimalupload/upload';
        $array=array("term_provider"=>"aaa","term_model"=>"bbbb","term_mac"=>"11","term_wifi"=>"22","term_imei"=>"33","term_produce_date"=>"44");
        $array=  ['id'=>'9I8U000001','term_provider' => '676E49E6-8ED7-C09D-D538-F64BCFFC2F15','term_model' => '44F09B16-A085-291E-8EB7-2611C60AB703','term_mac' => 'bar1','term_wifi' => 'bar2','term_imei' => 'bar3','term_produce_date' => '2017-02-21'];
        $curl = curl_init();
        //设置提交的url
        curl_setopt($curl, CURLOPT_URL, $url);
        //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, 0);
        //设置获取的信息以文件流的形式返回,而不是直接输出。
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //设置post方式提交
        curl_setopt($curl, CURLOPT_POST, 1);
        //设置post数据
        $post_data = $array;
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
        //执行命令
        $data = curl_exec($curl);
        //关闭URL请求
        curl_close($curl);
       // dd($data);
*/
        //供应商编号
        if ($request->input('id')) {
            $provider = $provider->where('id', $request->input('id'));
        }
        //供应商电话
        if ($request->input('provider_phone'))
            $provider = $provider->where('provider_phone', $request->input('provider_phone'));

        $provider->orderBy('id','desc');

        return $this->formatReturnValue('00000', $provider->get());
    }


    /**
     * @api {post} /api/provider/store                  新增供应商
     * @apiName store
     * @apiGroup ProviderController
     * @apiVersion 0.1.0
     * @apiParam {string} id                供应商编号
     * @apiParam {string} providername                名称
     * @apiParam {string} addressid                    地址
     * @apiParam {string} addressdetail               详细地址
     * @apiParam {string} phone               电话
     * @apiParam {string} note            备注
     *
     *
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *      "code": 000000,
     *      "msg": "success",
     *      }
     * @apiErrorExample {json} Error-Response:
     *     HTTP/1.1 400
     *     {
     *          "msg": "errmessage",
     *          "code": "000000",
     *     }
     * @apiSampleRequest http://192.168.10.179:9011/api/provider/store
     */
    public function store()
    {
        $request = $this->request;
        $validator = \Validator::make($request->input(), [
            'id'=>'required|digits:6|unique:providers,id',
            'providername' => 'required|max:30',
            'addressdetail' => 'required|max:30',
            'phone' => 'required|max:20'
        ]);
        if ($validator->fails()) {
            return $this->errorBadRequest($this->formatValidatorErrors($validator->errors()->all()));
        }
        $maxsort = Providers::max('pro_sort');

        if ($maxsort == null) {
            $maxsort = 1;
        } else {
            $maxsort = $maxsort + 1;
        }

        $provider = new Providers();
        $provider->id = $request->input('id');
        $provider->provider_name = $request->input('providername');
        $provider->address_id = $request->input('addressid');
        $provider->provider_address_detail = $request->input('addressdetail');
        $provider->provider_phone = $request->input('phone');
        $provider->note = $request->input('note');
        $provider->pro_sort = $maxsort;

        try {
            $provider->save();
        } catch (\Exception $ex) {
            $this->logExceptionInfo($request,$ex);
            return $this->formatReturnValue('00000', $this->errorBadRequest($ex));
        }
        return $this->formatReturnValue('00000');
    }

    /**
     * @api {put} /api/provider/update                 修改供应商
     * @apiName update
     * @apiGroup ProviderController
     * @apiVersion 0.1.0
     * @apiParam {string} id         编号
     * @apiParam {string} providername                名称
     * @apiParam {string} addressid                    地址
     * @apiParam {string} addressdetail               详细地址
     * @apiParam {string} phone               电话
     * @apiParam {string} note            备注
     *
     *
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *      "code": 000000,
     *      "msg": "success",
     *      }
     * @apiErrorExample {json} Error-Response:
     *     HTTP/1.1 400
     *     {
     *          "msg": "errmessage",
     *          "code": "000000",
     *     }
     * @apiSampleRequest http://192.168.10.179:9011/api/provider/update
     */
    public function update()
    {
        $request = $this->request;
        $validator = \Validator::make($request->input(), [
            'id' => 'required|max:36'
        ]);
        if ($validator->fails()) {
            return $this->errorBadRequest($this->formatValidatorErrors($validator->errors()->all()));
        }
        $provider = Providers::where('id', $request->input('id'))
        ->first();
        $provider->provider_name = $request->input('providername');
        $provider->address_id = $request->input('addressid');
        $provider->provider_address_detail = $request->input('addressdetail');
        $provider->provider_phone = $request->input('phone');
        $provider->note = $request->input('note');


        try {
            $provider->save();
        } catch (\Exception $ex) {
            $this->logExceptionInfo($request,$ex);
            return $this->formatReturnValue('00000', $this->errorBadRequest($ex));
        }
        return $this->formatReturnValue('00000');
    }


    /**
     * @api {post} /api/provider/delete                 删除供应商
     * @apiName delete
     * @apiGroup ProviderController
     * @apiVersion 0.1.0
     * @apiParam {string} id         编号
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *      "code": 000000,
     *      "msg": "success",
     *      }
     * @apiErrorExample {json} Error-Response:
     *     HTTP/1.1 400
     *     {
     *          "msg": "errmessage",
     *          "code": "000000",
     *     }
     * @apiSampleRequest http://192.168.10.179:9011/api/provider/delete
     */
    public function delete()
    {
        $request = $this->request;
        $validator = \Validator::make($request->input(), [
            'id' => 'required|max:36'
        ]);
        if ($validator->fails()) {
            return $this->errorBadRequest($this->formatValidatorErrors($validator->errors()->all()));
        }
        $provide = Providers::where('id', $request->input('id'))
            ->first();
        if (empty($provide)) {
            return $this->formatReturnValue('01400');
        }

        $getTermModelByPro = TermModel::select('id')->where('term_provider',$request->input('id'))->first();
        if(!empty($getTermModelByPro))
            return $this->formatReturnValue('01401');

        $provide->id = $request->input('id');
        try {
            $provide->delete();
        } catch (\Exception $ex) {
            $this->logExceptionInfo($request,$ex);
            return $this->formatReturnValue('00000', $this->errorBadRequest($ex));
        }
        return $this->formatReturnValue('00000');
    }
}

6. 响应

所有路由和控制器都会返回某种被发送到用户浏览器的响应,Lumen提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串。

/**
     * @api {put} /api/provider/update                 修改供应商
     * @apiName update
     * @apiGroup ProviderController
     * @apiVersion 0.1.0
     * @apiParam {string} id         编号
     * @apiParam {string} providername                名称
     * @apiParam {string} addressid                    地址
     * @apiParam {string} addressdetail               详细地址
     * @apiParam {string} phone               电话
     * @apiParam {string} note            备注
     *
     *
     * @apiSuccessExample {json} Success-Response:
     *     HTTP/1.1 200 OK
     *     {
     *      "code": 000000,
     *      "msg": "success",
     *      }
     * @apiErrorExample {json} Error-Response:
     *     HTTP/1.1 400
     *     {
     *          "msg": "errmessage",
     *          "code": "000000",
     *     }
     * @apiSampleRequest http://192.168.10.179:9011/api/provider/update
     */
    public function update()
    {
        $request = $this->request;
        $validator = \Validator::make($request->input(), [
            'id' => 'required|max:36'
        ]);
        if ($validator->fails()) {
            return $this->errorBadRequest($this->formatValidatorErrors($validator->errors()->all()));
        }
        $provider = Providers::where('id', $request->input('id'))
        ->first();
        $provider->provider_name = $request->input('providername');
        $provider->address_id = $request->input('addressid');
        $provider->provider_address_detail = $request->input('addressdetail');
        $provider->provider_phone = $request->input('phone');
        $provider->note = $request->input('note');


        try {
            $provider->save();
        } catch (\Exception $ex) {
            $this->logExceptionInfo($request,$ex);
            return $this->formatReturnValue('00000', $this->errorBadRequest($ex));
        }
        return $this->formatReturnValue('00000');
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容