field('count(id) orders_number,sum(total_price) money') ->where('is_del', 0) ->whereDay('addtime', 'today') ->find(); //跨库查询网络部和客服部 $internet = Db::connect('mysql3') ->table('source_all') ->field('SUM(sale_total) money,COUNT(id) orders_number') ->whereDay('ordertime') ->whereIn('depart', ['网络部', '客服部']) ->find(); $temp = [ 'orders_number' => isset($rs['orders_number']) ? (isset($internet['orders_number']) ? $rs['orders_number'] + $internet['orders_number'] : $rs['orders_number']) : 0, 'money' => isset($rs['money']) ? (isset($internet['money']) ? $rs['money'] + $internet['money'] : $rs['money']) : 0, ]; return app_show(0, '请求成功', $temp); } //2.今日销冠 public function todaySalesChampion() { $temp = Db::name('sale') ->field('count(id) orders,sum(total_price) money,apply_id') ->where('is_del', 0) ->whereDay('addtime', 'today') ->group('apply_id') ->order('money', 'desc') ->limit(1) ->buildSql(); $rs = Db::table($temp) ->alias('t') ->field('t.apply_id,t.orders,t.money,u.itemid company_id, c.`name` company, u.nickname') ->leftJoin('depart_user u', 'u.uid=t.apply_id AND u.is_del=0') ->leftJoin('company_item c', 'c.id=u.itemid AND c.is_del=0') ->select() ->toArray(); return app_show(0, '请求成功', empty($rs[0]) ? [] : $rs[0]); } //3.今日采购 public function todayPurchase() { $rs = Db::name('purchease_order') ->field('count(id) orders_number,sum(good_num) good_num') ->where('is_del', 0) ->whereDay('addtime', 'today') ->find(); $consult_info_total = Db::name('consult_info') ->where('is_del', 0) ->whereDay('addtime', 'today') ->count('id'); $consult_bids_total = Db::name('consult_bids') ->where('is_del', 0) ->whereDay('addtime', 'today') ->count('id'); $data = [ 'orders_number' => isset($rs['orders_number']) ? $rs['orders_number'] : 0, 'good_num' => isset($rs['good_num']) ? $rs['good_num'] : 0, 'consult_info_total' => $consult_info_total, 'consult_bids_total' => $consult_bids_total, ]; return app_show(0, '请求成功', $data); } //4.票(相关,暂不做) //5.竞价单和采购单 public function totalZixunPurchease() { //招标单数(咨询单数) $zixun_total = Db::name('consult_info') ->where(['is_del' => 0]) ->count('id'); //已反馈单数, $sql = Db::name('consult_info') ->field('zxNo') ->where(['is_del' => 0, 'status' => 1]) ->buildSql(); //正在进行中的咨询单(招标工作台上的数据) $zixun_num_ing = Db::name('consult_info') ->field('zxNo') ->where(['is_del' => 0, 'status' => 1]) ->count('id'); //已反馈的单数 $temp_sql = Db::name('consult_bids') ->field('zxNo') ->where('zxNo IN ' . $sql) ->group('zxNo') ->buildSql(); $not_feedback = Db::table($temp_sql) ->alias('t') ->count('t.zxNo'); //未竞价单数(未反馈单数) = 进行中的单数-已反馈单数 $not_feedback = $zixun_num_ing - $not_feedback; //采购单数 $purchease_total = Db::name('purchease_order') ->where('is_del', 0) ->count('id'); //采购单未下单数(状态为待与供应商确认) $purchease_wait_confirm = Db::name('purchease_order') ->where(['is_del' => 0, 'status' => 0]) ->count('id'); //采购单 采购下单数??????? return app_show(0, '请求成功', [ 'zixun_total' => $zixun_total, 'not_feedback' => $not_feedback, 'purchease_total' => $purchease_total, 'purchease_wait_confirm' => $purchease_wait_confirm, ]); } //6.未发货 public function waitSendTotal() { $rs = Db::name('sale') ->field('count(id) order_num,sum(wsend_num) wsend_num') ->where(['is_del' => 0, 'status' => 1])//status==1 待发货 ->find(); return app_show(0, '请求成功', $rs); } //7.今日订单 public function todaySale() { $temp = Db::name('sale') ->alias('s') ->field('s.id,s.apply_id,s.total_price,u.nickname,u.itemid') ->leftJoin('depart_user u', 'u.uid=s.apply_id AND u.is_del=0') ->where('s.is_del', 0) ->whereDay('s.addtime', 'today') ->buildSql(); $rs = Db::table($temp) ->alias('t') ->field('itemid companyId,c.`name` companyName,SUM(t.total_price) total_price,COUNT(t.id) total_order') ->leftJoin('company_item c', 'c.id=t.itemid') ->group('t.itemid') ->order('total_price', 'desc') ->column('itemid companyId,c.`name` companyName,SUM(t.total_price) total_price,COUNT(t.id) total_order', 'name'); //跨库添加网络部数据和客服部数据 $internet = Db::connect('mysql3') ->table('source_all') ->whereDay('ordertime') ->group('depart') ->whereIn('depart', ['网络部', '客服部']) ->column('depart,SUM(sale_total) total_price,COUNT(id) total_order ', 'depart'); if (!empty($internet)) { if (isset($internet['网络部'])) { if (isset($rs['网络部'])) { $rs['网络部']['total_price'] += $internet['网络部']['total_price']; $rs['网络部']['total_order'] += $internet['网络部']['total_order']; } else { $rs[] = [ 'companyId' => '', 'companyName' => '网络部', 'total_price' => $internet['网络部']['total_price'], 'total_order' => $internet['网络部']['total_order'], ]; } } if (isset($internet['客服部'])) { if (isset($rs['客服部'])) { $rs['客服部']['total_price'] += $internet['客服部']['total_price']; $rs['客服部']['total_order'] += $internet['客服部']['total_order']; } else { $rs[] = [ 'companyId' => '', 'companyName' => '客服部', 'total_price' => $internet['客服部']['total_price'], 'total_order' => $internet['客服部']['total_order'], ]; } } //重新按照总金额排序 usort($rs, function ($left, $right) { return ($left['total_price'] > $right['total_price']) ? -1 : 1; }); } return app_show(0, '请求成功', $rs); } //8.本月完成率(数据在结算库里,部门完成率=部门净销售额 / 部门销售指标) //没有销售指标的部门,不纳入统计范围 public function monthFinishRate() { //部门净销售额 $sales_volume = Db::name('sale') ->alias('s') ->leftJoin('depart_user u', 'u.uid=s.apply_id AND u.is_del=0') ->leftJoin('company_item c', 'c.id=u.itemid AND c.is_del=0') ->group('u.itemid') ->whereMonth('s.addtime') ->column('(sum(s.total_price) - sum(s.th_fee)) sales_volume,u.itemid,c.name', 'c.name'); //额外把网络部和客服部的销售数据跨数据库查询出来 $other_network = Db::connect('mysql3') ->table('source_all') ->whereMonth('ordertime') ->whereIn('depart', ['网络部', '客服部']) ->group('depart') ->column('SUM(sale_total) sale_total', 'depart'); if (isset($other_network['网络部'])) { if (isset($sales_volume['网络部'])) $sales_volume['网络部']['sales_volume'] += $other_network['网络部']; else { $sales_volume['网络部'] = [ 'sales_volume' => $other_network['网络部'], 'itemid' => -1, 'name' => '网络部' ]; } } if (isset($other_network['客服部'])) { if (isset($sales_volume['客服部'])) $sales_volume['客服部']['sales_volume'] += $other_network['客服部']; else { $sales_volume['客服部'] = [ 'sales_volume' => $other_network['客服部'], 'itemid' => -2, 'name' => '客服部' ]; } } //部门销售指标 $sale_indicators = Db::name('depart_tips') ->field('id,total_tips,depart_item department') ->where(['year' => date('Y'), 'month' => date('n')]) ->select() ->toArray(); $da = []; //计算完成率 foreach ($sale_indicators as $value) { if (isset($sales_volume[$value['department']]['sales_volume'])) { $value['finish'] = $sales_volume[$value['department']]['sales_volume']; $value['finish_rate'] = round(($value['finish'] / $value['total_tips']) * 100, 5); $da[] = $value; } else continue; } //按照完成率排序 usort($da, function ($left, $right) { return ($left['finish_rate'] > $right['finish_rate']) ? -1 : 1; }); //计算汇总完成率 $tmp_total_tips = array_sum(array_column($da, 'total_tips')); $total_finish_rate = $tmp_total_tips ? round((array_sum(array_column($sales_volume, 'sales_volume')) / $tmp_total_tips) * 100, 2) : 0; return app_show(0, '请求成功', ['list' => $da, 'total_finish_rate' => $total_finish_rate]); } //9.转单率-今日 public function orderTransferRateToday() { $consulting = Db::name('sale') ->alias('s') ->leftJoin('depart_user u', 'u.uid=s.apply_id AND u.is_del=0') ->where(['s.order_type' => 3, 's.is_del' => 0])//order_type==3 咨询采反 ->whereDay('s.addtime') ->group('u.itemid') ->column('count(s.id) consulting', 'u.itemid'); $rs = Db::name('consult_order') ->alias('c') ->field('count(c.id) total,c.depart companyId,i.name companyName') ->leftJoin('company_item i', 'i.id=c.depart AND i.is_del=0') ->where(['c.is_del' => 0]) ->whereDay('c.addtime') ->group('c.depart') ->append(['transfer_rate']) ->withAttr('transfer_rate', function ($val, $data) use ($consulting) { $consult = isset($consulting[$data['companyId']]) ? $consulting[$data['companyId']] : 0; return round(($consult / $data['total']) * 100, 2); }) ->select() ->toArray(); return app_show(0, '请求成功', $rs); } //9.转单率-本月 public function orderTransferRateMonth() { $consulting = Db::name('sale') ->alias('s') ->leftJoin('depart_user u', 'u.uid=s.apply_id AND u.is_del=0') ->where(['s.order_type' => 3, 's.is_del' => 0])//order_type==3 咨询采反 ->whereMonth('s.addtime') ->group('u.itemid') ->column('count(s.id) consulting', 'u.itemid'); $rs = Db::name('consult_order') ->alias('c') ->field('count(c.id) total,c.depart companyId,i.name companyName') ->leftJoin('company_item i', 'i.id=c.depart AND i.is_del=0') ->where(['c.is_del' => 0]) ->whereMonth('c.addtime') ->group('c.depart') ->append(['transfer_rate']) ->withAttr('transfer_rate', function ($val, $data) use ($consulting) { $consult = isset($consulting[$data['companyId']]) ? $consulting[$data['companyId']] : 0; return round(($consult / $data['total']) * 100, 2); }) ->select() ->toArray(); return app_show(0, '请求成功', $rs); } //9.转单率-今年 public function orderTransferRateYear() { $consulting = Db::name('sale') ->alias('s') ->leftJoin('depart_user u', 'u.uid=s.apply_id AND u.is_del=0') ->where(['s.order_type' => 3, 's.is_del' => 0])//order_type==3 咨询采反 ->whereYear('s.addtime', date('Y')) ->group('u.itemid') ->column('count(s.id) consulting', 'u.itemid'); $rs = Db::name('consult_order') ->alias('c') ->field('count(c.id) total,c.depart companyId,i.name companyName') ->leftJoin('company_item i', 'i.id=c.depart AND i.is_del=0') ->where(['c.is_del' => 0]) ->whereYear('c.addtime', date('Y')) ->group('c.depart') ->append(['transfer_rate']) ->withAttr('transfer_rate', function ($val, $data) use ($consulting) { $consult = isset($consulting[$data['companyId']]) ? $consulting[$data['companyId']] : 0; return round(($consult / $data['total']) * 100, 2); }) ->select() ->toArray(); return app_show(0, '请求成功', $rs); } //******* 以下是新版数据大屏 的内容*********************************** //1.今日销售 public function dnTodaySale() { $rs = Db::name('sale') ->field('count(id) orders_number,sum(total_price)-sum(th_fee) money,sum(good_num)-sum(th_num) good_num ') ->where('is_del', 0) ->whereDay('addtime', 'today') ->find(); //跨库查询网络部和客服部 $internet = Db::connect('mysql3') ->table('source_all') ->field('SUM(sale_total) money,SUM(order_num) good_num,COUNT(id) orders_number') ->whereDay('ordertime') ->whereIn('depart', ['网络部', '客服部']) ->find(); //组织数据 $data = [ 'orders_number' => bcadd(isset($rs['orders_number']) ? $rs['orders_number'] : '0', isset($internet['orders_number']) ? $internet['orders_number'] : '0'), 'money' => bcadd(isset($rs['money']) ? $rs['money'] : '0', isset($internet['money']) ? $internet['money'] : '0', 2), 'good_num' => bcadd(isset($rs['good_num']) ? $rs['good_num'] : '0', isset($internet['good_num']) ? $internet['good_num'] : '0', 2), ]; return app_show(0, '请求成功', $data); } //2.今日采购 public function dnTodayPurcheaseOrder() { $rs = Db::name('purchease_order') ->field('count(id) orders_number,sum(good_num) good_num') ->where('is_del', 0) ->whereDay('addtime') ->find(); $consult_info_total = Db::name('consult_info') ->where(['is_del' => 0, 'status' => 5])//status==5成功转单 ->whereDay('updatetime') ->count('id'); $consult_bids_total = Db::name('consult_bids') ->where('is_del', 0) ->whereDay('addtime') ->count('id'); $data = [ 'consult_info_total' => $consult_info_total,//竞价中标数 'consult_bids_total' => $consult_bids_total,//反馈商品数 'orders_number' => isset($rs['orders_number']) ? $rs['orders_number'] : 0,//采购订单 'good_num' => isset($rs['good_num']) ? $rs['good_num'] : 0,//商品数量 ]; return app_show(0, '请求成功', $data); } //3.今日结算 //4.销售转单数 public function dnTodayTransferOrder() { $param = $this->request->filter('trim')->only(['itemid' => '0', 'type' => '3', 'date' => date('Y-m-d')], 'post'); $val = Validate::rule([ 'itemid|部门id' => 'require|integer', 'type|日期类型' => 'require|number|in:1,2,3', 'date|筛选日期' => 'require|date', ]); if (!$val->check($param)) return error_show(1005, $val->getError()); $rs = Db::name('consult_info') ->alias('a') ->leftJoin('consult_order b', 'b.zxNo=a.zxNo AND b.is_del=0') ->leftJoin('depart_user u', 'u.uid=b.saleid AND u.is_del=0') ->where(['a.is_del' => 0, 'bargain_num' => 1]); //查询符合条件的竞价单 if ($param['itemid'] == '0') { //以部门为维度 $rs = $rs ->field('a.id,a.status,u.itemid total_id,c.name') ->leftJoin('company_item c', 'c.id=u.itemid AND c.is_del=0'); } else { //以部门下的人为维度 $rs = $rs ->field('a.id,a.status,b.saleid total_id,b.salesman name') ->where('u.itemid', $param['itemid']); } //时间段判断 switch ($param['type']) { case '1': $rs->whereYear('a.addtime', $param['date']); break; case '2': $rs->whereMonth('a.addtime', $param['date']); break; default: $rs->whereDay('a.addtime', $param['date']); break; } $data = $rs->cursor(); $da = []; //组织数据 foreach ($data as $value) { if (!isset($da[$value['total_id']])) { $da[$value['total_id']] = [ 'finish_total' => 0,//销售单(中标单数) 'total' => 0,//竞价单(总单数) 'name' => $value['name']//名称 ]; } $da[$value['total_id']]['total']++; if ($value['status'] == '5') $da[$value['total_id']]['finish_total']++; } //计算转单率 foreach ($da as &$val) { $val['finish_rate'] = bcmul(round(bcdiv($val['finish_total'], $val['total'], 5), 4), '100', 2) . '%'; } return app_show(0, '请求成功', array_merge($da)); } }