FactoryAdmin.php 9.3 KB
<?php

namespace app\api\controller\v2;

use app\common\controller\Api;
use app\api\model\User;
use app\api\model\Factory;
use app\api\model\UserBorrow;
use app\api\model\FactoryUser;
use think\Validate;

/**
 * 驻厂v2
 * @ApiWeigh(2)
 */
class FactoryAdmin extends Api
{
    protected $noNeedLogin = [];
    protected $noNeedRight = '*';

    public function _initialize()
    {
        parent::_initialize();
        $this->model = model('FactoryAdmin');
        if(!$this->auth->is_factory_admin){
            $this->error('您不是驻厂,无权限操作');
        }
    }

    /**
     * @ApiWeigh    (99)
     * @ApiTitle    (驻场管理)
     * @ApiSummary  (驻场管理)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1612272667",
        "data": {
            "user": { //用户信息
                "id": 72, //ID
                "nickname": "何先生", //姓名
                "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像
            },
            "factory_list": [{ //可管理工程
                "id": 1, //工厂ID
                "factory_name": "新美亚电子(深圳)有限公司", //工厂名称
                "factory_shortname": "新美亚电子" //工厂简称
            }]
        }
    })
     */
    public function index()
    {
        $user = \app\api\model\User::get($this->auth->id);
        $user->visible(['id','avatar','nickname']);
        $factory_list = $this->model->alias('a')
            ->join('factory b','b.id = a.factory_id')
            ->where('a.user_id',$user['id'])
            ->field('b.id,b.factory_name,b.factory_shortname')
            ->select();
        $this->success('成功', compact('user','factory_list'));
    }

    /**
     * @ApiWeigh    (97)
     * @ApiTitle    (借支列表)
     * @ApiSummary  (借支列表)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="factory_id", type="inter", required=true, description="工厂ID")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1612274425",
        "data": {
            "user_list": { //用户列表
                "total": 1, //数据总数
                "per_page": 15,
                "current_page": 1, //当前页
                "last_page": 1,
                "data": [{ //数据列表
                    "id": 72, //ID
                    "nickname": "何先生", //姓名
                    "mobile": "151*****361", //电话
                    "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像
                    "is_work": "1", //是否在职:0=否,1=是
                    "join_time": "2021-02-02", //入职时间
                    "work_hours_month": "0.0", //本月总工时
                    "user_borrow_id": 1, //借支ID
                    "user_borrow_status": "0" //借支状态:-1=未申请,0=申请中,1=已通过
                }]
            },
            "quit_count": 0
        }
    })
     */
    public function borrowList()
    {
        $factory_id = $this->request->param('factory_id');
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $keyword = $this->request->param('keyword');
        empty($factory_id) && $this->error('缺少必需参数');
        $factory = Factory::get($factory_id);
        empty($factory) && $this->error('工厂不存在');
        $where = [
            'a.factory_id' => $factory_id,
            'a.is_work' => '1',
        ];
        if(!empty($keyword)){
            $where['a.nickname'] = ['like','%'.$keyword.'%'];
        }
        $borrow = UserBorrow::where('factory_id',$factory_id)
            ->whereTime('createtime','month')
            ->order('createtime desc')
            ->limit(1)
            ->buildSql();
        $user_list = User::alias('a')
            ->join([$borrow => 'b'],'b.user_id = a.id','left')
            ->where($where)
            ->field('a.*,b.id user_borrow_id,b.status user_borrow_status')
            ->order(['user_borrow_id'=>'desc','b.createtime'=>'asc','a.createtime'=>'desc'])
            ->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                // 隐藏手机号中间四位
                if(Validate::regex($v['mobile'], "^1\d{10}$")){
                    $v['mobile'] = substr_replace($v['mobile'],'*****',3,5);
                }
                $v->user_borrow_status = $v['user_borrow_status'] == null ? -1 : $v['user_borrow_status'];
                $v->visible(['id','avatar','nickname','mobile','is_work','join_time','work_hours_month'])->append(['user_borrow_id','user_borrow_status']);
            });
        // 本月离职人数
        $quit = FactoryUser::where('factory_id',$factory_id)
            ->where('status','3')
            ->whereTime('quit_time','month')
            ->order('quit_time desc')
            ->limit(1)
            ->buildSql();
        $quit_count = User::alias('a')
            ->join([$quit => 'b'],'b.user_id = a.id')
            ->field('a.*,b.join_time,b.quit_time')
            ->where('a.factory_id','neq',$factory_id)
            ->count();
        $this->success('成功', compact('user_list','quit_count'));
    }

    /**
     * @ApiWeigh    (95)
     * @ApiTitle    (同意借支)
     * @ApiSummary  (同意借支)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="user_borrow_id", type="inter", required=true, description="借支ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1606137472",
        "data": null
    })
     */
    public function agreeBorrow()
    {
        $user_borrow_id = $this->request->param('user_borrow_id');
        empty($user_borrow_id) && $this->error('缺少必需参数');
        $info = UserBorrow::get($user_borrow_id);
        empty($info) && $this->error('借支申请不存在');
        $info->save(['status'=>'1']);
        $this->success('成功');
    }

    /**
     * @ApiWeigh    (93)
     * @ApiTitle    (离职详情)
     * @ApiSummary  (离职详情)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="factory_id", type="inter", required=true, description="工厂ID")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1612273417",
        "data": {
            "total": 1, //数据总数
            "per_page": 15,
            "current_page": 1, //当前页
            "last_page": 1,
            "data": [{ //数据
                "id": 72, //用户ID
                "nickname": "何先生", //名称
                "mobile": "151*****361", //电话
                "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像
                "is_work": "0", //是否入职:0=否,1=是
                "join_time": "2021-02-02", //入职时间
                "quit_time": "2021-02-02" //离职时间
            }]
        }
    })
     */
    public function quitList()
    {
        $factory_id = $this->request->param('factory_id');
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $keyword = $this->request->param('keyword');
        empty($factory_id) && $this->error('缺少必需参数');
        $factory = Factory::get($factory_id);
        empty($factory) && $this->error('工厂不存在');
        $where = [
            'a.factory_id' => ['neq',$factory_id],
        ];
        if(!empty($keyword)){
            $where['a.nickname'] = ['like','%'.$keyword.'%'];
        }
        // 本月离职人数
        $quit = FactoryUser::where('factory_id',$factory_id)
            ->where('status','3')
            ->whereTime('quit_time','month')
            ->order('quit_time desc')
            ->limit(1)
            ->buildSql();
        $data = User::alias('a')
            ->join([$quit => 'b'],'b.user_id = a.id')
            ->field('a.id,a.avatar,a.nickname,a.mobile,a.is_work,b.join_time,b.quit_time')
            ->where($where)
            ->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                // 隐藏手机号中间四位
                if(Validate::regex($v['mobile'], "^1\d{10}$")){
                    $v['mobile'] = substr_replace($v['mobile'],'*****',3,5);
                }
                $v->quit_time = date('Y-m-d',$v['quit_time']);
                $v->visible(['id','avatar','nickname','mobile','is_work','join_time','quit_time']);
            });
        $this->success('成功', $data);
    }
}