diff --git a/webht/third_party/trippestOrderSync/controllers/order_finance.php b/webht/third_party/trippestOrderSync/controllers/order_finance.php index 89d6cda0..401fd2a6 100644 --- a/webht/third_party/trippestOrderSync/controllers/order_finance.php +++ b/webht/third_party/trippestOrderSync/controllers/order_finance.php @@ -24,6 +24,7 @@ class Order_finance extends CI_Controller { $this->load->helper('array'); $this->load->model('OrderFinance_model'); mb_regex_encoding("UTF-8"); + bcscale(4); } public function index() @@ -45,11 +46,16 @@ class Order_finance extends CI_Controller { $group_type_arr = array_unique(array_map(function($ele){return $ele->GCI_groupType;}, $combineNo_arr)); // $this->output->set_content_type('application/json')->set_output(json_encode($combineNo_arr)); // $this->output->set_content_type('application/json')->set_output(json_encode($group_type_arr)); + $processed_code = array(); foreach ($combineNo_arr as $kc => $vc) { if ($vc->GCI_groupType == 1) { - $ret->pvt = $pvt_cost = $this->pvt_basic($vc->GCI_combineNo); + $ret->pvt = $pvt_cost = $this->pvt_basic($vc->GCI_combineNo, $coli_sn, $processed_code); } else if ($vc->GCI_groupType == 2) { - $ret->combine_cost[] = $this->combine_basic($vc->GCI_combineNo, $coli_sn); + // 这里不排除产品编号是否已处理, 因为重复的情况比较多 + $tmp_cost = $this->combine_basic($vc->GCI_combineNo, $coli_sn); + $processed_code = array_merge($processed_code, $tmp_cost->combine_pags); + $ret->combine_cost[] = $tmp_cost; + $tmp_cost = null; } } $this->output->set_content_type('application/json')->set_output(json_encode($ret)); @@ -70,54 +76,105 @@ class Order_finance extends CI_Controller { if (empty($all_orders)) { return null; } + $ret->coli_sn = $coli_sn; // $ret->s = $all_orders; $all_pags = array_map(function($ele){ return $ele->PAG_Code;}, $all_orders); $all_pag = array_unique($all_pags); -// $ret->c = $all_pag; $combine_pag_arr = array(); + $pvt_code = $this->forbidden_combine(); if (count($all_pag) > 1) { // 多个产品, 找出拼团产品号 - $rid_code = array(); - $value_count = array_count_values($all_pags); + // 先处理拆分拼团的产品, 补全产品号 + $allowed_spread = $this->spread_code(); + $extra_code_cold = array(); + $all_orders_arr = json_decode(json_encode($all_orders), true); // 避免foreach object 改变自身 + foreach ($all_orders_arr as $ka => $va) { + $extra_arr = array(); + if (isset($allowed_spread[$va['PAG_Code']])) { + foreach ($allowed_spread[$va['PAG_Code']] as $ks => $vs) { + $tmp_extra = new stdClass(); + $tmp_extra = (object) $va; + $tmp_extra->real_code = $tmp_extra->PAG_Code; + $tmp_extra->real_pag_sn = $tmp_extra->COLD_ServiceSN; + $tmp_extra->PAG_Code = $vs; + $tmp_extra->COLD_ServiceSN = null; + $extra_arr[] = $tmp_extra; + } + } + $extra_code_cold = array_merge($extra_code_cold, $extra_arr); + } + // 避免覆盖key + foreach ($extra_code_cold as $ke => $ve) { + $all_orders[] = $ve; + } + // 重新计算重复次数 + $all_pags = array_map(function($ele){ return $ele->PAG_Code;}, $all_orders); + // 重复的产品号; 可混拼的产品 + $repeat_code = array(); + $code_count = array_count_values($all_pags); foreach ($all_pag as $kp => $vp) { + if (in_array($vp, $pvt_code)) { + continue; + } $tmp = null; $tmp = $this->get_allowed_combine($vp); -// $ret->b = array_diff($tmp, $all_pag); - if (empty(array_diff($tmp, $all_pag))) { - $combine_pag_arr[] = $tmp; + $this_allowed = ($tmp === null) ? null : array_diff($tmp, $all_pag); // diff((31,41), (31,41,47)) ==> () + if (empty($this_allowed) && $tmp !== null) { + $combine_pag_arr[] = $tmp; // push (31,41) } -// $ret->e = $value_count; - if($value_count[$vp] > 1) { - $rid_code[] = $vp; + // 重复的产品即为拼团 + if($code_count[$vp] > 1) { + $repeat_code[] = $vp; } } -// $ret->d = $rid_code; - if ( ! empty($rid_code)) { - $combine_pag_arr[] = $rid_code; + if ( ! empty($repeat_code)) { + $combine_pag_arr[] = $repeat_code; } } else { // 单个产品 $combine_pag_arr[] = ($all_pag); } - bcscale(2); + // 预定多产品, 但是只有部分发了计划 + // 预定多产品, 拼团只有一个订单, 相当于整团PVT + if (empty($combine_pag_arr)) { + // $combine_pag_arr[] = array_diff($all_pag, $pvt_code); // 此处排除PVT租车产品 + $combine_pag_arr[] = $all_pag; + } +// $ret->s = $all_pags; +// $ret->q = $combine_pag_arr; $ret->combine_pags = my_array_unique($combine_pag_arr); $ret->combine_pags = $ret->combine_pags[0]; // 这里用0是因为一个拼团应该只有一组或一个产品 // $ret->q = my_array_unique($combine_pag_arr); - $ret->tour_count = $ret->person_num = 0; + $ret->person_num = 0; $ret->PAG_Code = ""; $ret->order_cost = array(); + $pag_sns = array(); + $unique_coli = array(); foreach ($all_orders as $ko => $vo) { if (in_array($vo->PAG_Code, $ret->combine_pags)) { - // $ret->tour_count++; - $ret->person_num += $vo->COLD_PersonNum + $vo->COLD_ChildNum; + $pag_sns[] = $vo->COLD_ServiceSN; + // 整团单拼时, 避免重复计算人数 + // 订单人数不重复计 + if ( ! in_array($vo->PAG_Code, $pvt_code) && ! in_array($vo->COLI_SN, $unique_coli)) { + $unique_coli[] = $vo->COLI_SN; + $ret->person_num += $vo->COLD_PersonNum + $vo->COLD_ChildNum; + } $ret->startdate = $vo->COLD_StartDate; $tour_s = new stdClass(); if ($vo->COLI_SN == $coli_sn) { $tour_s->person_num = $vo->COLD_PersonNum + $vo->COLD_ChildNum; + $tour_s->PAG_code = $vo->PAG_Code; + $tour_s->real_code = isset($vo->real_code) ? $vo->real_code : $vo->PAG_Code; + $tour_s->real_pag_sn = isset($vo->real_pag_sn) ? $vo->real_pag_sn : $vo->COLD_ServiceSN; $ret->order_cost[] = $tour_s; + $ret->coli_id = $vo->coli_ID; } } } + $this_order_real_pag_sns = array_map(function($ele) {return $ele->real_pag_sn;}, $ret->order_cost); + $pags_info = $this->OrderFinance_model->get_pag_info(implode(',', array_unique(array_filter($this_order_real_pag_sns)))); // $pag_sns + $ret->vendor_name = implode(",", array_values(array_unique(array_map(function($ele) {return $ele->VEI2_CompanyBN;}, $pags_info)))) ; // 50 + $ret->pag_name = implode(";\r\n", array_map(function($ele) {return $ele->PAG_Title;}, $pags_info)) ; // TODO 限制200 用mb_substr('UTF-8') $ret->PAG_Code = implode(",", $ret->combine_pags); $ret->comment = "拼团" . $combineNo . ", 按" . $ret->person_num . "人等"; $combine_cost = $this->OrderFinance_model->get_combine_sumMoney($combineNo); @@ -136,36 +193,34 @@ class Order_finance extends CI_Controller { * @example 180515061M * @date 2018-07-18 */ - public function pvt_basic($combineNo="", $coli_sn=0) + public function pvt_basic($combineNo="", $coli_sn=0, $processed_code=array()) { $ret = new stdClass(); - $ret->tour = array(); - $all_orders = $this->OrderFinance_model->get_all_combine_order($combineNo); + // $ret->tour = array(); + $all_orders = $this->OrderFinance_model->get_all_combine_order($combineNo, $processed_code); if (empty($all_orders)) { return null; } + $ret->coli_sn = $coli_sn; + $ret->coli_id = $all_orders[0]->coli_ID; // 预定的产品数 $ret->tour_count = count(array_unique(array_map(function($ele) {return $ele->PAG_Code;}, $all_orders))); $ret->person_num = $this->OrderFinance_model->get_order_person_num($coli_sn); - bcscale(2); - $tour_s = new stdClass(); + // $tour_s = new stdClass(); $combine_cost = $this->OrderFinance_model->get_combine_sumMoney($combineNo); - $tour_s->startdate = $all_orders[0]->COLD_StartDate; - // $tour_s->person_grade = ($all_orders[0]->COLD_PersonNum + $all_orders[0]->COLD_ChildNum ); - $tour_s->cost_category = $combine_cost->cost_category; - $tour_s->cost_sum = $combine_cost->cost_sum; - $tour_s->person_cost = bcdiv($tour_s->cost_sum, $ret->person_num); - $tour_s->comment = "PVT,共" . $ret->person_num . "人";// 150 + $ret->startdate = $all_orders[0]->COLD_StartDate; + $ret->person_grade = ($all_orders[0]->COLD_PersonNum + $all_orders[0]->COLD_ChildNum ); + $ret->cost_category = $combine_cost->cost_category; + $ret->cost_sum = $combine_cost->cost_sum; + $ret->person_cost = bcdiv($ret->cost_sum, $ret->person_num); + $ret->comment = "PVT,共" . $ret->person_num . "人";// 150 $pag_sns = array_values(array_unique(array_map(function($ele) {return $ele->COLD_ServiceSN;}, $all_orders))); $pags_info = $this->OrderFinance_model->get_pag_info(implode(',', $pag_sns)); - $tour_s->PAG_Code = implode(",", array_values(array_unique(array_map(function($ele) {return $ele->PAG_Code;}, $pags_info)))); // TODO 限制50 - $tour_s->vendor_name = implode(",", array_values(array_unique(array_map(function($ele) {return $ele->VEI2_CompanyBN;}, $pags_info)))) ; // 50 - $tour_s->pag_name = implode(";\r\n", array_map(function($ele) {return $ele->PAG_Title;}, $pags_info)) ; // TODO 限制200 用mb_substr('UTF-8') - $ret->tour[0] = $tour_s; - // if ( $ret->tour_count > 1 ) { - // } else { - // } - $ret->order_cost = array_sum(array_map(function($ele) {return $ele->cost_sum;}, $ret->tour)); + $ret->PAG_Code = implode(",", array_values(array_unique(array_map(function($ele) {return $ele->PAG_Code;}, $pags_info)))); // TODO 限制50 + $ret->vendor_name = implode(",", array_values(array_unique(array_map(function($ele) {return $ele->VEI2_CompanyBN;}, $pags_info)))) ; // 50 + $ret->pag_name = implode(";\r\n", array_map(function($ele) {return $ele->PAG_Title;}, $pags_info)) ; // TODO 限制200 用mb_substr('UTF-8') + // $ret->tour[0] = $tour_s; + // $ret->order_cost = array_sum(array_map(function($ele) {return $ele->cost_sum;}, $ret->tour)); return $ret; // return $this->output->set_content_type('application/json')->set_output(json_encode($ret, JSON_UNESCAPED_UNICODE)); } @@ -188,7 +243,7 @@ class Order_finance extends CI_Controller { } return $allowed; } - /** 允许拼团的不同编号产品 */ + /** 允许混合拼团的不同编号产品 */ public function allowed_combine() { return array( @@ -203,6 +258,29 @@ class Order_finance extends CI_Controller { ); } + /** 允许拆分再拼团的产品编号 */ + public function spread_code() + { + return array( + "XASIC-42" => array("XASIC-41"), + "BJSIC-42" => array("BJSIC-41"), + "BJSIC-43" => array("BJSIC-41","BJSIC-42"), + "SHSIC-42" => array("SHSIC-41"), + "SHSIC-43" => array("SHSIC-41","SHSIC-42") + ); + } + + /** 肯定是PVT */ + public function forbidden_combine() + { + return array( + "BJALC-209", + "BJSIC-16", + "SHSIC-45", + "XASIC-16" + ); + } + } /* End of file order_finance.php */ diff --git a/webht/third_party/trippestOrderSync/models/orderFinance_model.php b/webht/third_party/trippestOrderSync/models/orderFinance_model.php index c4942dea..a52ed890 100644 --- a/webht/third_party/trippestOrderSync/models/orderFinance_model.php +++ b/webht/third_party/trippestOrderSync/models/orderFinance_model.php @@ -4,6 +4,7 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class OrderFinance_model extends CI_Model { function __construct() { parent::__construct(); + $this->load->helper('array'); $this->HT = $this->load->database('HT', TRUE); } @@ -14,13 +15,18 @@ class OrderFinance_model extends CI_Model { from GroupCombineInfo gci inner join BIZ_ConfirmLineInfo coli on gci.GCI_GRI_SN=COLI_GRI_SN where coli.COLI_SN=$coli_sn - group by gci.GCI_combineNo,gci.GCI_groupType"; + group by gci.GCI_combineNo,gci.GCI_groupType + order by gci.GCI_groupType desc"; return $this->HT->query($sql)->result(); } - /** 拼团号下的所有订单 */ - public function get_all_combine_order($combineNo="") + /** + * 拼团号下的所有订单 + * * 仅包价线路产品 + */ + public function get_all_combine_order($combineNo="", $processed_code=array()) { + $processed_sql = empty($processed_code) ? "" : " and PAG_Code not in (" . my_implode("'",",",$processed_code) . ") "; $sql = "SELECT gci.GCI_combineNo,gci.GCI_VendorOrderId ,COLI_SN,coli_ID--,COLI_ApplyDate,COLI_GroupCode ,COLD_SN,cold.COLD_ServiceSN--,COLD_EndDate @@ -30,9 +36,11 @@ class OrderFinance_model extends CI_Model { from GroupCombineInfo gci inner join BIZ_ConfirmLineInfo coli on gci.GCI_GRI_SN=COLI_GRI_SN inner join BIZ_ConfirmLineDetail cold on cold.COLD_COLI_SN=coli.COLI_SN + and cold.COLD_ServiceType='D' and cold.DeleteFlag=0 left join BIZ_PackageInfo pag on PAG_SN=COLD_ServiceSN left join BIZ_PackageInfoSub pag_sub on pag_sub.PAGS_SN=COLD_ServiceSN2 where gci.GCI_combineNo =? + $processed_sql order by GCI_combineNo,cold.COLD_StartDate"; return $this->HT->query($sql, array($combineNo))->result(); }