| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866 |
- <?php
- namespace app\admin\controller;
- use app\common\util\AppMsg;
- use think\Db;
- use think\Exception;
- use think\exception\DbException;
- class Ai extends Auth
- {
- static $types = [
- 1 =>'报修',
- 2 =>'保洁',
- 3 =>'运送',
- 4 =>'安保',
- ];
- public function space()
- {
- return $this->fetch();
- }
- public function dispatchCenter()
- {
- $configId = Db::name('config')
- ->where('name', 'org_ai_send')
- ->value('id');
- $ai= Db::name('config_org')
- ->where('config_id', $configId)
- ->where('value', 1)
- ->where('org_id', $this->orgId)
- ->findOrEmpty();
- $ai = $ai ? 1 : 0;
- $this->assign('ai',$ai);
- return $this->fetch();
- }
- public function config($id = 6)
- {
- $type = [6=>'Ai'];
- $list = Db::name("config")
- ->where(['status'=>1,'group'=>$id,'cate'=>2])
- ->field('id,name,title,extra,value,remark,type')
- ->order('sort asc')
- ->select();
- $list = $list?$list:[];
- foreach ($list as $k=>$v){
- $value = Db::name('config_org')->where('config_id',$v['id'])->where('org_id',$this->orgId)->find();
- $list[$k]['value'] = $value?$value['value']:'';
- }
- $this->assign('list',$list);
- $this->assign('type',$type);
- $this->assign('id',$id);
- return $this->fetch();
- }
- public function configSave(){
- $config = request()->post();
- if($config && is_array($config)){
- foreach ($config as $name => $value) {
- if($name == 'org_ai_send'){
- cache('ai_send',null);
- }elseif ($name == 'org_ai_time'){
- cache('ai_time_' . $this->orgId, null);
- }
- $info = Db::name('config')->where('name',$name)->find();
- if(!$info){
- continue;
- }
- $oinfo = Db::name('config_org')->where('config_id',$info['id'])->where('org_id',$this->orgId)->find();
- if($oinfo){
- Db::name('config_org')->where('id',$oinfo['id'])->update(['value'=>$value]);
- }else{
- Db::name('config_org')->insert([
- 'config_id' => $info['id'],
- 'org_id' => $this->orgId,
- 'value' => $value
- ]);
- }
- }
- }
- $this->success('保存成功');
- }
- public function userSkill(){
- if(request()->isAjax()){
- //分页参数
- $length = input('rows',10,'intval'); //每页条数
- $page = input('page',1,'intval'); //第几页
- $start = ($page - 1) * $length; //分页开始位置
- //排序
- $sortRow = input('sidx','u.id','trim'); //排序列
- $sort = input('sord','desc','trim'); //排序方式
- $order = $sortRow.' '.$sort;
- $title = input('title','','trim');
- if($title){
- $map[] = ['u.account|u.real_name|u.mobile','like','%'.$title.'%'];
- }
- $enable = input('enable','','trim');
- if($enable != ''){
- $map[] = ['u.enable','=',$enable];
- }
- $depId = input('depId','','trim');
- if($depId != ''){
- $uids = Db::name('user_dep')->where('dep_id',$depId)->column('user_id');
- $map[] = ['u.id','in',$uids];
- }
- $roles = (new \app\common\model\WorkTypeMode())->getRoles(1, $this->orgId);
- $roleIds = Db::name('roles')
- ->whereIn('parent_id',array_column($roles,'id'))
- ->where('org_id',$this->orgId)
- ->where('del',0)
- ->where('enable',1)
- ->column('id');
- $map[] = ['u.del','=',0];
- $map[] = ['u.type','=',0];
- $map[] = ['uo.org_id','=',$this->orgId];
- $map[] = ['ur.roles_id','in',$roleIds];
- $map= empty($map) ? true: $map;
- $query = Db::name('user')
- ->alias('u')
- ->join('user_org uo','u.id=uo.user_id')
- ->join('user_roles ur','u.id=ur.user_id')
- ->join('roles r','r.id=ur.roles_id')
- ->where($map)
- ->field('u.*,uo.org_id,r.name as roles_name');
- $lists =$query
- ->limit($start,$length)
- ->order(['u.sort'=>'asc','u.id'=>'desc'])
- ->select();
- $orderType = Db::name('order_type')
- ->where('parent_id',0)
- ->where('enable',1)
- ->where('del',0)
- ->where('org_id',$this->orgId)
- ->column('title','id');
- foreach ($lists as $k=>$v){
- $lists[$k]['dep_name'] = Db::name('user_dep')
- ->alias('ud')
- ->join('dep d','d.id=ud.dep_id')
- ->where('ud.user_id',$v['id'])
- ->where('d.org_id',$v['org_id'])
- ->value('d.title');
- $labels = $v['label'] ? explode(',',$v['label']) : [];
- if ($labels){
- foreach ($labels as &$label){
- $label = $orderType[$label]??'';
- }
- unset($label);
- $lists[$k]['label'] = implode(',',$labels);
- }
- }
- //数据返回
- $totalCount = $query
- ->removeOption('limit')
- ->count();
- $totalPage = ceil($totalCount/$length);
- $result['page'] = $page;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $lists;
- return json($result);
- }else{
- $deps = model('Dep')->getList();
- $this->assign('deps',$deps);
- return $this->fetch();
- }
- }
- public function editUser($id=0,$type = 1){
- if(request()->isPost()){
- if ($type == 1){
- $res = Db::name('user')->where(['id'=>$id])->update(['label'=>input('label','')]);
- }else if ($type == 2){
- $res = Db::name('dep')->where(['id'=>$id])->update(['users'=>input('users','')]);
- }else{
- $res = Db::name('address')->where(['id'=>$id])->update(['users'=>input('users','')]);
- }
- if($res){
- $this->success('操作成功',url('index'));
- }else{
- $this->error(model('User')->getError());
- }
- }else{
- if($id){
- $config = [
- 1 => ['table' => 'user', 'field' => 'label'],
- 2 => ['table' => 'dep', 'field' => 'users'],
- ];
- $current = $config[$type] ?? ['table' => 'address', 'field' => 'users'];
- $info = db($current['table'])
- ->where('id', $id)
- ->find();
- if ($info) {
- $field = $current['field'];
- $info[$field] = empty($info[$field])
- ? []
- : explode(',', $info[$field]);
- }
- $this->assign('info',$info);
- }
- if ($type == 1){
- $orderType =model('OrderType')->list();
- $this->assign('orderType',$orderType);
- }else{
- $roles = (new \app\common\model\WorkTypeMode())->getRoles($type == 2 ? 1 : 3, $this->orgId);
- $roleIds = Db::name('roles')
- ->whereIn('parent_id',array_column($roles,'id'))
- ->where('org_id',$this->orgId)
- ->where('del',0)
- ->where('enable',1)
- ->column('id');
- $user = Db::name('user_roles')
- ->alias('ur')
- ->join('user u','u.id = ur.user_id')
- ->join('user_dep ud','ud.user_id = u.id')
- ->where('u.del',0)
- ->where('u.enable',1)
- ->whereIn('ur.roles_id',$roleIds)
- ->where('u.work',1)
- ->field('u.id,u.real_name as title')
- ->select();
- $this->assign('users',$user);
- }
- $this->assign('type',$type);
- return $this->fetch();
- }
- }
- public function dep(){
- if(request()->isAjax()){
- //分页参数
- $length = input('rows',10,'intval'); //每页条数
- $page = input('page',1,'intval'); //第几页
- $start = ($page - 1) * $length; //分页开始位置
- //排序
- $sortRow = input('sidx','id','trim'); //排序列
- $sort = input('sord','desc','trim'); //排序方式
- $order = $sortRow.' '.$sort;
- $title = input('title','','trim');
- if($title){
- $map[] = ['title','like','%'.$title.'%'];
- }
- $enable = input('enable','','trim');
- if($enable != ''){
- $map[] = ['enable','=',$enable];
- }
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $map= empty($map) ? true: $map;
- //数据查询
- $lists = Db::name('dep')
- ->where($map)
- ->limit($start,$length)
- ->order($order)
- ->select();
- $roles = (new \app\common\model\WorkTypeMode())->getRoles(1, $this->orgId);
- $roleIds = Db::name('roles')
- ->whereIn('parent_id',array_column($roles,'id'))
- ->where('org_id',$this->orgId)
- ->where('del',0)
- ->where('enable',1)
- ->column('id');
- $userList = Db::name('user_roles')
- ->alias('ur')
- ->join('user u','u.id = ur.user_id')
- ->where('u.del',0)
- ->where('u.enable',1)
- ->whereIn('ur.roles_id',$roleIds)
- ->where('u.work',1)
- ->column('u.real_name','u.id');
- foreach ($lists as $k=>$v){
- $users = $v['users'] ? explode(',',$v['users']) : [];
- if ($users){
- foreach ($users as &$user){
- $user = $userList[$user]??'';
- }
- unset($user);
- $lists[$k]['users'] = implode(',',$users);
- }
- }
- //数据返回
- $totalCount = Db::name('dep')->where($map)->count();
- $totalPage = ceil($totalCount/$length);
- $result['page'] = $page;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $lists;
- return json($result);
- }else{
- return $this->fetch();
- }
- }
- public function address(){
- if(request()->isAjax()){
- //分页参数
- $length = input('rows',10,'intval'); //每页条数
- $page = input('page',1,'intval'); //第几页
- $start = ($page - 1) * $length; //分页开始位置
- //排序
- $sortRow = input('sidx','id','trim'); //排序列
- $sort = input('sord','desc','trim'); //排序方式
- $order = $sortRow.' '.$sort;
- $title = input('title','','trim');
- if($title){
- $map[] = ['title','like','%'.$title.'%'];
- }
- $enable = input('enable','','trim');
- if($enable != ''){
- $map[] = ['enable','=',$enable];
- }
- $map[] = ['del','=',0];
- $map[] = ['org_id','=',$this->orgId];
- $map[]=['','exp',Db::raw("FIND_IN_SET(2,types)")];
- $map= empty($map) ? true: $map;
- //数据查询
- $query = Db::name('address')->where($map);
- $lists = $query
- ->limit($start,$length)
- ->order($order)
- ->select();
- $roles = (new \app\common\model\WorkTypeMode())->getRoles(3, $this->orgId);
- $roleIds = Db::name('roles')
- ->whereIn('parent_id',array_column($roles,'id'))
- ->where('org_id',$this->orgId)
- ->where('del',0)
- ->where('enable',1)
- ->column('id');
- $userList = Db::name('user_roles')
- ->alias('ur')
- ->join('user u','u.id = ur.user_id')
- ->where('u.del',0)
- ->where('u.enable',1)
- ->whereIn('ur.roles_id',$roleIds)
- ->where('u.work',1)
- ->column('u.real_name','u.id');
- foreach ($lists as $k=>$v){
- $users = $v['users'] ? explode(',',$v['users']) : [];
- if ($users){
- foreach ($users as &$user){
- $user = $userList[$user]??'';
- }
- unset($user);
- $lists[$k]['users'] = implode(',',$users);
- }
- }
- //数据返回
- $totalCount = $query->removeOption('limit')->count();
- $totalPage = ceil($totalCount/$length);
- $result['page'] = $page;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $lists;
- return json($result);
- }else{
- return $this->fetch();
- }
- }
- //TODO 给todo表和orders加上索引
- public function show()
- {
- if(request()->isAjax()){
- $today = date('Ymd');
- $echart = Db::name('todo')
- ->where('org_id', $this->orgId)
- ->where('del', 0)
- ->where('create_yyyymmdd', '>=',date('Ymd',strtotime('-7 days')))
- ->where('create_yyyymmdd', '<=',$today)
- ->field('create_yyyymmdd, SUM(create_user_id = -1) as ai, SUM(create_user_id != -1) as user')
- ->group('create_yyyymmdd')
- ->order('create_yyyymmdd')
- ->select();
- $statsByDate = [];
- foreach ($echart as $item) {
- $statsByDate[$item['create_yyyymmdd']] = $item;
- }
- $dates = [];
- for ($i = 6; $i >= 0; $i--) {
- $date = date('Ymd', strtotime("-$i days"));
- $aiData[] = isset($statsByDate[$date]) ? (int)$statsByDate[$date]['ai'] : 0;
- $userData[] = isset($statsByDate[$date]) ? (int)$statsByDate[$date]['user'] : 0;
- $dates[] = date('m-d', strtotime("-$i days"));;
- }
- $records = Db::name('ai_send_success')
- ->where('org_id', $this->orgId)
- ->field('mode')
- ->group('mode')
- ->column('COUNT(*)', 'mode');
- $done = [
- 'total' => array_sum($records),
- 'bx' => $records[1] ?? 0,
- 'bj' => $records[2] ?? 0,
- 'ys' => $records[3] ?? 0,
- 'ab' => $records[4] ?? 0
- ];
- $orders = Db::name('orders')
- ->where('org_id',$this->orgId)
- ->where('del',0)
- ->where('create_yyyymmdd',$today)
- ->where('order_mode',1)
- ->whereNotExists(function ($query) {
- $query->table('ai_send_fail')
- ->whereColumn('ai_send_fail.order_id', 'orders.id');
- })
- ->field('work_type_mode')
- ->group('work_type_mode')
- ->column('COUNT(*)', 'work_type_mode');
- $fail = Db::name('ai_send_fail')
- ->where('org_id', $this->orgId)
- ->where('status', 0)
- ->whereTime('create_time', 'today')
- ->count();
- $bh = Db::name('todo')
- ->where('org_id', $this->orgId)
- ->where('create_user_id', -1)
- ->where('todo_mode', 4)
- ->whereTime('create_time', 'today')
- ->count();
- $undo = [
- 'total' => array_sum($orders),
- 'bx' => $orders[1] ?? 0,
- 'bj' => $orders[2] ?? 0,
- 'ys' => $orders[3] ?? 0,
- 'ab' => $orders[4] ?? 0,
- 'yc'=>$fail,
- 'bh'=>$bh
- ];
- $data = [
- 'ai' =>$aiData,
- 'user' =>$userData,
- 'date'=>$dates,
- 'done'=>$done,
- 'undo'=>$undo,
- ];
- return json($data);
- }else{
- $configId = Db::name('config')
- ->where('name', 'org_ai_send')
- ->value('id');
- $ai= Db::name('config_org')
- ->where('config_id', $configId)
- ->where('value', 1)
- ->where('org_id', $this->orgId)
- ->findOrEmpty();
- $ai = $ai ? 1 : 0;
- $this->assign('ai',$ai);
- return $this->fetch();
- }
- }
- public function todoList()
- {
- $size = input('size',10,'intval');
- $page = input('page',1,'intval');
- $mode= input('mode',0,'intval');
- // $query = Db::name('todo')
- // ->alias('t')
- // ->join('orders o','t.order_id = o.id')
- // ->where('t.org_id', $this->orgId)
- // ->where('t.del', 0)
- // ->where('t.create_yyyymmdd', date('Ymd'))
- // ->when($mode > 0,function ($query) use($mode){
- // $query->where('t.work_type_mode', $mode);
- // })
- // ->where('t.create_user_id',-1)
- // ->field('o.id,o.sn,o.work_type_mode,o.user_id,t.id as tid,t.create_time,t.to_user_id');
- $query = Db::name('ai_send_success')
- ->alias('a')
- ->join('orders o','a.order_id = o.id')
- ->where('a.org_id', $this->orgId)
- ->whereTime('a.create_time', 'today')
- ->when($mode > 0,function ($query) use($mode){
- $query->where('a.mode', $mode);
- })
- ->field('a.user_id,a.todo_id,a.mode,a.create_time,o.sn,o.user_id as uid,o.id');
- $todoList = $query
- ->order('a.create_time desc')
- ->limit(($page -1) * $size,$size)
- ->select();
- $total = $query->removeOption('limit')->count();
- $userIds = array_column($todoList,'uid');
- $toUserIds = array_column($todoList,'user_id');
- $allIds = array_unique(array_merge($toUserIds,$userIds));
- $users = Db::name('user')->whereIn('id',$allIds)->column('real_name','id');
- foreach ($todoList as &$v){
- $v['user'] = $users[$v['uid']]??'';
- $v['toUser'] = $users[$v['user_id']]??'';
- $v['type'] = self::$types[$v['mode']]??'';
- }
- unset($v);
- return json(['data'=>$todoList,'total'=>$total]);
- }
- public function orderList()
- {
- $size = input('size',10,'intval');
- $page = input('page',1,'intval');
- $query = Db::name('orders')
- ->where('org_id',$this->orgId)
- ->where('del',0)
- ->where('create_yyyymmdd',date('Ymd'))
- ->whereIn('work_type_mode',[1,2,3,4])
- ->whereNotExists(function ($query) {
- $query->table('ai_send_fail')
- ->whereColumn('ai_send_fail.order_id', 'orders.id');
- })
- ->where('order_mode',1)
- ->field('id,sn,work_type_mode,user_id');
- $orderList = $query
- ->limit(($page -1) * $size,$size)
- ->select();
- $total = $query->removeOption('limit')->count();
- $users = Db::name('user') ->whereIn('id',array_unique(array_column($orderList,'user_id'))) ->column('real_name','id');
- $i = 1;
- foreach ($orderList as &$v2){
- $v2['user'] = $users[$v2['user_id']]??'';
- $v2['type'] = self::$types[$v2['work_type_mode']]??'';
- $v2['flag'] = 0;
- if ($i <= 20){
- $v2['flag'] = 1;
- $i ++;
- }
- }
- unset($v2);
- return json(['data'=>$orderList,'total'=>$total]);
- }
- public function send($id, $mode = 1,$type = 0) {//type=0表示重新派单,1-手动派单,2-被驳回重新派
- $model = new \app\common\model\Orders();
- if (request()->isGet()) {
- $user = '';
- if ($type != 1){
- $user = Db::name('todo')
- ->alias('t')
- ->join('user u','t.to_user_id = u.id')
- ->where('t.id', $id)
- ->value('u.real_name');
- }
- $this->assign('user', $user);
- $this->assign('id', $id);
- $this->assign('mode', $mode);
- $this->assign('type', $type);
- $this->assign('send_user_num', $model->sendUserNum($mode, $this->orgId));
- $this->assign('user_list', (new \app\common\model\WorkTypeMode())->getRolesUserByNum($mode, $this->orgId, 1));
- $two_dispatch_roles = model('user')->get_two_dispatch_role($this->orgId, $mode);
- $this->assign('dispatch_roles', $two_dispatch_roles);
- $this->assign('dispatch_type', check_two_dispatch($this->userId));
- $this->assign('two_dispatch_off', two_dispatch_off($this->orgId));
- return $this->fetch();
- }
- else {
- $time = getTime();
- $data = request()->post();
- $info = in_array($type,[0,2]) ? Db::name('todo')->where('id',$id)->find(): Db::name('orders')->where('id',$id)->find();
- $orderId = in_array($type,[0,2]) ? $info['order_id'] : $info['id'];
- $pusharr = []; // 需要推送给工人
- if (!isset($data['to_user_id']) || empty($data['to_user_id'])) {
- $this->error('请选择执行人');
- }
- if ($type == 0 && $info['todo_mode'] != 1){
- $this->error('当前状态无法重新派单');
- }
- Db::startTrans();
- try {
- if ($type == 0){
- Db::name('todo')->where('id',$id)->update(['del'=>1]);
- Db::name('task')->where('bus_id',$id)->delete();
- Db::name('ai_send_success')->where('todo_id', $id)
- ->update(['del' => 1]);
- }elseif ($type == 1){
- Db::name('ai_send_fail')->where('order_id', $orderId)
- ->update(['status' => 1,'user_id',$this->userId]);
- }elseif ($type == 2){
- Db::name('todo')->where('id',$id)->update(['todo_mode'=>7]);
- Db::name('task')->where('bus_id',$id)->delete();
- }
- $send_user_num = $model->sendUserNum($info['work_type_mode'],$info['org_id']);
- $users = explode(',', $data['to_user_id']);
- if($send_user_num==1 && count($users) >1){
- $this->error('执行人只能选择单人');
- }
- $to_user_id = array_unique($users);
- $todoData = [
- 'order_id' => $orderId,
- 'todo_content' => $data['todo_content'],
- 'create_user_id' => $this->userId,
- 'org_id' => $info['org_id'],
- 'create_time' => $time,
- 'todo_mode' => 1,
- 'work_type_mode' => $info['work_type_mode'],
- 'create_yyyy' => date('Y'),
- 'create_yyyymm' => date('Ym'),
- 'create_yyyymmdd' => date('Ymd'),
- ];
- $taskData = [
- 'org_id' => $info['org_id'],
- 'type' => 1,
- 'start_time' => $time,
- 'create_time' => $time,
- ];
- if ($type == 0){
- if($info['work_type_mode']==1){
- $orderRepair = Db::name('order_repair')
- ->where('order_id',$info['id'])
- ->find();
- $taskData['priority'] = !empty($orderRepair) && $orderRepair['repair_priority']==3?1:0;
- }else if ($info['work_type_mode']==3){
- $order_convey = Db::name('order_convey')
- ->where('order_id',$info['id'])
- ->find();
- $taskData['priority'] = !empty($order_convey) && $order_convey['priority']==3?2:0;
- }
- }
- $sns = [];
- foreach ($to_user_id as $k => $v) {
- if(empty($v)){
- continue;
- }
- $todoData['to_user_id'] = $v;
- $todoData['sn'] = get_unique_sn(get_config('sn_prefix'));
- while (true){
- if(in_array($todoData['sn'],$sns)){
- $todoData['sn'] = get_unique_sn(get_config('sn_prefix'));
- }else{
- $sns[] = $todoData['sn'];
- break;
- }
- }
- $res = Db::name('todo')
- ->insertGetId($todoData);
- if (!$res) {
- \exception('执行人:' . $v . '派单失败');
- }
- $pusharr[] = [
- 'user_id' => $v,
- 'todo_id' => $res
- ];
- $taskData['user_id'] = $v;
- $taskData['bus_id'] = $res;
- $res = Db::name('task')
- ->insert($taskData);
- if (!$res) {
- \exception('执行人:' . $v . '任务保存失败');
- }
- }
- $res = Db::name('orders')->where('id', $orderId)
- ->update(['order_mode' => 4, 'send_time' => $time]);
- if (!$res) {
- \exception('订单更新失败');
- }
- Db::commit();
- if($pusharr){
- foreach ($pusharr as $k=>$v){
- // 极光推送
- send_jpush([$v['user_id']],AppMsg::PUSH_WORKER_ORDER_SEND,'',['id'=>$v['todo_id']]);
- }
- }
- $this->success('操作成功');
- }catch (DbException $e){
- Db::rollback();
- $this->error($e->getMessage());
- }
- }
- }
- public function history(){
- $mode = input('mode',0,'intval');
- if(request()->isAjax()){
- //分页参数
- $length = input('rows',10,'intval'); //每页条数
- $page = input('page',1,'intval'); //第几页
- $start = ($page - 1) * $length; //分页开始位置
- //排序
- $sortRow = input('sidx','a.id','trim'); //排序列
- $sort = input('sord','desc','trim'); //排序方式
- $order = $sortRow.' '.$sort;
- $sn = input('sn','','trim');
- $s = input('start','');
- $e= input('end','');
- $del= input('del','');
- $query = Db::name('ai_send_success')
- ->alias('a')
- ->join('orders o','a.order_id = o.id')
- ->where('a.org_id', $this->orgId)
- ->when($mode > 0,function ($query) use($mode){
- $query->where('a.mode', $mode);
- })->when($del != '',function ($query) use($del){
- $query->where('a.del', $del);
- }) ->when($s,function ($query) use($s){
- $query->where('a.create_time','>=', $s);
- })->when($e,function ($query) use($e){
- $query->where('a.create_time','<=', $e);
- })->when($sn,function ($query) use($sn){
- $query->where('o.sn', $sn);
- })
- ->field('a.*,o.sn,o.user_id as uid');
- //数据查询
- $todoList = $query
- ->order('a.create_time desc')
- ->limit(($page -1) * $length,$length)
- ->select();
- $userIds = array_column($todoList,'uid');
- $toUserIds = array_column($todoList,'user_id');
- $allIds = array_unique(array_merge($toUserIds,$userIds));
- $users = Db::name('user')->whereIn('id',$allIds)->column('real_name','id');
- foreach ($todoList as &$v){
- $v['user'] = $users[$v['uid']]??'';
- $v['toUser'] = $users[$v['user_id']]??'';
- $v['type'] = self::$types[$v['mode']]??'';
- }
- unset($v);
- //数据返回
- $totalCount = $query->removeOption('limit')->count();
- $totalPage = ceil($totalCount/$length);
- $result['page'] = $page;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $todoList;
- return json($result);
- }else{
- $this->assign('mode',$mode);
- $this->assign('types',self::$types);
- return $this->fetch();
- }
- }
- public function UnDispatched(){
- $mode = input('mode',0,'intval');
- if(request()->isAjax()){
- //分页参数
- $length = input('rows',10,'intval'); //每页条数
- $page = input('page',1,'intval'); //第几页
- $start = ($page - 1) * $length; //分页开始位置
- //排序
- $sortRow = input('sidx','a.id','trim'); //排序列
- $sort = input('sord','desc','trim'); //排序方式
- $order = $sortRow.' '.$sort;
- $sn = input('sn',null,'trim');
- $query = Db::name('orders')
- ->where('org_id',$this->orgId)
- ->where('order_mode',1)
- ->where('del',0)
- ->whereIn('work_type_mode',[1,2,3,4])
- ->when($mode > 0,function ($query) use($mode){
- $query->where('work_type_mode', $mode);
- })
- ->where('create_yyyymmdd',date('Ymd'))
- ->whereNotExists(function ($query) {
- $query->table('ai_send_fail')
- ->whereColumn('ai_send_fail.order_id', 'orders.id');
- })
- ->where('order_mode',1)
- ->when(!is_null($sn),function ($query) use($sn){
- $query->where('sn', $sn);
- })
- ->field('id,sn,work_type_mode,user_id');
- //数据查询
- $orderList = $query
- ->limit(($page -1) * $length,$length)
- ->select();
- $users = Db::name('user') ->whereIn('id',array_unique(array_column($orderList,'user_id'))) ->column('real_name','id');
- $i = 1;
- foreach ($orderList as &$v2){
- $v2['user'] = $users[$v2['user_id']]??'';
- $v2['type'] = self::$types[$v2['work_type_mode']]??'';
- $v2['flag'] = 0;
- if ($i <= 20){
- $v2['flag'] = 1;
- $i ++;
- }
- }
- unset($v2);
- //数据返回
- $totalCount = $query->removeOption('limit')->count();
- $totalPage = ceil($totalCount/$length);
- $result['page'] = $page;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $orderList;
- return json($result);
- }else{
- $this->assign('mode',$mode);
- $this->assign('types',self::$types);
- return $this->fetch();
- }
- }
- public function abnormal()
- {
- $type= input('type',0,'intval');
- if(request()->isAjax()) {
- $sn = input('sn','','trim');
- if ($type == 1) { //异常
- $query = Db::name('ai_send_fail')
- ->alias('a')
- ->join('orders o', 'a.order_id = o.id')
- ->where('a.org_id', $this->orgId)
- ->where('a.status', 0)
- // ->whereTime('a.create_time', 'today')
- ->when($sn,function ($query) use($sn){
- $query->where('o.sn', $sn);
- })
- ->field('o.sn,o.user_id,o.work_type_mode,o.id');
- } else {//驳回
- $query = Db::name('todo')
- ->alias('a')
- ->join('orders o', 'a.order_id = o.id')
- ->where('a.org_id', $this->orgId)
- ->where('a.create_user_id', -1)
- ->where('a.todo_mode', 4)
- // ->whereTime('a.create_time', 'today')
- ->when($sn,function ($query) use($sn){
- $query->where('o.sn', $sn);
- })
- ->field('o.sn,o.user_id,o.work_type_mode,a.id,a.to_user_id');
- }
- $lists = $query->order('o.id desc')->select();
- $users = Db::name('user')->whereIn('id', array_unique(array_column($lists, 'user_id')))->column('real_name', 'id');
- foreach ($lists as &$v2) {
- $v2['user'] = $users[$v2['user_id']] ?? '';
- $v2['type'] = self::$types[$v2['work_type_mode']] ?? '';
- if ($type == 2) {
- $v2['toUser'] = Db::name('user')->where('id',$v2['to_user_id'])->value('real_name')??'';
- }
- $v2['status'] = '派单未匹配';
- }
- unset($v2);
- //数据返回
- $totalCount = $query->count();
- $totalPage = 1;
- $result['page'] = 1;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $lists;
- return json($result);
- }else{
- $this->assign('type',$type);
- return $this->fetch();
- }
- }
- }
|