From 561f987cf537529f7324dc0facc3f79622c33047 Mon Sep 17 00:00:00 2001 From: qianhy Date: Tue, 25 Apr 2023 10:39:54 +0800 Subject: [PATCH] orders edit_order fixbug zero_fistpay --- .../libraries/receiver/Orders_v2_entity.php | 4426 +++++++++-------- 1 file changed, 2217 insertions(+), 2209 deletions(-) diff --git a/common/libraries/receiver/Orders_v2_entity.php b/common/libraries/receiver/Orders_v2_entity.php index a4a4051d..4156dfe8 100644 --- a/common/libraries/receiver/Orders_v2_entity.php +++ b/common/libraries/receiver/Orders_v2_entity.php @@ -1,2209 +1,2217 @@ -ci = & get_instance(); - $this->ci->load->model('receiver/receiver_customers_model','customers_model'); - - $this->ci->load->model('receiver/order/receiver_orders_v2_model'); - $this->ci->load->model('receiver/order/receiver_order_signs_model','signs_model'); - $this->ci->load->model('receiver/order/receiver_order_deliverys_model','deliverys_model'); - $this->ci->load->model('receiver/order/receiver_order_contracts_model'); - - $this->ci->load->model('receiver/receiver_service_package_model','package_model'); - $this->ci->load->model('receiver/receiver_services_model','services_model'); - - $this->ci->load->model('sys/sys_city_model'); - $this->ci->load->model("sys/sys_company_model"); - - $this->ci->load->model('apporder/order_purchase_model'); - $this->ci->load->model('auto/auto_brand_model'); - $this->ci->load->model('auto/auto_series_model'); - $this->ci->load->model('auto/auto_attr_model'); - $this->ci->load->model("items/items_model"); - - $this->ci->load->model("biz/biz_model"); - $this->ci->load->model('app/liche/app_liche_orders_model'); - } - - //创建意向金订单 - public function c_intention($oid,$uid,$money){ - $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - if(!$this->order_row){ - return false; - } - $p_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'pid'=>0,'status>='=>0]); - $entrust_user = $this->entrust_user($oid); - if(!$p_row){ - $sid = create_order_no(350200,'liche',1,0); - $add_data = [ - 'o_id' => $this->order_row['id'], - 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, - 'sid' => $sid, - 'pid' => 0, - 'brand_id' => $this->order_row['brand_id'], - 's_id' => $this->order_row['s_id'], - 'v_id' => $this->order_row['v_id'], - 'cor_id' => $this->order_row['cor_id'], - 'incor_id' => $this->order_row['incor_id'], - 'c_time' => time() - ]; - $uid && $add_data['uid'] = $uid; - $pid = $this->ci->app_liche_orders_model->add($add_data); - }else{ - $pid = $p_row['id']; - } - $res = false; - $sub_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'type'=>4,'status>='=>0]); - if($pid && !$sub_row){ - //获取微信商户号 - $companys = $this->get_biz_mchid($this->order_row['biz_id'],$this->order_row['brand_id'],$this->order_row['if_local_bill']); - $sid = create_order_no(350200,'liche',1,4); - $sub_data = [ - 'o_id' => $this->order_row['id'], - 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, - 'sid' => $sid, - 'mch_id' => $companys['company']['wx_mchid'], - 'company_id' => $companys['company']['id'], - 'pid' => $pid, - 'type' => 4, - 'brand_id' => $this->order_row['brand_id'], - 's_id' => $this->order_row['s_id'], - 'v_id' => $this->order_row['v_id'], - 'cor_id' => $this->order_row['cor_id'], - 'incor_id' => $this->order_row['incor_id'], - 'total_price' => $money, - 'c_time' => time() - ]; - $uid && $sub_data['uid'] = $uid; - $res = $this->ci->app_liche_orders_model->add($sub_data); - } - return $res; - } - /** - * 获取商家微信商户号 - * @param $biz_id int 商家id - * @param $car_brand_id int 品牌id - * @param $if_local_bill int 是否开具本地发票 - * @return array ['company'=>[],'srv_company'=>[]] - */ - public function get_biz_mchid($biz_id,$car_brand_id=0,$if_local_bill=false){ - $biz = $this->ci->biz_model->get(['id'=>$biz_id],'type,city_id,company_id,srv_company_id,car_brand_id'); - $filed = 'id,wx_mchid,title,short,credit_code,wx_mchid,img_seal'; - $brand_biz = $this->ci->biz_model->get(['city_id'=>$biz['city_id'],'type'=>1,'status'=>1,'car_brand_id'=>$car_brand_id],'type,city_id,company_id,srv_company_id'); - if($brand_biz){ - $where = [ - "status" => 1, - "id in ({$brand_biz['company_id']},{$brand_biz['srv_company_id']})" => null - ]; - $companys = $this->ci->sys_company_model->map('id','',$where,'','','',$filed); - $company = $companys[$brand_biz['company_id']][0]; - $srv_company = $companys[$brand_biz['srv_company_id']][0]; - } - $local_city = false; - if(in_array($biz['city_id'],$this->local_bill_citys) && $if_local_bill){ //是否开具本地发票且在指定城市用本地城市 - $local_city = true; - } - if(!$company || $local_city){ //获取城市销售公司 - $company = $this->ci->sys_company_model->get(['city_id'=>$biz['city_id'],'type'=>1,'status'=>1],$filed); - } - if(!$srv_company || $local_city){ //获取城市服务公司 - $srv_company = $this->ci->sys_company_model->get(['city_id'=>$biz['city_id'],'type'=>0,'status'=>1],$filed); - } - if(!$company){ //获取固定id销售公司 - $company = $this->ci->sys_company_model->get(['id'=>1],$filed); - } - if(!$srv_company){ //获取固定id服务公司 - $srv_company = $this->ci->sys_company_model->get(['id'=>4],$filed); - } - //跑零 用泉州销售公司 - if($car_brand_id==5){ - $company = $this->ci->sys_company_model->get(['id'=>2],$filed); - } - $data = [ - 'company' => $company, - 'srv_company' => $srv_company - ]; - return $data; - } - /** - * 获取代办人用户信息 - * @param $oid int 订单id - * @return array - */ - public function entrust_user($oid){ - $this->ci->load->model('app/liche/app_liche_users_model'); - - !$this->order_row && $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - if(!$this->order_row){ - return []; - } - $user = $this->ci->app_liche_users_model->get(['mobile'=>$this->order_row['owner_mobile']]); - return $user; - } - - /** - * 获取订单服务费 - * @param $oid int 订单id - * @param $res_type string 返回数据格式 - * @param $is_fines int(0否 1是) 是否包含精品选装 - * @return array|int|mixed - */ - public function order_srv_money($oid,$res_type = '',$is_fines=1){ - if(!$this->order_row){ - $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - } - elseif ($this->order_row['id'] != $oid){ - $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - } - $money_json = json_decode($this->order_row['money_json'],true); - $srv_price = 0; - $list = []; //明细 - $services = json_decode($this->order_row['srv_ids'],true); - - if($services){ - $srv_ids = array_column($services,'id'); - $ids = implode(',',$srv_ids); - if($srv_ids){ - $where["id in ($ids)"] = null; - $rows = $this->ci->services_model->map('id','title',$where,'','','','id,title'); - } - foreach($services as $key=>$val){ - if($val['key']!='price_insure'){ //保险费不收 - $srv_price += $money_json[$val['key']]; - $list[] = [ - 'title' => $rows[$val['id']], - 'key' => $val['key'], - 'money' => $money_json[$val['key']] - ]; - } - if($val['key']=='price_insure' && $res_type==1){ - $list[] = [ - 'title' => $rows[$val['id']], - 'key' => $val['key'], - 'money' => '由保险公司收取' - ]; - } - } - } - - if($this->order_row['if_fine']){ //选择精品包 - $fine_price = $money_json['price_fine']; - if($money_json['price_fine_discount']){ //优惠精品价格 - $fine_price = $fine_price - $money_json['price_fine_discount']; - } - $srv_price += $fine_price; - $list[] = [ - 'title' => '精品尊享包', - 'key' => 'price_fine_discount', - 'money' => $fine_price - ]; - } - - if($is_fines){ - $fines = json_decode($this->order_row['fines'],true); - if($fines){ - $price_fine_select = $money_json['price_fine_select'] ? $money_json['price_fine_select'] : 0; - $list[] = [ - 'title' => '精品选装', - 'key' => 'price_fine_select', - 'money' => $price_fine_select, - ]; - $srv_price += $price_fine_select; - } - } - $result['total'] = $srv_price; - $result['list'] = $list; - return $res_type ? $result:$srv_price; - } - - /** - * 生成定金订单 - * @param $oid int 订单id - * @param $uid int 小程序用户id - * @return bool - */ - public function add_book_order($oid,$uid){ - $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - if(!$this->order_row){ - return false; - } - $pay_money = $this->ci->app_liche_orders_model->get(['o_id'=>$oid,'type'=>4,'status>='=>0]); //意向金订单 - $ht_money = $this->ci->app_liche_orders_model->sum('pay_price',['o_id'=>$oid,'type'=>6,'status>='=>0]); //后台添加车款 - - $money_json = json_decode($this->order_row['money_json'],true); - $deposit_count = $this->ci->app_liche_orders_model->count(['o_id'=>$oid,'type'=>1,'status'=>1]); //定金已支付 - $need_pay_money = $money_json['price_book'] - $pay_money['total_price'] - $ht_money['pay_price']; - $res = false; - //if($need_pay_money > 0 && !$deposit_count){ - $payway = $this->order_row['payway']; - $money_json = json_decode($this->order_row['money_json'], true); - $deposit = $money_json['price_book']; - $if_zero_firstpay = $payway == 0 && !$deposit ? 1 : 0; - if(($if_zero_firstpay || $need_pay_money > 0) && !$deposit_count){ - $entrust_user = $this->entrust_user($this->order_row['id']); - $p_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'pid'=>0,'status>='=>0]); - if(!$p_row){ - $sid = create_order_no(350200,'liche',1,0); - $add_data = [ - 'o_id' => $this->order_row['id'], - 'sid' => $sid, - 'pid' => 0, - 'brand_id' => $this->order_row['brand_id'], - 's_id' => $this->order_row['s_id'], - 'v_id' => $this->order_row['v_id'], - 'cor_id' => $this->order_row['cor_id'], - 'incor_id' => $this->order_row['incor_id'], - 'c_time' => time() - ]; - $uid && $add_data['uid'] = $uid; - $entrust_user['id'] && $add_data['entrust_uid'] = $entrust_user['id']; - $pid = $this->ci->app_liche_orders_model->add($add_data); - }else{ - $pid = $p_row['id']; - } - $sub_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'type'=>1,'status>='=>0]); - if($pid && !$sub_row){ - //获取微信商户号 - $companys = $this->get_biz_mchid($this->order_row['biz_id'],$this->order_row['brand_id'],$this->order_row['if_local_bill']); - if($this->order_row['biz_id']==63){ //零跑店 门店ID= 63,车款收款都用 id = 12 的公司 合同收款公司不变 - $filed = 'id,wx_mchid,title,short,credit_code,wx_mchid,img_seal'; - $companys['company'] = $this->ci->sys_company_model->get(['id'=>12],$filed); - } - $sid = create_order_no(350200,'liche',1,1); - $sub_data = [ - 'o_id' => $this->order_row['id'], - 'sid' => $sid, - 'mch_id' => $companys['company']['wx_mchid'], - 'company_id' => $companys['company']['id'], - 'pid' => $pid, - 'type' => 1, - 'brand_id' => $this->order_row['brand_id'], - 's_id' => $this->order_row['s_id'], - 'v_id' => $this->order_row['v_id'], - 'cor_id' => $this->order_row['cor_id'], - 'incor_id' => $this->order_row['incor_id'], - 'total_price' => $need_pay_money, - 'c_time' => time() - ]; - $if_zero_firstpay && $sub_data['status'] = 1; // 0首付强制为已支付 - $if_zero_firstpay && $sub_data['pay_time'] = date('Y-m-d H:i:s'); // 0首付强制支付时间 - $if_zero_firstpay && $sub_data['descrip'] = '零首付'; - $entrust_user['id'] && $sub_data['entrust_uid'] = $entrust_user['id']; - $uid && $sub_data['uid'] = $uid; - $res = $this->ci->app_liche_orders_model->add($sub_data); - - //0首付播报 - if ($if_zero_firstpay && $res){ - $this->ci->load->library('qyrobot'); - $this->ci->qyrobot->deposit_notify_v3($oid); - } - } - } - return $res; - } - - /** - * 创建服务费和尾款 - * @param $oid - * @param $uid - * @return bool - */ - public function add_order($oid,$uid){ - $this->ci->load->helper('order'); - $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - $p_row = $this->ci->app_liche_orders_model->get(['pid'=>0,'o_id'=>$oid,'status>='=>0],'id'); //父订单 - if(!$this->order_row || !$p_row){ - return false; - } - - //获取微信商户号 - $companys = $this->get_biz_mchid($this->order_row['biz_id'],$this->order_row['brand_id'],$this->order_row['if_local_bill']); - if($this->order_row['biz_id']==63){ //零跑店 门店ID= 63,车款收款都用 id = 12 的公司 合同收款公司不变 - $filed = 'id,wx_mchid,title,short,credit_code,wx_mchid,img_seal'; - $companys['company'] = $this->ci->sys_company_model->get(['id'=>12],$filed); - } - - $srv_money = $this->order_srv_money($oid); //服务费 - $money_json = json_decode($this->order_row['money_json'],true); - $total_price = $this->total_price($oid); - if(!$this->order_row['payway'] && !$money_json['price_loan']){//贷款未填写首付 - return false; - } - $to_srv_price = $srv_money; - //后台添加车款 - $pay_row = $this->ci->app_liche_orders_model->sum('pay_price',['status'=>1,'type'=>6,'o_id'=>$oid]); - if($pay_row['pay_price']>=0 && $pay_row['pay_price']>=$money_json['price_book']){ - if(!$this->order_row['payway']){ //贷款 - $total_price = $total_price - $money_json['price_loan']; - } - $to_com_price = $total_price - $pay_row['pay_price']; - }else{ - if($this->order_row['payway']){ //全款 - $to_com_price = $total_price - $money_json['price_book']; - }else{ //分期 - $to_com_price = $total_price-$money_json['price_loan'] - $money_json['price_book']; - } - } - $to_com_price = $to_com_price>0 ? $to_com_price : 0; - $last_order = $this->ci->app_liche_orders_model->get(['status>='=>0,'type'=>3,'o_id'=>$oid]); - $srv_order = $this->ci->app_liche_orders_model->get(['status>='=>0,'type'=>2,'o_id'=>$oid]); - if($last_order && $srv_order){ //存在尾款订单 - if($last_order['total_price']!=$to_com_price && $to_com_price>0){ - $this->ci->app_liche_orders_model->update(['total_price'=>$to_com_price,'status'=>0],['id'=>$last_order['id']]); - } - return true; - } - $add_data = []; - $entrust_user = $this->entrust_user($oid); - if($to_srv_price>0 && !$this->ci->app_liche_orders_model->count(['o_id'=>$this->order_row['id'],'type'=>2,'status>='=>0])){ - $order_type = 2; - $sid = create_order_no(350200,'liche',1,$order_type); - $add_data[] = [ - 'o_id' => $this->order_row['id'], - 'uid' => $uid ? $uid : 0, - 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, - 'sid' => $sid, - 'mch_id' => $companys['srv_company']['wx_mchid'], - 'company_id' => $companys['srv_company']['id'], - 'pid' => $p_row['id'], - 'brand_id' => $this->order_row['brand_id'], - 's_id' => $this->order_row['s_id'], - 'v_id' => $this->order_row['v_id'], - 'cor_id' => $this->order_row['cor_id'], - 'incor_id' => $this->order_row['incor_id'], - 'total_price' => $to_srv_price, - 'type' => $order_type, - 'c_time' => time() - ]; - } - if($to_com_price>0 && !$this->ci->app_liche_orders_model->count(['o_id'=>$this->order_row['id'],'type'=>3,'status>='=>0])){ - $book_order = $this->ci->app_liche_orders_model->get(['status>='=>0,'type'=>1,'o_id'=>$oid]); - $book_order['mch_id'] && $companys['company']['wx_mchid'] = $book_order['mch_id']; - $book_order['company_id'] && $companys['company']['id'] = $book_order['company_id']; - $order_type = 3; - $sid = create_order_no(350200,'liche',1,$order_type); - $add_data[] = [ - 'o_id' => $this->order_row['id'], - 'uid' => $uid ? $uid : 0, - 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, - 'sid' => $sid, - 'mch_id' => $companys['company']['wx_mchid'], - 'company_id' => $companys['company']['id'], - 'pid' => $p_row['id'], - 'brand_id' => $this->order_row['brand_id'], - 's_id' => $this->order_row['s_id'], - 'v_id' => $this->order_row['v_id'], - 'cor_id' => $this->order_row['cor_id'], - 'incor_id' => $this->order_row['incor_id'], - 'total_price' => $to_com_price, - 'type' => $order_type, - 'c_time' => time() - ]; - } - $result = false; - if($add_data){ - $result = $this->ci->app_liche_orders_model->add_batch($add_data); - } - return $result; - } - - - /** - * 计算订单应收金额 - * @param $oid int 订单id - * @param $srv_price boolean 是否包含服务费 - * @param $price_loan boolean 是否包含分期(230220 成本-应收款不要扣掉按揭部分) - * @return float - */ - public function recevable_price($oid,$srv_price=true,$price_loan=true){ - $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - if(!$this->order_row){ - return false; - } - $money_json = json_decode($this->order_row['money_json'],true); - $total_price = $this->total_price($oid); - if($srv_price){ - $srv_money = $this->order_srv_money($oid); - $recevable_price = $total_price + $srv_money; - }else{ - $recevable_price = $total_price; - } - if($price_loan && !$this->order_row['payway']){ //分期 - $recevable_price -= $money_json['price_loan']; - } - return $recevable_price; - } - - /** - * 计算订单总售价 - * @param int $oid 订单id - * @param string $money_json - * @return float - */ - public function total_price($oid,$money_json=''){ - if(!$money_json){ - $order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid],'money_json'); - if(!$order_row){ - return false; - } - $money_json = json_decode($order_row['money_json'],true); - }else{ - $money_json = json_decode($money_json,true); - } - - $total_price = $money_json['price_car']; - if($money_json['price_discount']){ - $total_price -= $money_json['price_discount']; - } - if($money_json['price_color']){ - $total_price += $money_json['price_color']; - } - if($money_json['price_coplus']){ - $total_price += $money_json['price_coplus']; - } - if($money_json['price_options']){ - $total_price += $money_json['price_options']; - } - return $total_price ? $total_price : 0; - } - - /** - * 修改完订单信息后操作 - * @param array() $new_data 修改后的数据 - * @param array() $row 修改前数据 - */ - public function edit_order($new_data,$row,$user_info=[]){ - //更新购车订单车辆信息 - $up_data = [ - 'brand_id' => $new_data['brand_id'], - 's_id' => $new_data['s_id'], - 'v_id' => $new_data['v_id'], - 'cor_id' => $new_data['cor_id'], - 'incor_id' => $new_data['incor_id'], - ]; - $this->ci->app_liche_orders_model->update($up_data,['o_id'=>$row['id']]); - //删除未支付订单 - $this->ci->app_liche_orders_model->delete(['o_id'=>$row['id'],'status'=>0,'pid!='=>0]); - $userinfo = $this->ci->app_liche_users_model->get(['mobile'=>$row['mobile']],'id'); - if(!$this->ci->app_liche_orders_model->count(['o_id'=>$row['id'],'type'=>1,'status'=>1])){ //不存在定金订单 - $pay_row= $this->ci->app_liche_orders_model->sum('pay_price',['o_id'=>$row['id'],'type'=>1,'status'=>1]);//后台添加车款 - $money_json = json_decode($new_data['money_json'],true); - //if($pay_row['pay_price']<$money_json['price_book']){ - $payway = $new_data['payway']; - $deposit = $money_json['price_book']; - $if_zero_firstpay = $payway == 0 && !$deposit ? 1 : 0; - if($if_zero_firstpay || $pay_row['pay_price']<$money_json['price_book']){ - $int_order = $this->ci->app_liche_orders_model->get(['o_id'=>$row['id'],'type'=>4,'status'=>1]); //意向金订单 - //if($int_order['pay_price']==$money_json['price_book']){ //意向金订单转支付订单、推送并且生成pfd - if(!$if_zero_firstpay && $int_order['pay_price']==$money_json['price_book']){ //意向金订单转支付订单、推送并且生成pfd - $this->ci->app_liche_orders_model->update(['type'=>1],['id'=>$int_order['id']]); - $this->ci->receiver_orders_v2_model->update(['order_time'=>date('Y-m-d H:i:s')],['id'=>$row['id']]); - //生成pdf - $this->create_pdf($row['id']); - $this->ci->load->library('qyrobot'); - $this->ci->qyrobot->deposit_notify_v3($row['id']); - }else{ - $this->add_book_order($row['id'],$userinfo['id']); - } - } - } - $this->add_order($row['id'],$userinfo['id']); - //合同重新生成 - $need_del_con = false; - if($this->ci->receiver_order_contracts_model->count(['o_id'=>$row['id'],'type in (0,1)'=>null])){ - $need_del_con = true; - } - if($new_data['if_local_bill']!=$row['if_local_bill']){ - $need_del_con = true; - } - if($need_del_con){ - $this->ci->receiver_order_contracts_model->delete(['o_id'=>$row['id'],'type in (0,1)'=>null]); - } - $is_pay = $this->ci->app_liche_orders_model->count(['o_id'=>$row['id'],'type!='=>4,'status'=>1]); - if($is_pay && - ($new_data['brand_id']!=$row['brand_id'] || $new_data['s_id']!=$row['s_id'] || $new_data['v_id']!=$row['v_id']) || - $new_data['cor_id']!=$row['cor_id'] || $new_data['incor_id'] != $row['incor_id'] - ){ //存在已支付订单并且修改车型 写日志 - $where = [ - "lc_auto_series.id in ({$new_data['s_id']},{$row['s_id']})" => null - ]; - $brand = $this->ci->auto_series_model->select_brand($where); - foreach ($brand as $key=>$value) { - $brand[$value['id']] = $value; - } - $ids = [$new_data['v_id'],$row['v_id'],$new_data['cor_id'],$row['cor_id'],$new_data['incor_id'],$new_data['incor_id']]; - $ids_str = implode(',',$ids); - $where = [ - "id in ({$ids_str})" => null - ]; - $attr = $this->ci->auto_attr_model->map('id','title',$where); - $old_title = "{$brand[$row['s_id']]['b_name']}-{$brand[$row['s_id']]['name']}-{$attr[$row['v_id']]}-{$attr[$row['cor_id']]}-{$attr[$row['incor_id']]}"; - $new_title = "{$brand[$new_data['s_id']]['b_name']}-{$brand[$new_data['s_id']]['name']}-{$attr[$new_data['v_id']]}-{$attr[$new_data['cor_id']]}-{$attr[$row['incor_id']]}"; - $content = "车型由 {$old_title} 变更为 {$new_title}"; - $this->ci->load->library('receiver/orders_entity'); - $this->ci->orders_entity->add_log($row['id'],$user_info['uid'],$user_info['uname'],$content); - //短信通知 - $params = [ - 'sid' => $row['sid']."({$row['owner_name']})", - 'car_a' => $old_title, - 'car_b' => $new_title, - ]; - $this->send_msg('SMS_241355543',$params); - } - } - - /** - * 生成pdf文件 - * @param $oid - * @throws Exception - */ - public function create_pdf($oid){ - $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); - if(!$this->order_row ){ - return ['code'=>0,'msg'=>'参数错误']; - } - if($this->ci->receiver_order_contracts_model->count(['o_id'=>$oid,'status'=>1])){ - return ['code'=>1,'msg'=>'操作成功']; - } - $need_sign = true; - if($this->order_row['brand_id'] == 4){ //除宁德哪吒需要购车合同 - $biz = $this->ci->biz_model->get(['id'=>$this->order_row['biz_id']],'city_id'); - $need_sign = $biz['city_id'] == '350900' ? true : false; - } - $fill_info = $this->pdf_data($this->order_row); - $this->ci->load->library('pdftk'); - if($need_sign) { - $fill_data = [ - 'sid' => $this->order_row['sid'], - 'give_time' => $fill_info['give_time'], - 'date' => $fill_info['now_day'], - 'company' => $fill_info['companys']['company']['title'], - 'name' => $fill_info['name'], - 'owner_name' => $fill_info['owner_name'], - 'owner_mobile' => $fill_info['owner_mobile'], - 'identify_type' => $fill_info['identify_type'], - 'identify' => $fill_info['identify'], - 'address' => $fill_info['address'], - 'version' => $fill_info['version'], - 'color' => $fill_info['color'], - 'incolor' => $fill_info['incolor'], - 'price_car' => $fill_info['price_car'], - 'price_discount' => $fill_info['price_discount'], - 'price_finance' => $fill_info['price_finance'], - 'recevable_price' => $fill_info['recevable_price'], - 'price_book' => $fill_info['price_book'], - 'last_price' => $fill_info['last_price'], - ]; - //2022-12-23至2023-01-01使用 car_tpl_tmp.pdf - $pdf_path = time()>strtotime('2023-01-01 00:00:00') ? 'pdf/car_tpl.pdf' : 'pdf/car_tpl_temp.pdf'; - if ($fill_info['sa']) { - $fill_data['sa'] = $fill_info['sa']; - $pdf_path = 'pdf/car_sa_tpl.pdf'; - } - $save_path = "pdf/{$this->order_row['sid']}/car.pdf"; - $req = $this->ci->pdftk->esign_fill_pdf($pdf_path, $save_path, $fill_data); - if (!$req['code']) { - return ['code' => 0, 'msg' => $req['msg']]; - } - $add_data[] = [ - 'o_id' => $this->order_row['id'], - 'cid' => 0, - 'file' => $req['data']['file_path'] ? $req['data']['file_path'] : '', - 'type' => 0, - 'status' => 1, - 'c_time' => time() - ]; - } - if($this->order_row['srv_ids']){ - $fill_data = [ - 'sid' => $this->order_row['sid'], - 'date' => $fill_info['now_day'], - 'company' => $fill_info['companys']['srv_company']['title'], - 'name' => $fill_info['name'], - 'mobile' => $this->order_row['owner_mobile'], - 'owner_name' => $fill_info['owner_name'], - 'owner_mobile' => $fill_info['owner_mobile'], - 'service_str' => implode(' -',$fill_info['services']), - ]; - $pdf_path = 'pdf/agent_tpl.pdf'; - $save_path = "pdf/{$this->order_row['sid']}/service.pdf"; - $res = $this->ci->pdftk->esign_fill_pdf($pdf_path,$save_path,$fill_data); - if($res['code']){ - $add_data[] = [ - 'o_id' => $this->order_row['id'], - 'cid' => 0, - 'file' => $res['data']['file_path'] ? $res['data']['file_path'] : '', - 'type' => 1, - 'status' => 1, - 'c_time' => time() - ]; - } - } - $res = $this->ci->receiver_order_contracts_model->add_batch($add_data); - if($res){ - //更新交付时间 - $car_json = json_decode($this->order_row['car_json'],true); - $over_time = date('Y-m-d H:i:s',time()+$car_json['delivery_day']*24*60*60); //交付截止时间 - $this->ci->receiver_orders_v2_model->update(['over_time'=>$over_time],['id'=> $this->order_row['id']]); - return ['code'=>1,'msg'=>'操作成功']; - }else{ - return ['code'=>0,'msg'=>'操作失败']; - } - } - - /** - * 获取填充内容 - * @param $row - * @param $type - * @return mixed - */ - public function pdf_data($row,$type=0){ - if(!$row){ - return false; - } - $this->ci->load->model('auto/auto_business_model'); - $info_json = json_decode($row['info_json'],true); - $business_id = $info_json['business_id'] ? $info_json['business_id'] : 0; - $data = []; - - $biz = $this->ci->biz_model->get(['id'=>$row['biz_id']]); - //车辆信息 - $money_json = json_decode($row['money_json'],true); - $money_json['price_discount'] && $row['price'] = $row['price'] - $money_json['price_discount']; - $brand = $this->ci->auto_brand_model->get(['id'=>$row['brand_id']],'name'); - $series = $this->ci->auto_series_model->get(['id'=>$row['s_id']],'name'); - $version = $this->ci->auto_attr_model->get(['id'=>$row['v_id']],'title'); - $color = $this->ci->auto_attr_model->get(['id'=>$row['cor_id']],'title'); - $incolor = $this->ci->auto_attr_model->get(['id'=>$row['incor_id']],'title'); - $_version = $version['title'] ? $version['title'] : ''; - $data['version'] = "{$brand['name']} {$series['name']} $_version"; - $data['color'] = $color['title'] ? $color['title'] : ''; - $data['incolor'] = $incolor['title'] ? $incolor['title'] : ''; - $business_row = $this->ci->auto_business_model->get(['id'=>$business_id]); - if($business_row){ - $data['give_time'] = $business_row['delivery_day']; - }else{ - if($row['s_id']==24) { //零跑T03 - $data['give_time'] = 60; - }elseif($row['s_id']==25) { //零跑C11 - $data['give_time'] = 120; - }else{ //其它车型 - $data['give_time'] = 45; - } - } - $data['price_car'] = number_format($money_json['price_car']+$money_json['price_color']+$money_json['price_coplus'],2); - $data['price_discount'] = number_format($money_json['price_discount'],2); - $data['price_book'] = number_format($money_json['price_book'],2); - $data['recevable_price'] = number_format($this->total_price($row['id']),2); - $data['last_price'] = number_format($this->total_price($row['id']) - $money_json['price_book'],2); - $data['address'] = $info_json['c_address'] ? $info_json['c_address'] : ''; - $data['name'] = $row['name']; - if($row['main_type']){ - $data['identify_type'] = '营业执照' ; - $data['identify'] = $info_json['c_credit']; - $data['owner_name'] = $info_json['c_company']; - $data['owner_mobile'] = $row['mobile']; - }else{ - $data['identify_type'] = '身份证'; - $data['identify'] = $info_json['c_owner_cardid']; - $data['owner_name'] = $row['owner_name']; - $data['owner_mobile'] = $row['owner_mobile']; - } - - $data['now_day'] = date('Y-m-d'); - $data['companys'] = $this->get_biz_mchid($row['biz_id'],$row['brand_id'],$row['if_local_bill']); - if($type==1){ - $items = $this->ci->items_model->get(['id'=>$row['item_id']],'vin'); - $delivery = $this->ci->deliverys_model->get(['o_id'=>$row['id']],'info,tool,remark'); - $data['vin'] = $items['vin']; - $data['delivery'] = $delivery; - } - $data['sa'] = ''; - if($biz['type']==1){ - $this->ci->load->model('receiver/order/receiver_order_datas_model'); - $order_data = $this->ci->receiver_order_datas_model->get(['o_id'=>$row['id']]); - $order_data['sa'] && $data['sa'] = $order_data['sa']; - } - if(!$type){ - $services = []; - $srv_arr = json_decode($row['srv_ids'],true); - if(is_array($srv_arr)){ - $srv_ids = array_column($srv_arr,'id'); - $srv_ids_str = implode(',',$srv_ids); - if($row['srv_ids'] && $srv_ids_str){ - $service_rows = $this->ci->services_model->select(["id in ({$srv_ids_str})"=>null],'','','','id,title,field_name'); - foreach($service_rows as $key=>$val){ - $field_arr = explode('.',$val['field_name']); - if(isset($money_json[$field_arr[1]])){ //保险费不收 - $money = $field_arr[1]=='price_insure' ? '由保险公司收取' : $money_json[$field_arr[1]]; - is_numeric($money) && $money = number_format($money,2); - $services[] = $val['title'].': '.$money; - } - } - } - } - if($row['if_fine']){ //选择精品包 - $fine_price = $money_json['price_fine_discount'] ? $money_json['price_fine'] - $money_json['price_fine_discount'] : $money_json['price_fine']; - $services[] = '精品尊享包: '.number_format($fine_price,2); - } - if($row['fines']){ - $fines = json_decode($row['fines'],true); - $split = $fine_title_price = $fine_title = ''; - foreach($fines as $key=>$val){ - $fine_title = $fine_title.$split.$val['txt'].$split; - $price = $val['price']>0 ? number_format(floatval($val['price']),2) : '赠送'; - $fine_title_price = $fine_title_price.$split."{$val['txt']}:{$price}"; - $split = ' '; - } - $services[] = '精品选装: '.number_format($money_json['price_fine_select'],2)."($fine_title_price)"; - } - $srv_price = $this->order_srv_money($row['id']); - $services[] = '实际支付(元): '.number_format($srv_price,2); - $data['services'] = $services; - } - return $data; - } - - //小程序支付图片 - public function pay_img($oid){ - $this->ci->load->model('app/app_model', 'mdApp'); - $wxconfig = $this->ci->mdApp->appConfig()[1]['wx']; - $img = self::API_PAY_IMG; - if ($wxconfig) { - $this->ci->load->library("hd_wechat", $wxconfig); - $width = '430px'; - $path = "pages/mine/carOrder/index"; - $scene = $oid; - $filename = "{$this->ci->mdApp->appConfig()[1]['app_key']}/" . substr(md5($path.'?id='.$oid), 8, 16); - $result = $this->ci->hd_wechat->qrcode($filename,$scene,$path,$width); - if($result['url']){ - $img = http_host_com('api').'/'.$result['url']; - } - } - return $img; - } - - /** - * 订单改变发送消息 - * @param $sid - * @param $info - * @return void - */ - public function send_msg($template,$params){ - /** - * 模板内容 SMS_241360549 - * 叮~小爱同学,订单 ${sid} 信息发生变化。车主信息由 ${owner_a} 变更为 ${owner_b},请知悉~ - * 模板内容 SMS_241355543 - * 叮~小爱同学,订单 ${sid} 信息发生变化。客户订购车型由 ${car_a} 变更为 ${car_b},请知悉~ - */ - if(!template || !$params){ - return ''; - } - $mobile_lists = ['18950000118','13860199646']; - !is_product() && $mobile_lists = ['18350451617']; //测试 - foreach ($mobile_lists as $val){ - send_alisms(array('mobile' => $val, 'template' => $template, 'param' => $params)); - } - } - - /** - * 按“商家-品牌”下定统计 - * @param $today_start - * @param $today_end - * @param $total_start - * @param $total_end - * @return array - */ - public function aggs_biz_brand_ding($today_start='', $today_end='', $total_start='', $total_end=''){ - if (!$today_start || !$today_end || !$total_start || !$total_end){ - return array(); - } - # biz_type(已下订) - $sql = " - SELECT b.type as biz_type, o.biz_id, o.brand_id,ab.`name` as brand_name, o.s_id, s.`name` as series_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_auto_brand ab on o.brand_id = ab.id - left join lc_auto_series s on o.s_id = s.id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - group by b.type, o.biz_id, o.brand_id, ab.`name`, o.s_id, s.`name` - order by b.type, o.biz_id, o.brand_id, o.s_id - "; - # 只统计品牌店,合伙店,代理店,其中代理店按城市(已下订) - $sql = " - SELECT b.type as biz_type, - if(b.type in (3), b.city_id, o.biz_id) as biz_id, - o.brand_id,ab.`name` as brand_name, o.s_id, s.`name` as series_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_auto_brand ab on o.brand_id = ab.id - left join lc_auto_series s on o.s_id = s.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - AND b.type in (1, 2, 3) - group by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` - order by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, o.s_id - "; - # 只统计品牌店,合伙店,代理店,其中代理店按城市(全部) - $sql = " - SELECT b.type as biz_type, - if(b.type in (3), b.city_id, o.biz_id) as biz_id, - o.brand_id, if(ab.`name` is null, '-', ab.`name`) as brand_name, o.s_id, if(s.`name` is null, '-', s.`name`) as series_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding - FROM lc_receiver_orders_v2 o - left join lc_biz b on o.biz_id = b.id - left join lc_auto_brand ab on o.brand_id = ab.id - left join lc_auto_series s on o.s_id = s.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND b.type in (1, 2, 3) - group by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` - order by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, o.s_id - "; - return $this->ci->db->query($sql)->result_array(); - } - public function aggs_biz_brand_ding_cityid($today_start='', $today_end='', $total_start='', $total_end=''){ - if (!$today_start || !$today_end || !$total_start || !$total_end){ - return array(); - } - $sql = " - SELECT b.city_id as biz_type, - if(b.type in (2, 3), b.type, o.biz_id) as biz_id, - o.brand_id, if(ab.`name` is null, '-', ab.`name`) as brand_name, o.s_id, if(s.`name` is null, '-', s.`name`) as series_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding - FROM lc_receiver_orders_v2 o - left join lc_biz b on o.biz_id = b.id - left join lc_auto_brand ab on o.brand_id = ab.id - left join lc_auto_series s on o.s_id = s.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND b.type in (1, 2, 3) - group by b.city_id, if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` - order by b.city_id, FIELD(b.type,1,2,3), if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, o.s_id - "; - return $this->ci->db->query($sql)->result_array(); - } - - /** - * 按“商家-品牌”开票统计 - * @param $today_start - * @param $today_end - * @param $total_start - * @param $total_end - * @return array - */ - public function aggs_biz_brand_piao($today_start='', $today_end='', $total_start='', $total_end=''){ - if (!$today_start || !$today_end || !$total_start || !$total_end){ - return array(); - } - # biz_type - $sql = " - SELECT b.type as biz_type, o.biz_id, o.brand_id, ab.`name` as brand_name, o.s_id, s.`name` as series_name, - count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, - count(o.id) as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_auto_brand ab on o.brand_id = ab.id - left join lc_auto_series s on o.s_id = s.id - WHERE o.`status` >= 0 - AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - group by b.type, o.biz_id, o.brand_id, ab.`name`, o.s_id, s.`name` - order by b.type, o.biz_id, o.brand_id, o.s_id - "; - # 只统计品牌店,合伙店,代理店,其中代理店按城市 - $sql = " - SELECT b.type as biz_type, - if(b.type in (3), b.city_id, o.biz_id) as biz_id, - o.brand_id, ab.`name` as brand_name, o.s_id, s.`name` as series_name, - count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, - count(o.id) as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_auto_brand ab on o.brand_id = ab.id - left join lc_auto_series s on o.s_id = s.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - AND b.type in (1, 2, 3) - group by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` - order by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, o.s_id - "; - return $this->ci->db->query($sql)->result_array(); - } - public function aggs_biz_brand_piao_cityid($today_start='', $today_end='', $total_start='', $total_end=''){ - if (!$today_start || !$today_end || !$total_start || !$total_end){ - return array(); - } - $sql = " - SELECT b.city_id as biz_type, - if(b.type in (2, 3), b.type, o.biz_id) as biz_id, - o.brand_id, ab.`name` as brand_name, o.s_id, s.`name` as series_name, - count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, - count(o.id) as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_auto_brand ab on o.brand_id = ab.id - left join lc_auto_series s on o.s_id = s.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - AND b.type in (1, 2, 3) - group by b.city_id, if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` - order by b.city_id, FIELD(b.type,1,2,3), if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, o.s_id - "; - return $this->ci->db->query($sql)->result_array(); - } - - /** - * 按“商家”下定+开票统计 - * @param $today_start - * @param $today_end - * @param $total_start - * @param $total_end - * @return array - */ - public function aggs_biz_ding_piao($today_start='', $today_end='', $total_start='', $total_end=''){ - if (!$today_start || !$today_end || !$total_start || !$total_end){ - return array(); - } - # biz_type - $sql = " - select biz_type, biz_id, biz_name, - if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, - if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, - if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, - if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao - from - ( - SELECT b.type as biz_type, o.biz_id, b.biz_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - group by b.type, o.biz_id, b.biz_name - union all - SELECT b.type as biz_type, o.biz_id, b.biz_name, null as doc_ding_today, null as doc_ding, - count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, - count(o.id) as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - WHERE o.`status` >= 0 - AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - group by b.type, o.biz_id, b.biz_name - ) u - group by biz_type, biz_id, biz_name - order by biz_type, biz_id - "; - # 只统计品牌店,合伙店,代理店,其中代理店按城市 - $sql = " - select biz_type, biz_id, biz_name, - if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, - if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, - if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, - if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao - from - ( - SELECT b.type as biz_type, - if(b.type in (3), b.city_id, o.biz_id) as biz_id, - if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - AND b.type in (1, 2, 3) - group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) - union all - SELECT b.type as biz_type, - if(b.type in (3), b.city_id, o.biz_id) as biz_id, - if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, - null as doc_ding_today, null as doc_ding, - count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, - count(o.id) as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - AND b.type in (1, 2, 3) - group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) - ) u - group by biz_type, biz_id, biz_name - order by biz_type, biz_id - "; - # 只统计品牌店,合伙店,代理店,其中代理店按城市(全部) - $sql = " - select biz_type, biz_id, biz_name, - if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, - if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, - if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, - if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao - from - ( - SELECT b.type as biz_type, - if(b.type in (3), b.city_id, o.biz_id) as biz_id, - if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao - FROM lc_receiver_orders_v2 o - left join lc_biz b on o.biz_id = b.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND b.type in (1, 2, 3) - group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) - union all - SELECT b.type as biz_type, - if(b.type in (3), b.city_id, o.biz_id) as biz_id, - if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, - null as doc_ding_today, null as doc_ding, - count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, - count(o.id) as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - AND b.type in (1, 2, 3) - group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) - ) u - group by biz_type, biz_id, biz_name - order by biz_type, biz_id - "; - return $this->ci->db->query($sql)->result_array(); - } - public function aggs_biz_ding_piao_cityid($today_start='', $today_end='', $total_start='', $total_end=''){ - if (!$today_start || !$today_end || !$total_start || !$total_end){ - return array(); - } - $sql = " - select biz_type, city_name, biz_id, biz_name, - if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, - if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, - if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, - if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao - from - ( - SELECT b.city_id as biz_type, - c.`name` as city_name, - if(b.type in (2, 3), b.type, o.biz_id) as biz_id, - case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end as biz_name, - count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, - count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao - FROM lc_receiver_orders_v2 o - left join lc_biz b on o.biz_id = b.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.order_time >= '$total_start' AND o.order_time < '$total_end' - AND b.type in (1, 2, 3) - group by b.city_id, c.`name`, if(b.type in (2, 3), b.type, o.biz_id), case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end - union all - SELECT b.city_id as biz_type, - c.`name` as city_name, - if(b.type in (2, 3), b.type, o.biz_id) as biz_id, - case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end as biz_name, - null as doc_ding_today, null as doc_ding, - count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, - count(o.id) as doc_piao - FROM lc_receiver_orders_v2 o JOIN - (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id - left join lc_biz b on o.biz_id = b.id - left join lc_sys_city c on b.city_id = c.city_id - WHERE o.`status` >= 0 - AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' - AND o.brand_id > 0 - AND o.`status` <> 2 - AND b.type in (1, 2, 3) - group by b.city_id, c.`name`, if(b.type in (2, 3), b.type, o.biz_id), case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end - ) u - group by biz_type, city_name, biz_id, biz_name - order by biz_type, biz_id desc - "; - return $this->ci->db->query($sql)->result_array(); - } - - /** - * 商家下定+开票统计:按店铺类型,品牌拆分为系列,支持订单与开票独立图片 - * @param $today_start - * @param $today_end - * @param $total_start - * @param $total_end - * @param $title_today - * @param $title_ding_today - * @param $title_ding - * @param $title_piao_today - * @param $title_piao - * @param $create_table_image - * @param $title - * @return array - */ - public function aggs_biz_ding_piao_rpt($today_start='', $today_end='', $total_start='', $total_end='', - $title_today='', $title_ding_today='', $title_ding='', $title_piao_today='', $title_piao='', $create_table_image=false, $title='区域') - { - !$today_start && $today_start = date('Y-m-d 00:00:00'); - !$today_end && $today_end = date('Y-m-d 00:00:00', strtotime('+1 day')); - !$total_start && $total_start = date('Y-m-01 00:00:00'); - !$total_end && $total_end = date('Y-m-01 00:00:00', strtotime('+1 month')); - //!$title_today && $title_today = date('m月d日'); - !$title_today && $title_today = '来源'; - !$title_ding_today && $title_ding_today = '当日订单'; - !$title_ding && $title_ding = '月累计订单'; - !$title_piao_today && $title_piao_today = '当日开票'; - !$title_piao && $title_piao = '月累计开票'; - - $ding = $this->aggs_biz_brand_ding_cityid($today_start, $today_end, $total_start, $total_end); - $piao = $this->aggs_biz_brand_piao_cityid($today_start, $today_end, $total_start, $total_end); - $biz = $this->aggs_biz_ding_piao_cityid($today_start, $today_end, $total_start, $total_end); - #var_dump($today_start);var_dump($today_end);var_dump($total_start);var_dump($total_end);var_dump($ding); var_dump($piao);var_dump($biz); - if (!$biz) { - return array(); - } - - # 生成品牌arr - $brand_names = array_unique(array_merge(array_column($ding, 'brand_name'), array_column($piao, 'brand_name'))); - sort($brand_names); - - # 生成品牌对应的车系arr - $series_names = array(); - foreach ($ding as $k => $v) { - $series_name = $v['series_name']; - $key = $v['brand_name']; - if (!$series_names[$key]) { - $series_names[$key][] = $series_name; - continue; - } - if (!in_array($series_name, $series_names[$key])) { - $series_names[$key][] = $series_name; - } - } - foreach ($piao as $k => $v) { - $series_name = $v['series_name']; - $key = $v['brand_name']; - if (!$series_names[$key]) { - $series_names[$key][] = $series_name; - continue; - } - if (!in_array($series_name, $series_names[$key])) { - $series_names[$key][] = $series_name; - } - } - #var_dump($brand_names); var_dump($series_names); - - #$series_name 先完成排序,再生成表头与数据列 - $series_names_ = array(); - foreach ($brand_names as $brand_name){ - $v = $series_names[$brand_name]; - sort($v); - $series_names_[$brand_name] = $v; - } - $series_names = $series_names_; - - # 生成表头 - $indexs_total = array(); - $indexs_total[] = 'doc_ding'; - $indexs_total[] = 'doc_piao'; - $arr1 = array('city_name'=>$title, 'biz_name'=>$title_today, 'doc_ding_today'=>$title_ding_today); - $arr1 = array_merge($arr1, array('doc_ding'=>$title_ding)); - foreach ($series_names as $k => $v){ - $indexs_total[] = $k.'_ding'; - $arr1[$k.'_ding'] = $k; # 品牌在系列前 - foreach ($v as $k1 => $v1){ - #$arr1[$k.'_'.$v1.'_ding'] = $k.'_'.$v1; - $arr1[$k.'_'.$v1.'_ding'] = ' '.$v1; # 系列简写 - } - } - $arr3 = array('doc_piao_today'=>$title_piao_today); - $arr3 = array_merge($arr3, array('doc_piao'=>$title_piao)); - foreach ($series_names as $k => $v){ - $indexs_total[] = $k.'_piao'; - $arr3[$k.'_piao'] = $k; # 品牌在系列前 - foreach ($v as $k1 => $v1){ - #$arr3[$k.'_'.$v1.'_piao'] = $k.'_'.$v1; - $arr3[$k.'_'.$v1.'_piao'] = ' '.$v1; # 系列简写 - } - } - $indexs = array_merge($arr1, $arr3); #var_dump($indexs); - - # $ding, $piao 行转kv,生成xj小记与hj合计: 1 _1_东风EV_doc_ding 7; 1 _东风EV_doc_ding 9; 东风EV_doc_ding 9 - $kv = array(); - foreach (array_merge($ding, $piao) as $k => $v){ - $key_ding = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_ding'; - $key_ding_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_ding'; - $key_ding_hj = $v['brand_name'].'_doc_ding'; - $key_ding_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; - $key_ding_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; - $key_ding_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_ding'; - - $key_piao = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_piao'; - $key_piao_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_piao'; - $key_piao_hj = $v['brand_name'].'_doc_piao'; - $key_piao_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; - $key_piao_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; - $key_piao_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_piao'; - - if ($temp = intval($v['doc_ding'])){ - $kv[$key_ding_series] = $temp; - $kv[$key_ding_series_xj] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] + $temp: $temp; - $kv[$key_ding_series_hj] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] + $temp: $temp; - $kv[$key_ding] = $kv[$key_ding] ? $kv[$key_ding] + $temp: $temp; - $kv[$key_ding_xj] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] + $temp: $temp; - $kv[$key_ding_hj] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] + $temp: $temp; - } - - if ($temp = intval($v['doc_piao'])){ - $kv[$key_piao_series] = $temp; - $kv[$key_piao_series_xj] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] + $temp: $temp; - $kv[$key_piao_series_hj] = $kv[$key_piao_series_hj] ? $kv[$key_piao_series_hj] + $temp: $temp; - $kv[$key_piao] = $kv[$key_piao] ? $kv[$key_piao] + $temp: $temp; - $kv[$key_piao_xj] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] + $temp: $temp; - $kv[$key_piao_hj] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] + $temp: $temp; - } - } - - $biz_type = $city_name = $biz_id = $biz_name = null; - $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; - $doc_ding_today_ = $doc_ding_ = $doc_piao_today_ = $doc_piao_ = 0; - $biz_aggs = array(); - foreach ($biz as $k1 => $v1){ - !$biz_type && $biz_type = $v1['biz_type']; - !$city_name && $city_name = $v1['city_name']; - $biz_id = $v1['biz_id']; - $biz_name = $v1['biz_name']; - - $doc_ding_today_ += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; - $doc_ding_ += $v1['doc_ding'] ? $v1['doc_ding'] : 0; - $doc_piao_today_ += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; - $doc_piao_ += $v1['doc_piao'] ? $v1['doc_piao'] : 0; - - if ($biz_type <> $v1['biz_type']){ - #$biz_type_ary = $this->ci->biz_model->type_ary(); - #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' - $arr1 = array('city_name'=>'', 'biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); - foreach ($brand_names as $k2 => $v2){ - # 生成车型列 - $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; - - # 生成车系列 - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; - } - } - $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3); - - $biz_type = $v1['biz_type']; - $city_name = $v1['city_name']; - $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; - } - - $doc_ding_today += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; - $doc_ding += $v1['doc_ding'] ? $v1['doc_ding'] : 0; - $doc_piao_today += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; - $doc_piao += $v1['doc_piao'] ? $v1['doc_piao'] : 0; - - $arr1 = array('city_name'=>$city_name, 'biz_type'=>$biz_type, 'biz_id'=>$biz_id, 'biz_name'=>$biz_name, 'doc_ding_today'=>$v1['doc_ding_today'] ? $v1['doc_ding_today'] : '', 'doc_ding'=>$v1['doc_ding'] ? $v1['doc_ding'] : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding] ? $kv[$key_ding] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series] ? $kv[$key_ding_series] : ''; - } - } - $arr3 = array('doc_piao_today'=>$v1['doc_piao_today'] ? $v1['doc_piao_today'] : '', 'doc_piao'=>$v1['doc_piao'] ? $v1['doc_piao'] : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao] ? $kv[$key_piao] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_piao_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series] ? $kv[$key_piao_series] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3); - } - - # 最后一个小计 - #$biz_type_ary = $this->ci->biz_model->type_ary(); - #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' - $arr1 = array('city_name'=>'', 'biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; - } - } - $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3); - - # 合计 - $arr1 = array('city_name'=>'', 'biz_type'=>'', 'biz_id'=>'', 'biz_name'=>'合计', 'doc_ding_today'=>$doc_ding_today_ ? $doc_ding_today_ : '', 'doc_ding'=>$doc_ding_ ? $doc_ding_ : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding_hj = $v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_hj = $v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; - } - } - $arr3 = array('doc_piao_today'=>$doc_piao_today_ ? $doc_piao_today_ : '', 'doc_piao'=>$doc_piao_ ? $doc_piao_ : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_hj = $v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_hj = $v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3);#var_dump($indexs);var_dump($biz_aggs); - - $img_path = $img_path_ding = $img_path_piao = ''; - if ($create_table_image){ - $data = $biz_aggs; - foreach ($data as $k => $v){ - unset($data[$k]['biz_type']); - unset($data[$k]['biz_id']); - $data[$k]['biz_name'] = mb_strlen ($data[$k]['biz_name']) > 9 ? mb_substr($data[$k]['biz_name'], 0, 9).'..' : $data[$k]['biz_name']; - } - $data_ding = $data_piao = $data; - foreach ($data_ding as $k => $v){ - foreach ($data_ding[$k] as $kd => $vd){ - if (strpos($kd,'_piao') !== false){ - unset($data_ding[$k][$kd]); - } - } - } - foreach ($data_ding as $k => $v){ - foreach ($data_ding[$k] as $kd => $vd){ - if (strpos($kd,'_ding') !== false){ - unset($data_piao[$k][$kd]); - } - } - } - - $index_img = $indexs; - $index_img_ding = $index_img_piao = array(); - foreach ($index_img as $k => $v){ - #$k != 'biz_name' && $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, -8, 8) : $v; - if ($k != 'biz_name'){ - /*if (strpos($k,'_') !== false){ - $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, 0, 2).'..'.mb_substr(array_slice(explode('_', $v), -1)[0], -5, 5) : str_replace('_', ' ', $v); - } - else{ - $index_img[$k] = mb_strlen ($v) > 5 ? mb_substr($v, 0, 5) : $v; - }*/ - $index_img[$k] = $v; # 讲话车系后直接显示全部 - } - if (strpos($k,'_ding') !== false){ - $index_img_ding[$k] = $index_img[$k]; - } - elseif (strpos($k,'_piao') !== false){ - $index_img_piao[$k] = $index_img[$k]; - } - else{ - $index_img_ding[$k] = $index_img[$k]; - $index_img_piao[$k] = $index_img[$k]; - } - } - - # 去掉空列与空行 - $this->clear_null_column_line($biz_aggs, $indexs); - $this->clear_null_column_line($data, $index_img); - $this->clear_null_column_line($data_ding, $index_img_ding); - $this->clear_null_column_line($data_piao, $index_img_piao); - #var_dump($data_piao);var_dump('
');var_dump($index_img_piao);var_dump('
');var_dump($indexs_total); - - #var_dump($biz_aggs[0]);var_dump($data[0]);var_dump($index_img);var_dump($data_ding[0]);var_dump($index_img_ding);var_dump($data_piao[0]);var_dump($index_img_piao);; - $img_path = $this->create_table_image($data, $index_img, $indexs_total, '小狸播报', 'aggs_biz_rpt.png'); - $img_path_ding = $this->create_table_image($data_ding, $index_img_ding, $indexs_total, '小狸播报 - 订单', 'aggs_biz_rpt_ding.png'); - $img_path_piao = $this->create_table_image($data_piao, $index_img_piao, $indexs_total, '小狸播报 - 开票', 'aggs_biz_rpt_piao.png'); - } - return array('biz_aggs'=>$biz_aggs, 'indexs'=>$indexs, 'img_path'=>$img_path, 'img_path_ding'=>$img_path_ding, 'img_path_piao'=>$img_path_piao, 'brand_names'=>$brand_names, 'series_names'=>$series_names); - } - // 商家下定+开票统计 simple:按店铺类型,拆分品牌的系列 - public function aggs_biz_ding_piao_rpt_series($today_start='', $today_end='', $total_start='', $total_end='', - $title_today='', $title_ding_today='', $title_ding='', $title_piao_today='', $title_piao='', $create_table_image=false){ - !$today_start && $today_start = date('Y-m-d 00:00:00'); - !$today_end && $today_end = date('Y-m-d 00:00:00', strtotime('+1 day')); - !$total_start && $total_start = date('Y-m-01 00:00:00'); - !$total_end && $total_end = date('Y-m-01 00:00:00', strtotime('+1 month')); - //!$title_today && $title_today = date('m月d日'); - !$title_today && $title_today = '来源'; - !$title_ding_today && $title_ding_today = '当日订单'; - !$title_ding && $title_ding = '月累计订单'; - !$title_piao_today && $title_piao_today = '当日开票'; - !$title_piao && $title_piao = '月累计开票'; - - $ding = $this->aggs_biz_brand_ding($today_start, $today_end, $total_start, $total_end); - $piao = $this->aggs_biz_brand_piao($today_start, $today_end, $total_start, $total_end); - $biz = $this->aggs_biz_ding_piao($today_start, $today_end, $total_start, $total_end); - #var_dump($today_start);var_dump($today_end);var_dump($total_start);var_dump($total_end);var_dump($ding); var_dump($piao);var_dump($biz); - if (!$biz){ - return array(); - } - - # 生成品牌arr - $brand_names = array_unique(array_merge(array_column($ding, 'brand_name'), array_column($piao, 'brand_name'))); - sort($brand_names); - - # 生成品牌对应的车系arr - $series_names = array(); - foreach ($ding as $k => $v){ - $series_name = $v['series_name']; - $key = $v['brand_name']; - if (!$series_names[$key]){ - $series_names[$key][] = $series_name; - continue; - } - if (!in_array($series_name, $series_names[$key])){ - $series_names[$key][] = $series_name; - } - } - foreach ($piao as $k => $v){ - $series_name = $v['series_name']; - $key = $v['brand_name']; - if (!$series_names[$key]){ - $series_names[$key][] = $series_name; - continue; - } - if (!in_array($series_name, $series_names[$key])){ - $series_names[$key][] = $series_name; - } - } - #var_dump($brand_names); var_dump($series_names); - - #$series_name 先完成排序,再生成表头与数据列 - $series_names_ = array(); - foreach ($brand_names as $brand_name){ - $v = $series_names[$brand_name]; - sort($v); - $series_names_[$brand_name] = $v; - } - $series_names = $series_names_; - - # 生成表头 - $indexs_total = array(); - $indexs_total[] = 'doc_ding'; - $indexs_total[] = 'doc_piao'; - $arr1 = array('biz_name'=>$title_today, 'doc_ding_today'=>$title_ding_today); - $arr1 = array_merge($arr1, array('doc_ding'=>$title_ding)); - foreach ($series_names as $k => $v){ - $indexs_total[] = $k.'_ding'; - $arr1[$k.'_ding'] = $k; # 品牌在系列前 - foreach ($v as $k1 => $v1){ - #$arr1[$k.'_'.$v1.'_ding'] = $k.'_'.$v1; - $arr1[$k.'_'.$v1.'_ding'] = ' '.$v1; # 系列简写 - } - } - $arr3 = array('doc_piao_today'=>$title_piao_today); - $arr3 = array_merge($arr3, array('doc_piao'=>$title_piao)); - foreach ($series_names as $k => $v){ - $indexs_total[] = $k.'_piao'; - $arr3[$k.'_piao'] = $k; # 品牌在系列前 - foreach ($v as $k1 => $v1){ - #$arr3[$k.'_'.$v1.'_piao'] = $k.'_'.$v1; - $arr3[$k.'_'.$v1.'_piao'] = ' '.$v1; # 系列简写 - } - } - $indexs = array_merge($arr1, $arr3); #var_dump($indexs); - - # $ding, $piao 行转kv,生成xj小记与hj合计: 1 _1_东风EV_doc_ding 7; 1 _东风EV_doc_ding 9; 东风EV_doc_ding 9 - $kv = array(); - foreach (array_merge($ding, $piao) as $k => $v){ - $key_ding = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_ding'; - $key_ding_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_ding'; - $key_ding_hj = $v['brand_name'].'_doc_ding'; - $key_ding_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; - $key_ding_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; - $key_ding_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_ding'; - - $key_piao = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_piao'; - $key_piao_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_piao'; - $key_piao_hj = $v['brand_name'].'_doc_piao'; - $key_piao_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; - $key_piao_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; - $key_piao_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_piao'; - - if ($temp = intval($v['doc_ding'])){ - $kv[$key_ding_series] = $temp; - $kv[$key_ding_series_xj] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] + $temp: $temp; - $kv[$key_ding_series_hj] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] + $temp: $temp; - $kv[$key_ding] = $kv[$key_ding] ? $kv[$key_ding] + $temp: $temp; - $kv[$key_ding_xj] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] + $temp: $temp; - $kv[$key_ding_hj] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] + $temp: $temp; - } - - if ($temp = intval($v['doc_piao'])){ - $kv[$key_piao_series] = $temp; - $kv[$key_piao_series_xj] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] + $temp: $temp; - $kv[$key_piao_series_hj] = $kv[$key_piao_series_hj] ? $kv[$key_piao_series_hj] + $temp: $temp; - $kv[$key_piao] = $kv[$key_piao] ? $kv[$key_piao] + $temp: $temp; - $kv[$key_piao_xj] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] + $temp: $temp; - $kv[$key_piao_hj] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] + $temp: $temp; - } - } - - $biz_type = $biz_id = $biz_name = null; - $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; - $doc_ding_today_ = $doc_ding_ = $doc_piao_today_ = $doc_piao_ = 0; - $biz_aggs = array(); - foreach ($biz as $k1 => $v1){ - !$biz_type && $biz_type = $v1['biz_type']; - $biz_id = $v1['biz_id']; - $biz_name = $v1['biz_name']; - - $doc_ding_today_ += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; - $doc_ding_ += $v1['doc_ding'] ? $v1['doc_ding'] : 0; - $doc_piao_today_ += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; - $doc_piao_ += $v1['doc_piao'] ? $v1['doc_piao'] : 0; - - if ($biz_type <> $v1['biz_type']){ - #$biz_type_ary = $this->ci->biz_model->type_ary(); - #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' - $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); - foreach ($brand_names as $k2 => $v2){ - # 生成车型列 - $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; - - # 生成车系列 - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; - } - } - $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3); - - $biz_type = $v1['biz_type']; - $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; - } - - $doc_ding_today += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; - $doc_ding += $v1['doc_ding'] ? $v1['doc_ding'] : 0; - $doc_piao_today += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; - $doc_piao += $v1['doc_piao'] ? $v1['doc_piao'] : 0; - - $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>$biz_id, 'biz_name'=>$biz_name, 'doc_ding_today'=>$v1['doc_ding_today'] ? $v1['doc_ding_today'] : '', 'doc_ding'=>$v1['doc_ding'] ? $v1['doc_ding'] : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding] ? $kv[$key_ding] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series] ? $kv[$key_ding_series] : ''; - } - } - $arr3 = array('doc_piao_today'=>$v1['doc_piao_today'] ? $v1['doc_piao_today'] : '', 'doc_piao'=>$v1['doc_piao'] ? $v1['doc_piao'] : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao] ? $kv[$key_piao] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_piao_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series] ? $kv[$key_piao_series] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3); - } - - # 最后一个小计 - #$biz_type_ary = $this->ci->biz_model->type_ary(); - #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' - $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; - } - } - $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3); - - # 合计 - $arr1 = array('biz_type'=>'', 'biz_id'=>'', 'biz_name'=>'合计', 'doc_ding_today'=>$doc_ding_today_ ? $doc_ding_today_ : '', 'doc_ding'=>$doc_ding_ ? $doc_ding_ : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding_hj = $v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_hj = $v2.'_'.$vs.'_doc_ding'; - $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; - } - } - $arr3 = array('doc_piao_today'=>$doc_piao_today_ ? $doc_piao_today_ : '', 'doc_piao'=>$doc_piao_ ? $doc_piao_ : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_hj = $v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] : ''; - - foreach ($series_names[$v2] as $ks => $vs){ - $key_ding_series_hj = $v2.'_'.$vs.'_doc_piao'; - $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; - } - } - $biz_aggs[] = array_merge($arr1, $arr3);#var_dump($indexs);var_dump($biz_aggs); - - $img_path = $img_path_ding = $img_path_piao = ''; - if ($create_table_image){ - $data = $biz_aggs; - foreach ($data as $k => $v){ - unset($data[$k]['biz_type']); - unset($data[$k]['biz_id']); - $data[$k]['biz_name'] = mb_strlen ($data[$k]['biz_name']) > 9 ? mb_substr($data[$k]['biz_name'], 0, 9).'..' : $data[$k]['biz_name']; - } - $data_ding = $data_piao = $data; - foreach ($data_ding as $k => $v){ - foreach ($data_ding[$k] as $kd => $vd){ - if (strpos($kd,'_piao') !== false){ - unset($data_ding[$k][$kd]); - } - } - } - foreach ($data_ding as $k => $v){ - foreach ($data_ding[$k] as $kd => $vd){ - if (strpos($kd,'_ding') !== false){ - unset($data_piao[$k][$kd]); - } - } - } - - $index_img = $indexs; - $index_img_ding = $index_img_piao = array(); - foreach ($index_img as $k => $v){ - #$k != 'biz_name' && $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, -8, 8) : $v; - if ($k != 'biz_name'){ - /*if (strpos($k,'_') !== false){ - $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, 0, 2).'..'.mb_substr(array_slice(explode('_', $v), -1)[0], -5, 5) : str_replace('_', ' ', $v); - } - else{ - $index_img[$k] = mb_strlen ($v) > 5 ? mb_substr($v, 0, 5) : $v; - }*/ - $index_img[$k] = $v; # 讲话车系后直接显示全部 - } - if (strpos($k,'_ding') !== false){ - $index_img_ding[$k] = $index_img[$k]; - } - elseif (strpos($k,'_piao') !== false){ - $index_img_piao[$k] = $index_img[$k]; - } - else{ - $index_img_ding[$k] = $index_img[$k]; - $index_img_piao[$k] = $index_img[$k]; - } - } - - # 去掉空列与空行 - $this->clear_null_column_line($biz_aggs, $indexs); - $this->clear_null_column_line($data, $index_img); - $this->clear_null_column_line($data_ding, $index_img_ding); - $this->clear_null_column_line($data_piao, $index_img_piao); - #var_dump($data_piao);var_dump('
');var_dump($index_img_piao);var_dump('
');var_dump($indexs_total); - - #var_dump($biz_aggs[0]);var_dump($data[0]);var_dump($index_img);var_dump($data_ding[0]);var_dump($index_img_ding);var_dump($data_piao[0]);var_dump($index_img_piao);; - $img_path = $this->create_table_image($data, $index_img, $indexs_total, '小狸播报', 'aggs_biz_rpt.png'); - $img_path_ding = $this->create_table_image($data_ding, $index_img_ding, $indexs_total, '小狸播报 - 订单', 'aggs_biz_rpt_ding.png'); - $img_path_piao = $this->create_table_image($data_piao, $index_img_piao, $indexs_total, '小狸播报 - 开票', 'aggs_biz_rpt_piao.png'); - } - return array('biz_aggs'=>$biz_aggs, 'indexs'=>$indexs, 'img_path'=>$img_path, 'img_path_ding'=>$img_path_ding, 'img_path_piao'=>$img_path_piao, 'brand_names'=>$brand_names, 'series_names'=>$series_names); - } - - // 商家下定+开票统计 simple:按店铺类型,只拆分品牌列 - public function aggs_biz_ding_piao_rpt_simple($today_start='', $today_end='', $total_start='', $total_end='', - $title_today='', $title_ding_today='', $title_ding='', $title_piao_today='', $title_piao='', $create_table_image=false){ - !$today_start && $today_start = date('Y-m-d 00:00:00'); - !$today_end && $today_end = date('Y-m-d 00:00:00', strtotime('+1 day')); - !$total_start && $total_start = date('Y-m-01 00:00:00'); - !$total_end && $total_end = date('Y-m-01 00:00:00', strtotime('+1 month')); - //!$title_today && $title_today = date('m月d日'); - !$title_today && $title_today = '来源'; - !$title_ding_today && $title_ding_today = '当日订单'; - !$title_ding && $title_ding = '月累计订单'; - !$title_piao_today && $title_piao_today = '当日开票'; - !$title_piao && $title_piao = '月累计开票'; - - $ding = $this->aggs_biz_brand_ding($today_start, $today_end, $total_start, $total_end); - $piao = $this->aggs_biz_brand_piao($today_start, $today_end, $total_start, $total_end); - $biz = $this->aggs_biz_ding_piao($today_start, $today_end, $total_start, $total_end); - #var_dump($today_start);var_dump($today_end);var_dump($total_start);var_dump($total_end);var_dump($ding); var_dump($piao);var_dump($biz); - if (!$biz){ - return array(); - } - - $brand_names = array_unique(array_merge(array_column($ding, 'brand_name'), array_column($piao, 'brand_name')));#var_dump($brand_names); - - $arr1 = array('biz_name'=>$title_today, 'doc_ding_today'=>$title_ding_today, 'doc_ding'=>$title_ding); - foreach ($brand_names as $k => $v){ - $arr1[$v.'_ding'] = $v; - } - $arr3 = array('doc_piao_today'=>$title_piao_today, 'doc_piao'=>$title_piao); - foreach ($brand_names as $k => $v){ - $arr3[$v.'_piao'] = $v; - } - $indexs = array_merge($arr1, $arr3); - - # $ding, $piao 行转kv,生成xj小记与hj合计: 1 _1_东风EV_doc_ding 7; 1 _东风EV_doc_ding 9; 东风EV_doc_ding 9 - $kv = array(); - foreach (array_merge($ding, $piao) as $k => $v){ - $key_ding = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_ding'; - $key_ding_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_ding'; - $key_ding_hj = $v['brand_name'].'_doc_ding'; - - $key_piao = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_piao'; - $key_piao_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_piao'; - $key_piao_hj = $v['brand_name'].'_doc_piao'; - - if ($temp = intval($v['doc_ding'])){ - $kv[$key_ding] = $temp; - $kv[$key_ding_xj] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] + $temp: $temp; - $kv[$key_ding_hj] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] + $temp: $temp; - } - - if ($temp = intval($v['doc_piao'])){ - $kv[$key_piao] = $temp; - $kv[$key_piao_xj] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] + $temp: $temp; - $kv[$key_piao_hj] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] + $temp: $temp; - } - } - - $biz_type = $biz_id = $biz_name = null; - $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; - $doc_ding_today_ = $doc_ding_ = $doc_piao_today_ = $doc_piao_ = 0; - $biz_aggs = array(); - foreach ($biz as $k1 => $v1){ - !$biz_type && $biz_type = $v1['biz_type']; - $biz_id = $v1['biz_id']; - $biz_name = $v1['biz_name']; - - $doc_ding_today_ += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; - $doc_ding_ += $v1['doc_ding'] ? $v1['doc_ding'] : 0; - $doc_piao_today_ += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; - $doc_piao_ += $v1['doc_piao'] ? $v1['doc_piao'] : 0; - - if ($biz_type <> $v1['biz_type']){ - $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; - } - $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; - } - $biz_aggs[] = array_merge($arr1, $arr3); - - $biz_type = $v1['biz_type']; - $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; - } - - $doc_ding_today += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; - $doc_ding += $v1['doc_ding'] ? $v1['doc_ding'] : 0; - $doc_piao_today += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; - $doc_piao += $v1['doc_piao'] ? $v1['doc_piao'] : 0; - - $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>$biz_id, 'biz_name'=>$biz_name, 'doc_ding_today'=>$v1['doc_ding_today'] ? $v1['doc_ding_today'] : '', 'doc_ding'=>$v1['doc_ding'] ? $v1['doc_ding'] : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding] ? $kv[$key_ding] : ''; - } - $arr3 = array('doc_piao_today'=>$v1['doc_piao_today'] ? $v1['doc_piao_today'] : '', 'doc_piao'=>$v1['doc_piao'] ? $v1['doc_piao'] : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao] ? $kv[$key_piao] : ''; - } - $biz_aggs[] = array_merge($arr1, $arr3); - } - - # 最后一个小计 - $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; - } - $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; - } - $biz_aggs[] = array_merge($arr1, $arr3); - - # 合计 - $arr1 = array('biz_type'=>'', 'biz_id'=>'', 'biz_name'=>'合计', 'doc_ding_today'=>$doc_ding_today_ ? $doc_ding_today_ : '', 'doc_ding'=>$doc_ding_ ? $doc_ding_ : ''); - foreach ($brand_names as $k2 => $v2){ - $key_ding_hj = $v2.'_doc_ding'; - $arr1[$v2.'_ding'] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] : ''; - } - $arr3 = array('doc_piao_today'=>$doc_piao_today_ ? $doc_piao_today_ : '', 'doc_piao'=>$doc_piao_ ? $doc_piao_ : ''); - foreach ($brand_names as $k2 => $v2){ - $key_piao_hj = $v2.'_doc_piao'; - $arr3[$v2.'_piao'] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] : ''; - } - $biz_aggs[] = array_merge($arr1, $arr3);#var_dump($indexs);var_dump($biz_aggs); - - $img_path = ''; - if ($create_table_image){ - $data = $biz_aggs; - foreach ($data as $k => $v){ - unset($data[$k]['biz_type']); - unset($data[$k]['biz_id']); - $data[$k]['biz_name'] = mb_strlen ($data[$k]['biz_name']) > 9 ? mb_substr($data[$k]['biz_name'], 0, 9).'..' : $data[$k]['biz_name']; - } - $index_img = $indexs; - foreach ($index_img as $k => $v){ - $k != 'biz_name' && $index_img[$k] = mb_strlen ($v) > 5 ? mb_substr($v, 0, 5) : $v; - } - $img_path = $this->create_table_image($data, $index_img, $indexs_total=array(),'小狸播报', 'aggs_biz_rpt.png'); - } - return array('biz_aggs'=>$biz_aggs, 'indexs'=>$indexs, 'img_path'=>$img_path); - } - - private function clear_null_column_line(&$data, &$indexs, $index_ignore_column=array('biz_type', 'city_name', 'biz_id', 'biz_name', 'doc_ding_today', 'doc_ding', 'doc_piao_today', 'doc_piao'), - $index_ignore_line=array('biz_type', 'city_name', 'biz_id', 'biz_name')){ - # $biz_aggs去掉除列(biz_type, biz_id, biz_name, doc_ding_today, doc_ding, doc_piao_today, doc_piao)外为空的空列 + $indexs 去掉列名 - $columns = array(); - foreach ($data as $k => $v){ - foreach ($v as $kd => $vd){ - if (in_array($kd, $index_ignore_column)){ - continue; - } - if ($columns[$kd]){ - continue; - } - !$columns[$kd] && $columns[$kd] = $vd ? 1 : 0; - } - } - #var_dump($data[0]);var_dump('
');var_dump($indexs);var_dump('
');var_dump($columns); - foreach ($columns as $k => $v){ - if ($v){ - continue; - } - foreach ($data as $kd => $vd){ - unset($data[$kd][$k]); - } - unset($indexs[$k]); - } - # $biz_aggs去掉除列(biz_type, biz_id, biz_name)外为空的空行 - foreach ($data as $k => $v){ - $null_flag = true; - foreach ($v as $kd => $kv){ - if (in_array($kd, $index_ignore_line)){ - continue; - } - if ($kv){ - $null_flag = false; - break; - } - } - if ($null_flag){ - unset($data[$k]); - } - } - } - - private function create_table_image($data=array(), $indexs=array(), $indexs_total=array(), $title='', $file_name='aggs_biz_rpt.png'){ - # https://blog.csdn.net/mao__ge/article/details/107414956 - /*if (!$data){ - $data = array();//生成演示数据 - for ($i = 0; $i < 10; $i++) { - $data[] = array( - 'nice_name' => '测试名' . $i, - 'zhuang' => 100, - 'xian' => 50, - 'he' => '', - 'zhuang_dui' => 500, - 'xian_dui' => intval(5000 / ($i + 1)), - 'xian_li' => 30, - ); - } - $data[0]['nice_name'] = '这个名字比较长哦123'; - } - if (!$indexs){ - $indexs = array('nice_name'=>'昵称', 'zhuang'=>'数据1', 'xian'=>'数据2', 'he'=>'数据3', 'zhuang_dui'=>'数据4', 'xian_dui'=>'数据5', 'xian_li'=>'数据6'); - }*/ - - if (!$data || !$indexs){ - return ''; - } - - #date_default_timezone_set('PRC'); - $params = array( - 'row' => count($data)+1,//数据的行数 - 'file_name' => $file_name, - 'title' => $title, - 'table_time' => date('Y-m-d H:i:s'), - 'data' => $data - ); - $base = array( - 'border' => 10,//图片外边框 - 'file_path' => 'temp/',//图片保存路径 - 'title_height' => 30,//报表名称高度 - 'title_font_size' =>16,//报表名称字体大小 - 'font_ulr' => realpath('./static/fonts/msyh.ttc'),//字体文件路径 - 'text_size' => 12,//正文字体大小 - 'text_size_middle' => 12,//中间字体大小 14 - 'text_size_big' => 12,//加大字体大小 16 - 'row_hight' => 30,//每行数据行高 - 'filed_id_width' => 60,//序号列的宽度 - 'filed_name_width' => 200,//玩家名称的宽度 - 'filed_name_columns' => 1, //非数据列数据,也可传参数来控制 - 'filed_data_width' => 90,//数据列的宽度 - 'table_header' => array('序号', '昵称', '数据1', '数据2', '数据3', '数据4', '数据5', '数据6'),//表头文字 - 'column_text_offset_arr' => array(50, 180, 70, 70, 70, 70, 70, 70),//表头文字左偏移量 - 'row_text_offset_arr' => array(50, 180, 60, 60, 60, 60, 60, 60),//数据列文字左偏移量 - ); - - // $base替换start - if (in_array('city_name', array_keys($indexs))) { - $base['filed_name_columns'] = 2; - } - $base['table_header'] = array_merge(array('序号'), array_values($indexs)); - $column = count($base['table_header']); - $offset_arr_left = array(50); # 序号列 - for ($i=0; $i<$base['filed_name_columns']; $i++){ - $offset_arr_left[] = 180; - } - $offset_arr = array(); - $column_data = $column - $base['filed_name_columns'] -1; - for ($i=0; $i<$column_data; $i++){ - $offset_arr[] = 88; - } - $base['column_text_offset_arr'] = array_merge($offset_arr_left, $offset_arr); - $offset_arr = array(); - for ($i=0; $i<$column_data; $i++){ - $offset_arr[] = 40; - } - $base['row_text_offset_arr'] = array_merge($offset_arr_left, $offset_arr); - #var_dump(array_keys($indexs));var_dump('
');var_dump($base['column_text_offset_arr']);var_dump('
');var_dump($base['row_text_offset_arr']);var_dump('
'); - // $base替换end - - $base['img_width'] = $base['filed_id_width'] + $base['filed_name_width'] * $base['filed_name_columns'] + $base['filed_data_width'] * $column_data + $base['border'] * 2;//图片宽度 - $base['img_height'] = $params['row'] * $base['row_hight'] + $base['border'] * 2 + $base['title_height'];//图片高度 - $border_top = $base['border'] + $base['title_height'];//表格顶部高度 - $border_bottom = $base['img_height'] - $base['border'];//表格底部高度 - - // $base['column_x_arr'] 动态计算 - $base['column_x_arr'] = array( - $base['border'] + $base['filed_id_width'],//第一列边框线x轴像素 70/2+10 - ); - for ($i=1; $i<=$base['filed_name_columns']; $i++){ - $base['column_x_arr'][] = $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] * $i; //第二列边框线x轴像素 190 - } - for ($i=1; $i<=$column_data; $i++){ - $base['column_x_arr'][] = $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] * $base['filed_name_columns'] + $base['filed_data_width'] * $i; - } - - $img = imagecreatetruecolor($base['img_width'], $base['img_height']);//创建指定尺寸图片 - $bg_color = imagecolorallocate($img, 255, 255, 255);//设定图片背景色 - $text_coler = imagecolorallocate($img, 0, 0, 0);//设定文字颜色 - $border_coler = imagecolorallocate($img, 0, 0, 0);//设定边框颜色 - $white_coler = imagecolorallocate($img, 255, 255, 255);//设定边框颜色 - $red_coler = imagecolorallocate($img, 255, 0, 0); - $green_coler = imagecolorallocate($img, 0, 255, 0); - $blue_coler = imagecolorallocate($img, 0, 0, 255); - $origin_coler = imagecolorallocate($img, 255, 97, 0); - imagefill($img, 0, 0, $bg_color);//填充图片背景色 - //先填充一个黑色的大块背景 - imagefilledrectangle($img, $base['border'], $base['border'] + $base['title_height'], $base['img_width'] - $base['border'], $base['img_height'] - $base['border'], $border_coler);//画矩形 - //再填充一个小两个像素的 背景色区域,形成一个两个像素的外边框 - imagefilledrectangle($img, $base['border'] + 2, $base['border'] + $base['title_height'] + 2, $base['img_width'] - $base['border'] - 2, $base['img_height'] - $base['border'] - 2, $bg_color);//画矩形 - //画表格纵线 及 写入表头文字 - foreach ($base['column_x_arr'] as $key => $x) { - imageline($img, $x, $border_top, $x, $border_bottom, $border_coler);//画纵线 - $x = $x - $base['column_text_offset_arr'][$key] + 1; - $y = $border_top + $base['row_hight'] - 8; - $text = $base['table_header'][$key]; - #imagettftext($img, $base['text_size'], 0, $x,$y , $text_coler, $base['font_ulr'],$text );//写入表头文字 - $color = $text_coler; - if (in_array($text.'_ding', $indexs_total) || in_array($text.'_piao', $indexs_total) || $text == $indexs['doc_ding'] || $text == $indexs['doc_piao']){ - $color = $blue_coler; - } - $offset_ext = in_array($text, array('序号')) || mb_strlen($text) > 4 ? 0 : 10 * (5 - mb_strlen($text)); - imagettftext($img, $base['text_size'], 0, $x + $offset_ext, $y, $color, $base['font_ulr'], $text );//写入表头文字 - } - //画表格横线 - $text = 0; - foreach ($params['data'] as $key => $item) { - $border_top += $base['row_hight']; - imageline($img, $base['border'], $border_top, $base['img_width'] - $base['border'], $border_top, $border_coler); - $x = $base['column_x_arr'][0] - $base['row_text_offset_arr'][0]; - $y = $border_top + $base['row_hight'] - 10; - #$text = $key + 1; - $text ++; # 防止$key跳空 - imagettftext($img, $base['text_size'], 0, $x, $y, $text_coler, $base['font_ulr'], $text);//写入序号 - $sub = 0; - /*foreach ($item as $value) { - $sub++; - $offset = $base['row_text_offset_arr'][$sub]; - if ($value && intval($value) && intval($value) > 9){ - $offset = $offset + (strlen(strval($value)) - 1) * 10; - } - imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][$sub] - $offset, $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $value);//写入data数据 - }*/ - $size = $coclor = $size_set = null; - foreach ($item as $key => $value) { - $sub++; - $offset = $base['row_text_offset_arr'][$sub]; - if ($value && intval($value) && intval($value) > 9){ - $offset = $offset + (strlen(strval($value)) - 1) * 10; - } - - if (strpos($value,'小计') !== false){ - $size = $base['text_size_big']; - $coclor = $blue_coler; - $size_set = true; - } - if (strpos($value,'合计') !== false){ - $size = $base['text_size_big']; - $coclor = $red_coler; - $size_set = true; - } - !$size_set && $size = $base['text_size']; - !$size_set && $coclor = $text_coler; - - /*if (!$size_set && $indexs_total && in_array($key, $indexs_total)){ - $size = $base['text_size_middle']; - $coclor = $origin_coler; - }*/ - - /*if (!$size_set){ - if ($indexs_total && in_array($key, $indexs_total)){ - $size = $base['text_size_big']; - $coclor = $origin_coler; - } - else{ - $size = $base['text_size']; - $coclor = $text_coler; - } - }*/ - - imagettftext($img, $size, 0, $base['column_x_arr'][$sub] - $offset, $border_top + $base['row_hight'] - 10, $coclor, $base['font_ulr'], $value);//写入data数据 - } - } - //计算标题写入起始位置 - $title_fout_box = imagettfbbox($base['title_font_size'], 0, $base['font_ulr'], $params['title']);//imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角: - - $title_fout_width = $title_fout_box[2] - $title_fout_box[0];//右下角 X 位置 - 左下角 X 位置 为文字宽度 - $title_fout_height = $title_fout_box[1] - $title_fout_box[7];//左下角 Y 位置- 左上角 Y 位置 为文字高度 - //居中写入标题 - imagettftext($img, $base['title_font_size'], 0, ($base['img_width'] - $title_fout_width) / 2, $base['title_height'], $text_coler, $base['font_ulr'], $params['title']); - //写入制表时间 - imagettftext($img, $base['text_size'], 0, $base['border'], $base['title_height'], $text_coler, $base['font_ulr'], '时间:' . $params['table_time']); - $save_path = $base['file_path'] . $params['file_name']; - if (!is_dir($base['file_path']))//判断存储路径是否存在,不存在则创建 - { - mkdir($base['file_path'], 0777, true);//可创建多级目录 - } - $res = imagepng($img, $save_path);//输出图片,输出png使用imagepng方法,输出gif使用imagegif方法 - //echo ''; - return $res ? $save_path : ''; - } - -} +ci = & get_instance(); + $this->ci->load->model('receiver/receiver_customers_model','customers_model'); + + $this->ci->load->model('receiver/order/receiver_orders_v2_model'); + $this->ci->load->model('receiver/order/receiver_order_signs_model','signs_model'); + $this->ci->load->model('receiver/order/receiver_order_deliverys_model','deliverys_model'); + $this->ci->load->model('receiver/order/receiver_order_contracts_model'); + + $this->ci->load->model('receiver/receiver_service_package_model','package_model'); + $this->ci->load->model('receiver/receiver_services_model','services_model'); + + $this->ci->load->model('sys/sys_city_model'); + $this->ci->load->model("sys/sys_company_model"); + + $this->ci->load->model('apporder/order_purchase_model'); + $this->ci->load->model('auto/auto_brand_model'); + $this->ci->load->model('auto/auto_series_model'); + $this->ci->load->model('auto/auto_attr_model'); + $this->ci->load->model("items/items_model"); + + $this->ci->load->model("biz/biz_model"); + $this->ci->load->model('app/liche/app_liche_orders_model'); + } + + //创建意向金订单 + public function c_intention($oid,$uid,$money){ + $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + if(!$this->order_row){ + return false; + } + $p_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'pid'=>0,'status>='=>0]); + $entrust_user = $this->entrust_user($oid); + if(!$p_row){ + $sid = create_order_no(350200,'liche',1,0); + $add_data = [ + 'o_id' => $this->order_row['id'], + 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, + 'sid' => $sid, + 'pid' => 0, + 'brand_id' => $this->order_row['brand_id'], + 's_id' => $this->order_row['s_id'], + 'v_id' => $this->order_row['v_id'], + 'cor_id' => $this->order_row['cor_id'], + 'incor_id' => $this->order_row['incor_id'], + 'c_time' => time() + ]; + $uid && $add_data['uid'] = $uid; + $pid = $this->ci->app_liche_orders_model->add($add_data); + }else{ + $pid = $p_row['id']; + } + $res = false; + $sub_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'type'=>4,'status>='=>0]); + if($pid && !$sub_row){ + //获取微信商户号 + $companys = $this->get_biz_mchid($this->order_row['biz_id'],$this->order_row['brand_id'],$this->order_row['if_local_bill']); + $sid = create_order_no(350200,'liche',1,4); + $sub_data = [ + 'o_id' => $this->order_row['id'], + 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, + 'sid' => $sid, + 'mch_id' => $companys['company']['wx_mchid'], + 'company_id' => $companys['company']['id'], + 'pid' => $pid, + 'type' => 4, + 'brand_id' => $this->order_row['brand_id'], + 's_id' => $this->order_row['s_id'], + 'v_id' => $this->order_row['v_id'], + 'cor_id' => $this->order_row['cor_id'], + 'incor_id' => $this->order_row['incor_id'], + 'total_price' => $money, + 'c_time' => time() + ]; + $uid && $sub_data['uid'] = $uid; + $res = $this->ci->app_liche_orders_model->add($sub_data); + } + return $res; + } + /** + * 获取商家微信商户号 + * @param $biz_id int 商家id + * @param $car_brand_id int 品牌id + * @param $if_local_bill int 是否开具本地发票 + * @return array ['company'=>[],'srv_company'=>[]] + */ + public function get_biz_mchid($biz_id,$car_brand_id=0,$if_local_bill=false){ + $biz = $this->ci->biz_model->get(['id'=>$biz_id],'type,city_id,company_id,srv_company_id,car_brand_id'); + $filed = 'id,wx_mchid,title,short,credit_code,wx_mchid,img_seal'; + $brand_biz = $this->ci->biz_model->get(['city_id'=>$biz['city_id'],'type'=>1,'status'=>1,'car_brand_id'=>$car_brand_id],'type,city_id,company_id,srv_company_id'); + if($brand_biz){ + $where = [ + "status" => 1, + "id in ({$brand_biz['company_id']},{$brand_biz['srv_company_id']})" => null + ]; + $companys = $this->ci->sys_company_model->map('id','',$where,'','','',$filed); + $company = $companys[$brand_biz['company_id']][0]; + $srv_company = $companys[$brand_biz['srv_company_id']][0]; + } + $local_city = false; + if(in_array($biz['city_id'],$this->local_bill_citys) && $if_local_bill){ //是否开具本地发票且在指定城市用本地城市 + $local_city = true; + } + if(!$company || $local_city){ //获取城市销售公司 + $company = $this->ci->sys_company_model->get(['city_id'=>$biz['city_id'],'type'=>1,'status'=>1],$filed); + } + if(!$srv_company || $local_city){ //获取城市服务公司 + $srv_company = $this->ci->sys_company_model->get(['city_id'=>$biz['city_id'],'type'=>0,'status'=>1],$filed); + } + if(!$company){ //获取固定id销售公司 + $company = $this->ci->sys_company_model->get(['id'=>1],$filed); + } + if(!$srv_company){ //获取固定id服务公司 + $srv_company = $this->ci->sys_company_model->get(['id'=>4],$filed); + } + //跑零 用泉州销售公司 + if($car_brand_id==5){ + $company = $this->ci->sys_company_model->get(['id'=>2],$filed); + } + $data = [ + 'company' => $company, + 'srv_company' => $srv_company + ]; + return $data; + } + /** + * 获取代办人用户信息 + * @param $oid int 订单id + * @return array + */ + public function entrust_user($oid){ + $this->ci->load->model('app/liche/app_liche_users_model'); + + !$this->order_row && $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + if(!$this->order_row){ + return []; + } + $user = $this->ci->app_liche_users_model->get(['mobile'=>$this->order_row['owner_mobile']]); + return $user; + } + + /** + * 获取订单服务费 + * @param $oid int 订单id + * @param $res_type string 返回数据格式 + * @param $is_fines int(0否 1是) 是否包含精品选装 + * @return array|int|mixed + */ + public function order_srv_money($oid,$res_type = '',$is_fines=1){ + if(!$this->order_row){ + $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + } + elseif ($this->order_row['id'] != $oid){ + $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + } + $money_json = json_decode($this->order_row['money_json'],true); + $srv_price = 0; + $list = []; //明细 + $services = json_decode($this->order_row['srv_ids'],true); + + if($services){ + $srv_ids = array_column($services,'id'); + $ids = implode(',',$srv_ids); + if($srv_ids){ + $where["id in ($ids)"] = null; + $rows = $this->ci->services_model->map('id','title',$where,'','','','id,title'); + } + foreach($services as $key=>$val){ + if($val['key']!='price_insure'){ //保险费不收 + $srv_price += $money_json[$val['key']]; + $list[] = [ + 'title' => $rows[$val['id']], + 'key' => $val['key'], + 'money' => $money_json[$val['key']] + ]; + } + if($val['key']=='price_insure' && $res_type==1){ + $list[] = [ + 'title' => $rows[$val['id']], + 'key' => $val['key'], + 'money' => '由保险公司收取' + ]; + } + } + } + + if($this->order_row['if_fine']){ //选择精品包 + $fine_price = $money_json['price_fine']; + if($money_json['price_fine_discount']){ //优惠精品价格 + $fine_price = $fine_price - $money_json['price_fine_discount']; + } + $srv_price += $fine_price; + $list[] = [ + 'title' => '精品尊享包', + 'key' => 'price_fine_discount', + 'money' => $fine_price + ]; + } + + if($is_fines){ + $fines = json_decode($this->order_row['fines'],true); + if($fines){ + $price_fine_select = $money_json['price_fine_select'] ? $money_json['price_fine_select'] : 0; + $list[] = [ + 'title' => '精品选装', + 'key' => 'price_fine_select', + 'money' => $price_fine_select, + ]; + $srv_price += $price_fine_select; + } + } + $result['total'] = $srv_price; + $result['list'] = $list; + return $res_type ? $result:$srv_price; + } + + /** + * 生成定金订单 + * @param $oid int 订单id + * @param $uid int 小程序用户id + * @return bool + */ + public function add_book_order($oid,$uid){ + $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + if(!$this->order_row){ + return false; + } + $pay_money = $this->ci->app_liche_orders_model->get(['o_id'=>$oid,'type'=>4,'status>='=>0]); //意向金订单 + $ht_money = $this->ci->app_liche_orders_model->sum('pay_price',['o_id'=>$oid,'type'=>6,'status>='=>0]); //后台添加车款 + + $money_json = json_decode($this->order_row['money_json'],true); + $deposit_count = $this->ci->app_liche_orders_model->count(['o_id'=>$oid,'type'=>1,'status'=>1]); //定金已支付 + $need_pay_money = $money_json['price_book'] - $pay_money['total_price'] - $ht_money['pay_price']; + $res = false; + //if($need_pay_money > 0 && !$deposit_count){ + $payway = $this->order_row['payway']; + $money_json = json_decode($this->order_row['money_json'], true); + $deposit = $money_json['price_book']; + $if_zero_firstpay = $payway == 0 && !$deposit ? 1 : 0; + if($if_zero_firstpay || $need_pay_money > 0 && !$deposit_count){ + $entrust_user = $this->entrust_user($this->order_row['id']); + $p_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'pid'=>0,'status>='=>0]); + if(!$p_row){ + $sid = create_order_no(350200,'liche',1,0); + $add_data = [ + 'o_id' => $this->order_row['id'], + 'sid' => $sid, + 'pid' => 0, + 'brand_id' => $this->order_row['brand_id'], + 's_id' => $this->order_row['s_id'], + 'v_id' => $this->order_row['v_id'], + 'cor_id' => $this->order_row['cor_id'], + 'incor_id' => $this->order_row['incor_id'], + 'c_time' => time() + ]; + $uid && $add_data['uid'] = $uid; + $entrust_user['id'] && $add_data['entrust_uid'] = $entrust_user['id']; + $pid = $this->ci->app_liche_orders_model->add($add_data); + }else{ + $pid = $p_row['id']; + } + $sub_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'type'=>1,'status>='=>0]); + $zero_firstpay_row = $this->ci->app_liche_orders_model->get(['o_id'=>$this->order_row['id'],'type'=>1,'status='=>1,'total_price'=>0.0, 'pay_price'=>0.0]); + if($pid && !$sub_row || $pid && !$zero_firstpay_row && $if_zero_firstpay){ + //获取微信商户号 + $companys = $this->get_biz_mchid($this->order_row['biz_id'],$this->order_row['brand_id'],$this->order_row['if_local_bill']); + if($this->order_row['biz_id']==63){ //零跑店 门店ID= 63,车款收款都用 id = 12 的公司 合同收款公司不变 + $filed = 'id,wx_mchid,title,short,credit_code,wx_mchid,img_seal'; + $companys['company'] = $this->ci->sys_company_model->get(['id'=>12],$filed); + } + $sid = create_order_no(350200,'liche',1,1); + $sub_data = [ + 'o_id' => $this->order_row['id'], + 'sid' => $sid, + 'mch_id' => $companys['company']['wx_mchid'], + 'company_id' => $companys['company']['id'], + 'pid' => $pid, + 'type' => 1, + 'brand_id' => $this->order_row['brand_id'], + 's_id' => $this->order_row['s_id'], + 'v_id' => $this->order_row['v_id'], + 'cor_id' => $this->order_row['cor_id'], + 'incor_id' => $this->order_row['incor_id'], + 'total_price' => $need_pay_money, + 'c_time' => time() + ]; + $if_zero_firstpay && $sub_data['status'] = 1; // 0首付强制为已支付 + $if_zero_firstpay && $sub_data['pay_time'] = date('Y-m-d H:i:s'); // 0首付强制支付时间 + $if_zero_firstpay && $sub_data['total_price'] = 0; // 0首付强制total_price为0 + $if_zero_firstpay && $sub_data['descrip'] = '零首付'; + $entrust_user['id'] && $sub_data['entrust_uid'] = $entrust_user['id']; + $uid && $sub_data['uid'] = $uid; + $res = $this->ci->app_liche_orders_model->add($sub_data); + + $pay_count = $this->ci->app_liche_orders_model->count(['o_id'=>$this->order_row['id'],'status'=>1]); + //0首付播报 + if ($pay_count == 1 && $if_zero_firstpay && $res){ + $this->ci->load->library('qyrobot'); + $this->ci->qyrobot->deposit_notify_v3($oid); + } + } + } + return $res; + } + + /** + * 创建服务费和尾款 + * @param $oid + * @param $uid + * @return bool + */ + public function add_order($oid,$uid){ + $this->ci->load->helper('order'); + $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + $p_row = $this->ci->app_liche_orders_model->get(['pid'=>0,'o_id'=>$oid,'status>='=>0],'id'); //父订单 + if(!$this->order_row || !$p_row){ + return false; + } + + //获取微信商户号 + $companys = $this->get_biz_mchid($this->order_row['biz_id'],$this->order_row['brand_id'],$this->order_row['if_local_bill']); + if($this->order_row['biz_id']==63){ //零跑店 门店ID= 63,车款收款都用 id = 12 的公司 合同收款公司不变 + $filed = 'id,wx_mchid,title,short,credit_code,wx_mchid,img_seal'; + $companys['company'] = $this->ci->sys_company_model->get(['id'=>12],$filed); + } + + $srv_money = $this->order_srv_money($oid); //服务费 + $money_json = json_decode($this->order_row['money_json'],true); + $total_price = $this->total_price($oid); + if(!$this->order_row['payway'] && !$money_json['price_loan']){//贷款未填写首付 + return false; + } + $to_srv_price = $srv_money; + //后台添加车款 + $pay_row = $this->ci->app_liche_orders_model->sum('pay_price',['status'=>1,'type'=>6,'o_id'=>$oid]); + if($pay_row['pay_price']>=0 && $pay_row['pay_price']>=$money_json['price_book']){ + if(!$this->order_row['payway']){ //贷款 + $total_price = $total_price - $money_json['price_loan']; + } + $to_com_price = $total_price - $pay_row['pay_price']; + }else{ + if($this->order_row['payway']){ //全款 + $to_com_price = $total_price - $money_json['price_book']; + }else{ //分期 + $to_com_price = $total_price-$money_json['price_loan'] - $money_json['price_book']; + } + } + $to_com_price = $to_com_price>0 ? $to_com_price : 0; + $last_order = $this->ci->app_liche_orders_model->get(['status>='=>0,'type'=>3,'o_id'=>$oid]); + $srv_order = $this->ci->app_liche_orders_model->get(['status>='=>0,'type'=>2,'o_id'=>$oid]); + if($last_order && $srv_order){ //存在尾款订单 + if($last_order['total_price']!=$to_com_price && $to_com_price>0){ + $this->ci->app_liche_orders_model->update(['total_price'=>$to_com_price,'status'=>0],['id'=>$last_order['id']]); + } + return true; + } + $add_data = []; + $entrust_user = $this->entrust_user($oid); + if($to_srv_price>0 && !$this->ci->app_liche_orders_model->count(['o_id'=>$this->order_row['id'],'type'=>2,'status>='=>0])){ + $order_type = 2; + $sid = create_order_no(350200,'liche',1,$order_type); + $add_data[] = [ + 'o_id' => $this->order_row['id'], + 'uid' => $uid ? $uid : 0, + 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, + 'sid' => $sid, + 'mch_id' => $companys['srv_company']['wx_mchid'], + 'company_id' => $companys['srv_company']['id'], + 'pid' => $p_row['id'], + 'brand_id' => $this->order_row['brand_id'], + 's_id' => $this->order_row['s_id'], + 'v_id' => $this->order_row['v_id'], + 'cor_id' => $this->order_row['cor_id'], + 'incor_id' => $this->order_row['incor_id'], + 'total_price' => $to_srv_price, + 'type' => $order_type, + 'c_time' => time() + ]; + } + if($to_com_price>0 && !$this->ci->app_liche_orders_model->count(['o_id'=>$this->order_row['id'],'type'=>3,'status>='=>0])){ + $book_order = $this->ci->app_liche_orders_model->get(['status>='=>0,'type'=>1,'o_id'=>$oid]); + $book_order['mch_id'] && $companys['company']['wx_mchid'] = $book_order['mch_id']; + $book_order['company_id'] && $companys['company']['id'] = $book_order['company_id']; + $order_type = 3; + $sid = create_order_no(350200,'liche',1,$order_type); + $add_data[] = [ + 'o_id' => $this->order_row['id'], + 'uid' => $uid ? $uid : 0, + 'entrust_uid' => $entrust_user['id'] ? $entrust_user['id'] : 0, + 'sid' => $sid, + 'mch_id' => $companys['company']['wx_mchid'], + 'company_id' => $companys['company']['id'], + 'pid' => $p_row['id'], + 'brand_id' => $this->order_row['brand_id'], + 's_id' => $this->order_row['s_id'], + 'v_id' => $this->order_row['v_id'], + 'cor_id' => $this->order_row['cor_id'], + 'incor_id' => $this->order_row['incor_id'], + 'total_price' => $to_com_price, + 'type' => $order_type, + 'c_time' => time() + ]; + } + $result = false; + if($add_data){ + $result = $this->ci->app_liche_orders_model->add_batch($add_data); + } + return $result; + } + + + /** + * 计算订单应收金额 + * @param $oid int 订单id + * @param $srv_price boolean 是否包含服务费 + * @param $price_loan boolean 是否包含分期(230220 成本-应收款不要扣掉按揭部分) + * @return float + */ + public function recevable_price($oid,$srv_price=true,$price_loan=true){ + $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + if(!$this->order_row){ + return false; + } + $money_json = json_decode($this->order_row['money_json'],true); + $total_price = $this->total_price($oid); + if($srv_price){ + $srv_money = $this->order_srv_money($oid); + $recevable_price = $total_price + $srv_money; + }else{ + $recevable_price = $total_price; + } + if($price_loan && !$this->order_row['payway']){ //分期 + $recevable_price -= $money_json['price_loan']; + } + return $recevable_price; + } + + /** + * 计算订单总售价 + * @param int $oid 订单id + * @param string $money_json + * @return float + */ + public function total_price($oid,$money_json=''){ + if(!$money_json){ + $order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid],'money_json'); + if(!$order_row){ + return false; + } + $money_json = json_decode($order_row['money_json'],true); + }else{ + $money_json = json_decode($money_json,true); + } + + $total_price = $money_json['price_car']; + if($money_json['price_discount']){ + $total_price -= $money_json['price_discount']; + } + if($money_json['price_color']){ + $total_price += $money_json['price_color']; + } + if($money_json['price_coplus']){ + $total_price += $money_json['price_coplus']; + } + if($money_json['price_options']){ + $total_price += $money_json['price_options']; + } + return $total_price ? $total_price : 0; + } + + /** + * 修改完订单信息后操作 + * @param array() $new_data 修改后的数据 + * @param array() $row 修改前数据 + */ + public function edit_order($new_data,$row,$user_info=[]){ + //更新购车订单车辆信息 + $up_data = [ + 'brand_id' => $new_data['brand_id'], + 's_id' => $new_data['s_id'], + 'v_id' => $new_data['v_id'], + 'cor_id' => $new_data['cor_id'], + 'incor_id' => $new_data['incor_id'], + ]; + $this->ci->app_liche_orders_model->update($up_data,['o_id'=>$row['id']]); + //删除未支付订单 + $this->ci->app_liche_orders_model->delete(['o_id'=>$row['id'],'status'=>0,'pid!='=>0]); + $userinfo = $this->ci->app_liche_users_model->get(['mobile'=>$row['mobile']],'id'); + if(!$this->ci->app_liche_orders_model->count(['o_id'=>$row['id'],'type'=>1,'status'=>1])){ //不存在定金订单 + $pay_row= $this->ci->app_liche_orders_model->sum('pay_price',['o_id'=>$row['id'],'type'=>6,'status'=>1]);//后台添加车款 + $money_json = json_decode($new_data['money_json'],true); + //if($pay_row['pay_price']<$money_json['price_book']){ + $payway = $new_data['payway']; + $deposit = $money_json['price_book']; + $if_zero_firstpay = $payway == 0 && !$deposit ? 1 : 0; + if($if_zero_firstpay || $pay_row['pay_price']<$money_json['price_book']){ + $int_order = $this->ci->app_liche_orders_model->get(['o_id'=>$row['id'],'type'=>4,'status'=>1]); //意向金订单 + //if($int_order['pay_price']==$money_json['price_book']){ //意向金订单转支付订单、推送并且生成pfd + //意向金小于定金的,怎么处理? (暂不处理) + if($int_order && $int_order['pay_price']>=$money_json['price_book']){ //意向金订单转支付订单、推送并且生成pfd + $this->ci->app_liche_orders_model->update(['type'=>1],['id'=>$int_order['id']]); + $this->ci->receiver_orders_v2_model->update(['order_time'=>date('Y-m-d H:i:s')],['id'=>$row['id']]); + //生成pdf + $this->create_pdf($row['id']); + $this->ci->load->library('qyrobot'); + $this->ci->qyrobot->deposit_notify_v3($row['id']); + //0首付下需要补记录 + if ($if_zero_firstpay){ + $this->add_book_order($row['id'],$userinfo['id']); + } + }else{ + $this->add_book_order($row['id'],$userinfo['id']); + } + } + } + $this->add_order($row['id'],$userinfo['id']); + //合同重新生成 + $need_del_con = false; + if($this->ci->receiver_order_contracts_model->count(['o_id'=>$row['id'],'type in (0,1)'=>null])){ + $need_del_con = true; + } + if($new_data['if_local_bill']!=$row['if_local_bill']){ + $need_del_con = true; + } + if($need_del_con){ + $this->ci->receiver_order_contracts_model->delete(['o_id'=>$row['id'],'type in (0,1)'=>null]); + } + $is_pay = $this->ci->app_liche_orders_model->count(['o_id'=>$row['id'],'type!='=>4,'status'=>1]); + if($is_pay && + ($new_data['brand_id']!=$row['brand_id'] || $new_data['s_id']!=$row['s_id'] || $new_data['v_id']!=$row['v_id']) || + $new_data['cor_id']!=$row['cor_id'] || $new_data['incor_id'] != $row['incor_id'] + ){ //存在已支付订单并且修改车型 写日志 + $where = [ + "lc_auto_series.id in ({$new_data['s_id']},{$row['s_id']})" => null + ]; + $brand = $this->ci->auto_series_model->select_brand($where); + foreach ($brand as $key=>$value) { + $brand[$value['id']] = $value; + } + $ids = [$new_data['v_id'],$row['v_id'],$new_data['cor_id'],$row['cor_id'],$new_data['incor_id'],$new_data['incor_id']]; + $ids_str = implode(',',$ids); + $where = [ + "id in ({$ids_str})" => null + ]; + $attr = $this->ci->auto_attr_model->map('id','title',$where); + $old_title = "{$brand[$row['s_id']]['b_name']}-{$brand[$row['s_id']]['name']}-{$attr[$row['v_id']]}-{$attr[$row['cor_id']]}-{$attr[$row['incor_id']]}"; + $new_title = "{$brand[$new_data['s_id']]['b_name']}-{$brand[$new_data['s_id']]['name']}-{$attr[$new_data['v_id']]}-{$attr[$new_data['cor_id']]}-{$attr[$row['incor_id']]}"; + $content = "车型由 {$old_title} 变更为 {$new_title}"; + $this->ci->load->library('receiver/orders_entity'); + $this->ci->orders_entity->add_log($row['id'],$user_info['uid'],$user_info['uname'],$content); + //短信通知 + $params = [ + 'sid' => $row['sid']."({$row['owner_name']})", + 'car_a' => $old_title, + 'car_b' => $new_title, + ]; + $this->send_msg('SMS_241355543',$params); + } + } + + /** + * 生成pdf文件 + * @param $oid + * @throws Exception + */ + public function create_pdf($oid){ + $this->order_row = $this->ci->receiver_orders_v2_model->get(['id'=>$oid]); + if(!$this->order_row ){ + return ['code'=>0,'msg'=>'参数错误']; + } + if($this->ci->receiver_order_contracts_model->count(['o_id'=>$oid,'status'=>1])){ + return ['code'=>1,'msg'=>'操作成功']; + } + $need_sign = true; + if($this->order_row['brand_id'] == 4){ //除宁德哪吒需要购车合同 + $biz = $this->ci->biz_model->get(['id'=>$this->order_row['biz_id']],'city_id'); + $need_sign = $biz['city_id'] == '350900' ? true : false; + } + $fill_info = $this->pdf_data($this->order_row); + $this->ci->load->library('pdftk'); + if($need_sign) { + $fill_data = [ + 'sid' => $this->order_row['sid'], + 'give_time' => $fill_info['give_time'], + 'date' => $fill_info['now_day'], + 'company' => $fill_info['companys']['company']['title'], + 'name' => $fill_info['name'], + 'owner_name' => $fill_info['owner_name'], + 'owner_mobile' => $fill_info['owner_mobile'], + 'identify_type' => $fill_info['identify_type'], + 'identify' => $fill_info['identify'], + 'address' => $fill_info['address'], + 'version' => $fill_info['version'], + 'color' => $fill_info['color'], + 'incolor' => $fill_info['incolor'], + 'price_car' => $fill_info['price_car'], + 'price_discount' => $fill_info['price_discount'], + 'price_finance' => $fill_info['price_finance'], + 'recevable_price' => $fill_info['recevable_price'], + 'price_book' => $fill_info['price_book'], + 'last_price' => $fill_info['last_price'], + ]; + //2022-12-23至2023-01-01使用 car_tpl_tmp.pdf + $pdf_path = time()>strtotime('2023-01-01 00:00:00') ? 'pdf/car_tpl.pdf' : 'pdf/car_tpl_temp.pdf'; + if ($fill_info['sa']) { + $fill_data['sa'] = $fill_info['sa']; + $pdf_path = 'pdf/car_sa_tpl.pdf'; + } + $save_path = "pdf/{$this->order_row['sid']}/car.pdf"; + $req = $this->ci->pdftk->esign_fill_pdf($pdf_path, $save_path, $fill_data); + if (!$req['code']) { + return ['code' => 0, 'msg' => $req['msg']]; + } + $add_data[] = [ + 'o_id' => $this->order_row['id'], + 'cid' => 0, + 'file' => $req['data']['file_path'] ? $req['data']['file_path'] : '', + 'type' => 0, + 'status' => 1, + 'c_time' => time() + ]; + } + if($this->order_row['srv_ids']){ + $fill_data = [ + 'sid' => $this->order_row['sid'], + 'date' => $fill_info['now_day'], + 'company' => $fill_info['companys']['srv_company']['title'], + 'name' => $fill_info['name'], + 'mobile' => $this->order_row['owner_mobile'], + 'owner_name' => $fill_info['owner_name'], + 'owner_mobile' => $fill_info['owner_mobile'], + 'service_str' => implode(' +',$fill_info['services']), + ]; + $pdf_path = 'pdf/agent_tpl.pdf'; + $save_path = "pdf/{$this->order_row['sid']}/service.pdf"; + $res = $this->ci->pdftk->esign_fill_pdf($pdf_path,$save_path,$fill_data); + if($res['code']){ + $add_data[] = [ + 'o_id' => $this->order_row['id'], + 'cid' => 0, + 'file' => $res['data']['file_path'] ? $res['data']['file_path'] : '', + 'type' => 1, + 'status' => 1, + 'c_time' => time() + ]; + } + } + $res = $this->ci->receiver_order_contracts_model->add_batch($add_data); + if($res){ + //更新交付时间 + $car_json = json_decode($this->order_row['car_json'],true); + $over_time = date('Y-m-d H:i:s',time()+$car_json['delivery_day']*24*60*60); //交付截止时间 + $this->ci->receiver_orders_v2_model->update(['over_time'=>$over_time],['id'=> $this->order_row['id']]); + return ['code'=>1,'msg'=>'操作成功']; + }else{ + return ['code'=>0,'msg'=>'操作失败']; + } + } + + /** + * 获取填充内容 + * @param $row + * @param $type + * @return mixed + */ + public function pdf_data($row,$type=0){ + if(!$row){ + return false; + } + $this->ci->load->model('auto/auto_business_model'); + $info_json = json_decode($row['info_json'],true); + $business_id = $info_json['business_id'] ? $info_json['business_id'] : 0; + $data = []; + + $biz = $this->ci->biz_model->get(['id'=>$row['biz_id']]); + //车辆信息 + $money_json = json_decode($row['money_json'],true); + $money_json['price_discount'] && $row['price'] = $row['price'] - $money_json['price_discount']; + $brand = $this->ci->auto_brand_model->get(['id'=>$row['brand_id']],'name'); + $series = $this->ci->auto_series_model->get(['id'=>$row['s_id']],'name'); + $version = $this->ci->auto_attr_model->get(['id'=>$row['v_id']],'title'); + $color = $this->ci->auto_attr_model->get(['id'=>$row['cor_id']],'title'); + $incolor = $this->ci->auto_attr_model->get(['id'=>$row['incor_id']],'title'); + $_version = $version['title'] ? $version['title'] : ''; + $data['version'] = "{$brand['name']} {$series['name']} $_version"; + $data['color'] = $color['title'] ? $color['title'] : ''; + $data['incolor'] = $incolor['title'] ? $incolor['title'] : ''; + $business_row = $this->ci->auto_business_model->get(['id'=>$business_id]); + if($business_row){ + $data['give_time'] = $business_row['delivery_day']; + }else{ + if($row['s_id']==24) { //零跑T03 + $data['give_time'] = 60; + }elseif($row['s_id']==25) { //零跑C11 + $data['give_time'] = 120; + }else{ //其它车型 + $data['give_time'] = 45; + } + } + $data['price_car'] = number_format($money_json['price_car']+$money_json['price_color']+$money_json['price_coplus'],2); + $data['price_discount'] = number_format($money_json['price_discount'],2); + $data['price_book'] = number_format($money_json['price_book'],2); + $data['recevable_price'] = number_format($this->total_price($row['id']),2); + $data['last_price'] = number_format($this->total_price($row['id']) - $money_json['price_book'],2); + $data['address'] = $info_json['c_address'] ? $info_json['c_address'] : ''; + $data['name'] = $row['name']; + if($row['main_type']){ + $data['identify_type'] = '营业执照' ; + $data['identify'] = $info_json['c_credit']; + $data['owner_name'] = $info_json['c_company']; + $data['owner_mobile'] = $row['mobile']; + }else{ + $data['identify_type'] = '身份证'; + $data['identify'] = $info_json['c_owner_cardid']; + $data['owner_name'] = $row['owner_name']; + $data['owner_mobile'] = $row['owner_mobile']; + } + + $data['now_day'] = date('Y-m-d'); + $data['companys'] = $this->get_biz_mchid($row['biz_id'],$row['brand_id'],$row['if_local_bill']); + if($type==1){ + $items = $this->ci->items_model->get(['id'=>$row['item_id']],'vin'); + $delivery = $this->ci->deliverys_model->get(['o_id'=>$row['id']],'info,tool,remark'); + $data['vin'] = $items['vin']; + $data['delivery'] = $delivery; + } + $data['sa'] = ''; + if($biz['type']==1){ + $this->ci->load->model('receiver/order/receiver_order_datas_model'); + $order_data = $this->ci->receiver_order_datas_model->get(['o_id'=>$row['id']]); + $order_data['sa'] && $data['sa'] = $order_data['sa']; + } + if(!$type){ + $services = []; + $srv_arr = json_decode($row['srv_ids'],true); + if(is_array($srv_arr)){ + $srv_ids = array_column($srv_arr,'id'); + $srv_ids_str = implode(',',$srv_ids); + if($row['srv_ids'] && $srv_ids_str){ + $service_rows = $this->ci->services_model->select(["id in ({$srv_ids_str})"=>null],'','','','id,title,field_name'); + foreach($service_rows as $key=>$val){ + $field_arr = explode('.',$val['field_name']); + if(isset($money_json[$field_arr[1]])){ //保险费不收 + $money = $field_arr[1]=='price_insure' ? '由保险公司收取' : $money_json[$field_arr[1]]; + is_numeric($money) && $money = number_format($money,2); + $services[] = $val['title'].': '.$money; + } + } + } + } + if($row['if_fine']){ //选择精品包 + $fine_price = $money_json['price_fine_discount'] ? $money_json['price_fine'] - $money_json['price_fine_discount'] : $money_json['price_fine']; + $services[] = '精品尊享包: '.number_format($fine_price,2); + } + if($row['fines']){ + $fines = json_decode($row['fines'],true); + $split = $fine_title_price = $fine_title = ''; + foreach($fines as $key=>$val){ + $fine_title = $fine_title.$split.$val['txt'].$split; + $price = $val['price']>0 ? number_format(floatval($val['price']),2) : '赠送'; + $fine_title_price = $fine_title_price.$split."{$val['txt']}:{$price}"; + $split = ' '; + } + $services[] = '精品选装: '.number_format($money_json['price_fine_select'],2)."($fine_title_price)"; + } + $srv_price = $this->order_srv_money($row['id']); + $services[] = '实际支付(元): '.number_format($srv_price,2); + $data['services'] = $services; + } + return $data; + } + + //小程序支付图片 + public function pay_img($oid){ + $this->ci->load->model('app/app_model', 'mdApp'); + $wxconfig = $this->ci->mdApp->appConfig()[1]['wx']; + $img = self::API_PAY_IMG; + if ($wxconfig) { + $this->ci->load->library("hd_wechat", $wxconfig); + $width = '430px'; + $path = "pages/mine/carOrder/index"; + $scene = $oid; + $filename = "{$this->ci->mdApp->appConfig()[1]['app_key']}/" . substr(md5($path.'?id='.$oid), 8, 16); + $result = $this->ci->hd_wechat->qrcode($filename,$scene,$path,$width); + if($result['url']){ + $img = http_host_com('api').'/'.$result['url']; + } + } + return $img; + } + + /** + * 订单改变发送消息 + * @param $sid + * @param $info + * @return void + */ + public function send_msg($template,$params){ + /** + * 模板内容 SMS_241360549 + * 叮~小爱同学,订单 ${sid} 信息发生变化。车主信息由 ${owner_a} 变更为 ${owner_b},请知悉~ + * 模板内容 SMS_241355543 + * 叮~小爱同学,订单 ${sid} 信息发生变化。客户订购车型由 ${car_a} 变更为 ${car_b},请知悉~ + */ + if(!template || !$params){ + return ''; + } + $mobile_lists = ['18950000118','13860199646']; + !is_product() && $mobile_lists = ['18350451617']; //测试 + foreach ($mobile_lists as $val){ + send_alisms(array('mobile' => $val, 'template' => $template, 'param' => $params)); + } + } + + /** + * 按“商家-品牌”下定统计 + * @param $today_start + * @param $today_end + * @param $total_start + * @param $total_end + * @return array + */ + public function aggs_biz_brand_ding($today_start='', $today_end='', $total_start='', $total_end=''){ + if (!$today_start || !$today_end || !$total_start || !$total_end){ + return array(); + } + # biz_type(已下订) + $sql = " + SELECT b.type as biz_type, o.biz_id, o.brand_id,ab.`name` as brand_name, o.s_id, s.`name` as series_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_auto_brand ab on o.brand_id = ab.id + left join lc_auto_series s on o.s_id = s.id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + group by b.type, o.biz_id, o.brand_id, ab.`name`, o.s_id, s.`name` + order by b.type, o.biz_id, o.brand_id, o.s_id + "; + # 只统计品牌店,合伙店,代理店,其中代理店按城市(已下订) + $sql = " + SELECT b.type as biz_type, + if(b.type in (3), b.city_id, o.biz_id) as biz_id, + o.brand_id,ab.`name` as brand_name, o.s_id, s.`name` as series_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_auto_brand ab on o.brand_id = ab.id + left join lc_auto_series s on o.s_id = s.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + AND b.type in (1, 2, 3) + group by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` + order by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, o.s_id + "; + # 只统计品牌店,合伙店,代理店,其中代理店按城市(全部) + $sql = " + SELECT b.type as biz_type, + if(b.type in (3), b.city_id, o.biz_id) as biz_id, + o.brand_id, if(ab.`name` is null, '-', ab.`name`) as brand_name, o.s_id, if(s.`name` is null, '-', s.`name`) as series_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding + FROM lc_receiver_orders_v2 o + left join lc_biz b on o.biz_id = b.id + left join lc_auto_brand ab on o.brand_id = ab.id + left join lc_auto_series s on o.s_id = s.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND b.type in (1, 2, 3) + group by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` + order by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, o.s_id + "; + return $this->ci->db->query($sql)->result_array(); + } + public function aggs_biz_brand_ding_cityid($today_start='', $today_end='', $total_start='', $total_end=''){ + if (!$today_start || !$today_end || !$total_start || !$total_end){ + return array(); + } + $sql = " + SELECT b.city_id as biz_type, + if(b.type in (2, 3), b.type, o.biz_id) as biz_id, + o.brand_id, if(ab.`name` is null, '-', ab.`name`) as brand_name, o.s_id, if(s.`name` is null, '-', s.`name`) as series_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding + FROM lc_receiver_orders_v2 o + left join lc_biz b on o.biz_id = b.id + left join lc_auto_brand ab on o.brand_id = ab.id + left join lc_auto_series s on o.s_id = s.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND b.type in (1, 2, 3) + group by b.city_id, if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` + order by b.city_id, FIELD(b.type,1,2,3), if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, o.s_id + "; + return $this->ci->db->query($sql)->result_array(); + } + + /** + * 按“商家-品牌”开票统计 + * @param $today_start + * @param $today_end + * @param $total_start + * @param $total_end + * @return array + */ + public function aggs_biz_brand_piao($today_start='', $today_end='', $total_start='', $total_end=''){ + if (!$today_start || !$today_end || !$total_start || !$total_end){ + return array(); + } + # biz_type + $sql = " + SELECT b.type as biz_type, o.biz_id, o.brand_id, ab.`name` as brand_name, o.s_id, s.`name` as series_name, + count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, + count(o.id) as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_auto_brand ab on o.brand_id = ab.id + left join lc_auto_series s on o.s_id = s.id + WHERE o.`status` >= 0 + AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + group by b.type, o.biz_id, o.brand_id, ab.`name`, o.s_id, s.`name` + order by b.type, o.biz_id, o.brand_id, o.s_id + "; + # 只统计品牌店,合伙店,代理店,其中代理店按城市 + $sql = " + SELECT b.type as biz_type, + if(b.type in (3), b.city_id, o.biz_id) as biz_id, + o.brand_id, ab.`name` as brand_name, o.s_id, s.`name` as series_name, + count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, + count(o.id) as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_auto_brand ab on o.brand_id = ab.id + left join lc_auto_series s on o.s_id = s.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + AND b.type in (1, 2, 3) + group by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` + order by b.type, if(b.type in (3), b.city_id, o.biz_id), o.brand_id, o.s_id + "; + return $this->ci->db->query($sql)->result_array(); + } + public function aggs_biz_brand_piao_cityid($today_start='', $today_end='', $total_start='', $total_end=''){ + if (!$today_start || !$today_end || !$total_start || !$total_end){ + return array(); + } + $sql = " + SELECT b.city_id as biz_type, + if(b.type in (2, 3), b.type, o.biz_id) as biz_id, + o.brand_id, ab.`name` as brand_name, o.s_id, s.`name` as series_name, + count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, + count(o.id) as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_auto_brand ab on o.brand_id = ab.id + left join lc_auto_series s on o.s_id = s.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + AND b.type in (1, 2, 3) + group by b.city_id, if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, ab.`name`, o.s_id, s.`name` + order by b.city_id, FIELD(b.type,1,2,3), if(b.type in (2, 3), b.type, o.biz_id), o.brand_id, o.s_id + "; + return $this->ci->db->query($sql)->result_array(); + } + + /** + * 按“商家”下定+开票统计 + * @param $today_start + * @param $today_end + * @param $total_start + * @param $total_end + * @return array + */ + public function aggs_biz_ding_piao($today_start='', $today_end='', $total_start='', $total_end=''){ + if (!$today_start || !$today_end || !$total_start || !$total_end){ + return array(); + } + # biz_type + $sql = " + select biz_type, biz_id, biz_name, + if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, + if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, + if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, + if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao + from + ( + SELECT b.type as biz_type, o.biz_id, b.biz_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + group by b.type, o.biz_id, b.biz_name + union all + SELECT b.type as biz_type, o.biz_id, b.biz_name, null as doc_ding_today, null as doc_ding, + count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, + count(o.id) as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + WHERE o.`status` >= 0 + AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + group by b.type, o.biz_id, b.biz_name + ) u + group by biz_type, biz_id, biz_name + order by biz_type, biz_id + "; + # 只统计品牌店,合伙店,代理店,其中代理店按城市 + $sql = " + select biz_type, biz_id, biz_name, + if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, + if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, + if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, + if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao + from + ( + SELECT b.type as biz_type, + if(b.type in (3), b.city_id, o.biz_id) as biz_id, + if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '0' AND `status` in (1,2) GROUP BY o_id HAVING count(status) >= 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + AND b.type in (1, 2, 3) + group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) + union all + SELECT b.type as biz_type, + if(b.type in (3), b.city_id, o.biz_id) as biz_id, + if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, + null as doc_ding_today, null as doc_ding, + count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, + count(o.id) as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + AND b.type in (1, 2, 3) + group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) + ) u + group by biz_type, biz_id, biz_name + order by biz_type, biz_id + "; + # 只统计品牌店,合伙店,代理店,其中代理店按城市(全部) + $sql = " + select biz_type, biz_id, biz_name, + if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, + if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, + if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, + if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao + from + ( + SELECT b.type as biz_type, + if(b.type in (3), b.city_id, o.biz_id) as biz_id, + if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao + FROM lc_receiver_orders_v2 o + left join lc_biz b on o.biz_id = b.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND b.type in (1, 2, 3) + group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) + union all + SELECT b.type as biz_type, + if(b.type in (3), b.city_id, o.biz_id) as biz_id, + if(b.type in (3), if(c.`name` is null, b.city_id, replace(concat(c.`name`, '渠道'), '市渠道', '渠道')), b.biz_name) as biz_name, + null as doc_ding_today, null as doc_ding, + count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, + count(o.id) as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + AND b.type in (1, 2, 3) + group by b.type, if(b.type in (3), b.city_id, o.biz_id), if(b.type in (3), if(c.`name` is null, b.city_id, c.`name`), b.biz_name) + ) u + group by biz_type, biz_id, biz_name + order by biz_type, biz_id + "; + return $this->ci->db->query($sql)->result_array(); + } + public function aggs_biz_ding_piao_cityid($today_start='', $today_end='', $total_start='', $total_end=''){ + if (!$today_start || !$today_end || !$total_start || !$total_end){ + return array(); + } + $sql = " + select biz_type, city_name, biz_id, biz_name, + if(sum(doc_ding_today)=0,null,sum(doc_ding_today)) as doc_ding_today, + if(sum(doc_ding)=0,null,sum(doc_ding)) as doc_ding, + if(sum(doc_piao_today)=0,null,sum(doc_piao_today)) as doc_piao_today, + if(sum(doc_piao)=0,null,sum(doc_piao)) as doc_piao + from + ( + SELECT b.city_id as biz_type, + c.`name` as city_name, + if(b.type in (2, 3), b.type, o.biz_id) as biz_id, + case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end as biz_name, + count(if(o.order_time >= '$today_start' AND o.order_time < '$today_end', o.id, null)) as doc_ding_today, + count(o.id) as doc_ding, null as doc_piao_today, null as doc_piao + FROM lc_receiver_orders_v2 o + left join lc_biz b on o.biz_id = b.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.order_time >= '$total_start' AND o.order_time < '$total_end' + AND b.type in (1, 2, 3) + group by b.city_id, c.`name`, if(b.type in (2, 3), b.type, o.biz_id), case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end + union all + SELECT b.city_id as biz_type, + c.`name` as city_name, + if(b.type in (2, 3), b.type, o.biz_id) as biz_id, + case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end as biz_name, + null as doc_ding_today, null as doc_ding, + count(if(o.bill_time >= '$today_start' AND o.bill_time < '$today_end', o.id, null)) as doc_piao_today, + count(o.id) as doc_piao + FROM lc_receiver_orders_v2 o JOIN + (select o_id from lc_receiver_order_status where pid_status = '3' AND `status` in (1,2) GROUP BY o_id HAVING count(status) = 1 ) os ON os.o_id = o.id + left join lc_biz b on o.biz_id = b.id + left join lc_sys_city c on b.city_id = c.city_id + WHERE o.`status` >= 0 + AND o.bill_time >= '$total_start' AND o.bill_time < '$total_end' + AND o.brand_id > 0 + AND o.`status` <> 2 + AND b.type in (1, 2, 3) + group by b.city_id, c.`name`, if(b.type in (2, 3), b.type, o.biz_id), case when b.type=2 then '合伙店' when b.type=3 then '渠道店' else b.biz_name end + ) u + group by biz_type, city_name, biz_id, biz_name + order by biz_type, biz_id desc + "; + return $this->ci->db->query($sql)->result_array(); + } + + /** + * 商家下定+开票统计:按店铺类型,品牌拆分为系列,支持订单与开票独立图片 + * @param $today_start + * @param $today_end + * @param $total_start + * @param $total_end + * @param $title_today + * @param $title_ding_today + * @param $title_ding + * @param $title_piao_today + * @param $title_piao + * @param $create_table_image + * @param $title + * @return array + */ + public function aggs_biz_ding_piao_rpt($today_start='', $today_end='', $total_start='', $total_end='', + $title_today='', $title_ding_today='', $title_ding='', $title_piao_today='', $title_piao='', $create_table_image=false, $title='区域') + { + !$today_start && $today_start = date('Y-m-d 00:00:00'); + !$today_end && $today_end = date('Y-m-d 00:00:00', strtotime('+1 day')); + !$total_start && $total_start = date('Y-m-01 00:00:00'); + !$total_end && $total_end = date('Y-m-01 00:00:00', strtotime('+1 month')); + //!$title_today && $title_today = date('m月d日'); + !$title_today && $title_today = '来源'; + !$title_ding_today && $title_ding_today = '当日订单'; + !$title_ding && $title_ding = '月累计订单'; + !$title_piao_today && $title_piao_today = '当日开票'; + !$title_piao && $title_piao = '月累计开票'; + + $ding = $this->aggs_biz_brand_ding_cityid($today_start, $today_end, $total_start, $total_end); + $piao = $this->aggs_biz_brand_piao_cityid($today_start, $today_end, $total_start, $total_end); + $biz = $this->aggs_biz_ding_piao_cityid($today_start, $today_end, $total_start, $total_end); + #var_dump($today_start);var_dump($today_end);var_dump($total_start);var_dump($total_end);var_dump($ding); var_dump($piao);var_dump($biz); + if (!$biz) { + return array(); + } + + # 生成品牌arr + $brand_names = array_unique(array_merge(array_column($ding, 'brand_name'), array_column($piao, 'brand_name'))); + sort($brand_names); + + # 生成品牌对应的车系arr + $series_names = array(); + foreach ($ding as $k => $v) { + $series_name = $v['series_name']; + $key = $v['brand_name']; + if (!$series_names[$key]) { + $series_names[$key][] = $series_name; + continue; + } + if (!in_array($series_name, $series_names[$key])) { + $series_names[$key][] = $series_name; + } + } + foreach ($piao as $k => $v) { + $series_name = $v['series_name']; + $key = $v['brand_name']; + if (!$series_names[$key]) { + $series_names[$key][] = $series_name; + continue; + } + if (!in_array($series_name, $series_names[$key])) { + $series_names[$key][] = $series_name; + } + } + #var_dump($brand_names); var_dump($series_names); + + #$series_name 先完成排序,再生成表头与数据列 + $series_names_ = array(); + foreach ($brand_names as $brand_name){ + $v = $series_names[$brand_name]; + sort($v); + $series_names_[$brand_name] = $v; + } + $series_names = $series_names_; + + # 生成表头 + $indexs_total = array(); + $indexs_total[] = 'doc_ding'; + $indexs_total[] = 'doc_piao'; + $arr1 = array('city_name'=>$title, 'biz_name'=>$title_today, 'doc_ding_today'=>$title_ding_today); + $arr1 = array_merge($arr1, array('doc_ding'=>$title_ding)); + foreach ($series_names as $k => $v){ + $indexs_total[] = $k.'_ding'; + $arr1[$k.'_ding'] = $k; # 品牌在系列前 + foreach ($v as $k1 => $v1){ + #$arr1[$k.'_'.$v1.'_ding'] = $k.'_'.$v1; + $arr1[$k.'_'.$v1.'_ding'] = ' '.$v1; # 系列简写 + } + } + $arr3 = array('doc_piao_today'=>$title_piao_today); + $arr3 = array_merge($arr3, array('doc_piao'=>$title_piao)); + foreach ($series_names as $k => $v){ + $indexs_total[] = $k.'_piao'; + $arr3[$k.'_piao'] = $k; # 品牌在系列前 + foreach ($v as $k1 => $v1){ + #$arr3[$k.'_'.$v1.'_piao'] = $k.'_'.$v1; + $arr3[$k.'_'.$v1.'_piao'] = ' '.$v1; # 系列简写 + } + } + $indexs = array_merge($arr1, $arr3); #var_dump($indexs); + + # $ding, $piao 行转kv,生成xj小记与hj合计: 1 _1_东风EV_doc_ding 7; 1 _东风EV_doc_ding 9; 东风EV_doc_ding 9 + $kv = array(); + foreach (array_merge($ding, $piao) as $k => $v){ + $key_ding = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_ding'; + $key_ding_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_ding'; + $key_ding_hj = $v['brand_name'].'_doc_ding'; + $key_ding_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; + $key_ding_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; + $key_ding_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_ding'; + + $key_piao = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_piao'; + $key_piao_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_piao'; + $key_piao_hj = $v['brand_name'].'_doc_piao'; + $key_piao_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; + $key_piao_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; + $key_piao_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_piao'; + + if ($temp = intval($v['doc_ding'])){ + $kv[$key_ding_series] = $temp; + $kv[$key_ding_series_xj] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] + $temp: $temp; + $kv[$key_ding_series_hj] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] + $temp: $temp; + $kv[$key_ding] = $kv[$key_ding] ? $kv[$key_ding] + $temp: $temp; + $kv[$key_ding_xj] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] + $temp: $temp; + $kv[$key_ding_hj] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] + $temp: $temp; + } + + if ($temp = intval($v['doc_piao'])){ + $kv[$key_piao_series] = $temp; + $kv[$key_piao_series_xj] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] + $temp: $temp; + $kv[$key_piao_series_hj] = $kv[$key_piao_series_hj] ? $kv[$key_piao_series_hj] + $temp: $temp; + $kv[$key_piao] = $kv[$key_piao] ? $kv[$key_piao] + $temp: $temp; + $kv[$key_piao_xj] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] + $temp: $temp; + $kv[$key_piao_hj] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] + $temp: $temp; + } + } + + $biz_type = $city_name = $biz_id = $biz_name = null; + $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; + $doc_ding_today_ = $doc_ding_ = $doc_piao_today_ = $doc_piao_ = 0; + $biz_aggs = array(); + foreach ($biz as $k1 => $v1){ + !$biz_type && $biz_type = $v1['biz_type']; + !$city_name && $city_name = $v1['city_name']; + $biz_id = $v1['biz_id']; + $biz_name = $v1['biz_name']; + + $doc_ding_today_ += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; + $doc_ding_ += $v1['doc_ding'] ? $v1['doc_ding'] : 0; + $doc_piao_today_ += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; + $doc_piao_ += $v1['doc_piao'] ? $v1['doc_piao'] : 0; + + if ($biz_type <> $v1['biz_type']){ + #$biz_type_ary = $this->ci->biz_model->type_ary(); + #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' + $arr1 = array('city_name'=>'', 'biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); + foreach ($brand_names as $k2 => $v2){ + # 生成车型列 + $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; + + # 生成车系列 + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; + } + } + $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3); + + $biz_type = $v1['biz_type']; + $city_name = $v1['city_name']; + $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; + } + + $doc_ding_today += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; + $doc_ding += $v1['doc_ding'] ? $v1['doc_ding'] : 0; + $doc_piao_today += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; + $doc_piao += $v1['doc_piao'] ? $v1['doc_piao'] : 0; + + $arr1 = array('city_name'=>$city_name, 'biz_type'=>$biz_type, 'biz_id'=>$biz_id, 'biz_name'=>$biz_name, 'doc_ding_today'=>$v1['doc_ding_today'] ? $v1['doc_ding_today'] : '', 'doc_ding'=>$v1['doc_ding'] ? $v1['doc_ding'] : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding] ? $kv[$key_ding] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series] ? $kv[$key_ding_series] : ''; + } + } + $arr3 = array('doc_piao_today'=>$v1['doc_piao_today'] ? $v1['doc_piao_today'] : '', 'doc_piao'=>$v1['doc_piao'] ? $v1['doc_piao'] : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao] ? $kv[$key_piao] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_piao_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series] ? $kv[$key_piao_series] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3); + } + + # 最后一个小计 + #$biz_type_ary = $this->ci->biz_model->type_ary(); + #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' + $arr1 = array('city_name'=>'', 'biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; + } + } + $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3); + + # 合计 + $arr1 = array('city_name'=>'', 'biz_type'=>'', 'biz_id'=>'', 'biz_name'=>'合计', 'doc_ding_today'=>$doc_ding_today_ ? $doc_ding_today_ : '', 'doc_ding'=>$doc_ding_ ? $doc_ding_ : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding_hj = $v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_hj = $v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; + } + } + $arr3 = array('doc_piao_today'=>$doc_piao_today_ ? $doc_piao_today_ : '', 'doc_piao'=>$doc_piao_ ? $doc_piao_ : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_hj = $v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_hj = $v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3);#var_dump($indexs);var_dump($biz_aggs); + + $img_path = $img_path_ding = $img_path_piao = ''; + if ($create_table_image){ + $data = $biz_aggs; + foreach ($data as $k => $v){ + unset($data[$k]['biz_type']); + unset($data[$k]['biz_id']); + $data[$k]['biz_name'] = mb_strlen ($data[$k]['biz_name']) > 9 ? mb_substr($data[$k]['biz_name'], 0, 9).'..' : $data[$k]['biz_name']; + } + $data_ding = $data_piao = $data; + foreach ($data_ding as $k => $v){ + foreach ($data_ding[$k] as $kd => $vd){ + if (strpos($kd,'_piao') !== false){ + unset($data_ding[$k][$kd]); + } + } + } + foreach ($data_ding as $k => $v){ + foreach ($data_ding[$k] as $kd => $vd){ + if (strpos($kd,'_ding') !== false){ + unset($data_piao[$k][$kd]); + } + } + } + + $index_img = $indexs; + $index_img_ding = $index_img_piao = array(); + foreach ($index_img as $k => $v){ + #$k != 'biz_name' && $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, -8, 8) : $v; + if ($k != 'biz_name'){ + /*if (strpos($k,'_') !== false){ + $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, 0, 2).'..'.mb_substr(array_slice(explode('_', $v), -1)[0], -5, 5) : str_replace('_', ' ', $v); + } + else{ + $index_img[$k] = mb_strlen ($v) > 5 ? mb_substr($v, 0, 5) : $v; + }*/ + $index_img[$k] = $v; # 讲话车系后直接显示全部 + } + if (strpos($k,'_ding') !== false){ + $index_img_ding[$k] = $index_img[$k]; + } + elseif (strpos($k,'_piao') !== false){ + $index_img_piao[$k] = $index_img[$k]; + } + else{ + $index_img_ding[$k] = $index_img[$k]; + $index_img_piao[$k] = $index_img[$k]; + } + } + + # 去掉空列与空行 + $this->clear_null_column_line($biz_aggs, $indexs); + $this->clear_null_column_line($data, $index_img); + $this->clear_null_column_line($data_ding, $index_img_ding); + $this->clear_null_column_line($data_piao, $index_img_piao); + #var_dump($data_piao);var_dump('
');var_dump($index_img_piao);var_dump('
');var_dump($indexs_total); + + #var_dump($biz_aggs[0]);var_dump($data[0]);var_dump($index_img);var_dump($data_ding[0]);var_dump($index_img_ding);var_dump($data_piao[0]);var_dump($index_img_piao);; + $img_path = $this->create_table_image($data, $index_img, $indexs_total, '小狸播报', 'aggs_biz_rpt.png'); + $img_path_ding = $this->create_table_image($data_ding, $index_img_ding, $indexs_total, '小狸播报 - 订单', 'aggs_biz_rpt_ding.png'); + $img_path_piao = $this->create_table_image($data_piao, $index_img_piao, $indexs_total, '小狸播报 - 开票', 'aggs_biz_rpt_piao.png'); + } + return array('biz_aggs'=>$biz_aggs, 'indexs'=>$indexs, 'img_path'=>$img_path, 'img_path_ding'=>$img_path_ding, 'img_path_piao'=>$img_path_piao, 'brand_names'=>$brand_names, 'series_names'=>$series_names); + } + // 商家下定+开票统计 simple:按店铺类型,拆分品牌的系列 + public function aggs_biz_ding_piao_rpt_series($today_start='', $today_end='', $total_start='', $total_end='', + $title_today='', $title_ding_today='', $title_ding='', $title_piao_today='', $title_piao='', $create_table_image=false){ + !$today_start && $today_start = date('Y-m-d 00:00:00'); + !$today_end && $today_end = date('Y-m-d 00:00:00', strtotime('+1 day')); + !$total_start && $total_start = date('Y-m-01 00:00:00'); + !$total_end && $total_end = date('Y-m-01 00:00:00', strtotime('+1 month')); + //!$title_today && $title_today = date('m月d日'); + !$title_today && $title_today = '来源'; + !$title_ding_today && $title_ding_today = '当日订单'; + !$title_ding && $title_ding = '月累计订单'; + !$title_piao_today && $title_piao_today = '当日开票'; + !$title_piao && $title_piao = '月累计开票'; + + $ding = $this->aggs_biz_brand_ding($today_start, $today_end, $total_start, $total_end); + $piao = $this->aggs_biz_brand_piao($today_start, $today_end, $total_start, $total_end); + $biz = $this->aggs_biz_ding_piao($today_start, $today_end, $total_start, $total_end); + #var_dump($today_start);var_dump($today_end);var_dump($total_start);var_dump($total_end);var_dump($ding); var_dump($piao);var_dump($biz); + if (!$biz){ + return array(); + } + + # 生成品牌arr + $brand_names = array_unique(array_merge(array_column($ding, 'brand_name'), array_column($piao, 'brand_name'))); + sort($brand_names); + + # 生成品牌对应的车系arr + $series_names = array(); + foreach ($ding as $k => $v){ + $series_name = $v['series_name']; + $key = $v['brand_name']; + if (!$series_names[$key]){ + $series_names[$key][] = $series_name; + continue; + } + if (!in_array($series_name, $series_names[$key])){ + $series_names[$key][] = $series_name; + } + } + foreach ($piao as $k => $v){ + $series_name = $v['series_name']; + $key = $v['brand_name']; + if (!$series_names[$key]){ + $series_names[$key][] = $series_name; + continue; + } + if (!in_array($series_name, $series_names[$key])){ + $series_names[$key][] = $series_name; + } + } + #var_dump($brand_names); var_dump($series_names); + + #$series_name 先完成排序,再生成表头与数据列 + $series_names_ = array(); + foreach ($brand_names as $brand_name){ + $v = $series_names[$brand_name]; + sort($v); + $series_names_[$brand_name] = $v; + } + $series_names = $series_names_; + + # 生成表头 + $indexs_total = array(); + $indexs_total[] = 'doc_ding'; + $indexs_total[] = 'doc_piao'; + $arr1 = array('biz_name'=>$title_today, 'doc_ding_today'=>$title_ding_today); + $arr1 = array_merge($arr1, array('doc_ding'=>$title_ding)); + foreach ($series_names as $k => $v){ + $indexs_total[] = $k.'_ding'; + $arr1[$k.'_ding'] = $k; # 品牌在系列前 + foreach ($v as $k1 => $v1){ + #$arr1[$k.'_'.$v1.'_ding'] = $k.'_'.$v1; + $arr1[$k.'_'.$v1.'_ding'] = ' '.$v1; # 系列简写 + } + } + $arr3 = array('doc_piao_today'=>$title_piao_today); + $arr3 = array_merge($arr3, array('doc_piao'=>$title_piao)); + foreach ($series_names as $k => $v){ + $indexs_total[] = $k.'_piao'; + $arr3[$k.'_piao'] = $k; # 品牌在系列前 + foreach ($v as $k1 => $v1){ + #$arr3[$k.'_'.$v1.'_piao'] = $k.'_'.$v1; + $arr3[$k.'_'.$v1.'_piao'] = ' '.$v1; # 系列简写 + } + } + $indexs = array_merge($arr1, $arr3); #var_dump($indexs); + + # $ding, $piao 行转kv,生成xj小记与hj合计: 1 _1_东风EV_doc_ding 7; 1 _东风EV_doc_ding 9; 东风EV_doc_ding 9 + $kv = array(); + foreach (array_merge($ding, $piao) as $k => $v){ + $key_ding = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_ding'; + $key_ding_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_ding'; + $key_ding_hj = $v['brand_name'].'_doc_ding'; + $key_ding_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; + $key_ding_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_ding'; + $key_ding_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_ding'; + + $key_piao = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_piao'; + $key_piao_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_piao'; + $key_piao_hj = $v['brand_name'].'_doc_piao'; + $key_piao_series = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; + $key_piao_series_xj = $v['biz_type'].'_'.$v['brand_name'].'_'.$v['series_name'].'_doc_piao'; + $key_piao_series_hj = $v['brand_name'].'_'.$v['series_name'].'_doc_piao'; + + if ($temp = intval($v['doc_ding'])){ + $kv[$key_ding_series] = $temp; + $kv[$key_ding_series_xj] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] + $temp: $temp; + $kv[$key_ding_series_hj] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] + $temp: $temp; + $kv[$key_ding] = $kv[$key_ding] ? $kv[$key_ding] + $temp: $temp; + $kv[$key_ding_xj] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] + $temp: $temp; + $kv[$key_ding_hj] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] + $temp: $temp; + } + + if ($temp = intval($v['doc_piao'])){ + $kv[$key_piao_series] = $temp; + $kv[$key_piao_series_xj] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] + $temp: $temp; + $kv[$key_piao_series_hj] = $kv[$key_piao_series_hj] ? $kv[$key_piao_series_hj] + $temp: $temp; + $kv[$key_piao] = $kv[$key_piao] ? $kv[$key_piao] + $temp: $temp; + $kv[$key_piao_xj] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] + $temp: $temp; + $kv[$key_piao_hj] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] + $temp: $temp; + } + } + + $biz_type = $biz_id = $biz_name = null; + $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; + $doc_ding_today_ = $doc_ding_ = $doc_piao_today_ = $doc_piao_ = 0; + $biz_aggs = array(); + foreach ($biz as $k1 => $v1){ + !$biz_type && $biz_type = $v1['biz_type']; + $biz_id = $v1['biz_id']; + $biz_name = $v1['biz_name']; + + $doc_ding_today_ += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; + $doc_ding_ += $v1['doc_ding'] ? $v1['doc_ding'] : 0; + $doc_piao_today_ += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; + $doc_piao_ += $v1['doc_piao'] ? $v1['doc_piao'] : 0; + + if ($biz_type <> $v1['biz_type']){ + #$biz_type_ary = $this->ci->biz_model->type_ary(); + #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' + $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); + foreach ($brand_names as $k2 => $v2){ + # 生成车型列 + $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; + + # 生成车系列 + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; + } + } + $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3); + + $biz_type = $v1['biz_type']; + $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; + } + + $doc_ding_today += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; + $doc_ding += $v1['doc_ding'] ? $v1['doc_ding'] : 0; + $doc_piao_today += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; + $doc_piao += $v1['doc_piao'] ? $v1['doc_piao'] : 0; + + $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>$biz_id, 'biz_name'=>$biz_name, 'doc_ding_today'=>$v1['doc_ding_today'] ? $v1['doc_ding_today'] : '', 'doc_ding'=>$v1['doc_ding'] ? $v1['doc_ding'] : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding] ? $kv[$key_ding] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series] ? $kv[$key_ding_series] : ''; + } + } + $arr3 = array('doc_piao_today'=>$v1['doc_piao_today'] ? $v1['doc_piao_today'] : '', 'doc_piao'=>$v1['doc_piao'] ? $v1['doc_piao'] : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao] ? $kv[$key_piao] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_piao_series = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series] ? $kv[$key_piao_series] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3); + } + + # 最后一个小计 + #$biz_type_ary = $this->ci->biz_model->type_ary(); + #$biz_type_name = $biz_type_ary[$biz_type] ? '('.$biz_type_ary[$biz_type].')' : ''; # 'biz_name'=>$biz_type_name.'小计' + $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_xj] ? $kv[$key_ding_series_xj] : ''; + } + } + $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_piao_series_xj = $biz_type.'_'.$v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_piao_series_xj] ? $kv[$key_piao_series_xj] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3); + + # 合计 + $arr1 = array('biz_type'=>'', 'biz_id'=>'', 'biz_name'=>'合计', 'doc_ding_today'=>$doc_ding_today_ ? $doc_ding_today_ : '', 'doc_ding'=>$doc_ding_ ? $doc_ding_ : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding_hj = $v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_hj = $v2.'_'.$vs.'_doc_ding'; + $arr1[$v2.'_'.$vs.'_ding'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; + } + } + $arr3 = array('doc_piao_today'=>$doc_piao_today_ ? $doc_piao_today_ : '', 'doc_piao'=>$doc_piao_ ? $doc_piao_ : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_hj = $v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] : ''; + + foreach ($series_names[$v2] as $ks => $vs){ + $key_ding_series_hj = $v2.'_'.$vs.'_doc_piao'; + $arr3[$v2.'_'.$vs.'_piao'] = $kv[$key_ding_series_hj] ? $kv[$key_ding_series_hj] : ''; + } + } + $biz_aggs[] = array_merge($arr1, $arr3);#var_dump($indexs);var_dump($biz_aggs); + + $img_path = $img_path_ding = $img_path_piao = ''; + if ($create_table_image){ + $data = $biz_aggs; + foreach ($data as $k => $v){ + unset($data[$k]['biz_type']); + unset($data[$k]['biz_id']); + $data[$k]['biz_name'] = mb_strlen ($data[$k]['biz_name']) > 9 ? mb_substr($data[$k]['biz_name'], 0, 9).'..' : $data[$k]['biz_name']; + } + $data_ding = $data_piao = $data; + foreach ($data_ding as $k => $v){ + foreach ($data_ding[$k] as $kd => $vd){ + if (strpos($kd,'_piao') !== false){ + unset($data_ding[$k][$kd]); + } + } + } + foreach ($data_ding as $k => $v){ + foreach ($data_ding[$k] as $kd => $vd){ + if (strpos($kd,'_ding') !== false){ + unset($data_piao[$k][$kd]); + } + } + } + + $index_img = $indexs; + $index_img_ding = $index_img_piao = array(); + foreach ($index_img as $k => $v){ + #$k != 'biz_name' && $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, -8, 8) : $v; + if ($k != 'biz_name'){ + /*if (strpos($k,'_') !== false){ + $index_img[$k] = mb_strlen ($v) > 8 ? mb_substr($v, 0, 2).'..'.mb_substr(array_slice(explode('_', $v), -1)[0], -5, 5) : str_replace('_', ' ', $v); + } + else{ + $index_img[$k] = mb_strlen ($v) > 5 ? mb_substr($v, 0, 5) : $v; + }*/ + $index_img[$k] = $v; # 讲话车系后直接显示全部 + } + if (strpos($k,'_ding') !== false){ + $index_img_ding[$k] = $index_img[$k]; + } + elseif (strpos($k,'_piao') !== false){ + $index_img_piao[$k] = $index_img[$k]; + } + else{ + $index_img_ding[$k] = $index_img[$k]; + $index_img_piao[$k] = $index_img[$k]; + } + } + + # 去掉空列与空行 + $this->clear_null_column_line($biz_aggs, $indexs); + $this->clear_null_column_line($data, $index_img); + $this->clear_null_column_line($data_ding, $index_img_ding); + $this->clear_null_column_line($data_piao, $index_img_piao); + #var_dump($data_piao);var_dump('
');var_dump($index_img_piao);var_dump('
');var_dump($indexs_total); + + #var_dump($biz_aggs[0]);var_dump($data[0]);var_dump($index_img);var_dump($data_ding[0]);var_dump($index_img_ding);var_dump($data_piao[0]);var_dump($index_img_piao);; + $img_path = $this->create_table_image($data, $index_img, $indexs_total, '小狸播报', 'aggs_biz_rpt.png'); + $img_path_ding = $this->create_table_image($data_ding, $index_img_ding, $indexs_total, '小狸播报 - 订单', 'aggs_biz_rpt_ding.png'); + $img_path_piao = $this->create_table_image($data_piao, $index_img_piao, $indexs_total, '小狸播报 - 开票', 'aggs_biz_rpt_piao.png'); + } + return array('biz_aggs'=>$biz_aggs, 'indexs'=>$indexs, 'img_path'=>$img_path, 'img_path_ding'=>$img_path_ding, 'img_path_piao'=>$img_path_piao, 'brand_names'=>$brand_names, 'series_names'=>$series_names); + } + + // 商家下定+开票统计 simple:按店铺类型,只拆分品牌列 + public function aggs_biz_ding_piao_rpt_simple($today_start='', $today_end='', $total_start='', $total_end='', + $title_today='', $title_ding_today='', $title_ding='', $title_piao_today='', $title_piao='', $create_table_image=false){ + !$today_start && $today_start = date('Y-m-d 00:00:00'); + !$today_end && $today_end = date('Y-m-d 00:00:00', strtotime('+1 day')); + !$total_start && $total_start = date('Y-m-01 00:00:00'); + !$total_end && $total_end = date('Y-m-01 00:00:00', strtotime('+1 month')); + //!$title_today && $title_today = date('m月d日'); + !$title_today && $title_today = '来源'; + !$title_ding_today && $title_ding_today = '当日订单'; + !$title_ding && $title_ding = '月累计订单'; + !$title_piao_today && $title_piao_today = '当日开票'; + !$title_piao && $title_piao = '月累计开票'; + + $ding = $this->aggs_biz_brand_ding($today_start, $today_end, $total_start, $total_end); + $piao = $this->aggs_biz_brand_piao($today_start, $today_end, $total_start, $total_end); + $biz = $this->aggs_biz_ding_piao($today_start, $today_end, $total_start, $total_end); + #var_dump($today_start);var_dump($today_end);var_dump($total_start);var_dump($total_end);var_dump($ding); var_dump($piao);var_dump($biz); + if (!$biz){ + return array(); + } + + $brand_names = array_unique(array_merge(array_column($ding, 'brand_name'), array_column($piao, 'brand_name')));#var_dump($brand_names); + + $arr1 = array('biz_name'=>$title_today, 'doc_ding_today'=>$title_ding_today, 'doc_ding'=>$title_ding); + foreach ($brand_names as $k => $v){ + $arr1[$v.'_ding'] = $v; + } + $arr3 = array('doc_piao_today'=>$title_piao_today, 'doc_piao'=>$title_piao); + foreach ($brand_names as $k => $v){ + $arr3[$v.'_piao'] = $v; + } + $indexs = array_merge($arr1, $arr3); + + # $ding, $piao 行转kv,生成xj小记与hj合计: 1 _1_东风EV_doc_ding 7; 1 _东风EV_doc_ding 9; 东风EV_doc_ding 9 + $kv = array(); + foreach (array_merge($ding, $piao) as $k => $v){ + $key_ding = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_ding'; + $key_ding_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_ding'; + $key_ding_hj = $v['brand_name'].'_doc_ding'; + + $key_piao = $v['biz_type'].'_'.$v['biz_id'].'_'.$v['brand_name'].'_doc_piao'; + $key_piao_xj = $v['biz_type'].'_'.$v['brand_name'].'_doc_piao'; + $key_piao_hj = $v['brand_name'].'_doc_piao'; + + if ($temp = intval($v['doc_ding'])){ + $kv[$key_ding] = $temp; + $kv[$key_ding_xj] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] + $temp: $temp; + $kv[$key_ding_hj] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] + $temp: $temp; + } + + if ($temp = intval($v['doc_piao'])){ + $kv[$key_piao] = $temp; + $kv[$key_piao_xj] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] + $temp: $temp; + $kv[$key_piao_hj] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] + $temp: $temp; + } + } + + $biz_type = $biz_id = $biz_name = null; + $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; + $doc_ding_today_ = $doc_ding_ = $doc_piao_today_ = $doc_piao_ = 0; + $biz_aggs = array(); + foreach ($biz as $k1 => $v1){ + !$biz_type && $biz_type = $v1['biz_type']; + $biz_id = $v1['biz_id']; + $biz_name = $v1['biz_name']; + + $doc_ding_today_ += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; + $doc_ding_ += $v1['doc_ding'] ? $v1['doc_ding'] : 0; + $doc_piao_today_ += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; + $doc_piao_ += $v1['doc_piao'] ? $v1['doc_piao'] : 0; + + if ($biz_type <> $v1['biz_type']){ + $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; + } + $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; + } + $biz_aggs[] = array_merge($arr1, $arr3); + + $biz_type = $v1['biz_type']; + $doc_ding_today = $doc_ding = $doc_piao_today = $doc_piao = 0; + } + + $doc_ding_today += $v1['doc_ding_today'] ? $v1['doc_ding_today'] : 0; + $doc_ding += $v1['doc_ding'] ? $v1['doc_ding'] : 0; + $doc_piao_today += $v1['doc_piao_today'] ? $v1['doc_piao_today'] : 0; + $doc_piao += $v1['doc_piao'] ? $v1['doc_piao'] : 0; + + $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>$biz_id, 'biz_name'=>$biz_name, 'doc_ding_today'=>$v1['doc_ding_today'] ? $v1['doc_ding_today'] : '', 'doc_ding'=>$v1['doc_ding'] ? $v1['doc_ding'] : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding] ? $kv[$key_ding] : ''; + } + $arr3 = array('doc_piao_today'=>$v1['doc_piao_today'] ? $v1['doc_piao_today'] : '', 'doc_piao'=>$v1['doc_piao'] ? $v1['doc_piao'] : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao = $v1['biz_type'].'_'.$v1['biz_id'].'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao] ? $kv[$key_piao] : ''; + } + $biz_aggs[] = array_merge($arr1, $arr3); + } + + # 最后一个小计 + $arr1 = array('biz_type'=>$biz_type, 'biz_id'=>'', 'biz_name'=>'小计', 'doc_ding_today'=>$doc_ding_today ? $doc_ding_today : '', 'doc_ding'=>$doc_ding ? $doc_ding : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding_xj = $biz_type.'_'.$v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_xj] ? $kv[$key_ding_xj] : ''; + } + $arr3 = array('doc_piao_today'=>$doc_piao_today ? $doc_piao_today : '', 'doc_piao'=>$doc_piao ? $doc_piao : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_xj = $biz_type.'_'.$v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_xj] ? $kv[$key_piao_xj] : ''; + } + $biz_aggs[] = array_merge($arr1, $arr3); + + # 合计 + $arr1 = array('biz_type'=>'', 'biz_id'=>'', 'biz_name'=>'合计', 'doc_ding_today'=>$doc_ding_today_ ? $doc_ding_today_ : '', 'doc_ding'=>$doc_ding_ ? $doc_ding_ : ''); + foreach ($brand_names as $k2 => $v2){ + $key_ding_hj = $v2.'_doc_ding'; + $arr1[$v2.'_ding'] = $kv[$key_ding_hj] ? $kv[$key_ding_hj] : ''; + } + $arr3 = array('doc_piao_today'=>$doc_piao_today_ ? $doc_piao_today_ : '', 'doc_piao'=>$doc_piao_ ? $doc_piao_ : ''); + foreach ($brand_names as $k2 => $v2){ + $key_piao_hj = $v2.'_doc_piao'; + $arr3[$v2.'_piao'] = $kv[$key_piao_hj] ? $kv[$key_piao_hj] : ''; + } + $biz_aggs[] = array_merge($arr1, $arr3);#var_dump($indexs);var_dump($biz_aggs); + + $img_path = ''; + if ($create_table_image){ + $data = $biz_aggs; + foreach ($data as $k => $v){ + unset($data[$k]['biz_type']); + unset($data[$k]['biz_id']); + $data[$k]['biz_name'] = mb_strlen ($data[$k]['biz_name']) > 9 ? mb_substr($data[$k]['biz_name'], 0, 9).'..' : $data[$k]['biz_name']; + } + $index_img = $indexs; + foreach ($index_img as $k => $v){ + $k != 'biz_name' && $index_img[$k] = mb_strlen ($v) > 5 ? mb_substr($v, 0, 5) : $v; + } + $img_path = $this->create_table_image($data, $index_img, $indexs_total=array(),'小狸播报', 'aggs_biz_rpt.png'); + } + return array('biz_aggs'=>$biz_aggs, 'indexs'=>$indexs, 'img_path'=>$img_path); + } + + private function clear_null_column_line(&$data, &$indexs, $index_ignore_column=array('biz_type', 'city_name', 'biz_id', 'biz_name', 'doc_ding_today', 'doc_ding', 'doc_piao_today', 'doc_piao'), + $index_ignore_line=array('biz_type', 'city_name', 'biz_id', 'biz_name')){ + # $biz_aggs去掉除列(biz_type, biz_id, biz_name, doc_ding_today, doc_ding, doc_piao_today, doc_piao)外为空的空列 + $indexs 去掉列名 + $columns = array(); + foreach ($data as $k => $v){ + foreach ($v as $kd => $vd){ + if (in_array($kd, $index_ignore_column)){ + continue; + } + if ($columns[$kd]){ + continue; + } + !$columns[$kd] && $columns[$kd] = $vd ? 1 : 0; + } + } + #var_dump($data[0]);var_dump('
');var_dump($indexs);var_dump('
');var_dump($columns); + foreach ($columns as $k => $v){ + if ($v){ + continue; + } + foreach ($data as $kd => $vd){ + unset($data[$kd][$k]); + } + unset($indexs[$k]); + } + # $biz_aggs去掉除列(biz_type, biz_id, biz_name)外为空的空行 + foreach ($data as $k => $v){ + $null_flag = true; + foreach ($v as $kd => $kv){ + if (in_array($kd, $index_ignore_line)){ + continue; + } + if ($kv){ + $null_flag = false; + break; + } + } + if ($null_flag){ + unset($data[$k]); + } + } + } + + private function create_table_image($data=array(), $indexs=array(), $indexs_total=array(), $title='', $file_name='aggs_biz_rpt.png'){ + # https://blog.csdn.net/mao__ge/article/details/107414956 + /*if (!$data){ + $data = array();//生成演示数据 + for ($i = 0; $i < 10; $i++) { + $data[] = array( + 'nice_name' => '测试名' . $i, + 'zhuang' => 100, + 'xian' => 50, + 'he' => '', + 'zhuang_dui' => 500, + 'xian_dui' => intval(5000 / ($i + 1)), + 'xian_li' => 30, + ); + } + $data[0]['nice_name'] = '这个名字比较长哦123'; + } + if (!$indexs){ + $indexs = array('nice_name'=>'昵称', 'zhuang'=>'数据1', 'xian'=>'数据2', 'he'=>'数据3', 'zhuang_dui'=>'数据4', 'xian_dui'=>'数据5', 'xian_li'=>'数据6'); + }*/ + + if (!$data || !$indexs){ + return ''; + } + + #date_default_timezone_set('PRC'); + $params = array( + 'row' => count($data)+1,//数据的行数 + 'file_name' => $file_name, + 'title' => $title, + 'table_time' => date('Y-m-d H:i:s'), + 'data' => $data + ); + $base = array( + 'border' => 10,//图片外边框 + 'file_path' => 'temp/',//图片保存路径 + 'title_height' => 30,//报表名称高度 + 'title_font_size' =>16,//报表名称字体大小 + 'font_ulr' => realpath('./static/fonts/msyh.ttc'),//字体文件路径 + 'text_size' => 12,//正文字体大小 + 'text_size_middle' => 12,//中间字体大小 14 + 'text_size_big' => 12,//加大字体大小 16 + 'row_hight' => 30,//每行数据行高 + 'filed_id_width' => 60,//序号列的宽度 + 'filed_name_width' => 200,//玩家名称的宽度 + 'filed_name_columns' => 1, //非数据列数据,也可传参数来控制 + 'filed_data_width' => 90,//数据列的宽度 + 'table_header' => array('序号', '昵称', '数据1', '数据2', '数据3', '数据4', '数据5', '数据6'),//表头文字 + 'column_text_offset_arr' => array(50, 180, 70, 70, 70, 70, 70, 70),//表头文字左偏移量 + 'row_text_offset_arr' => array(50, 180, 60, 60, 60, 60, 60, 60),//数据列文字左偏移量 + ); + + // $base替换start + if (in_array('city_name', array_keys($indexs))) { + $base['filed_name_columns'] = 2; + } + $base['table_header'] = array_merge(array('序号'), array_values($indexs)); + $column = count($base['table_header']); + $offset_arr_left = array(50); # 序号列 + for ($i=0; $i<$base['filed_name_columns']; $i++){ + $offset_arr_left[] = 180; + } + $offset_arr = array(); + $column_data = $column - $base['filed_name_columns'] -1; + for ($i=0; $i<$column_data; $i++){ + $offset_arr[] = 88; + } + $base['column_text_offset_arr'] = array_merge($offset_arr_left, $offset_arr); + $offset_arr = array(); + for ($i=0; $i<$column_data; $i++){ + $offset_arr[] = 40; + } + $base['row_text_offset_arr'] = array_merge($offset_arr_left, $offset_arr); + #var_dump(array_keys($indexs));var_dump('
');var_dump($base['column_text_offset_arr']);var_dump('
');var_dump($base['row_text_offset_arr']);var_dump('
'); + // $base替换end + + $base['img_width'] = $base['filed_id_width'] + $base['filed_name_width'] * $base['filed_name_columns'] + $base['filed_data_width'] * $column_data + $base['border'] * 2;//图片宽度 + $base['img_height'] = $params['row'] * $base['row_hight'] + $base['border'] * 2 + $base['title_height'];//图片高度 + $border_top = $base['border'] + $base['title_height'];//表格顶部高度 + $border_bottom = $base['img_height'] - $base['border'];//表格底部高度 + + // $base['column_x_arr'] 动态计算 + $base['column_x_arr'] = array( + $base['border'] + $base['filed_id_width'],//第一列边框线x轴像素 70/2+10 + ); + for ($i=1; $i<=$base['filed_name_columns']; $i++){ + $base['column_x_arr'][] = $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] * $i; //第二列边框线x轴像素 190 + } + for ($i=1; $i<=$column_data; $i++){ + $base['column_x_arr'][] = $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] * $base['filed_name_columns'] + $base['filed_data_width'] * $i; + } + + $img = imagecreatetruecolor($base['img_width'], $base['img_height']);//创建指定尺寸图片 + $bg_color = imagecolorallocate($img, 255, 255, 255);//设定图片背景色 + $text_coler = imagecolorallocate($img, 0, 0, 0);//设定文字颜色 + $border_coler = imagecolorallocate($img, 0, 0, 0);//设定边框颜色 + $white_coler = imagecolorallocate($img, 255, 255, 255);//设定边框颜色 + $red_coler = imagecolorallocate($img, 255, 0, 0); + $green_coler = imagecolorallocate($img, 0, 255, 0); + $blue_coler = imagecolorallocate($img, 0, 0, 255); + $origin_coler = imagecolorallocate($img, 255, 97, 0); + imagefill($img, 0, 0, $bg_color);//填充图片背景色 + //先填充一个黑色的大块背景 + imagefilledrectangle($img, $base['border'], $base['border'] + $base['title_height'], $base['img_width'] - $base['border'], $base['img_height'] - $base['border'], $border_coler);//画矩形 + //再填充一个小两个像素的 背景色区域,形成一个两个像素的外边框 + imagefilledrectangle($img, $base['border'] + 2, $base['border'] + $base['title_height'] + 2, $base['img_width'] - $base['border'] - 2, $base['img_height'] - $base['border'] - 2, $bg_color);//画矩形 + //画表格纵线 及 写入表头文字 + foreach ($base['column_x_arr'] as $key => $x) { + imageline($img, $x, $border_top, $x, $border_bottom, $border_coler);//画纵线 + $x = $x - $base['column_text_offset_arr'][$key] + 1; + $y = $border_top + $base['row_hight'] - 8; + $text = $base['table_header'][$key]; + #imagettftext($img, $base['text_size'], 0, $x,$y , $text_coler, $base['font_ulr'],$text );//写入表头文字 + $color = $text_coler; + if (in_array($text.'_ding', $indexs_total) || in_array($text.'_piao', $indexs_total) || $text == $indexs['doc_ding'] || $text == $indexs['doc_piao']){ + $color = $blue_coler; + } + $offset_ext = in_array($text, array('序号')) || mb_strlen($text) > 4 ? 0 : 10 * (5 - mb_strlen($text)); + imagettftext($img, $base['text_size'], 0, $x + $offset_ext, $y, $color, $base['font_ulr'], $text );//写入表头文字 + } + //画表格横线 + $text = 0; + foreach ($params['data'] as $key => $item) { + $border_top += $base['row_hight']; + imageline($img, $base['border'], $border_top, $base['img_width'] - $base['border'], $border_top, $border_coler); + $x = $base['column_x_arr'][0] - $base['row_text_offset_arr'][0]; + $y = $border_top + $base['row_hight'] - 10; + #$text = $key + 1; + $text ++; # 防止$key跳空 + imagettftext($img, $base['text_size'], 0, $x, $y, $text_coler, $base['font_ulr'], $text);//写入序号 + $sub = 0; + /*foreach ($item as $value) { + $sub++; + $offset = $base['row_text_offset_arr'][$sub]; + if ($value && intval($value) && intval($value) > 9){ + $offset = $offset + (strlen(strval($value)) - 1) * 10; + } + imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][$sub] - $offset, $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $value);//写入data数据 + }*/ + $size = $coclor = $size_set = null; + foreach ($item as $key => $value) { + $sub++; + $offset = $base['row_text_offset_arr'][$sub]; + if ($value && intval($value) && intval($value) > 9){ + $offset = $offset + (strlen(strval($value)) - 1) * 10; + } + + if (strpos($value,'小计') !== false){ + $size = $base['text_size_big']; + $coclor = $blue_coler; + $size_set = true; + } + if (strpos($value,'合计') !== false){ + $size = $base['text_size_big']; + $coclor = $red_coler; + $size_set = true; + } + !$size_set && $size = $base['text_size']; + !$size_set && $coclor = $text_coler; + + /*if (!$size_set && $indexs_total && in_array($key, $indexs_total)){ + $size = $base['text_size_middle']; + $coclor = $origin_coler; + }*/ + + /*if (!$size_set){ + if ($indexs_total && in_array($key, $indexs_total)){ + $size = $base['text_size_big']; + $coclor = $origin_coler; + } + else{ + $size = $base['text_size']; + $coclor = $text_coler; + } + }*/ + + imagettftext($img, $size, 0, $base['column_x_arr'][$sub] - $offset, $border_top + $base['row_hight'] - 10, $coclor, $base['font_ulr'], $value);//写入data数据 + } + } + //计算标题写入起始位置 + $title_fout_box = imagettfbbox($base['title_font_size'], 0, $base['font_ulr'], $params['title']);//imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角: + + $title_fout_width = $title_fout_box[2] - $title_fout_box[0];//右下角 X 位置 - 左下角 X 位置 为文字宽度 + $title_fout_height = $title_fout_box[1] - $title_fout_box[7];//左下角 Y 位置- 左上角 Y 位置 为文字高度 + //居中写入标题 + imagettftext($img, $base['title_font_size'], 0, ($base['img_width'] - $title_fout_width) / 2, $base['title_height'], $text_coler, $base['font_ulr'], $params['title']); + //写入制表时间 + imagettftext($img, $base['text_size'], 0, $base['border'], $base['title_height'], $text_coler, $base['font_ulr'], '时间:' . $params['table_time']); + $save_path = $base['file_path'] . $params['file_name']; + if (!is_dir($base['file_path']))//判断存储路径是否存在,不存在则创建 + { + mkdir($base['file_path'], 0777, true);//可创建多级目录 + } + $res = imagepng($img, $save_path);//输出图片,输出png使用imagepng方法,输出gif使用imagegif方法 + //echo ''; + return $res ? $save_path : ''; + } + +}