load->model('receiver/order/receiver_orders_model'); $this->load->model('receiver/order/receiver_orders_v2_model'); $this->load->model('receiver/order/receiver_order_status_model'); $this->load->model('receiver/order/receiver_order_datas_model'); $this->load->model('receiver/order/receiver_order_contracts_model'); $this->load->model('app/liche/app_liche_orders_model'); $this->load->library('receiver/order_datas_entity'); $this->load->library('receiver/orders_v2_entity'); } //更新旧订单数据状态 public function up_old_status(){ $size = $this->input->get('size'); !$size && $size = 20; $t1 = 'lc_receiver_orders_v2'; $t2 = 'lc_receiver_orders'; $fields = "$t1.*"; $where = [ "$t1.id<" => 10000, "$t1.status" => 0, "$t2.status" => 6 ]; $this->db->from("$t1"); $this->db->join("$t2", "$t2.id=$t1.id",'left'); $this->db->select($fields); $this->db->where($where); $this->db->order_by("$t1.id asc"); $this->db->limit($size); $rows = $this->db->get()->result_array(); if($rows){ foreach($rows as $key=>$val){ $res = $this->receiver_orders_v2_model->update(['status'=>1],['id'=>$val['id']]); $str = "更新订单状态:{$val['id']}"; debug_log($str,$this->log_file,$this->log_dir); } }else{ echo "no data"; } } //过期未支付订单 public function out_time(){ if(time()<=strtotime('2022-04-20 00:00:00')){ //2022-4-20后开始执行 exit; } $s_time = date('Y-m-d 00:00:00',strtotime("-1 day"));//昨天开始时间 $e_time = date('Y-m-d 23:59:59',strtotime("-1 day"));//昨天结束时间 $last_id_key = "out_time_receiver_order_id"; $redis = &load_cache(); $last_id = $redis->get($last_id_key); $where = [ 'c_time<=' => strtotime($e_time), 'c_time>=' => strtotime($s_time), 'status' => 0 ]; $last_id && $where['id>'] = $last_id; $rows = $this->receiver_orders_v2_model->select($where,'id asc',1,30); if($rows){ foreach($rows as $key=>$val){ $if_pay = $this->app_liche_orders_model->count(['o_id'=>$val['id'],'status'=>1]); if(!$if_pay){ //不存在已支付订单 $this->receiver_orders_v2_model->update(['status'=>-1],['id'=>$val['id']]); $this->app_liche_orders_model->update(['status'=>-1],['o_id'=>$val['id']]); debug_log("订单过期:".$val['id'],$this->log_file,$this->log_dir); } $do_last_id = $val['id']; } $redis->save($last_id_key,$do_last_id,2*24*60*60); }else{ debug_log("订单过期执行完毕",$this->log_file,$this->log_dir); } } //更新保险图片 public function up_ins_img(){ $redis = load_cache('redis'); $this->load->library('qiniuorc'); $page = $this->input->get('page'); $size = $this->input->get('size'); !$page && $page = 1; !$size && $size = 10; $c_key = "TEMP_ORDER_INSIMG_LAST_ID"; $where = [ "ins_img <> ''" => null, "insurance_img" => null, "business_img" => null, "o_id>=" => 1000, ]; $last_id = $redis->get($c_key); if($this->input->get('last_id')){ echo $last_id;exit; } if($last_id){ $where['id<'] = $last_id; } $count = $this->receiver_order_datas_model->count($where); $rows = $this->receiver_order_datas_model->select($where,'id desc',$page,$size,'id,o_id,ins_img,insurance_img,business_img,jsondata'); if(!$rows){ echo "finish"; } foreach ($rows as $key => $val) { $ins_img = json_decode($val['ins_img'],true); $jsondata = json_decode($val['jsondata'],true); $ins_info = $jsondata['ins_info'] ? $jsondata['ins_info'] : []; $update = $business_img = $insurance_img = []; if(is_array($ins_info)){ $new_ins_img = []; foreach ($ins_img as $k => $v) { $img_url = build_qiniu_image_url($v); $ins_key = md5($img_url); $o_ins_info = $ins_info[$ins_key]['data']; if(count($o_ins_info['投保险种'])>3 && !$business_img){ //商业险 $business_img['img'] = $v; $business_img['date'] = $o_ins_info['投保确认时间']; $business_img['price'] = floatval($o_ins_info['合计保费']); $business_img['product'] = $o_ins_info['保险公司']; $update['business_img'] = json_encode($business_img,JSON_UNESCAPED_UNICODE); }elseif(count($o_ins_info['投保险种'])==3 && !$insurance_img){ //强制险 $insurance_img['img'] = $v; $insurance_img['date'] = $o_ins_info['投保确认时间']; $insurance_img['price'] = floatval($o_ins_info['合计保费']); $insurance_img['product'] = $o_ins_info['保险公司']; $update['insurance_img'] = json_encode($insurance_img,JSON_UNESCAPED_UNICODE); }else{ $new_ins_img[] = $v; } } $update['ins_img'] = json_encode($new_ins_img,JSON_UNESCAPED_UNICODE); } if($business_img && $insurance_img){ $this->receiver_order_datas_model->update($update,['id'=>$val['id']]); } $last_id = $val['id']; $update_str = json_encode($update,JSON_UNESCAPED_UNICODE); echo "自增id:{$last_id},订单id:{$val['o_id']},更新数据:{$update_str}
"; } $redis->save($c_key,$last_id,24*60*60); $left = $count-$size; echo "剩余:{$left}"; } /** * 获取飞书 tenant_access_token * @param $app_id * @param $app_secret * @return string */ private function get_tenant_access_token($app_id="cli_a2483b8493fc500d", $app_secret="iO6Egjw09xZ6SJVaNVOUxqClAW8YXnXD"){ # https://open.feishu.cn/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM # https://open.feishu.cn/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/tenant_access_token_internal if (!$app_id || !$app_secret){ return null; } $redis = &load_cache('redis'); $redisKey = 'feishu_app_id_'.$app_id; $tenant_access_token = $redis->get($redisKey); if ($tenant_access_token){ return $tenant_access_token; } $url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"; $data = array("app_id"=>$app_id, "app_secret"=>$app_secret); $this->load->library('mycurl'); $res = $this->mycurl->httpPost($url, $data, $type='is_json'); $result = json_decode($res, true); if ($result && $result['code'] == 0 && $tenant_access_token = $result['tenant_access_token']){ $expire = $result['expire'] ? $result['expire'] - 100 : 3600; $redis->save($redisKey, $tenant_access_token, $expire); } return $tenant_access_token; } /** * 获取飞书上传图片的image_key * @param $img_path * @return string */ private function get_upload_image_key($img_path='temp/c01.jpg'){ $image_key = ''; $tenant_access_token = $this->get_tenant_access_token(); if (!$tenant_access_token){ return $image_key; #echo "no tenant_access_token";exit(); } $url = "https://open.feishu.cn/open-apis/im/v1/images"; $header = ["Authorization: Bearer ".$tenant_access_token, "Content-Type: multipart/form-data"]; $file_path = $img_path; $arr = explode('/', $img_path); $postname = array_slice($arr, -1)[0]; #var_dump($arr[count($arr) - 1]); #$data = ['image_type="message"', "image=@'".$file_path."'"]; #$data = ["image_type='message'", "image=@'".realpath($file_path)."'"]; $data = ["image_type"=>"message", "image"=>curl_file_create(realpath($file_path), 'image/jpeg', $postname)]; $this->load->library('mycurl'); $this->mycurl->setHeaders($header); $res = $this->mycurl->httpPost($url, $data, $type='is_file', $file_path); $result = json_decode($res, true); $result && $result['code'] == 0 && $result['data'] && $image_key = $result['data']['image_key']; return $image_key; } /** * Notes:向飞书发送小狸播报 * https://liche-api-dev.xiaoyu.com/plan/order/send_aggs_biz_ding_piao_rpt?sd=1&test=1 * https://api.liche.cn/plan/order/send_aggs_biz_ding_piao_rpt */ public function send_aggs_biz_ding_piao_rpt(){ $params = $this->input->get(); $hour = date('H.i'); $test = false; if ( !($hour >= 23.00 && $hour <= 23.10 || $params['sd'])) { return false; } $redis = &load_cache('redis'); $redisKey = 'send_aggs_biz_ding_piao_rpt'; if (intval($this->input->get('rds'))) { $redis->delete($redisKey); } if ($redis->get($redisKey)){ return false; }; #$redis->save($redisKey, 1, 60 * 10); # 暂不考虑“执行时间过长时重复执行” $today_start = $today_end = $total_start = $total_end = $title_today = $title_ding_today = $title_ding = $title_piao_today = $title_piao = ''; if ($params['test']){ $today_start = "2021-12-01 00:00:00"; $today_end = '2022-06-06'; $total_start = "2021-12-01 00:00:00"; $total_end = date('Y-m-01 00:00:00', strtotime('+1 month')); $title_today = date('m月d日'); $title_ding_today = '当日订单'; $title_ding = '月累计订单'; $title_piao_today = '当日开票'; $title_piao = '月累计开票'; } $this->load->library('receiver/orders_v2_entity'); $data = $this->orders_v2_entity->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=true); if (!$data || !$data['biz_aggs']){ echo 'no data';exit(); } $img_path = $data['img_path'] ? $data['img_path'] : ''; $img_path_ding = $data['img_path_ding'] ? $data['img_path_ding'] : ''; $img_path_piao = $data['img_path_piao'] ? $data['img_path_piao'] : ''; if (!$img_path && !$img_path_ding && !$img_path_piao ){ echo '执行结果:没有生成图片'; exit(); } $img_path_arr = array(); #if ($img_path) echo '';echo '
'; if ($img_path_ding){ echo '';echo '
'; $img_path_arr[] = $img_path_ding; } if ($img_path_piao){ echo '';echo '
'; $img_path_arr[] = $img_path_piao; } # https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN # 测试图片 img_ecffc3b9-8f14-400f-a014-05eca1a4310g {"StatusCode":0,"StatusMessage":"success"} $res = array(); foreach ($img_path_arr as $img_path){ $image_key = $this->get_upload_image_key($img_path); if (!$image_key){ echo "执行结果:$img_path 没有生成 image_key
"; continue; } else{ echo "执行结果:$img_path 生成 image_key:$image_key
"; } $this->load->library('qyrobot', array('test'=>$test)); $msg = [ "msg_type" => "image", "content" => [ "image_key" => $image_key, ] ]; $res_send = $this->qyrobot->send_fb($msg); $res[] = $res_send; } $redis->save($redisKey, 1, 60 * 10); $res['img_path'] = $img_path; $res['image_key'] = $image_key; if ($params['sd']) { echo "执行结果:
"; echo json_encode($res, JSON_UNESCAPED_UNICODE); } } /** * 添加成本数据 * @return void */ public function cost(){ $this->load->model('receiver/order/receiver_order_bills_model', 'order_bills_model'); $this->load->model('receiver/order/receiver_order_loans_model','order_loans_model'); $this->load->model('receiver/order/receiver_order_datas_model'); $this->load->model("biz/biz_model"); $this->load->model('biz/biz_settle_srv_model'); $this->load->model('auto/auto_business_model'); $this->load->model('items/items_cost_model'); $this->load->model('sys/sys_finance_model'); $page = $this->input->get('page'); $size = $this->input->get('size'); $id = $this->input->get('id'); !$page && $page = 1; !$size && $size = 5; $where = [ '(status = 1 or ( status = 0 and id in (select o_id from `lc_receiver_order_status` where (pid_status = 4 and `status` in (1,2)) or (pid_status = 3 and `status` = 1) group by o_id having count(distinct pid_status) = 2 )) or ( status = 0 and id in (select id from lc_receiver_orders_v2 where if_usedcar = 1 )) )' => null, 'id not in (select o_id from lc_items_cost)' => null, 'item_id>' => 0, 'id>=' => Orders_v2_entity::V2_START_ID ]; $id && $where['id'] = $id; $rows = $this->receiver_orders_v2_model->select($where,'',$page,$size); if($rows){ foreach ($rows as $item) { $biz = $this->biz_model->get(['id'=>$item['biz_id']]); $money_json = json_decode($item['money_json'],true); $info_json = json_decode($item['info_json'],true); $bill_time_month = date('Y-m-d',strtotime($item['bill_time'])); $add_data = [ 'o_id' => $item['id'], 'price' => $this->orders_v2_entity->total_price($item['id'],$item['money_json']), 'c_time' => time() ]; $item['item_id'] && $add_data['item_id'] = $item['item_id']; $bill_info = $this->order_bills_model->bill_info($item['id']); $bill_info['销货单位名称'] && $add_data['bill_name'] = $bill_info['销货单位名称']; $bill_info['开票日期'] && $add_data['bill_time'] = $bill_info['开票日期']; $bill_info['价税合计(小写)'] && $add_data['bill_price'] = str_replace('¥','',$bill_info['价税合计(小写)']); $srv_json = []; //精品 $srv_json['price_fine_select'] = $money_json['price_fine_select'] ? $money_json['price_fine_select'] : 0; //保险 $img_data = $this->receiver_order_datas_model->get(['o_id'=>$item['id'],'status>='=>0]); $insurance_img = json_decode($img_data['insurance_img'],true); $business_img = json_decode($img_data['business_img'],true); $srv_json['insurance_price'] = $insurance_img['price'] ? $insurance_img['price'] : ''; $srv_json['insurance_product'] = $insurance_img['product'] ? $insurance_img['product'] : ''; $srv_json['business_price'] = $business_img['price'] ? $business_img['price'] : ''; $srv_json['business_product'] = $business_img['product'] ? $business_img['product'] : ''; //获取创建订单时商务政策 $where = [ 'id' => $info_json['business_id'], ]; $b_row_one = $this->auto_business_model->get($where); $srv_json['ori_price'] = $b_row_one['price_car'] ? $b_row_one['price_car'] : ''; $srv_json['price_floor'] = $b_row_one['price_floor'] ? $b_row_one['price_floor'] : 0; $srv_json['profix_car'] = $biz['type']==2 ? $b_row_one['proxy_profix_car'] : $b_row_one['profix_car']; $srv_json['insurance_ins_price'] = $srv_json['insurance_fd'] = 0; /* 水平 品牌店按现有逻辑 (1) 合伙店取商务政策的固定值 (2) 代理店没有水平业务 (3) */ if ($biz['type']==2){ $add_data['insurance_price'] = $b_row_one['profix_insure'] ? $b_row_one['profix_insure'] : 0.00; $add_data['fee_carno_price'] = $b_row_one['profix_carno'] ? $b_row_one['profix_carno'] : 0.00; $add_data['loan_price'] = $b_row_one['profix_loan'] ? $b_row_one['profix_loan'] : 0.00; } elseif ($biz['type']==3){ $add_data['insurance_price'] = 0.00; $add_data['fee_carno_price'] = 0.00; $add_data['loan_price'] = 0.00; } if($insurance_img){//强险 $time = strtotime($insurance_img['date']); $where = [ 'biz_id' => $item['biz_id'], 'title' => $insurance_img['product'], 'type' => 2, "json_extract(jsondata, '$.type') = '2'" => null, "json_extract(jsondata, '$.s_time') >= '{$time}'" => null, "json_extract(jsondata, '$.e_time') <= '{$time}'" => null ]; $fd_row = $this->biz_settle_srv_model->get($where); if(!$fd_row){ $where = [ 'biz_id' => $item['biz_id'], 'title' => $insurance_img['product'], 'type' => 2, 'is_def' => 1, "json_extract(jsondata, '$.type') = '2'" => null, ]; $fd_row = $this->biz_settle_srv_model->get($where); } $fd_jsondata = json_decode($fd_row['jsondata'],true); $srv_json['insurance_fd'] = $fd_jsondata['rebate'] ? $fd_jsondata['rebate'] : 0; $qx_fd = $fd_jsondata['rebate']/100; $srv_json['insurance_ins_price'] = floatval($insurance_img['price']) * $qx_fd; } $srv_json['business_ins_price'] = $srv_json['business_fd'] = 0; if($business_img){//商业险 $time = strtotime($business_img['date']); $where = [ 'biz_id' => $item['biz_id'], 'title' => $business_img['product'], 'type' => 2, "json_extract(jsondata, '$.type') = '1'" => null, "json_extract(jsondata, '$.s_time') >= '{$time}'" => null, "json_extract(jsondata, '$.e_time') <= '{$time}'" => null ]; $bis_fd_row = $this->biz_settle_srv_model->get($where); if(!$bis_fd_row){ $where = [ 'biz_id' => $item['biz_id'], 'title' => $business_img['product'], 'type' => 2, 'is_def' => 1, "json_extract(jsondata, '$.type') = '1'" => null, ]; $bis_fd_row = $this->biz_settle_srv_model->get($where); } $bis_fd_jsondata = json_decode($bis_fd_row['jsondata'],true); $srv_json['business_fd'] = $bis_fd_jsondata['rebate'] ? $bis_fd_jsondata['rebate'] : 0; $bis_fd = $bis_fd_jsondata['rebate']/100; $srv_json['business_ins_price'] = floatval($business_img['price'])*$bis_fd; } //挂牌 $srv_json['fee_carno'] = $money_json['fee_carno'] ? $money_json['fee_carno'] : 0; $srv_json['cb_fee_carno'] = 0; if($money_json['fee_carno']>0){ $where = [ 'biz_id' => $item['biz_id'], 'type' => 1, 'status' => 1, 's_effect_time>=' => date('Y-m-01',strtotime($item['bill_time'])), 's_effect_time<=' => date('Y-m-t',strtotime($item['bill_time'])), ]; $free_row = $this->biz_settle_srv_model->get($where); if(!$free_row){ $free_row = $this->biz_settle_srv_model->get(['biz_id'=>$item['biz_id'],'is_def'=>1,'status'=>1,'type'=>1]); } $free_jsondata = json_decode($free_row['jsondata'],true); $srv_json['cb_fee_carno'] = $free_jsondata['price'] ? $free_jsondata['price'] : 0; } //贷款信息 $srv_json['loan_product'] = ''; $srv_json['loan_srv_price'] = $srv_json['loan_num'] = $srv_json['loan_price'] = 0; if($money_json['price_loan']>0){ $srv_json['loan_price'] = $money_json['price_loan']; $loan_row = $this->order_loans_model->get(['o_id'=>$item['id']]); $finance_id = $item['finance_id']; $srv_json['loan_product'] = ''; # $loan_row['title']; if ($finance_id){ $finance_row = $this->sys_finance_model->get(array('id'=>$finance_id),'title'); $srv_json['loan_product'] = $finance_row ? $finance_row['title'] : ''; } $srv_json['loan_num'] = $finance_num = $loan_row['num'] ? $loan_row['num'] : 36; $where = [ 'biz_id' => $item['biz_id'], 'type' => 3, 's_effect_time' => $bill_time_month, "json_extract(jsondata, '$.finance_id') = '{$finance_id}'" => null, "json_extract(jsondata, '$.finance_num') = '{$finance_num}'" => null, ]; $fd_row = $this->biz_settle_srv_model->get($where); if(!$fd_row){ $fd_row = $this->biz_settle_srv_model->get(['biz_id'=>$item['biz_id'],'is_def'=>1,'status'=>1,'type'=>3]); } $fd_jsondata = json_decode($fd_row['jsondata'],true); $loan_fd = $fd_jsondata['rebate'] ? $fd_jsondata['rebate']/100:0; $profix_loan = $money_json['price_loan']*$loan_fd; //获取贷款手续费 $srv_loan = 0; $s_json = json_decode($item['srv_ids'],true); if($s_json){ foreach ($s_json as $v2) { if($v2['key']=='price_finance'){ $srv_loan = $v2['price']; break; } } } $srv_json['loan_srv_price'] = $profix_loan + $srv_loan; } $sum = $this->app_liche_orders_model->sum('total_price', ['o_id'=>$item['id'],'status'=>1,'pay_price <>'=>0]); $pay_price = $sum['total_price'] ? $sum['total_price'] : 0; $need_price = $this->orders_v2_entity->recevable_price($item['id']); $srv_json['if_pay'] = $pay_price>=$need_price ? 1 : 0; $add_data['srv_json'] = json_encode($srv_json,JSON_UNESCAPED_UNICODE); $id = $this->items_cost_model->add($add_data); if(is_numeric($id)){ $this->items_cost_model->update_total($id); echo "添加成功订单id:{$item['id']}
"; }else{ echo "添加失败订单id:{$item['id']}
"; } } }else{ echo "数据不存在"; } } /** * 修复成本数据的非品牌店的水平业务 * @return void */ public function cost_repair_spyw(){ $this->load->model("biz/biz_model"); $this->load->model('auto/auto_business_model'); $this->load->model('items/items_cost_model'); $where = [ '(status = 1 or ( status = 0 and id in (select o_id from `lc_receiver_order_status` where (pid_status = 4 and `status` in (1,2)) or (pid_status = 3 and `status` = 1) group by o_id having count(distinct pid_status) = 2 ) ))' => null, 'id in (select o_id from lc_items_cost)' => null, 'item_id>' => 0, 'id>=' => Orders_v2_entity::V2_START_ID, 'biz_id in (select id from lc_biz where type <> 1)' => null, ]; $rows = $this->receiver_orders_v2_model->select($where,'',0,0); if (!$rows){ echo "数据不存在";exit(); } foreach ($rows as $item) { $o_id = $item['id']; $cost = $this->items_cost_model->get(['o_id'=>$o_id]); if (!$cost){ echo "{$o_id}, cost not found
"; } $biz = $this->biz_model->get(['id'=>$item['biz_id']]); if (!$biz){ echo "{$o_id}, biz not found, biz_id: {$item['biz_id']}
"; } $info_json = json_decode($item['info_json'],true); //获取创建订单时商务政策 $b_row_one = $this->auto_business_model->get(['id' => $info_json['business_id']]); if (!$b_row_one){ echo "{$o_id}, business not found, business_id: {$item['business_id']}
"; } /* 水平 品牌店按现有逻辑 (1) 合伙店取商务政策的固定值 (2) 代理店没有水平业务 (3) */ $add_data = []; if ($biz['type']==2){ $add_data['insurance_price'] = $b_row_one['profix_insure'] ? $b_row_one['profix_insure'] : 0.00; $add_data['fee_carno_price'] = $b_row_one['profix_carno'] ? $b_row_one['profix_carno'] : 0.00; $add_data['loan_price'] = $b_row_one['profix_loan'] ? $b_row_one['profix_loan'] : 0.00; } elseif ($biz['type']==3){ $add_data['insurance_price'] = 0.00; $add_data['fee_carno_price'] = 0.00; $add_data['loan_price'] = 0.00; } echo "{$o_id}, biz_type: {$biz['type']}
"; $id = $cost['id']; if ($add_data){ $res = $this->items_cost_model->update($add_data, array('id'=>$id)); $sql = $this->items_cost_model->db->last_query(); $res = is_numeric($res) ? is_numeric($res) : 0; echo "{$o_id}, cost {$id} update: {$res}, ({$sql})
"; } else{ echo "{$o_id}, cost {$id} update: ignore
"; } $res = $this->items_cost_model->update_total($id); echo "{$o_id}, cost {$id} update_total: {$res}

"; } echo "repair ".count($rows)." rows ok!"; } public function cost_repair_loan_product(){ $this->load->model('items/items_cost_model'); $sql = " select c.id, c.o_id, c.srv_json, JSON_UNQUOTE(JSON_EXTRACT(c.srv_json,'$.loan_product')) as loan_product, o.payway, o.finance_id, f.title from lc_items_cost c left join lc_receiver_orders_v2 o on c.o_id = o.id left join lc_sys_finance f on f.id = o.finance_id where o.finance_id > 0 and JSON_UNQUOTE(JSON_EXTRACT(c.srv_json,'$.loan_product')) <> f.title "; $rows = $this->items_cost_model->db->query($sql)->result_array(); if (!$rows){ echo "数据不存在";exit(); } foreach ($rows as $row){ $id = $row['id']; $o_id = $row['o_id']; $loan_product = $row['title']; if (!$loan_product){ echo "{$id}, o_id: {$o_id}, title not found
"; continue; } $srv_json = json_decode($row['srv_json'],true); $srv_json['loan_product'] = $loan_product; $upd_data['srv_json'] = json_encode($srv_json,JSON_UNESCAPED_UNICODE); $res = $this->items_cost_model->update($upd_data, array('id'=>$id)); echo "{$id}, o_id: {$o_id}, update: {$res}
"; } echo "repair ".count($rows)." rows ok!"; } }