Files
liche/api/controllers/plan/Order.php
T
2023-02-16 16:21:23 +08:00

718 lines
33 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Order extends CI_Controller{
private $log_dir = "licheb";
private $log_file = "order_v2.log";
public function __construct()
{
parent::__construct();
$this->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}<br>";
}
$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 '<img src="/' . $img_path . '"/>';echo '<br>';
if ($img_path_ding){
echo '<img src="/' . $img_path_ding . '"/>';echo '<br>';
$img_path_arr[] = $img_path_ding;
}
if ($img_path_piao){
echo '<img src="/' . $img_path_piao . '"/>';echo '<br>';
$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<br>";
continue;
}
else{
echo "执行结果:$img_path 生成 image_key$image_key<br>";
}
$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 "执行结果:<br>";
echo json_encode($res, JSON_UNESCAPED_UNICODE);
}
}
/**
* 添加成本数据
* @return void
* https://liche-api-dev.xiaoyu.com/plan/order/cost
*/
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');
$this->load->model('sys/sys_supplier_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 and bill_time > 0 )) )' => 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){
$supplier2 = $this->sys_supplier_model->select(['status' => 1, 'type' => 2], '', 0, 0, 'id,title,short');
/*//测试 保险公司名 匹配 保险供应商
var_dump($supplier2);
$product = '太平财产保险有限公司'; var_dump($product); var_dump($this->cost_insure_product($supplier2, $product));
$product = '太平保险'; var_dump($product); var_dump($this->cost_insure_product($supplier2, $product));
$product = '太平'; var_dump($product); var_dump($this->cost_insure_product($supplier2, $product));
$product = '中国太平洋财产保险股份有限公司'; var_dump($product); var_dump($this->cost_insure_product($supplier2, $product));
$product = '太平洋'; var_dump($product); var_dump($this->cost_insure_product($supplier2, $product));
$product = '大西洋保险'; var_dump($product); var_dump($this->cost_insure_product($supplier2, $product));
exit();*/
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 && $insurance_img['product']){//强险
$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
];*/
$insure_product = $this->cost_insure_product($supplier2, $insurance_img['product']);
$where = [
'biz_id' => $item['biz_id'],
'title' => $insure_product,
'type' => 2,
'status' => 1,
"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' => $insure_product,
'type' => 2,
'status' => 1,
'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 && $business_img['product']){//商业险
$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
];*/
$insure_product = $this->cost_insure_product($supplier2, $business_img['product']);
$where = [
'biz_id' => $item['biz_id'],
'title' => $insure_product,
'status' => 1,
'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' => $insure_product,
'status' => 1,
'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'])),
];
*/
$where = [
'biz_id' => $item['biz_id'],
'type' => 1,
'status' => 1,
's_effect_time<=' => date('Y-m-d',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'] = '';
if ($finance_id){
//$finance_row = $this->sys_finance_model->get(array('id'=>$finance_id),'title');
$finance_row = $this->sys_supplier_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,
];*/
$where = [
'biz_id' => $item['biz_id'],
'type' => 3,
'status' => 1,
's_effect_time<=' => date('Y-m-d',strtotime($item['bill_time'])),
"json_extract(jsondata, '$.supplier_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,
"json_extract(jsondata, '$.supplier_id') = '{$finance_id}'" => null, "json_extract(jsondata, '$.finance_num') = '{$finance_num}'" => null]);
}
$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']}<br>";
}else{
echo "添加失败订单id:{$item['id']}<br>";
}
}
}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<br>";
}
$biz = $this->biz_model->get(['id'=>$item['biz_id']]);
if (!$biz){
echo "{$o_id}, biz not found, biz_id: {$item['biz_id']}<br>";
}
$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']}<br>";
}
/*
水平
品牌店按现有逻辑 (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']}<br>";
$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})<br>";
}
else{
echo "{$o_id}, cost {$id} update: ignore<br>";
}
$res = $this->items_cost_model->update_total($id);
echo "{$o_id}, cost {$id} update_total: {$res}<br><br>";
}
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 <br>";
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}<br>";
}
echo "repair ".count($rows)." rows ok!";
}
/**
* 保险供应商名转换
*/
private function cost_insure_product($supplier2, $product){
if (!$supplier2 || !$product){
return $product;
}
$product_parm = '';
foreach ($supplier2 as $supplier){
if ($product == $supplier['title']){
$product_parm = $supplier['title'];
break;
}
if ($supplier['short']){
$shorts = explode(',', $supplier['short']);
foreach ($shorts as $short){
if (strpos($product, $short) !== false){
$product_parm = $supplier['title'];
break;
}
}
}
/*if ($product == $supplier['title'] || $supplier['short'] && strpos($product,$supplier['short']) !== false){
$product_parm = $supplier['title'];
break;
}*/
}
!$product_parm && $product_parm = $product;
return $product_parm;
}
}