1, 'name' => '报修', 'finish' => 0, 'total' => 0, 'bl' => 0],
['id' => 2, 'name' => '保洁', 'finish' => 0, 'total' => 0, 'bl' => 0],
['id' => 3, 'name' => '运送', 'finish' => 0, 'total' => 0, 'bl' => 0],
['id' => 4, 'name' => '安保', 'finish' => 0, 'total' => 0, 'bl' => 0]
];
$curTime = date('Ymd');
$total = 0;
$finish = 0;
foreach ($lists as $k=>$v){
$t = Db::name('orders')
->where('del',0)
->where('work_type_mode',$v['id'])
->where('create_yyyymmdd',$curTime)
->where('org_id',$this->orgId)
->count();
$f = Db::name('orders')
->where('del',0)
->where('work_type_mode',$v['id'])
->where('order_mode','in',[5,6])
->where('create_yyyymmdd',$curTime)
->where('org_id',$this->orgId)
->count();
$total += $t;
$finish += $f;
$lists[$k]['finish'] = $f;
$lists[$k]['total'] = $t;
$lists[$k]['bl'] = $t>0?round($f/$t,2)*100:0;
}
$bl = $total > 0?(round($finish/$total,3)*100):0;
$data = [
'bl' => $bl.'%',
'list' => $lists
];
HelpHander::success($data);
}
// 任务数据统计
public function orderCount(){
$mode = input('mode/d',1);
$type = input('type/d',1);
if(!in_array($type,[1,2,3])||!in_array($mode,[1,2,3,4])){
HelpHander::error('参数错误');
}
$date = [];
$curDay = date('Y-m-d');
if($type == 1){ // 日统计
$date[] = '03';
$date[] = '06';
$date[] = '09';
$date[] = '12';
$date[] = '15';
$date[] = '18';
$date[] = '21';
$date[] = '24';
}else if($type == 2){ // 周统计
$ms = Time::week();
$start = $ms[0];
$end = $ms[1] + 1;
$date[] = date('Y-m-d',$start);
$i = 1;
while (($start + $i*24*60*60) < $end){
$date[] = date('Y-m-d',$start + $i*24*60*60);
$i++;
}
}else{ // 月统计
$ms = Time::month();
$start = $ms[0];
$end = $ms[1] + 1;
$i = 1;
while (($start + $i*24*60*60) < $end){
$date[] = date('Y-m-d',$start + $i*24*60*60);
$i++;
}
}
$d1 = [];
$d2 = [];
$d = [];
foreach ($date as $k=>$v){
$map = [];
$map[] = ['org_id','=',$this->orgId];
$map[] = ['work_type_mode','=',$mode];
$map[] = ['del','=',0];
if($type == 1){ // 日统计
if($k == 0){
$s = $curDay.' 00:00:00';
}else{
$s = $curDay.' '.$date[$k-1].':00:00';
}
$e = $curDay.' '.$v.':00:00';
$map[] = ['create_time','egt',$s];
$map[] = ['create_time','lt',$e];
$d[] = (int)$v;
}else{
$map[] = ['create_yyyymmdd','=',date('Ymd',strtotime($v))];
$d[] = date('m-d',strtotime($v));
}
$order = Db::name('orders')->where($map)->count();
$todo = Db::name('todo')->where($map)->count();
$d1[] = $todo;
$d2[] = $order;
}
HelpHander::success(['d'=>$d,'d1'=>$d1,'d2'=>$d2]);
}
// 热点科室排名
public function hotDep(){
$type = input('type/d',1);
if(!in_array($type,[1,2])){
HelpHander::error('参数错误');
}
if($type == 1){ // 运送
$map[] = ['work_type_mode','=',3];
$map[] = ['org_id','=',$this->orgId];
$map[] = ['del','=',0];
$lists = Db::name('orders')
->where($map)
->field('count(*) as count,dep_id')
->group('dep_id')
->distinct(true)
->order('count desc')
->limit(10)
->select();
}else{ // 陪护
$map[] = ['org_id','=',$this->orgId];
$lists = Db::name('ph_orders')
->where($map)
->field('count(*) as count,dep_id')
->group('dep_id')
->distinct(true)
->order('count desc')
->limit(10)
->select();
}
$data = [];
$host = request()->domain(true);
foreach ($lists as $k=>$v){
if($k == 0){
$top = '
';
}else if($k == 1){
$top = '
';
}else if($k == 2){
$top = '
';
}else{
$top = 'TOP'.($k+1);
}
$depName = Db::name('dep')->where('id',$v['dep_id'])->value('title');
$data[] = [$top,$depName?$depName:''];
}
HelpHander::success($data);
}
// 耗材使用排名
public function hotMate(){
$map[] = ['tm.org_id','=',$this->orgId];
$lists = Db::name('todo_mate_item')
->alias('tmi')
->join('todo_mate tm','tm.id = tmi.todo_mate_id')
->where($map)
->field('sum(total) as total,items_id')
->group('items_id')
->distinct(true)
->order('total desc')
->limit(10)
->select();
$data = [];
$host = request()->domain(true);
foreach ($lists as $k=>$v){
if($k == 0){
$top = '
';
}else if($k == 1){
$top = '
';
}else if($k == 2){
$top = '
';
}else{
$top = 'TOP'.($k+1);
}
$name = Db::name('mate_goods')->where('id',$v['items_id'])->value('title');
$data[] = [$top,$name?$name:''];
}
HelpHander::success($data);
}
//任务数据总览
public function taskList(){
$mode = input('mode/d',1);
if(!in_array($mode,[1,2,3,4,5])){
HelpHander::error('参数错误');
}
$data = [];
$header = ['状态', '类型', '始发地', '目的地', '需求时间', '执行人', '派工时间', '接收时间'];
if($mode == 5){
$header = ['状态', '订单号', '类型', '护工', '下单时间'];
$lists = Db::name('ph_orders')
->where('org_id',$this->orgId)
->where('status','in',[1,2])
->order('id desc')
->field('id,sn,cate_id,status,create_time')
->limit(20)
->select();
foreach ($lists as $k=>$v){
$cate = Db::name('cate')->where('id',$v['cate_id'])->value('title');
$stxt = '新订单';
$users = '';
if($v['status'] == 2){
$stxt = '服务中';
$unames = Db::name('ph_todo')
->alias('t')
->join('worker w','t.worker_id = w.id')
->join('user u','u.id = w.user_id')
->where('t.order_id',$v['id'])
->where('t.status',1)
->column('real_name');
$users = $unames?implode(',',$unames):'';
}
$data[] = [$stxt,$v['sn'],$cate,$users,$v['create_time']];
}
}else{
if($mode == 1){
$header = ['状态', '科室', '报修事项', '内容', '下单时间'];
}else if($mode == 2||$mode == 4){
$header = ['状态', '科室', '内容', '下单时间'];
}
$lists = Db::name('orders')
->where('org_id',$this->orgId)
->where('order_mode','in',[1,4])
->where('work_type_mode',$mode)
->where('del',0)
->order('id desc')
->limit(20)
->field('id,order_mode,create_time,send_time,content,dep_id')
->select();
foreach ($lists as $k=>$v){
$dep = Db::name('dep')->where('id',$v['dep_id'])->value('title');
$status = Db::name('order_mode')->where('id',$v['order_mode'])->value('out_content');
if($mode == 1){ // 报修
$type = Db::name('order_repair')
->alias('or')
->leftJoin('order_type ot','ot.id = or.type_id')
->where('or.order_id',$v['id'])
->value('title');
$data[] = [$status,$dep,$type?$type:'',$v['content'],$v['create_time']];
}else if($mode == 3){ //运送
$convey = Db::name('order_convey')
->alias('oc')
->join('convey_cate cc','cc.id = oc.type')
->where('oc.order_id',$v['id'])
->field('oc.*,cc.title as cate_title')
->find();
$start = Db::name('address')->where('id',$convey['start'])->value('title');
$end = Db::name('address')->where('id',$convey['end'])->value('title');
$todos = Db::name('todo')
->alias('t')
->join('user u','u.id = t.to_user_id')
->where('t.order_id',$v['id'])
->where('t.del',0)
->where('t.todo_mode','in',[1,2,3])
->field('t.confirm_time,u.real_name')
->select();
$todos = $todos?$todos:[];
$unames = [];
$confirm = '';
foreach ($todos as $tk=>$tv){
$unames[] = $tv['real_name'];
if(!$confirm){
$confirm = $tv['confirm_time'];
}
}
$un = $unames?implode(',',$unames):'';
$send = $v['send_time']?date('H:i',strtotime($v['send_time'])):'';
$xq = date('H:i',strtotime($convey['xq_time']));
$confirm = $confirm?date('H:i',strtotime($confirm)):'';
$data[] = [$status,$convey['cate_title'],$start,$end,$xq,$un,$send,$confirm];
}else{ // 保洁,安保
$data[] = [$status,$dep,$v['content'],$v['create_time']];
}
}
}
HelpHander::success(['data'=>$data,'header'=>$header]);
}
// 任务数据统计
public function orderCountDate(){
$type = input('type/d',1);
if(!in_array($type,[1,2,3])){
HelpHander::error('参数错误');
}
$y = [];
$curDay = date('Y-m-d');
$month = [];
if($type == 1){ // 年统计
$date = [];
for ($i=11;$i>=0;$i--){
$month[11-$i] = date('Ym',strtotime('-'.$i.'month'));
$y[] = date('m',strtotime('-'.$i.'month'));
}
}else if($type == 2){ // 月统计
$ms = Time::month();
$start = $ms[0];
$end = $ms[1] + 1;
$i = 1;
while (($start + $i*24*60*60) < $end){
$date[] = date('Y-m-d',$start + $i*24*60*60);
$i++;
}
}else{ // 日统计
$date[] = '03';
$date[] = '06';
$date[] = '09';
$date[] = '12';
$date[] = '15';
$date[] = '18';
$date[] = '21';
$date[] = '24';
}
$d1 = [];
$d2 = [];
$d = [];
if($type != 1 ){
foreach ($date as $k=>$v){
$map = [];
$map[] = ['org_id','=',$this->orgId];
$map[] = ['del','=',0];
if($type == 3){ // 日统计
if($k == 0){
$s = $curDay.' 00:00:00';
}else{
$s = $curDay.' '.$date[$k-1].':00:00';
}
$e = $curDay.' '.$v.':00:00';
$map[] = ['create_time','egt',$s];
$map[] = ['create_time','lt',$e];
$d[] = (int)$v;
}else if($type == 2){
$map[] = ['create_yyyymmdd','=',date('Ymd',strtotime($v))];
$d[] = date('m-d',strtotime($v));
}
$order = Db::name('orders')->where($map)->count();
$todo = Db::name('todo')->where($map)->count();
$d1[] = $todo;
$d2[] = $order;
}
}else{
foreach ($month as $k=>$v){
$map = [];
$map[] = ['org_id','=',$this->orgId];
$map[] = ['del','=',0];
$map[] = ['create_yyyymm','=',$v];
$order = Db::name('orders')->where($map)->count();
$todo = Db::name('todo')->where($map)->count();
$d1[] = $todo;
$d2[] = $order;
}
foreach ($y as $k=>$v){
if($v < 10){
$n = substr($v,1,1);
}else{
$n = $v;
}
$y[$k] = $n;
}
$d = $y;
}
HelpHander::success(['d'=>$d,'d1'=>$d1,'d2'=>$d2]);
}
//任务数据总览
public function taskList2(){
$mode = input('mode/d',1);
if(!in_array($mode,[1,2,3,4,5])){
HelpHander::error('参数错误');
}
$data = [];
$header = ['状态', '类型', '始发地', '目的地', '需求时间', '执行人', '派工时间', '接收时间'];
if($mode == 5){
$header = ['状态', '订单号', '类型', '护工', '下单时间'];
$lists = Db::name('ph_orders')
->where('org_id',$this->orgId)
// ->where('status','in',[1,2])
->order('id desc')
->field('id,sn,cate_id,status,create_time')
->limit(30)
->select();
foreach ($lists as $k=>$v){
$cate = Db::name('cate')->where('id',$v['cate_id'])->value('title');
$stxt = '新订单';
$users = '';
// if($v['status'] == 2){
// $stxt = '服务中';
// $unames = Db::name('ph_todo')
// ->alias('t')
// ->join('worker w','t.worker_id = w.id')
// ->join('user u','u.id = w.user_id')
// ->where('t.order_id',$v['id'])
// ->where('t.status',1)
// ->column('real_name');
// $users = $unames?implode(',',$unames):'';
// }
$unames = Db::name('ph_todo')
->alias('t')
->join('worker w','t.worker_id = w.id')
->join('user u','u.id = w.user_id')
->where('t.order_id',$v['id'])
// ->where('t.status',1)
->column('real_name');
$users = $unames?implode(',',$unames):'';
$data[$k]['status'] = $v['status'];
$data[$k]['sn'] = $v['sn'];
$data[$k]['cate'] = $cate;
$data[$k]['users'] = $users;
$data[$k]['create_time'] = $v['create_time'];
// $data[] = [$stxt,$v['sn'],$cate,$users,$v['create_time']];
}
}else{
if($mode == 1){
$header = ['状态', '科室', '报修事项', '内容', '下单时间'];
}else if($mode == 2||$mode == 4){
$header = ['状态', '科室', '内容', '下单时间'];
}
$lists = Db::name('orders')
->where('org_id',$this->orgId)
// ->where('order_mode','in',[1,4])
->where('work_type_mode',$mode)
->where('del',0)
->order('id desc')
->limit(30)
->field('id,order_mode,create_time,send_time,content,dep_id')
->select();
foreach ($lists as $k=>$v){
$dep = Db::name('dep')->where('id',$v['dep_id'])->value('title');
if($mode == 1){ // 报修
$type = Db::name('order_repair')
->alias('or')
->leftJoin('order_type ot','ot.id = or.type_id')
->where('or.order_id',$v['id'])
->value('title');
$data[$k]['order_mode'] = $v['order_mode'];
$data[$k]['dep'] = $dep;
$data[$k]['type'] = $type?$type:'';
$data[$k]['content'] = $v['content'];
$data[$k]['create_time'] = $v['create_time'];
// $data[] = [$status,$dep,$type?$type:'',$v['content'],$v['create_time']];
}else if($mode == 3){ //运送
$convey = Db::name('order_convey')
->alias('oc')
->join('convey_cate cc','cc.id = oc.type')
->where('oc.order_id',$v['id'])
->field('oc.*,cc.title as cate_title')
->find();
$start = Db::name('address')->where('id',$convey['start'])->value('title');
$end = Db::name('address')->where('id',$convey['end'])->value('title');
$todos = Db::name('todo')
->alias('t')
->join('user u','u.id = t.to_user_id')
->where('t.order_id',$v['id'])
->where('t.del',0)
->where('t.todo_mode','in',[1,2,3])
->field('t.confirm_time,u.real_name')
->select();
$todos = $todos?$todos:[];
$unames = [];
$confirm = '';
foreach ($todos as $tk=>$tv){
$unames[] = $tv['real_name'];
if(!$confirm){
$confirm = $tv['confirm_time'];
}
}
$un = $unames?implode(',',$unames):'';
$send = $v['send_time']?date('H:i',strtotime($v['send_time'])):'';
$xq = date('H:i',strtotime($convey['xq_time']));
$confirm = $confirm?date('H:i',strtotime($confirm)):'';
$data[$k]['order_mode'] = $v['order_mode'];
$data[$k]['cate_title'] = $convey['cate_title'];
$data[$k]['start'] = $start;
$data[$k]['end'] = $end;
$data[$k]['xq'] = $xq;
$data[$k]['un'] = $un;
$data[$k]['send'] = $send;
$data[$k]['confirm'] = $confirm;
// $data[] = [$status,$convey['cate_title'],$start,$end,$xq,$un,$send,$confirm];
}else{ // 保洁,安保
// $data[] = [$status,$dep,$v['content'],$v['create_time']];
$data[$k]['order_mode'] = $v['order_mode'];
$data[$k]['dep'] = $dep;
$data[$k]['content'] = $v['content'];
$data[$k]['create_time'] = $v['create_time'];
}
}
}
$slist = [];
if($mode == 5){
foreach ($data as $k=>$v){
if($v['status'] == 0){
$slist[$k][] = '新订单';
$slist[$k][] = ''.$v['sn'].'';
$slist[$k][] = ''.$v['cate'].'';
$slist[$k][] = ''.$v['users'].'';
$slist[$k][] = ''.$v['create_time'].'';
}else if($v['status'] == 1){
$slist[$k][] = '进行中';
$slist[$k][] = ''.$v['sn'].'';
$slist[$k][] = ''.$v['cate'].'';
$slist[$k][] = ''.$v['users'].'';
$slist[$k][] = ''.$v['create_time'].'';
}else{
$status = '';
if($v['status'] == 2){
$status = '已完成';
}elseif($v['status'] == 3){
$status = '已作废';
}elseif($v['status'] == 4){
$status = '已结算';
}
$slist[$k][] = $status;
$slist[$k][] = $v['sn'];
$slist[$k][] = $v['cate'];
$slist[$k][] = $v['users'];
$slist[$k][] = $v['create_time'];
}
}
}elseif ($mode == 1){
foreach ($data as $k=>$v){
$status = Db::name('order_mode')->where('id',$v['order_mode'])->value('out_content');
if($v['order_mode'] == 1){
$slist[$k][] = '新订单';
$slist[$k][] = ''.$v['dep'].'';
$slist[$k][] = ''.$v['type'].'';
$slist[$k][] = ''.$v['content'].'';
$slist[$k][] = ''.$v['create_time'].'';
}else if($v['order_mode'] == 4){
$slist[$k][] = '进行中';
$slist[$k][] = ''.$v['dep'].'';
$slist[$k][] = ''.$v['type'].'';
$slist[$k][] = ''.$v['content'].'';
$slist[$k][] = ''.$v['create_time'].'';
}else{
$slist[$k][] = $status;
$slist[$k][] = $v['dep'];
$slist[$k][] = $v['type'];
$slist[$k][] = $v['content'];
$slist[$k][] = $v['create_time'];
}
}
}elseif ($mode == 2 || $mode == 4){
foreach ($data as $k=>$v){
$status = Db::name('order_mode')->where('id',$v['order_mode'])->value('out_content');
if($v['order_mode'] == 1){
$slist[$k][] = '新订单';
$slist[$k][] = ''.$v['dep'].'';
$slist[$k][] = ''.$v['content'].'';
$slist[$k][] = ''.$v['create_time'].'';
}else if($v['order_mode'] == 4){
$slist[$k][] = '进行中';
$slist[$k][] = ''.$v['dep'].'';
$slist[$k][] = ''.$v['content'].'';
$slist[$k][] = ''.$v['create_time'].'';
}else{
$slist[$k][] = $status;
$slist[$k][] = $v['dep'];
$slist[$k][] = $v['content'];
$slist[$k][] = $v['create_time'];
}
}
}elseif ($mode == 3){
foreach ($data as $k=>$v){
$status = Db::name('order_mode')->where('id',$v['order_mode'])->value('out_content');
if($v['order_mode'] == 1){
$slist[$k][] = '新订单';
$slist[$k][] = ''.$v['cate_title'].'';
$slist[$k][] = ''.$v['start'].'';
$slist[$k][] = ''.$v['end'].'';
$slist[$k][] = ''.$v['xq'].'';
$slist[$k][] = ''.$v['un'].'';
$slist[$k][] = ''.$v['send'].'';
$slist[$k][] = ''.$v['confirm'].'';
}else if($v['order_mode'] == 4){
$slist[$k][] = '进行中';
$slist[$k][] = ''.$v['cate_title'].'';
$slist[$k][] = ''.$v['start'].'';
$slist[$k][] = ''.$v['end'].'';
$slist[$k][] = ''.$v['xq'].'';
$slist[$k][] = ''.$v['un'].'';
$slist[$k][] = ''.$v['send'].'';
$slist[$k][] = ''.$v['confirm'].'';
}else{
$slist[$k][] = $status;
$slist[$k][] = $v['cate_title'];
$slist[$k][] = $v['start'];
$slist[$k][] = $v['end'];
$slist[$k][] = $v['xq'];
$slist[$k][] = $v['un'];
$slist[$k][] = $v['send'];
$slist[$k][] = $v['confirm'];
}
}
}
HelpHander::success(['data'=>$slist,'header'=>$header]);
}
}