From dff41407cebbf89ed5d8623354c60f69363d3dbe Mon Sep 17 00:00:00 2001 From: lyt Date: Thu, 19 Jul 2018 09:45:20 +0800 Subject: [PATCH] =?UTF-8?q?PVT=E6=88=90=E6=9C=AC=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/order_finance.php | 116 +++++++++++++----- .../models/orderFinance_model.php | 84 +++++++++++++ 2 files changed, 170 insertions(+), 30 deletions(-) diff --git a/webht/third_party/trippestOrderSync/controllers/order_finance.php b/webht/third_party/trippestOrderSync/controllers/order_finance.php index 41d20332..5ba0bd0d 100644 --- a/webht/third_party/trippestOrderSync/controllers/order_finance.php +++ b/webht/third_party/trippestOrderSync/controllers/order_finance.php @@ -3,6 +3,29 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class Order_finance extends CI_Controller { + /*! + * 基本流程 + * * 获取拼团类别: PVT? + * * 获取拼团总人数, 价格人等 + * * 分别计算每次拼团成本 + * * * 写入report_tour + * * 所有产品总成本 + * * * 写入report_order + * END + */ + /*! + * GCI_groupType + * 1 - PVT + * 2 - combine + */ + + public function __construct(){ + parent::__construct(); + $this->load->helper('array'); + $this->load->model('OrderFinance_model'); + mb_regex_encoding("UTF-8"); + } + public function index() { @@ -12,55 +35,82 @@ class Order_finance extends CI_Controller { * 单团财务表计算 * @date 2018-07-18 * @param integer $coli_sn 订单主表key - * @return [type] [description] + * @return [type] [description] */ public function single_order_report($coli_sn=0) { - + $combineNo_arr = $this->OrderFinance_model->get_order_combineNo($coli_sn); + $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)); + foreach ($combineNo_arr as $kc => $vc) { + if ($vc->GCI_groupType == 1) { + $pvt_cost = $this->pvt_basic($vc->GCI_combineNo); + } else if ($vc->GCI_groupType == 2) { + $combine_cost = $this->combine_basic($vc->GCI_combineNo); + } + } + return; } /*! - * 最基本的订单 + * 基本拼团 * * 仅含有一个产品 * @example 180712534 * @date 2018-07-18 - * @param integer $coli_sn 订单主表key - * @return [type] [description] + * @param string $combineNo + * @return [type] [description] */ - public function basic($coli_sn=0) + public function combine_basic($combineNo="") { # code... } /*! - * 获取相同的产品编号 + * pvt计算 + * @example 180515061M * @date 2018-07-18 - * @param string $tour_code 产品编号 - * @return array 含相同产品的数组 */ - public function get_equaltour($tour_code="") + public function pvt_basic($combineNo="", $coli_sn=0) { - $equal_tour = null; - $all_equals = $this->equal_tours(); - foreach ($all_equals as $key => $equal) { - if (in_array($tour_code, $equal)) { - $equal_tour = $equal; - break; - } + $ret = new stdClass(); + $ret->tour = array(); + $all_orders = $this->OrderFinance_model->get_all_combine_order($combineNo); + if (empty($all_orders)) { + return null; } - return $equal_tour; - } - /** 产品编号不同实际是同一产品 */ - public function equal_tours() - { - return array( - array("SHSIC-31", "SHSIC-41"), - array("SHSIC-32", "SHSIC-42"), - array("SHSIC-33", "SHSIC-43"), - array("SHSIC-34", "SHSIC-44") - ); + // 预定的产品数 + $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(); + $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 + $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 = substr(implode(",", array_values(array_unique(array_map(function($ele) {return $ele->PAG_Code;}, $pags_info)))), 0, 50) ; // 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 = substr(implode(";\r\n", array_map(function($ele) {return $ele->PAG_Title;}, $pags_info)), 0, 200) ; // TODO 限制200 + $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)); + $this->output->set_content_type('application/json')->set_output(json_encode($ret)); + return; } + /*! + * 获取允许拼团的数组 + * @date 2018-07-18 + * @param string $tour_code 产品编号 + * @return array 含允许拼团产品编号的数组 + */ public function get_allowed_combine($tour_code="") { $allowed = null; @@ -73,12 +123,18 @@ class Order_finance extends CI_Controller { } return $allowed; } - /** 不同产品但部分行程相同所以允许拼团 */ + /** 允许拼团的不同编号产品 */ public function allowed_combine() { return array( + // * 不同产品但部分行程相同所以允许拼团 * array("XASIC-15", "XASIC-41"), - array("BJSIC-47", "BJSIC-41") + array("BJSIC-47", "BJSIC-41"), + // * 产品编号不同实际是同一产品 * + array("SHSIC-31", "SHSIC-41"), + array("SHSIC-32", "SHSIC-42"), + array("SHSIC-33", "SHSIC-43"), + array("SHSIC-34", "SHSIC-44") ); } diff --git a/webht/third_party/trippestOrderSync/models/orderFinance_model.php b/webht/third_party/trippestOrderSync/models/orderFinance_model.php index ee63d527..b2bba4a7 100644 --- a/webht/third_party/trippestOrderSync/models/orderFinance_model.php +++ b/webht/third_party/trippestOrderSync/models/orderFinance_model.php @@ -2,8 +2,92 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class OrderFinance_model extends CI_Model { + function __construct() { + parent::__construct(); + $this->HT = $this->load->database('HT', TRUE); + } + /** 订单的所有拼团号 */ + public function get_order_combineNo($coli_sn=0) + { + $sql = "SELECT gci.GCI_combineNo,gci.GCI_groupType + 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"; + return $this->HT->query($sql)->result(); + } + /** 拼团号下的所有订单 */ + public function get_all_combine_order($combineNo="") + { + $sql = "SELECT gci.GCI_combineNo,gci.GCI_VendorOrderId + ,COLI_SN,coli_ID--,COLI_ApplyDate,COLI_GroupCode + ,COLD_SN,cold.COLD_ServiceSN--,COLD_EndDate + ,PAG_Code ,pag_sub.PAGS_CN_Title, cold.COLD_StartDate,PAG_DefaultVEI_SN + ,COLD_PersonNum ,COLD_ChildNum , cold.COLD_StartDate,COLD_EndDate + --,PAG_Title + 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 + 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 =? + order by GCI_combineNo,cold.COLD_StartDate"; + return $this->HT->query($sql, array($combineNo))->result(); + } + + /** 拼团的成本明细,总成本信息 */ + public function get_combine_sumMoney($combineNo="") + { + $ret = new stdClass(); + $sql = "SELECT GCOD_operationType,GCOD_subType,SUM(cast(gcod.GCOD_sumMoney as float)) cost + from GroupCombineOperationDetail gcod + where gcod.GCOD_GCI_combineNo =? + group by GCOD_GCI_combineNo,GCOD_operationType,GCOD_subType"; + $ret->cost_detail = $this->HT->query($sql, array($combineNo))->result(); + $ret->cost_sum = array_sum(array_map(function ($ele){return $ele->cost;}, $ret->cost_detail)); + + $ret->cost_category = array(); + $ret->cost_category['water'] = 0; + $ret->cost_category['guide_meal'] = 0; + $ret->cost_category['otherCosts'] = 0; + $ret->cost_category['guiderOperations'] = 0; + $ret->cost_category['touristCarOperations'] = 0; + $ret->cost_category['sceneryOperations'] = 0; + foreach ($ret->cost_detail as $key => $value) { + if ($value->GCOD_operationType=='otherCosts' && $value->GCOD_subType=='客人水费') { + $ret->cost_category['water'] += $value->cost; + continue; + } elseif ($value->GCOD_operationType=='otherCosts' && $value->GCOD_subType=='餐补(司陪)') { + $ret->cost_category['guide_meal'] += $value->cost; + continue; + } + $ret->cost_category[$value->GCOD_operationType] += $value->cost; + } + return $ret; + } + + /** 获取订单总人数 */ + public function get_order_person_num($coli_sn=0) + { + $sql = "SELECT BPL_BPE_SN + from BIZ_ConfirmLineDetail cold + inner join BIZ_BookPeopleList bpl on bpl.BPL_COLD_SN=cold.COLD_SN + where cold.COLD_COLI_SN=$coli_sn + group by bpl.BPL_BPE_SN"; + return $this->HT->query($sql)->num_rows(); + } + + /** 获取产品信息:产品名称,供应商等 */ + public function get_pag_info($PAG_SN_str="") + { + $sql = "SELECT pag.PAG_SN,PAG_Code,PAG_DefaultVEI_SN,PAG_Title,vei2.VEI2_CompanyBN + from BIZ_PackageInfo pag + inner join VEndorInfo2 vei2 on VEI2_VEI_SN=PAG_DefaultVEI_SN and VEI2_LGC=2 + where PAG_SN in ($PAG_SN_str) "; + return $this->HT->query($sql)->result(); + } }