|
- <?php
-
- namespace backend\modules\api\models;
-
- use backend\modules\api\util\KxTicketUtil;
- use backend\modules\api\util\Util;
- use backend\modules\zzcs\models\BaseSupplierSale;
- use common\models\Msg;
- use yii\base\Exception;
- use yii\db\ActiveRecord;
- use Yii;
- use yii\db\Expression;
-
- /**
- * This is the model class for table "order_main".
- *
- * @property integer $ID
- * @property integer $CANCEL_FLAG
- * @property integer $MAIN_CREATE_USER_ID
- * @property integer $CREATE_USER_ID
- * @property string $CREATE_TIME
- * @property integer $UPDATE_USER_ID
- * @property string $UPDATE_TIME
- * @property integer $SALE_ORG_ID
- * @property integer $SALE_TOP_ORG_ID
- * @property integer $PROD_TOP_ORG_ID
- * @property integer $ORDER_ID
- * @property string $ORDER_DESCRIPTION
- * @property string $OUTSIDE_ORDER_NO
- * @property integer $ORDER_VALID_STATUS
- * @property integer $ORDER_BOOK_STATUS
- * @property integer $ORDER_PAY_STATUS
- * @property integer $ORDER_PAY_MAIN_ID
- * @property integer $ORDER_PAY_USER_ID
- * @property string $ORDER_PAY_TIME
- * @property integer $ORDER_PRINT_TIMES
- * @property integer $PARENT_ORDER_ID
- * @property integer $PROD_ID
- * @property integer $PARENT_PROD_ID
- * @property string $PROD_NAME
- * @property string $PARENT_PROD_NAME
- * @property string $ORDER_PRICE
- * @property string $ORDER_PROD_TYPE
- * @property string $PROD_SUPPLY_ORG_NAME
- * @property string $BASE_PRICE
- * @property string $MID_PRICE
- * @property integer $RUN_ID
- * @property string $RUN_DATE
- * @property integer $RUN_DATE_NUM
- * @property string $RUN_TIME
- * @property integer $RUN_TIME_MINUTES
- * @property integer $RUN_BUS_ORDER_ID
- * @property integer $RUN_BUS_SEAT_TYPE
- * @property integer $RUN_BUS_SEAT_SEQ_ID
- * @property integer $RUN_BUS_SEAT_ID
- * @property string $RUN_BUS_SEAT_NAME
- * @property integer $PROD_START_STATION_RES_ID
- * @property string $PROD_START_STATION_RES_NAME
- * @property integer $PROD_START_STATION_CHECKPORT_RES_ID
- * @property string $PROD_START_STATION_CHECKPORT_RES_NAME
- * @property integer $PROD_START_STATION_SEQ_ID
- * @property string $PROD_START_STATION_DATE
- * @property integer $PROD_START_STATION_DATE_NUM
- * @property string $PROD_START_STATION_TIME
- * @property integer $PROD_START_STATION_TIME_MINUTES
- * @property integer $PROD_START_STATION_AREA_ID
- * @property string $PROD_START_STATION_AREA_NAME
- * @property integer $PROD_END_STATION_RES_ID
- * @property string $PROD_END_STATION_RES_NAME
- * @property integer $PROD_END_STATION_SEQ_ID
- * @property string $PROD_END_STATION_DATE
- * @property integer $PROD_END_STATION_DATE_NUM
- * @property string $PROD_END_STATION_TIME
- * @property integer $PROD_END_STATION_TIME_MINUTES
- * @property integer $PROD_END_STATION_AREA_ID
- * @property string $PROD_END_STATION_AREA_NAME
- * @property string $CUSTOMER_NAME
- * @property integer $CUSTOMER_SEX
- * @property string $CUSTOMER_MOBILE
- * @property integer $CUSTOMER_ID_TYPE
- * @property string $CUSTOMER_ID_NO
- * @property string $CUSTOMER_ADDRESS
- * @property integer $CUSTOMER_ADDRESS_AREA_ID
- * @property string $CUSTOMER_POSTCODE
- * @property string $CUSTOMER_MEMO
- * @property integer $MEMBER_ID
- * @property integer $MEMBER_SCORE_PAY
- * @property integer $MEMBER_SCORE_GET
- * @property integer $ORDER_STATUS
- * @property integer $ORDER_DISABLE_TYPE
- * @property integer $ORDER_DISABLE_USER_ID
- * @property string $ORDER_DISABLE_TIME
- * @property string $ORDER_DISABLE_PERCENT
- * @property string $ORDER_DISABLE_FEE
- * @property integer $ORDER_DISABLE_APPLY_USER_ID
- * @property string $ORDER_DISABLE_APPLY_TIME
- * @property string $KEEP_END_TIME
- * @property integer $KEEP_END_MINUTES
- * @property integer $if_gift
- * @property integer $reorder_times
- * @property integer $IF_LAST_PROD
- * @property integer $ORDER_LEVEL
- * @property string $ORDER_CONFIRM_CODE
- * @property integer $OUTSIDE_SALE_ORG_ID
- * @property integer $IS_UP
- * @property integer $APPLY_ID
- * @property string $SALES_MAN
- * @property string $RECEIVE_VALUE
- * @property integer $REAL_PASSENGER_NUM
- * @property integer $STOCK_TYPE
- * @property integer $REFUSE_FLAG
- * @property string $PROFIT_VALUE
- * @property string $TOTAL_COMMISSION
- * @property integer $ORDER_TITLE_ID
- * @property integer $MAIN_CORP_ID
- */
- class OrderMain extends ActiveRecord
- {
- /**
- * @inheritdoc
- */
- public static function tableName()
- {
- return 'order_main';
- }
-
- /**
- * @inheritdoc
- */
- public function rules()
- {
- return [
- [['ID', 'ORDER_BOOK_STATUS', 'PROD_START_STATION_TIME_MINUTES'], 'required'],
- [['ID', 'CANCEL_FLAG', 'MAIN_CREATE_USER_ID', 'CREATE_USER_ID', 'UPDATE_USER_ID', 'SALE_ORG_ID', 'SALE_TOP_ORG_ID', 'PROD_TOP_ORG_ID', 'ORDER_ID', 'ORDER_VALID_STATUS', 'ORDER_BOOK_STATUS', 'ORDER_PAY_STATUS', 'ORDER_PAY_MAIN_ID', 'ORDER_PAY_USER_ID', 'ORDER_PRINT_TIMES', 'PARENT_ORDER_ID', 'PROD_ID', 'PARENT_PROD_ID', 'ORDER_PROD_TYPE', 'RUN_ID', 'RUN_DATE_NUM', 'RUN_TIME_MINUTES', 'RUN_BUS_ORDER_ID', 'RUN_BUS_SEAT_TYPE', 'RUN_BUS_SEAT_SEQ_ID', 'RUN_BUS_SEAT_ID', 'PROD_START_STATION_RES_ID', 'PROD_START_STATION_CHECKPORT_RES_ID', 'PROD_START_STATION_SEQ_ID', 'PROD_START_STATION_DATE_NUM', 'PROD_START_STATION_TIME_MINUTES', 'PROD_START_STATION_AREA_ID', 'PROD_END_STATION_RES_ID', 'PROD_END_STATION_SEQ_ID', 'PROD_END_STATION_DATE_NUM', 'PROD_END_STATION_TIME_MINUTES', 'PROD_END_STATION_AREA_ID', 'CUSTOMER_SEX', 'CUSTOMER_ID_TYPE', 'CUSTOMER_ADDRESS_AREA_ID', 'MEMBER_ID', 'MEMBER_SCORE_PAY', 'MEMBER_SCORE_GET', 'ORDER_STATUS', 'ORDER_DISABLE_TYPE', 'ORDER_DISABLE_USER_ID', 'ORDER_DISABLE_APPLY_USER_ID', 'KEEP_END_MINUTES', 'if_gift', 'reorder_times', 'IF_LAST_PROD', 'ORDER_LEVEL', 'OUTSIDE_SALE_ORG_ID', 'IS_UP', 'APPLY_ID', 'REAL_PASSENGER_NUM', 'STOCK_TYPE', 'REFUSE_FLAG', 'ORDER_TITLE_ID'], 'integer'],
- [['ORDER_DESCRIPTION'], 'string'],
- [['ORDER_PRICE', 'BASE_PRICE', 'MID_PRICE', 'ORDER_DISABLE_PERCENT', 'ORDER_DISABLE_FEE', 'RECEIVE_VALUE', 'PROFIT_VALUE', 'TOTAL_COMMISSION'], 'number'],
- [['CREATE_TIME', 'UPDATE_TIME', 'RUN_DATE', 'PROD_START_STATION_DATE', 'PROD_END_STATION_DATE', 'ORDER_DISABLE_TIME', 'ORDER_DISABLE_APPLY_TIME', 'KEEP_END_TIME'], 'string', 'max' => 20],
- [['OUTSIDE_ORDER_NO', 'PROD_NAME', 'PARENT_PROD_NAME', 'CUSTOMER_ADDRESS'], 'string', 'max' => 200],
- [['ORDER_PAY_TIME'], 'string', 'max' => 255],
- [['PROD_SUPPLY_ORG_NAME', 'RUN_BUS_SEAT_NAME', 'PROD_START_STATION_RES_NAME', 'PROD_START_STATION_CHECKPORT_RES_NAME', 'PROD_START_STATION_AREA_NAME', 'PROD_END_STATION_RES_NAME', 'PROD_END_STATION_AREA_NAME', 'CUSTOMER_NAME', 'CUSTOMER_MOBILE', 'CUSTOMER_ID_NO', 'CUSTOMER_POSTCODE'], 'string', 'max' => 100],
- [['RUN_TIME', 'PROD_START_STATION_TIME', 'PROD_END_STATION_TIME'], 'string', 'max' => 10],
- [['CUSTOMER_MEMO'], 'string', 'max' => 500],
- [['ORDER_CONFIRM_CODE', 'SALES_MAN'], 'string', 'max' => 50],
- [['PRINCIPAL_ID'], 'safe'],
- ];
- }
-
- /**
- * @inheritdoc
- */
- public function attributeLabels()
- {
- return [
- 'ID' => 'ID',
- 'CANCEL_FLAG' => '记录有效性标记,CANCEL_FLAG=0记录有效;CANCEL_FLAG=1,记录已删除',
- 'MAIN_CREATE_USER_ID' => '代下单用户ID,BASE_USER.ID,用户A代替用户B下单,则MAIN_CREATE_USER_ID=A,CREATE_USER_ID=B',
- 'CREATE_USER_ID' => '记录创建用户ID',
- 'CREATE_TIME' => '记录创建时间',
- 'UPDATE_USER_ID' => '记录最后更新用户ID',
- 'UPDATE_TIME' => '记录最后更新时间',
- 'SALE_ORG_ID' => '分销商机构ID,BASE_ORGANIZATION.ORG_ID',
- 'SALE_TOP_ORG_ID' => '下单组织机构所属一级机构ID,BASE_ORGANIZATION.ORG_ID,算法使用',
- 'PROD_TOP_ORG_ID' => '产品所属一级机构ID,BASE_ORGANIZATION.ORG_ID,计算层级代理费算法使用',
- 'ORDER_ID' => '订单ID',
- 'ORDER_DESCRIPTION' => '最细颗粒度的订单描述',
- 'OUTSIDE_ORDER_NO' => '分销商订单编号',
- 'ORDER_VALID_STATUS' => '订单有效性状态,0失效订单、1有效订单',
- 'ORDER_BOOK_STATUS' => '订单预订状态,0非预订、1有时限、2永久锁位预订',
- 'ORDER_PAY_STATUS' => '订单是否已支付,0未支付,1已支付',
- 'ORDER_PAY_MAIN_ID' => '支付记录主ID,ORDER_PAY_MAIN.ID',
- 'ORDER_PAY_USER_ID' => '支付操作用户ID,BASE_USER.ID',
- 'ORDER_PAY_TIME' => '支付操作时间',
- 'ORDER_PRINT_TIMES' => '票张打印次数',
- 'PARENT_ORDER_ID' => '父订单ID,ORDER_MAIN.ORDER_ID',
- 'PROD_ID' => '订单产品ID,OPERA_PRODUCT.PROD_ID',
- 'PARENT_PROD_ID' => '订单产品父ID,OPERA_PRODUCT.PROD_ID',
- 'PROD_NAME' => '订单产品名称',
- 'PARENT_PROD_NAME' => '订单产品父名称',
- 'ORDER_PRICE' => '订单价格',
- 'ORDER_PROD_TYPE' => '订单类型',
- 'PROD_SUPPLY_ORG_NAME' => '供应商名字',
- 'BASE_PRICE' => '成本价格',
- 'MID_PRICE' => 'Mid Price',
- 'RUN_ID' => '班次ID,RUN_MAIN.RUN_ID',
- 'RUN_DATE' => '票:出发时间 酒店:入住时间',
- 'RUN_DATE_NUM' => '班次首发日期参数,发车日期至2016-01-01天数,算法使用',
- 'RUN_TIME' => '班次发车时间,格式HH:MM',
- 'RUN_TIME_MINUTES' => '班次发车时间距首发日零点分钟数,算法使用',
- 'RUN_BUS_ORDER_ID' => '班次车号,RUN_BUS.BUS_ORDER_ID',
- 'RUN_BUS_SEAT_TYPE' => '座位类型,DICT_TYPE.ID,普通座、贵宾座等',
- 'RUN_BUS_SEAT_SEQ_ID' => '座位内部序列ID',
- 'RUN_BUS_SEAT_ID' => '座位ID,RUN_X.ID',
- 'RUN_BUS_SEAT_NAME' => '座位名称,仅供显示用',
- 'PROD_START_STATION_RES_ID' => '上车站资源ID,BASE_RESOURCE.RES_ID,资源ID',
- 'PROD_START_STATION_RES_NAME' => '上车站资源名称',
- 'PROD_START_STATION_CHECKPORT_RES_ID' => '上车站检票口资源ID,BASE_RESOURCE.RES_ID,资源ID',
- 'PROD_START_STATION_CHECKPORT_RES_NAME' => '上车站检票口资源名称',
- 'PROD_START_STATION_SEQ_ID' => '上车站序列ID,RUN_STATION.STATION_ORDER_ID',
- 'PROD_START_STATION_DATE' => '上车站发车日期',
- 'PROD_START_STATION_DATE_NUM' => '上车站发车日期参数,发车日期至2016-01-01天数,算法使用',
- 'PROD_START_STATION_TIME' => '上车站发车时间,格式HH:MM',
- 'PROD_START_STATION_TIME_MINUTES' => '上车站发车时间距发车日零点分钟数',
- 'PROD_START_STATION_AREA_ID' => 'Prod Start Station Area ID',
- 'PROD_START_STATION_AREA_NAME' => 'Prod Start Station Area Name',
- 'PROD_END_STATION_RES_ID' => '下车站资源ID,BASE_RESOURCE.RES_ID,资源ID',
- 'PROD_END_STATION_RES_NAME' => '下车站资源名称',
- 'PROD_END_STATION_SEQ_ID' => '下车站序列ID,RUN_STATION.STATION_ORDER_ID',
- 'PROD_END_STATION_DATE' => '下车站发车日期',
- 'PROD_END_STATION_DATE_NUM' => '下车站发车日期参数 ,发车日期至2016-01-01天数,算法使用',
- 'PROD_END_STATION_TIME' => '下车站发车时间,格式HH:MM',
- 'PROD_END_STATION_TIME_MINUTES' => '下车站发车时间距发车日零点分钟数',
- 'PROD_END_STATION_AREA_ID' => 'Prod End Station Area ID',
- 'PROD_END_STATION_AREA_NAME' => 'Prod End Station Area Name',
- 'CUSTOMER_NAME' => '客人姓名',
- 'CUSTOMER_SEX' => '客人性别,0女1男',
- 'CUSTOMER_MOBILE' => '客人手机',
- 'CUSTOMER_ID_TYPE' => '客人证件类别,DICT_TYPE.ID',
- 'CUSTOMER_ID_NO' => '客人证件号码',
- 'CUSTOMER_ADDRESS' => '客人地址',
- 'CUSTOMER_ADDRESS_AREA_ID' => '客人地址所在地ID',
- 'CUSTOMER_POSTCODE' => '客人地址邮编',
- 'CUSTOMER_MEMO' => '订单备注',
- 'MEMBER_ID' => '购票人会员卡ID',
- 'MEMBER_SCORE_PAY' => '购票会员花费积分,保留字段',
- 'MEMBER_SCORE_GET' => '购票会员可获得积分,保留字段',
- 'ORDER_STATUS' => '订单当前状态',
- 'ORDER_DISABLE_TYPE' => '订单取消模式标记,DICT_TYPE.ID,0无取消相关操作,其他包括:申请纠票、审核纠票、退票、超时作废、预订取消',
- 'ORDER_DISABLE_USER_ID' => '订单作废用户ID,BASE_USER.ID',
- 'ORDER_DISABLE_TIME' => '订单作废时间',
- 'ORDER_DISABLE_PERCENT' => '订单作废手续费百分比',
- 'ORDER_DISABLE_FEE' => '订单作废手续费金额',
- 'ORDER_DISABLE_APPLY_USER_ID' => '订单申请纠票用户ID,BASE_USER.ID',
- 'ORDER_DISABLE_APPLY_TIME' => '订单申请纠票时间',
- 'KEEP_END_TIME' => '订单保留截至时间,ORDER_BOOK_STATUS=1时有效,当此时间点时订单超时作废',
- 'KEEP_END_MINUTES' => '订单保留至上车点发车时间前分钟数,本字段可正可负,发车前为正,发车后为负',
- 'if_gift' => '是否是赠票,0不是赠票,1是赠票',
- 'reorder_times' => '改签次数,标记本记录为第几次改签后的票',
- 'IF_LAST_PROD' => '是否最细颗粒度的判断',
- 'ORDER_LEVEL' => 'Order Level',
- 'ORDER_CONFIRM_CODE' => '酒店确认号',
- 'OUTSIDE_SALE_ORG_ID' => 'Outside Sale Org ID',
- 'IS_UP' => '0已提现 1未提现',
- 'APPLY_ID' => '提现ID',
- 'SALES_MAN' => 'Sales Man',
- 'PRINCIPAL_ID' => '运营负责人',
- 'RECEIVE_VALUE' => '代收金额',
- 'REAL_PASSENGER_NUM' => 'Real Passenger Num',
- 'STOCK_TYPE' => '酒店下单占用的库存类型:买断,保留,现询',
- 'REFUSE_FLAG' => '拒单标志,供酒店使用,0:不允许拒单,1:允许拒单',
- 'PROFIT_VALUE' => '利润',
- 'TOTAL_COMMISSION' => '订单总佣金',
- 'ORDER_TITLE_ID' => '是否是组合订单拆分的 0:否 0以外:组合订单号',
- 'SUB_CHANNEL_ID' => '下级渠道id(用于代售)',
- 'SUB_CHANNEL_NO' => '下级渠道订单号',
- 'MAIN_CORP_ID' => '订单所属运营主体',
- 'SALE_PATH' => '销售路径(代售)eg:1001,1002,1003',
- 'AGENT_LEVEL' => '代理层级:终端1,上一级2,再上一级3',
- ];
- }
-
- /**
- * Function Description:获取指定车次的订单信息
- * Function Name: getRunBusOrderInfo
- * @param int $run_id 班次id
- * @param int $bus_order_id 车次号
- *
- * @return array|\yii\db\ActiveRecord[]
- *
- * @author 张帅
- */
- public function getRunBusOrderInfo($run_id, $bus_order_id)
- {
- $result = self::find()->select([
- 'order_id' => 'o.parent_order_id',//订单号
- 'people_num' => "count(o.order_id)",//人数
- 'start_station_id' => 'o.prod_start_station_res_id',//上车站
- 'start_station_seq_id' => 'o.prod_start_station_seq_id',//第几站
- 'end_station_id' => 'o.prod_end_station_res_id',//下车站
- 'o.customer_name',//乘客姓名
- 'o.customer_mobile',//乘客电话
- 'check_status' => OrderCheckTickets::find()->select('check_status')->where('order_id = o.parent_order_id')->orderBy(['id' => SORT_DESC])->limit(1),//检票状态
- ])->from(self::tableName() . ' as o')
- ->where([
- 'and',
- ['=', 'run_id', $run_id],
- ['=', 'run_bus_order_id', $bus_order_id],
- ['=', 'cancel_flag', 0],
- ['=', 'o.agent_level', 1],
- ['!=', 'parent_order_id', 0],
- ['in', 'order_status', [146, 147]],
- ])
- ->groupBy(['o.parent_order_id'])
- ->asArray()->all();
-
- if (count($result) > 0) {
- foreach ($result as $key => $vel) {
- $vel['check_status'] == '' ? $result[$key]['check_status'] = 0 : true;
- }
- }
- return $result;
- }
-
- /**
- * Function Description:获取座位信息
- * Function Name: getSeatArray
- * @param array $run_bus_arr 班次车次数组
- * @param array $prod_arr 产品数据
- *
- * @return array
- *
- * @author 张帅
- */
- public function getSeatArray($run_bus_arr, $prod_arr)
- {
- $result = [];
-
- foreach ($run_bus_arr as $key => $vel) {
- $seat_no = [];
- $i = 0;
- #region 连座筛选
- foreach ($vel as $key1 => $vel2) {
- $seat_no[$key1 - $i][$key1] = $vel2;
- $i++;
- }
- #endregion
-
- #region 挑选座位
- $run_seat_value = [];
- foreach ($seat_no as $key1 => $vel2) {
- if (count($vel2) >= $prod_arr[$key]['num']) {
- $run_seat_value = array_slice($vel2, 0, $prod_arr[$key]['num'], true);
- break;
- }
- }
- if (count($run_seat_value) == 0) {
- $run_seat_value = array_slice($vel, 0, $prod_arr[$key]['num'], true);
- }
- #endregion
- $result[$key] = $run_seat_value;
- }
-
- return $result;
- }
-
-
- /**
- * Function Description:下单
- * Function Name: submitBusOrder
- * @param array $prod_list 产品列表
- * @param array $seat_arr 座位
- * @param array $order_info_arr 订单的其他信息
- * @param array $customer_info_arr 乘客
- * @param array $order_append_arr 附加产品
- * @param int $is_send_msg 是否发短信
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function submitBusOrder($prod_list, $seat_arr, $order_info_arr, $customer_info_arr, $order_append_arr, $is_send_msg)
- {
- #region 获取最大唯一值,先赋给支付id,然后递增
- $base_main_id = BaseUniqueId2::find()->select('unique_id')->where(['id' => 1])->asArray()->one();
-
- //※更新唯一键值
- #计算BaseUniqueId 需要 增加的值(往返程的主订单和子订单的id个数)
- $add_count = 0;
- foreach ($prod_list as $k => $v) {
- $add_count += $v['people_num'] + 1;
- }
- $time = time() . rand(0, 999999);
- $res = BaseUniqueId2::updateAll(['UNIQUE_ID' => $base_main_id['unique_id'] + $add_count + 1, 'UPDATE_TIME' => $time], ['id' => 1]);
- if (!$res) {
- $result['code'] = '1';
- $result['info'] = '下单失败';
- $result['error'] = 'BaseUniqueId更新失败';
- return $result;
- }
-
- $pay_main_id = $base_main_id['unique_id'] + 1;
- $parent_order_id = $pay_main_id;
- #endregion
-
- #region 提交订单操作数据库所需数据
- $main_order = [];//主订单数据
- $main_order_key = [];//提交主订单时所需key值
- $son_order = [];//子订单数据
- $son_order_key = [];//提交子订单时所需key值
- $run_x_arr = [];//run_x
- $run_bus_prod_stock_arr = [];//run_bus,run_prod,run_stock更新数据
- $main_order_id = [];//订单id数组
- $pay_main_arr = [];//主支付记录数据
- $pay_main_key = [];//主支付记录键值
- $order_price = 0;
- $son_order_id = 0;
- #endregion
-
- #region 整理数据
- foreach ($prod_list as $key => $vel) {
-
- $run_x_one = [];//run_x_one
- $prod_list[$key]['order_id'] = $parent_order_id;//订单号
- #region 主订单数据
- $main_order_val = [
- 'ID' => $parent_order_id,
- 'MAIN_CREATE_USER_ID' => $order_info_arr['user_id'],//'代下单用户ID,BASE_USER.ID,用户A代替用户B下单,则MAIN_CREATE_USER_ID=A,CREATE_USER_ID=B',
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALE_ORG_ID' => 0,//'分销商机构ID',
- 'SALE_TOP_ORG_ID' => 0,//'下单组织机构所属一级机构ID',
- 'PROD_TOP_ORG_ID' => 0,//'产品所属一级机构ID',
- 'ORDER_ID' => $parent_order_id,
- 'ORDER_DESCRIPTION' => $vel['ticket_name'] . ',' . $vel['run_date'] . ',' . $vel['people_num'] . '|' . $vel['people_num'],//'最细颗粒度的订单描述',
- 'OUTSIDE_ORDER_NO' => $order_info_arr['outside_sale_order_no'],//'分销商订单编号',
- 'ORDER_VALID_STATUS' => 1,//'订单有效性状态,0失效订单、1有效订单',
- 'ORDER_BOOK_STATUS' => $order_info_arr['order_book_status'],//'订单预订状态,0非预订、1有时限、2永久锁位预订',
- 'ORDER_PAY_STATUS' => $order_info_arr['order_pay_status'],//'订单是否已支付,0未支付,1已支付',
- 'ORDER_PAY_MAIN_ID' => $pay_main_id,//'支付记录主ID,ORDER_PAY_MAIN.ID',
- 'ORDER_PAY_USER_ID' => $order_info_arr['user_id'],//'支付操作用户ID,BASE_USER.ID',
- 'ORDER_PAY_TIME' => date('Y-m-d H:i:s'),//'支付操作时间',
- 'PARENT_ORDER_ID' => 0,
- 'PARENT_PROD_ID' => $vel['line_id'],
- 'PARENT_PROD_NAME' => $vel['line_name'],
- 'ORDER_PRICE' => $vel['total_price'],//'订单价格',
- 'ORDER_PROD_TYPE' => 81,//'订单类型',
- 'PROD_START_STATION_CHECKPORT_RES_ID' => $vel['checkport_res_id'],//'上车站检票口资源ID',
- 'PROD_START_STATION_CHECKPORT_RES_NAME' => empty($vel['checkport_res_name']) ? '' : $vel['checkport_res_name'],//'上车站检票口资源名称',
- 'PROD_START_STATION_TIME_MINUTES' => $vel['start_minutes'],//'上车站发车时间距发车日零点分钟数',
- 'PROD_END_STATION_TIME_MINUTES' => $vel['end_minutes'],//'下车站发车时间距发车日零点分钟数',
- 'CUSTOMER_NAME' => $customer_info_arr['customer_name'],//'客人姓名',
- 'CUSTOMER_SEX' => 1,//'客人性别,0女1男',
- 'CUSTOMER_MOBILE' => $customer_info_arr['customer_mobile'],//'客人手机',
- 'CUSTOMER_MEMO' => $customer_info_arr['customer_memo'],//'订单备注',
- 'CUSTOMER_ID_TYPE' => $customer_info_arr['customer_id_type'],
- 'CUSTOMER_ID_NO' => $customer_info_arr['customer_id_no'],
- 'MEMBER_ID' => $order_info_arr['member_id'],
- 'ORDER_STATUS' => $order_info_arr['order_status'],//'订单当前状态',
- 'IF_LAST_PROD' => 1,//'是否最细颗粒度的判断',
- 'ORDER_LEVEL' => 0,//'Order Level',
- 'OUTSIDE_SALE_ORG_ID' => $order_info_arr['outside_sale_org_id'],//
- 'SALES_MAN' => $order_info_arr['sales_man'],
- 'RECEIVE_VALUE' => $vel['total_receiver_value'],
- ];
- #endregion
- $single_price = $vel['total_price'];
- $order_price += $vel['total_price'];
-
- #region 收集主订单的id
- if ($vel['if_back'] == 1) {
- $main_order_id[0] = $parent_order_id;//收集主订单的id
- } else {
- $main_order_id[1] = $parent_order_id;//收集主订单的id
- }
- #endregion
-
- #region 主订单key值
- if (count($main_order_key) == 0) {
- $main_order_key = array_keys($main_order_val);
- }
- #endregion
-
- $son_order_id = $parent_order_id;//子订单id号
-
- #region 根据人数遍历每个子订单的个数
- foreach ($seat_arr[$vel['ticket_id']] as $seat_key => $seat_vel) {
-
- $son_order_id++;//子订单号递增
-
- #region 子订单数据
- $son_order_val = [
- 'ID' => $son_order_id,
- 'MAIN_CREATE_USER_ID' => $order_info_arr['user_id'],//'代下单用户ID,BASE_USER.ID,用户A代替用户B下单,则MAIN_CREATE_USER_ID=A,CREATE_USER_ID=B',
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALE_ORG_ID' => 0,//'分销商机构ID',
- 'SALE_TOP_ORG_ID' => 0,
- 'PROD_TOP_ORG_ID' => 0,
- 'ORDER_ID' => $son_order_id,
- 'OUTSIDE_ORDER_NO' => $order_info_arr['outside_sale_order_no'],//'分销商订单编号',
- 'ORDER_VALID_STATUS' => 1,//'订单有效性状态,0失效订单、1有效订单',
- 'ORDER_BOOK_STATUS' => $order_info_arr['order_book_status'],//'订单预订状态,0非预订、1有时限、2永久锁位预订',
- 'ORDER_PAY_STATUS' => $order_info_arr['order_pay_status'],//'订单是否已支付,0未支付,1已支付',
- 'ORDER_PAY_MAIN_ID' => $pay_main_id,//'支付记录主ID,ORDER_PAY_MAIN.ID',
- 'ORDER_PAY_USER_ID' => $order_info_arr['user_id'],//'支付操作用户ID,BASE_USER.ID',
- 'ORDER_PAY_TIME' => date('Y-m-d H:i:s'),//'支付操作时间',
- 'PARENT_ORDER_ID' => $parent_order_id,
- 'PROD_ID' => $vel['ticket_id'],
- 'PARENT_PROD_ID' => $vel['line_id'],
- 'PROD_NAME' => $vel['ticket_name'],
- 'PARENT_PROD_NAME' => $vel['line_name'],
- 'ORDER_PRICE' => $vel['order_price'],
- 'ORDER_PROD_TYPE' => 82,
- 'RUN_ID' => $vel['run_id'],
- 'RUN_DATE' => $vel['run_date'],
- 'RUN_DATE_NUM' => (strtotime($vel['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24),//'班次首发日期参数,发车日期至2016-01-01天数,算法使用',
- 'RUN_TIME' => $vel['run_time'],
- 'RUN_BUS_ORDER_ID' => $seat_vel['bus_order_id'],//'班次车号,RUN_BUS.BUS_ORDER_ID',
- 'RUN_BUS_SEAT_TYPE' => $vel['seat_type'],//'座位类型,DICT_TYPE.ID,普通座、贵宾座等',
- 'RUN_BUS_SEAT_SEQ_ID' => $seat_vel['seat_seq_id'],//'座位内部序列ID',
- 'RUN_BUS_SEAT_NAME' => $seat_vel['seat_name'],
- 'PROD_START_STATION_RES_ID' => $vel['start_res_id'],
- 'PROD_START_STATION_RES_NAME' => $vel['start_res_name'],
- 'PROD_START_STATION_CHECKPORT_RES_ID' => $vel['checkport_res_id'],
- 'PROD_START_STATION_CHECKPORT_RES_NAME' => empty($vel['checkport_res_name']) ? '' : $vel['checkport_res_name'],
- 'PROD_START_STATION_SEQ_ID' => $vel['start_seq_id'],
- 'PROD_START_STATION_DATE' => $vel['run_date'],
- 'PROD_START_STATION_DATE_NUM' => (strtotime($vel['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24),
- 'PROD_START_STATION_TIME' => $vel['start_time'],
- 'PROD_START_STATION_TIME_MINUTES' => $vel['start_minutes'],
- 'PROD_START_STATION_AREA_ID' => $vel['start_area_id'],
- 'PROD_START_STATION_AREA_NAME' => $vel['start_area_name'],
- 'PROD_END_STATION_RES_ID' => $vel['end_res_id'],
- 'PROD_END_STATION_RES_NAME' => $vel['end_res_name'],
- 'PROD_END_STATION_SEQ_ID' => $vel['end_seq_id'],
- 'PROD_END_STATION_DATE' => $vel['run_date'],
- 'PROD_END_STATION_DATE_NUM' => (strtotime($vel['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24),
- 'PROD_END_STATION_TIME' => $vel['end_time'],
- 'PROD_END_STATION_TIME_MINUTES' => $vel['end_minutes'],
- 'PROD_END_STATION_AREA_ID' => $vel['end_area_id'],
- 'PROD_END_STATION_AREA_NAME' => $vel['end_area_name'],
- 'CUSTOMER_NAME' => $customer_info_arr['customer_name'],//'客人姓名',
- 'CUSTOMER_SEX' => 1,//'客人性别,0女1男',
- 'CUSTOMER_MOBILE' => $customer_info_arr['customer_mobile'],//'客人手机',
- 'CUSTOMER_MEMO' => $customer_info_arr['customer_memo'],//'订单备注',
- 'CUSTOMER_ID_TYPE' => $customer_info_arr['customer_id_type'],
- 'CUSTOMER_ID_NO' => $customer_info_arr['customer_id_no'],
- 'MEMBER_ID' => $order_info_arr['member_id'],
- 'ORDER_STATUS' => $order_info_arr['order_status'],
- 'if_gift' => 0,//'是否是赠票,0不是赠票,1是赠票',
- 'ORDER_LEVEL' => 0,
- 'OUTSIDE_SALE_ORG_ID' => $order_info_arr['outside_sale_org_id'],
- 'SALES_MAN' => $order_info_arr['sales_man'],
- 'RECEIVE_VALUE' => $vel['receiver_value'],
- ];
- #endregion
-
- #region 子订单key值
- if (count($son_order_key) == 0) {
- $son_order_key = array_keys($son_order_val);
- }
- #endregion
-
- #region run_bus,run_prod,run_stock更新数据
- if (!isset($run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']])) {
- $run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']]['num'] = $vel['people_num'];//数量
- $run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']]['run_id'] = $vel['run_id'];//班次id
- $run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']]['bus_order_id'] = $seat_vel['bus_order_id'];//车次号
- $run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']]['ticket_id'] = $vel['ticket_id'];//票种id
- $run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']]['start_seq_id'] = $vel['start_seq_id'];//开始站顺序号
- $run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']]['end_seq_id'] = $vel['end_seq_id'];//结束站顺序号
- $run_bus_prod_stock_arr[$vel['run_id'] . '-' . $seat_vel['bus_order_id']]['seat_type'] = $vel['seat_type'];//座位类型
- }
- #endregion
-
- #region 更新run_x配置数据
- $run_x_one[$seat_key]['run_x_id'] = $seat_vel['run_x_id'];
- $run_x_one[$seat_key]['run_date'] = substr($vel['run_date'], 0, 7);
- $run_x_one[$seat_key]['run_date'] = str_replace('-', '', $run_x_one[$seat_key]['run_date']);//run_x表的日期后缀
- $run_x_one[$seat_key]['order_main_id'] = $son_order_id;//主订单号
- $run_x_one[$seat_key]['order_main_prod_id'] = $vel['line_id'];//线路id
- $run_x_one[$seat_key]['order_prod_id'] = $vel['ticket_id'];//票种id
- #endregion
-
- #region 子订单数组
- $son_order[] = $son_order_val;
- #endregion
- }
- #endregion
-
- #region 更新run_x配置数据
- $run_x_arr[$key] = $run_x_one;
- #endregion
-
- $parent_order_id = $son_order_id + 1;
-
- #region 主订单数组
- $main_order[] = $main_order_val;
- #endregion
- }
- #endregion
-
- $unique_id = $son_order_id;//唯一主键
-
- #region 主支付记录数据数组
- foreach ($main_order_id as $key => $vel) {
- #region 主支付记录
- $pay_main_one = [
- 'ID' => $pay_main_id,
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'PAY_TOTAL' => $single_price,
- 'ORDER_ID' => $vel,
- ];
- #endregion
-
- $pay_main_arr[] = $pay_main_one;//主支付记录数组
-
- #region 主支付记录key值
- if (count($pay_main_key) == 0) {
- $pay_main_key = array_keys($pay_main_one);
- }
- #endregion
- }
- #endregion
-
- $transaction = Yii::$app->db->beginTransaction();
- try {
- #region 1.占座 更新run_x表
- foreach ($run_x_arr as $run_x_key => $run_x_vel) {
- foreach ($run_x_vel as $key => $vel) {
- $update_sql = 'update run_' . $vel['run_date'] . '
- set order_main_id = ' . $vel['order_main_id'] . ',
- order_main_prod_id = ' . $vel['order_main_prod_id'] . ',
- order_prod_id = ' . $vel['order_prod_id'] . ',
- seat_status = 2,
- order_lock_user_id = ' . $order_info_arr['user_id'] . ',
- order_lock_time = \'' . date('Y-m-d H:i:s') . '\'
- where id in (' . $vel['run_x_id'] . ')';
- $res = Yii::$app->db->createCommand($update_sql)->execute();
- if (!$res) {
- throw new Exception('占位失败');
- }
- }
- }
- #endregion
-
- #region 2.插入主订单
- $res = Yii::$app->db->createCommand()->batchInsert(OrderMain::tableName(), $main_order_key, $main_order)->execute();
- if (!$res) {
- throw new Exception('主订单提交失败');
- }
- #endregion
-
- #region 3.插入子订单
- $res = Yii::$app->db->createCommand()->batchInsert(OrderMain::tableName(), $son_order_key, $son_order)->execute();
- if (!$res) {
- throw new Exception('子订单提交失败');
- }
- #endregion
-
- #region 4.更新run_prod,run_bus,run_stock
- foreach ($run_bus_prod_stock_arr as $key => $vel) {
- #region (1).更新run_prod
- $update_value = [
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT+' . $vel['num']),
- ];
- $update_where = [
- 'and',
- ['=', 'run_id', $vel['run_id']],
- ['=', 'prod_id', $vel['ticket_id']],
- ['=', 'cancel_flag', 0],
- ];
- $res = RunProd::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新run_prod失败');
- }
- #endregion
-
- #region (2).更新run_bus
- $update_value = [
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT+' . $vel['num']),
- ];
- $update_where = [
- 'and',
- ['=', 'run_id', $vel['run_id']],
- ['=', 'bus_order_id', $vel['bus_order_id']],
- ['=', 'cancel_flag', 0],
- ];
- $res = RunBus::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新run_bus失败');
- }
- #endregion
-
- #region (3).更新run_stock
- $update_value = [
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT+' . $vel['num']),
- ];
- $update_where = [
- 'and',
- ['=', 'run_id', $vel['run_id']],
- ['>=', 'seq_id', $vel['start_seq_id']],
- ['<', 'seq_id', $vel['end_seq_id']],
- ['=', 'seat_type', $vel['seat_type']],
- ['=', 'cancel_flag', 0],
- ];
- $res = RunStock::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新run_stock失败');
- }
- #endregion
- }
- #endregion
- //==================这里加判断,只有是已支付状态,才插入支付记录=============
- // if($order_info_arr['order_pay_status']==1){
- #region 5.插入主支付记录
- $res = Yii::$app->db->createCommand()->batchInsert(OrderPayMain::tableName(), $pay_main_key, $pay_main_arr)->execute();
- if (!$res) {
- throw new Exception('插入主支付记录失败');
- }
- #endregion
-
- #region 6.插入支付明细
- $order_pay_detail = new OrderPayDetail();
- $order_pay_detail->attributes = [
- 'ID' => $pay_main_id,
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'PAY_MAIN_ID' => $pay_main_id,
- 'PAY_TYPE_ID_1' => $order_info_arr['pay_type'],
- 'PAY_MONEY' => $order_price,
- ];
- $res = $order_pay_detail->insert();
- if (!$res) {
- throw new Exception('插入支付明细失败');
- }
- #endregion
- // }
-
-
- /*#region 7.更新唯一键值
- $res = BaseUniqueId2::updateAll(['UNIQUE_ID' => $unique_id], ['id' => 1]);
- if (!$res) {
- throw new Exception('更新唯一键值失败');
- }
- #endregion*/
-
- #region 8.如果是往返 建立往返关系
- if (count($main_order_id) == 2) {
- $to_from = new ToFrom();
- $to_from->attributes = [
- 'to_orderid' => $main_order_id[0],
- 'back_orderid' => $main_order_id[1],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- ];
- $res = $to_from->insert();
- if (!$res) {
- throw new Exception('建立往返关系失败');
- }
- }
- #endregion
-
- #region 9.插入酒店门票价格
- if ($order_append_arr['gate_price'] != 0 || $order_append_arr['hotel_price'] != 0) {
- $order_extra_info = new OrderExtraInfo();
- $order_extra_info->attributes = [
- 'order_id' => $main_order_id[0],
- 'hotel_price' => $order_append_arr['hotel_price'],
- 'gate_price' => $order_append_arr['gate_price'],
- ];
- $res = $order_extra_info->insert();
- if (!$res) {
- throw new Exception('酒店门票价格提交失败' . serialize($order_extra_info->getErrors()));
- }
- }
- #endregion
-
- #region 10.插入日志
- $order_run_time = array();
- $opera_time = date('Y-m-d H:i:s');
- foreach ($prod_list as $key => $vel) {
- $order_opera_log = new OrderOperaLog();
- $order_opera_log->attributes = [
- 'order_id' => $vel['order_id'],
- 'opera_user_id' => $order_info_arr['user_id'],
- 'opera_type' => 1,
- 'opera_time' => $opera_time,
- 'opera_detail' => '创建订单,出发日期' . $vel['run_date'] . ',订单渠道' . $order_info_arr['org_name'] . ',单价' . $vel['order_price'] . ',总额' . $vel['total_price'] . ',联系人信息:' . $customer_info_arr['customer_name'] . ',' . $customer_info_arr['customer_mobile'] . ',' . $customer_info_arr['customer_id_no'] . ',备注信息:' . $customer_info_arr['customer_memo'],
- 'member_id' => $order_info_arr['member_id'],
- 'opera_platform' => '统一下单',
- ];
- $order_run_time[$vel['order_id']] = $vel['run_date'];
- $res = $order_opera_log->insert();
- if (!$res) {
- throw new Exception('插入日志失败');
- }
- }
- #endregion
- $transaction->commit();
-
- #region 11.发送短信
- if ($order_info_arr['order_pay_status'] == 1 && $is_send_msg == 1) {
- foreach ($main_order_id as $key => $vel) {
- //这里对发送短信时间做一个判断,满足条件的才发送短信
- $time_diff = $this->get_time_diff($vel);
- if ($time_diff >= 0) {
- $url = 'http://' . CS1_DOMAIN . '/api/msg/order-send-msg';
- $sendInfo['order_id'] = $vel;
- $sendInfo['msg_type'] = 'cs';
- Msg::httpRequest($url, $sendInfo);
- }
- }
- }
- #endregion
-
- #region 12.添加订单状态
- if ($order_info_arr['order_pay_status'] == 1) {
- //添加出票成功短信
- $tomorrow_day = date("Y-m-d", strtotime("+1 days"));
- $current_time = date("H:i");
-
- foreach ($main_order_id as $key => $vel) {
- $order_run_day = $order_run_time[$vel];
- //if( $order_run_day > $tomorrow_day || ( $order_run_day == $order_run_day && $current_time < "18:30" ) ) {
- $url = 'http://' . CS1_DOMAIN . '/api/msg/order-send-success-msg';
- $sendInfo['order_id'] = $vel;
- Msg::httpRequest($url, $sendInfo);
- //}
-
- $url = 'http://' . CS_DOMAIN . '/st-xm/Api/add_order_status_log.php';
- $post_data['order_id'] = $vel;
- if ($order_info_arr['order_pay_status'] == 1) {
- $post_data['order_status'] = '451,452,453';
- } else {
- $post_data['order_status'] = '451';
- }
- Msg::httpRequest($url, $post_data);
- }
- }
- #endregion
-
- $result['code'] = '0';
- $result['info'] = '下单成功';
- $result['data'] = implode(',', $main_order_id);
- } catch (Exception $e) {
- # 回滚事务
- $transaction->rollBack();
- $result['code'] = '1';
- $result['info'] = '下单失败';
- $result['error'] = $e->getMessage();
- }
-
- return $result;
- }
-
- /**
- * Function Description:获取短信发送时间差(巴士班次时间-当前时间)
- * Function Name: get_time_diff
- * @param int $order_id 巴士主订单
- *
- * @return mixed
- *
- * @author 温依莅
- */
- public function get_time_diff($order_id)
- {
- $now = time();
- //$sql="select b.run_date,b.RUN_MINUTES,(UNIX_TIMESTAMP(b.run_date)+b.run_minutes*60) as stamp from order_main a left join run_main b on a.run_id=b.run_id where a.PARENT_ORDER_ID=$order_id limit 1";
- //$sql = "select b.run_date,b.RUN_MINUTES,(UNIX_TIMESTAMP(b.run_date)) as stamp from order_main a left join run_main b on a.run_id=b.run_id where a.PARENT_ORDER_ID=$order_id limit 1";
- $res = OrderMain::find()->select([
- 'b.run_date',
- 'b.run_minutes',
- 'stamp' => new Expression('UNIX_TIMESTAMP(b.run_date)'),
- ])->from('order_main a')
- ->leftJoin('run_main b', 'a.run_id=b.run_id')
- ->where(['a.parent_order_id' => $order_id])
- ->asArray()
- ->one();
- $run_stamp = $res['stamp'];
- return ($run_stamp + 3600 * 24) - $now;
- }
-
- /**
- * Function Description:获取订单数据
- * Function Name: getOrderInfoArray
- * @param string $order_info_str 订单基础信息{下单用户,会员号,渠道id,渠道订单号,是否自动退票(0否1是),支付方式(授信275),是否支付(0否1是),业务员}
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getOrderInfoArray($order_info_str)
- {
- $order_info_str = substr($order_info_str, 1, -1);
- $order_info_arr = explode(',', $order_info_str);
-
- $result['user_id'] = (!isset($order_info_arr[0]) || empty($order_info_arr[0])) ? 1 : $order_info_arr[0];//下单用户id
- $result['member_id'] = (!isset($order_info_arr[1]) || empty($order_info_arr[1])) ? 0 : $order_info_arr[1];//会员id
- $result['outside_sale_org_id'] = (!isset($order_info_arr[2]) || empty($order_info_arr[2])) ? 0 : $order_info_arr[2];//外部下单id
- $result['outside_sale_order_no'] = (!isset($order_info_arr[3]) || empty($order_info_arr[3])) ? '' : $order_info_arr[3];//外部下单号
- $result['order_book_status'] = (!isset($order_info_arr[4]) || $order_info_arr[4] === '') ? 1 : $order_info_arr[4];//订单预订状态
- $result['pay_type'] = (!isset($order_info_arr[5]) || empty($order_info_arr[5])) ? 275 : $order_info_arr[5];//支付方式(授信,微信)
- $result['order_pay_status'] = (!isset($order_info_arr[6]) || empty($order_info_arr[6])) ? 0 : $order_info_arr[6];//是否支付
- $result['sales_man'] = (!isset($order_info_arr[7]) || empty($order_info_arr[7])) ? '' : $order_info_arr[7];//业务员
-
-
- $supplier_info = BaseSupplier::find()->select('sales_man,supplier_name')->where(['id' => $result['outside_sale_org_id']])->asArray()->one();
- if ($result['sales_man'] == '') {
- $result['sales_man'] = empty($supplier_info['sales_man']) ? '' : $supplier_info['sales_man'];
- }
- $result['org_name'] = empty($supplier_info['supplier_name']) ? '' : $supplier_info['supplier_name'];
-
- $result['order_status'] = $result['order_pay_status'] == 0 ? 145 : 146;
-
- return $result;
- }
-
- /**
- * Function Description:获取乘客信息
- * Function Name: getCustomerInfoArray
- * @param string $customer_info_str 顾客信息,格式为{联系人,联系电话,z证件类型,联系人身份证,备注}
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getCustomerInfoArray($customer_info_str)
- {
- $customer_info_str = substr($customer_info_str, 1, -1);
- $customer_info_arr = explode(',', $customer_info_str);
-
- $result['customer_name'] = (!isset($customer_info_arr[0]) || empty($customer_info_arr[0])) ? '' : $customer_info_arr[0];//乘客姓名
- $result['customer_mobile'] = (!isset($customer_info_arr[1]) || empty($customer_info_arr[1])) ? '' : $customer_info_arr[1];//乘客电话
- $result['customer_id_type'] = (!isset($customer_info_arr[2]) || empty($customer_info_arr[2])) ? 150 : $customer_info_arr[2];//乘客证件类型
- $result['customer_id_no'] = (!isset($customer_info_arr[3]) || empty($customer_info_arr[3])) ? '' : $customer_info_arr[3];//乘客证件号
- $result['customer_memo'] = (!isset($customer_info_arr[4]) || empty($customer_info_arr[4])) ? '' : $customer_info_arr[4];//乘客备注
-
- return $result;
- }
-
- /**
- * Function Description:订单附加产品
- * Function Name: getOrderAppendArray
- * @param string $order_append_str 订单附加产品,格式为{门票价格,酒店价格}
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getOrderAppendArray($order_append_str)
- {
- $order_append_str = substr($order_append_str, 1, -1);
- $order_append_arr = explode(',', $order_append_str);
-
- $result['gate_price'] = (!isset($order_append_arr[0]) || empty($order_append_arr[0])) ? '0' : $order_append_arr[0];//门票价格
- $result['hotel_price'] = (!isset($order_append_arr[1]) || empty($order_append_arr[1])) ? '0' : $order_append_arr[1];//酒店价格
- return $result;
- }
-
- /**
- * Function Description:获取代收价
- * Function Name: getBusProductListReceiver
- * @param array $prod_list 产品列表
- * @param string $receiver_value_str 代收信息
- * @param array $prod_arr 产品简易数据
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getBusProductListReceiver($prod_list, $receiver_value_str, $prod_arr)
- {
- $result = [];
-
- $receiver_value_str = substr($receiver_value_str, 1, -1);
- $receiver_value_arr = explode(',', $receiver_value_str);//代收价格信息
-
- $receiver_value = (!isset($receiver_value_arr[0]) || empty($receiver_value_arr[0])) ? 0 : $receiver_value_arr[0];//代收单价
- $total_receiver_value = (!isset($receiver_value_arr[1]) || empty($receiver_value_arr[1])) ? 0 : $receiver_value_arr[1];//代收总价
-
- $receiver_value = $receiver_value / count($prod_list);
- $total_receiver_value = $total_receiver_value / count($prod_list);
-
- //将订单单价,人数,总价,往返标志,代收单价,代收总价放入产品列表中
- foreach ($prod_list as $key => $vel) {
- if ($total_receiver_value != 0) {
- $prod_list[$key]['total_receiver_value'] = round($total_receiver_value, 2);
- $prod_list[$key]['receiver_value'] = round($total_receiver_value / $prod_arr[$key]['num'], 2);
- } else {
- $prod_list[$key]['total_receiver_value'] = round($receiver_value * $prod_arr[$key]['num'], 2);
- $prod_list[$key]['receiver_value'] = round($receiver_value, 2);
- }
- $prod_list[$key]['order_price'] = $prod_arr[$key]['price'];
- $prod_list[$key]['total_price'] = $prod_arr[$key]['price'] * $prod_arr[$key]['num'];
- $prod_list[$key]['people_num'] = $prod_arr[$key]['num'];
- $prod_list[$key]['if_back'] = $prod_arr[$key]['if_back'];
- }
-
- //将产品安往返排序
- foreach ($prod_arr as $key => $vel) {
- $result[$key] = $prod_list[$key];
- }
-
- return $result;
-
- }
-
- /**
- * Function Description:获取订单所属线路
- * Function Name: getOrderLineIdCount
- * @param array $order_id_arr 订单id数组
- *
- * @return array|null|ActiveRecord
- *
- * @author 张帅
- */
- public function getOrderLineIdCount($order_id_arr)
- {
- $result = self::find()
- ->select([
- 'order_id',
- 'line_id' => 'parent_prod_id',//线路id
- 'order_count' => "substring_index(order_description,'|',-1)",//人数
- 'order_valid_status',//订单是否有效
- 'line_type' => OperaLine::find()->select('line_type')->where('line_id = m.parent_prod_id')->limit(1),//线路类型
- ])
- ->from(self::tableName() . ' as m')
- ->where([
- 'and',
- ['in', 'order_id', $order_id_arr],
- ['=', 'parent_order_id', 0],
- ])
- ->indexBy('order_id')
- ->asArray()->all();
-
- return $result;
- }
-
- /**
- * Function Description:获取订单班次信息
- * Function Name: getOrderRunInfo
- * @param array $order_id_arr 订单id数组
- *
- * @return array|\yii\db\ActiveRecord[]
- *
- * @author 张帅
- */
- public function getOrderRunInfo($order_id_arr)
- {
- $result = self::find()
- ->select([
- 'run_id',//班次id
- 'run_date',//班次日期
- 'bus_order_id' => "group_concat(distinct run_bus_order_id)",//车次号
- 'start_seq_id' => 'prod_start_station_seq_id',//开始站顺序号
- 'end_seq_id' => 'prod_end_station_seq_id',//结束站站顺序号
- 'order_num' => "count(*)",//订单人数
- 'ticket_id' => 'prod_id',//票种id
- 'order_id' => "group_concat(order_id)",//订单id
- 'seat_type' => 'run_bus_seat_type',//座位类型
- ])
- ->where([
- 'and',
- ['in', 'parent_order_id', $order_id_arr],
- ['=', 'cancel_flag', 0],
- ])
- ->groupBy([
- 'run_id',
- 'start_seq_id',
- 'end_seq_id',
- ])
- ->indexBy('run_id')
- ->asArray()->all();
-
- return $result;
- }
-
- /**
- * Function Description:取消单一线路订单
- * Function Name: cancelSingleBusOrder
- * @param array $order_id_arr 订单号
- * @param array $order_run_info 订单班次信息
- * @param int $user_id 操作用户
- * @param string $cancel_reason 退票原因
- * @param string $opera_platform 统一退票
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function cancelSingleBusOrder($order_id_arr, $order_run_info, $user_id, $cancel_reason, $opera_platform = '统一退票')
- {
- $transaction = Yii::$app->db->beginTransaction();
- try {
- #region 1.更新订单信息
- $update_value = [
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'ORDER_STATUS' => 148,
- 'ORDER_VALID_STATUS' => 0,
- 'ORDER_DISABLE_USER_ID' => $user_id,
- 'ORDER_DISABLE_TIME' => date('Y-m-d H:i:s'),
- ];
- $update_where = [
- 'or',
- ['in', 'order_id', $order_id_arr],
- ['in', 'parent_order_id', $order_id_arr],
- ];
- $res = self::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新订单信息失败');
- }
- #endregion
-
- #region 2.更新run_x
- foreach ($order_run_info as $key => $vel) {
- $run_x_date = substr($vel['run_date'], 0, 7);
- $run_x_date = str_replace('-', '', $run_x_date);
- $update_sql = 'update run_' . $run_x_date . '
- set order_main_id = 0,
- allow_select_seat=156,
- order_main_prod_id = 0,
- order_prod_id = 0,
- seat_status = 0,
- order_lock_user_id = 0,
- order_lock_time = \'' . date('Y-m-d H:i:s') . '\'
- where run_id = ' . $vel['run_id'] . '
- and order_main_id in (' . $vel['order_id'] . ')';
- $res = Yii::$app->db->createCommand($update_sql)->execute();
- if (!$res) {
- throw new Exception('更新run_x失败');
- }
- }
- #endregion
-
- #region 3.更新run_prod,run_bus,run_stock
- foreach ($order_run_info as $key => $vel) {
- #region (1).更新run_prod
- $update_value = [
- 'UPDATE_USER_ID' => $user_id,
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT-' . $vel['order_num']),
- ];
- $update_where = [
- 'and',
- ['=', 'run_id', $vel['run_id']],
- ['=', 'prod_id', $vel['ticket_id']],
- //['=', 'cancel_flag', 0],
- ];
- $res = RunProd::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新run_prod失败');
- }
- #endregion
-
- #region (2).更新run_bus
- $update_value = [
- 'UPDATE_USER_ID' => $user_id,
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT-' . $vel['order_num']),
- ];
- $update_where = [
- 'and',
- ['=', 'run_id', $vel['run_id']],
- ['=', 'bus_order_id', $vel['bus_order_id']],
- ['=', 'cancel_flag', 0],
- ];
- $res = RunBus::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新run_bus失败');
- }
- #endregion
-
- #region (3).更新run_stock
- $update_value = [
- 'UPDATE_USER_ID' => $user_id,
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT-' . $vel['order_num']),
- ];
- $update_where = [
- 'and',
- ['=', 'run_id', $vel['run_id']],
- ['>=', 'seq_id', $vel['start_seq_id']],
- ['<', 'seq_id', $vel['end_seq_id']],
- ['=', 'seat_type', $vel['seat_type']],
- ['=', 'cancel_flag', 0],
- ];
- $res = RunStock::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新run_stock失败');
- }
- #endregion
- }
- #endregion
-
- #region 4.订单重排
- // foreach ($order_id_arr as $key => $vel) {
- // $url = 'http://' . CS_DOMAIN . '/api1.0/run_x_reorder.php';
- // $post_data['order_id'] = $vel;
- // Msg::httpRequest($url, $post_data);
- // }
- #endregion
-
- #region 5.上级渠道订单的取消
- $order_sale_path = self::find()->select('sale_path')->from(self::tableName())->where(['in', 'order_id', $order_id_arr])
- ->asArray()->all();
- $ori_order_id = $order_id_arr;
- foreach ($order_sale_path as $val) {
- if ($val['sale_path'] != '') {
- $tmp_update_value = [
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'ORDER_STATUS' => 148,
- 'ORDER_VALID_STATUS' => 0,
- 'ORDER_DISABLE_USER_ID' => $user_id,
- 'ORDER_DISABLE_TIME' => date('Y-m-d H:i:s'),
- ];
- $tmp_order_arr = explode(',', $val['sale_path']);
- foreach ($tmp_order_arr as $v) {
- $order_id_arr[$v] = $v;
- }
- $tmp_update_where = [
- 'or',
- ['in', 'order_id', $tmp_order_arr],
- ['in', 'parent_order_id', $tmp_order_arr],
- ];
- $res = self::updateAll($tmp_update_value, $tmp_update_where);
- if (!$res) {
- throw new Exception('更新订单信息失败');
- }
- }
- }
- #endregion
-
- #region 6.插入日志
- $order_opera_log = new OrderOperaLog();
- foreach ($order_id_arr as $key => $vel) {
- $order_opera_log_tmp = clone $order_opera_log;
- $log_user_id = in_array($vel, $ori_order_id) ? $user_id : 2;//如果是非终端订单,操作用户记录为2-系统自动
- $order_opera_log_tmp->attributes = [
- 'order_id' => $vel,
- 'opera_user_id' => $log_user_id,
- 'opera_type' => 2,
- 'opera_time' => date('Y-m-d H:i:s'),
- 'opera_detail' => '取消原因:' . $cancel_reason,
- 'opera_platform' => $opera_platform,
- ];
- $res = $order_opera_log_tmp->insert();
- if (!$res) {
- throw new Exception('插入日志失败');
- }
- }
- #endregion
- $transaction->commit();
-
- #region 7.添加订单状态
- foreach ($order_id_arr as $key => $vel) {
- $url = 'http://' . CS_DOMAIN . '/st-xm/Api/add_order_status_log.php';
- $post_data['order_id'] = $vel;
- $post_data['order_status'] = '460';
- Msg::httpRequest($url, $post_data);
- }
- #endregion
-
-
- $result['code'] = '0';
- $result['info'] = '退票成功';
- $result['data'] = implode(',', $order_id_arr);
- } catch (Exception $e) {
- # 回滚事务
- $result['code'] = '1';
- $result['info'] = '退票失败';
- $result['error'] = $e->getMessage();
- }
-
- return $result;
- }
-
-
- /**
- * Function Description:从订单中获取所有需要修改成本的父子订单
- * Function Name: getUpdateCostOrder
- * @param array $bus_cost_count bus_cost
- *
- * @return array|bool
- *
- * @author 张帅
- */
- public function getUpdateCostOrder($bus_cost_count)
- {
- #region andWhere
- $and_where = ['or'];
- foreach ($bus_cost_count as $key => $vel) {
- $and_where[] = [
- 'and',
- ['=', 'run_id', $vel['run_id']],
- ['=', 'run_bus_order_id', $vel['bus_order_id']],
- // comment by qius on 20170531 ['=', 'main_corp_id', $vel['main_corp_id']],
- ];
- }
- #endregion
-
- #region 根据车次获取子订单列表
- $son_order_list = self::find()
- ->select([
- 'order_id' => "group_concat(order_id)",//子订单id序列
- 'people_sum' => "count(order_id)",//总人数
- 'parent_order_id',//父订单id
- 'run_id',//班次id
- 'bus_order_id' => 'run_bus_order_id',//车次id
- ])
- ->where([
- 'and',
- 'main_corp_id = source_main_corp_id',
- ['=', 'cancel_flag', 0],
- ['!=', 'parent_order_id', 0],
- ['in', 'order_status', [146, 147]],
- ['=', 'order_valid_status', 1],
- ['in', 'order_prod_type', [82, 369]],
- //['=', 'main_corp_id', 'source_main_corp_id'],//只有线路运营主体的订单才会按照用车成本来均摊订单成本
- ])
- ->andWhere($and_where)
- ->groupBy(['parent_order_id', 'run_id', 'bus_order_id'])
- ->asArray()->all();
- #endregion
-
- if (count($son_order_list) == 0) {
- return false;
- }
-
-
- $result = [];//返回数组
- $main_order_list = [];//主订单修改数组
-
- #region 将数据处理成易修改模式
- foreach ($son_order_list as $key => $vel) {
- $son_order_list[$key]['base_price'] = $bus_cost_count[$vel['run_id'] . '-' . $vel['bus_order_id']]['base_price'];
- if (!isset($main_order_list[$vel['parent_order_id']])) {
- $main_order_list[$vel['parent_order_id']]['order_id'] = $vel['parent_order_id'];
- $main_order_list[$vel['parent_order_id']]['base_price'] = 0;
- }
- $main_order_list[$vel['parent_order_id']]['base_price'] += $son_order_list[$key]['base_price'] * $vel['people_sum'];
- }
- #endregion
- $result['son_order_list'] = $son_order_list;//子订单数据
- $result['main_order_list'] = $main_order_list;//父订单数据
- $sum = 0;
- foreach ($son_order_list as $k => $v) {
- $sum += $v['people_sum'];
- }
- return $result;
- }
-
- /**
- * Function Description:修改订单成本价格
- * Function Name: updateOrderBasePrice
- * @param array $order_info 待修改的订单信息
- *
- * @return bool
- *
- * @author 张帅
- */
- public function updateOrderBasePrice($order_info)
- {
- $son_order_list = $order_info['son_order_list'];//子订单待修改数据
- $main_order_list = $order_info['main_order_list'];//父订单待修改数据
-
- $transaction = Yii::$app->db->beginTransaction();
- try {
- #region 修改子订单
- foreach ($son_order_list as $key => $vel) {
- $update_value = ['BASE_PRICE' => $vel['base_price']];
- $update_where = [
- 'and',
- ['in', 'order_id', explode(',', $vel['order_id'])],
- ];
- self::updateAll($update_value, $update_where);
- }
- #endregion
-
- #region 修改父订单
- foreach ($main_order_list as $key => $vel) {
- $update_value = ['BASE_PRICE' => $vel['base_price']];
- $update_where = ['order_id' => $vel['order_id']];
- self::updateAll($update_value, $update_where);
- }
- #endregion
-
- $transaction->commit();
-
- } catch (Exception $e) {
- # 回滚事务
- return false;
- }
-
- return true;
- }
-
- /**
- * Function Description:自动计算订单佣金(先暂时对应直连OTA)
- * Function Name: updateOrderBasePrice
- * @param bool /string $start_date
- *
- * @return bool
- *
- * @author Redstop
- */
- public function updateOrderComission($start_date = false)
- {
- if ($start_date == false) {
- //默认更新过去一个月
- $start_date = date("Y-m-d", strtotime("-2 months"));
- }
- // $transaction = Yii::$app->db->beginTransaction();
- // try {
- // #region
- // $update_sql = '' . " update order_main set TOTAL_COMMISSION = ORDER_PRICE * 8 / 100 where ORDER_PROD_TYPE NOT IN (25,26) AND CREATE_TIME >= '{$start_date} 00:00:00' AND ORDER_STATUS IN (146,147) AND CANCEL_FLAG = 0 AND ORDER_PRICE > 0 AND OUTSIDE_SALE_ORG_ID IN (17,28,76,1310) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // $update_sql = '' . " update order_title set order_title_all_affi = order_title_all_price * 8 / 100 where create_time >= '{$start_date} 00:00:00' AND order_title_status IN (2,3) AND cancel_flag = 0 AND order_title_all_price > 0 AND outside_sale_org_id IN (17,28,76,1310) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // #endregion
- //
- // #region
- // $update_sql = '' . " update order_main set TOTAL_COMMISSION = ORDER_PRICE * 7 / 100 where ORDER_PROD_TYPE NOT IN (25,26) AND CREATE_TIME >= '{$start_date} 00:00:00' AND ORDER_STATUS IN (146,147) AND CANCEL_FLAG = 0 AND ORDER_PRICE > 0 AND OUTSIDE_SALE_ORG_ID IN (80) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // $update_sql = '' . " update order_title set order_title_all_affi = order_title_all_price * 7 / 100 where create_time >= '{$start_date} 00:00:00' AND order_title_status IN (2,3) AND cancel_flag = 0 AND order_title_all_price > 0 AND outside_sale_org_id IN (80) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // #endregion
- //
- // #region
- // $update_sql = '' . " update order_main set TOTAL_COMMISSION = ORDER_PRICE * 6 / 100 where ORDER_PROD_TYPE NOT IN (25,26) AND CREATE_TIME >= '{$start_date} 00:00:00' AND ORDER_STATUS IN (146,147) AND CANCEL_FLAG = 0 AND ORDER_PRICE > 0 AND OUTSIDE_SALE_ORG_ID IN (11) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // $update_sql = '' . " update order_title set order_title_all_affi = order_title_all_price * 6 / 100 where create_time >= '{$start_date} 00:00:00' AND order_title_status IN (2,3) AND cancel_flag = 0 AND order_title_all_price > 0 AND outside_sale_org_id IN (11) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // #endregion
- //
- // #region
- // $update_sql = '' . " update order_main set TOTAL_COMMISSION = ORDER_PRICE * 5.5 / 100 where ORDER_PROD_TYPE NOT IN (25,26) AND CREATE_TIME >= '{$start_date} 00:00:00' AND ORDER_STATUS IN (146,147) AND CANCEL_FLAG = 0 AND ORDER_PRICE > 0 AND OUTSIDE_SALE_ORG_ID IN (12) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // $update_sql = '' . " update order_title set order_title_all_affi = order_title_all_price * 5.5 / 100 where create_time >= '{$start_date} 00:00:00' AND order_title_status IN (2,3) AND cancel_flag = 0 AND order_title_all_price > 0 AND outside_sale_org_id IN (12) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // #endregion
- //
- // #region
- // $update_sql = '' . " update order_main set TOTAL_COMMISSION = ORDER_PRICE * 5 / 100 where ORDER_PROD_TYPE NOT IN (25,26) AND CREATE_TIME >= '{$start_date} 00:00:00' AND ORDER_STATUS IN (146,147) AND CANCEL_FLAG = 0 AND ORDER_PRICE > 0 AND OUTSIDE_SALE_ORG_ID IN (128,149) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // $update_sql = '' . " update order_title set order_title_all_affi = order_title_all_price * 5 / 100 where create_time >= '{$start_date} 00:00:00' AND order_title_status IN (2,3) AND cancel_flag = 0 AND order_title_all_price > 0 AND outside_sale_org_id IN (128,149) ";
- // Yii::$app->db->createCommand($update_sql)->execute();
- // #endregion
- // $transaction->commit();
- //
- // } catch (Exception $e) {
- // # 回滚事务
- // return false;
- // }
- //
- // return true;
- //根据返佣规则返佣
- $select = ['a.id', 'b.back_commision_type', 'b.back_commision_method', 'b.back_percent', 'b.back_value'];
- $where = ['and'];
- $where[] = ['=', 'b.PARENT_TYPE', 310];
- $where[] = ['>=', 'a.CREATE_TIME', $start_date . ' 00:00:00'];
- $where[] = ['=', 'b.COMMISION_FLAG', 1];
- $where[] = ['not in', 'a.ORDER_PROD_TYPE', [25, 26]];
- $a = self::find()->select($select)->from(self::tableName() . ' a')->leftJoin(BaseSupplierSale::tableName() . ' b', 'a.OUTSIDE_SALE_ORG_ID = b.SUPPLIER_ID and a.cancel_flag = 0 and b.cancel_flag = 0')->where($where)->distinct()->asArray()->all();
- $transaction = Yii::$app->db->beginTransaction();
- try {
- //循环修改
- foreach ($a as $v) {
- if ($v['back_commision_type'] == 306) {
- //如果是固定金额返现
- if ($v['back_commision_method'] == 309) {
- $id = $v['id'];
- $back_value = $v['back_value'];
- $obj = self::findOne($id);
- $obj->TOTAL_COMMISSION = $back_value;
- $obj->save();
- }
- //如果是按照比例返现
- if ($v['back_commision_method'] == 308) {
- $id = $v['id'];
- $back_percent = $v['back_percent'];
- $obj = self::findOne($id);
- $obj->TOTAL_COMMISSION = round(($obj->ORDER_PRICE * $back_percent / 100), 2);
- $obj->save();
- }
- }
- }
- $transaction->commit();
- return true;
- } catch (Exception $e) {
- # 回滚事务
- $transaction->rollBack();
- return false;
- }
- }
-
- /**
- * Function Description:修改成本价格
- * Function Name: updateBasePrice
- * @param int $order_id 订单id
- * @param int $people_num 人数
- * @param double $base_price 订单价格
- *
- * @return bool
- *
- * @author 张帅
- */
- public function updateBasePrice($order_id, $people_num, $base_price)
- {
- $total__base_price = round($base_price * $people_num, 2);
- $transaction = Yii::$app->db->beginTransaction();
- try {
- #region 修改子订单
- $update_value = ['BASE_PRICE' => $base_price];
- $update_where = [
- 'and',
- ['=', 'parent_order_id', $order_id],
- ];
- self::updateAll($update_value, $update_where);
- #endregion
-
- #region 修改父订单
- $main_order_one = self::findOne(['order_id' => $order_id]);
- $main_order_one->BASE_PRICE = $total__base_price;
- $main_order_one->update();
- #endregion
- $transaction->commit();
-
- } catch (Exception $e) {
- # 回滚事务
- return false;
- }
-
- return true;
- }
-
- /**
- * Function Description:获取票种代收价
- * Function Name: getTicketProductListReceiver
- * @param array $prod_list 产品列表
- * @param string $receiver_value_str 代收信息
- *
- * @return array
- *
- * @author 张帅
- */
- public function getTicketProductListReceiver($prod_list, $receiver_value_str)
- {
- $result = [];
- $receiver_value_str = substr($receiver_value_str, 1, -1);
- $receiver_value_arr = explode(',', $receiver_value_str);//代收价格信息
-
- $receiver_value = (!isset($receiver_value_arr[0]) || empty($receiver_value_arr[0])) ? 0 : $receiver_value_arr[0];//代收单价
- $total_receiver_value = (!isset($receiver_value_arr[1]) || empty($receiver_value_arr[1])) ? 0 : $receiver_value_arr[1];//代收总价
-
- #region 获取代收单价 订单描述 订单总人数 订单总价 订单总成本
- $base_price = 0;//订单总成本
- $count_people_num = 0;//总人数
- $order_description = [];//订单描述
- $order_price = 0;//订单总价
- foreach ($prod_list as $key => $vel) {
- $order_description[] = $vel['prod_name'] . ',' . date('Y-m-d', time()) . ',' . $vel['people_num'];//订单描述
- $count_people_num += $vel['people_num'];//订单总人数
- $order_price += $vel['order_price'] * $vel['people_num'];//订单总价
- $base_price += $vel['prod_price'] * $vel['people_num'];//订单总成本
- }
- $order_description[] = $count_people_num;
- $order_description = implode('|', $order_description);//订单描述
-
- if ($total_receiver_value != 0) {
- $receiver_value = $total_receiver_value / $count_people_num;
- } else {
- $total_receiver_value = $receiver_value * $count_people_num;
- }
-
- #endregion
-
- #region 代收单价,代收总价放入产品列表中
- foreach ($prod_list as $key => $vel) {
- $prod_list[$key]['receiver_value'] = round($receiver_value, 2);
- }
- #endregion
-
- $main_order_info = [
- 'receiver_value' => $total_receiver_value,
- 'people_num' => $count_people_num,
- 'order_description' => $order_description,
- 'order_price' => $order_price,
- 'base_price' => $base_price,
- ];
-
- $result['prod_list'] = $prod_list;
- $result['main_order_info'] = $main_order_info;
- return $result;
- }
-
- /**
- * Function Description:提交门票订单
- * Function Name: submitTicketOrder
- * @param array $main_prod 主产品
- * @param array $prod_list 产品列表
- * @param array $order_info_arr 订单的其他信息
- * @param array $customer_info_arr 乘客
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function submitTicketOrder($main_prod, $prod_list, $order_info_arr, $customer_info_arr)
- {
- #region 获取最大唯一值,先赋给支付id,然后递增
- $pay_main_id = BaseUniqueId2::find()->select('unique_id')->where(['id' => 1])->asArray()->one();
- $pay_main_id = $pay_main_id['unique_id'] + 1;
- $parent_order_id = $pay_main_id + 1;
- #endregion
-
- #region 提交订单操作数据库所需数据
- $son_order = [];//子订单数据
- $son_order_key = [];//提交子订单时所需key值
- #endregion
-
- #region 整理主订单数据
- $main_order = [//主订单数据
- 'ID' => $parent_order_id,
- 'MAIN_CREATE_USER_ID' => $order_info_arr['user_id'],//'代下单用户ID,BASE_USER.ID,用户A代替用户B下单,则MAIN_CREATE_USER_ID=A,CREATE_USER_ID=B',
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALE_ORG_ID' => 0,//'分销商机构ID',
- 'SALE_TOP_ORG_ID' => 0,//'下单组织机构所属一级机构ID',
- 'PROD_TOP_ORG_ID' => 0,//'产品所属一级机构ID',
- 'ORDER_ID' => $parent_order_id,
- 'ORDER_DESCRIPTION' => $main_prod['order_description'],//'最细颗粒度的订单描述',
- 'OUTSIDE_ORDER_NO' => $order_info_arr['outside_sale_order_no'],//'分销商订单编号',
- 'ORDER_VALID_STATUS' => 1,//'订单有效性状态,0失效订单、1有效订单',
- 'ORDER_BOOK_STATUS' => $order_info_arr['order_book_status'],//'订单预订状态,0非预订、1有时限、2永久锁位预订',
- 'PROD_START_STATION_TIME_MINUTES' => 0,
- 'ORDER_PAY_STATUS' => $order_info_arr['order_pay_status'],//'订单是否已支付,0未支付,1已支付',
- 'ORDER_PAY_MAIN_ID' => $pay_main_id,//'支付记录主ID,ORDER_PAY_MAIN.ID',
- 'ORDER_PAY_USER_ID' => $order_info_arr['user_id'],//'支付操作用户ID,BASE_USER.ID',
- 'ORDER_PAY_TIME' => date('Y-m-d H:i:s'),//'支付操作时间',
- 'PARENT_ORDER_ID' => 0,
- 'PROD_ID' => $main_prod['prod_id'],//产品id
- 'PROD_NAME' => $main_prod['prod_name'],//产品id
- 'PARENT_PROD_ID' => $main_prod['prod_id'],//产品id
- 'PARENT_PROD_NAME' => $main_prod['prod_name'],//产品id
- 'BASE_PRICE' => $main_prod['base_price'],//产品成本
- 'ORDER_PRICE' => $main_prod['order_price'],//'订单价格',
- 'ORDER_PROD_TYPE' => 311,//'订单类型',
- 'RUN_DATE' => $main_prod['run_date'],
- 'RUN_DATE_NUM' => (strtotime($main_prod['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24),//'班次首发日期参数,发车日期至2016-01-01天数,算法使用',
- 'CUSTOMER_NAME' => $customer_info_arr['customer_name'],//'客人姓名',
- 'CUSTOMER_SEX' => 1,//'客人性别,0女1男',
- 'CUSTOMER_MOBILE' => $customer_info_arr['customer_mobile'],//'客人手机',
- 'CUSTOMER_MEMO' => $customer_info_arr['customer_memo'],//'订单备注',
- 'CUSTOMER_ID_TYPE' => $customer_info_arr['customer_id_type'],
- 'CUSTOMER_ID_NO' => $customer_info_arr['customer_id_no'],
- 'MEMBER_ID' => $order_info_arr['member_id'],
- 'ORDER_STATUS' => $order_info_arr['order_status'],//'订单当前状态',
- 'IF_LAST_PROD' => 1,//'是否最细颗粒度的判断',
- 'ORDER_LEVEL' => 0,//'Order Level',
- 'OUTSIDE_SALE_ORG_ID' => $order_info_arr['outside_sale_org_id'],
- 'SALES_MAN' => $order_info_arr['sales_man'],
- 'RECEIVE_VALUE' => $main_prod['receiver_value'],
- 'PRINCIPAL_ID' => $main_prod['run_duty_id'],
- ];
-
- #endregion
-
- #region 获取子订单数据
- $son_order_id = $parent_order_id + 1;
- foreach ($prod_list as $key => $vel) {
- for ($i = 0; $i < $vel['people_num']; $i++) {
- #region 子订单数据
- $son_order_val = [
- 'ID' => $son_order_id,
- 'MAIN_CREATE_USER_ID' => $order_info_arr['user_id'],//'代下单用户ID,BASE_USER.ID,用户A代替用户B下单,则MAIN_CREATE_USER_ID=A,CREATE_USER_ID=B',
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALE_ORG_ID' => 0,//'分销商机构ID',
- 'SALE_TOP_ORG_ID' => 0,
- 'PROD_TOP_ORG_ID' => 0,
- 'ORDER_ID' => $son_order_id,
- 'OUTSIDE_ORDER_NO' => $order_info_arr['outside_sale_order_no'],//'分销商订单编号',
- 'ORDER_VALID_STATUS' => 1,//'订单有效性状态,0失效订单、1有效订单',
- 'ORDER_BOOK_STATUS' => $order_info_arr['order_book_status'],//'订单预订状态,0非预订、1有时限、2永久锁位预订',
- 'ORDER_PAY_STATUS' => $order_info_arr['order_pay_status'],//'订单是否已支付,0未支付,1已支付',
- 'ORDER_PAY_MAIN_ID' => $pay_main_id,//'支付记录主ID,ORDER_PAY_MAIN.ID',
- 'ORDER_PAY_USER_ID' => $order_info_arr['user_id'],//'支付操作用户ID,BASE_USER.ID',
- 'ORDER_PAY_TIME' => date('Y-m-d H:i:s'),//'支付操作时间',
- 'PARENT_ORDER_ID' => $parent_order_id,
- 'PROD_ID' => $vel['prod_id'],
- 'PARENT_PROD_ID' => $main_prod['prod_id'],
- 'PROD_NAME' => $vel['prod_name'],
- 'PARENT_PROD_NAME' => $main_prod['prod_name'],
- 'ORDER_PRICE' => $vel['order_price'],
- 'BASE_PRICE' => $vel['prod_price'],//产品成本
- 'ORDER_PROD_TYPE' => $vel['prod_type'],
- 'RUN_DATE' => $vel['run_date'],
- 'RUN_DATE_NUM' => (strtotime($vel['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24),//'班次首发日期参数,发车日期至2016-01-01天数,算法使用',
- 'RUN_TIME' => $vel['run_time'],
- 'PROD_START_STATION_TIME_MINUTES' => 0,
- 'CUSTOMER_NAME' => $customer_info_arr['customer_name'],//'客人姓名',
- 'CUSTOMER_SEX' => 1,//'客人性别,0女1男',
- 'CUSTOMER_MOBILE' => $customer_info_arr['customer_mobile'],//'客人手机',
- 'CUSTOMER_MEMO' => $customer_info_arr['customer_memo'],//'订单备注',
- 'CUSTOMER_ID_TYPE' => $customer_info_arr['customer_id_type'],
- 'CUSTOMER_ID_NO' => $customer_info_arr['customer_id_no'],
- 'MEMBER_ID' => $order_info_arr['member_id'],
- 'ORDER_STATUS' => $order_info_arr['order_status'],
- 'if_gift' => 0,//'是否是赠票,0不是赠票,1是赠票',
- 'ORDER_LEVEL' => 0,
- 'OUTSIDE_SALE_ORG_ID' => $order_info_arr['outside_sale_org_id'],
- 'SALES_MAN' => $order_info_arr['sales_man'],
- 'RECEIVE_VALUE' => $vel['receiver_value'],
- 'PRINCIPAL_ID' => $main_prod['run_duty_id'],
- ];
- #endregion
-
- #region 子订单key值
- if (count($son_order_key) == 0) {
- $son_order_key = array_keys($son_order_val);
- }
- #endregion
-
- #region 子订单数组
- $son_order[] = $son_order_val;
- #endregion
-
- $son_order_id++;
- }
- }
- #endregion
-
- $unique_id = $son_order_id;//唯一主键
-
- $transaction = Yii::$app->db->beginTransaction();
- try {
- #region 1.插入主订单
- $this->attributes = $main_order;
- $res = $this->insert();
- if (!$res) {
- throw new Exception('主订单提交失败');
- }
- #endregion
-
- #region 2.插入子订单
- $res = Yii::$app->db->createCommand()->batchInsert(OrderMain::tableName(), $son_order_key, $son_order)->execute();
- if (!$res) {
- throw new Exception('子订单提交失败');
- }
- #endregion
-
- #region 3.更新opera_product_run
- foreach ($prod_list as $key => $vel) {
- $update_value = [
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT+' . $vel['people_num']),
- ];
- $update_where = [
- 'and',
- ['=', 'prod_id', $vel['prod_id']],
- ['=', 'run_date', $vel['run_date']],
- ['=', 'cancel_flag', 0],
- ];
- $res = OperaProductRun::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新opera_product_run失败');
- }
- }
- #endregion
-
- #region 4.插入主支付记录
- $order_pay_main = new OrderPayMain();
- $order_pay_main->attributes = [
- 'ID' => $pay_main_id,
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'PAY_TOTAL' => $main_prod['order_price'],
- 'ORDER_ID' => $parent_order_id,
- ];
-
- $res = $order_pay_main->insert();
- if (!$res) {
- throw new Exception('插入主支付记录失败');
- }
- #endregion
-
- #region 5.插入支付明细
- $order_pay_detail = new OrderPayDetail();
- $order_pay_detail->attributes = [
- 'ID' => $pay_main_id,
- 'CREATE_USER_ID' => $order_info_arr['user_id'],
- 'CREATE_TIME' => date('Y-m-d H:i:s'),
- 'UPDATE_USER_ID' => $order_info_arr['user_id'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'PAY_MAIN_ID' => $pay_main_id,
- 'PAY_TYPE_ID_1' => $order_info_arr['pay_type'],
- 'PAY_MONEY' => $main_prod['order_price'],
- ];
- $res = $order_pay_detail->insert();
- if (!$res) {
- throw new Exception('插入支付明细失败');
- }
- #endregion
-
- #region 6.更新唯一键值
- $time = time() . rand(0, 999999);
- $res = BaseUniqueId2::updateAll(['UNIQUE_ID' => $unique_id, 'UPDATE_TIME' => $time], ['id' => 1]);
- if (!$res) {
- throw new Exception('更新唯一键值失败');
- }
- #endregion
-
- #region 7.插入日志
- $order_opera_log = new OrderOperaLog();
- $order_opera_log->attributes = [
- 'order_id' => $parent_order_id,
- 'opera_user_id' => $order_info_arr['user_id'],
- 'opera_type' => 1,
- 'opera_time' => date('Y-m-d H:i:s'),
- 'opera_detail' => '创建订单,出发日期' . $main_prod['run_date'] . ',订单渠道' . $order_info_arr['org_name'] . ',订单总金额' . $main_prod['order_price'] . ',联系人信息:' . $customer_info_arr['customer_name'] . ',' . $customer_info_arr['customer_mobile'] . ',' . $customer_info_arr['customer_id_no'] . ',备注信息:' . $customer_info_arr['customer_memo'],
- 'member_id' => $order_info_arr['member_id'],
- 'opera_platform' => '统一下单',
- ];
- $res = $order_opera_log->insert();
- if (!$res) {
- throw new Exception('插入日志失败');
- }
- #endregion
- $transaction->commit();
-
- //驴妈妈产品下单特殊处理--lmn
- $util = new Util();
- $util->LvmamaOrderCheck($parent_order_id);
- //智游宝门票下单
- $kxTicketUtil = new KxTicketUtil();
- $kxTicketUtil->OrderCheck($parent_order_id);
- $result['code'] = '0';
- $result['info'] = '下单成功';
- $result['data'] = $parent_order_id;
- } catch (Exception $e) {
- # 回滚事务
- $result['code'] = '1';
- $result['info'] = '下单失败';
- $result['error'] = $e->getMessage();
- }
-
- return $result;
- }
-
- /**
- * Function Description:获取门票订单数据
- * Function Name: getTicketOrderInfo
- * @param int $order_id 订单id
- *
- * @return array|ActiveRecord[]
- *
- * @author 张帅
- */
- public function getTicketOrderInfo($order_id)
- {
- $result = self::find()
- ->select([
- 'prod_id',//子票种id
- 'parent_prod_id',//父票种id
- 'order_num' => 'count(order_id)',//人数
- 'run_date',
- 'order_confirm_code', //渠道保险单号
- ])
- ->where([
- 'and',
- ['=', 'parent_order_id', $order_id],
- ['=', 'cancel_flag', 0],
- ['=', 'order_valid_status', 1],
- ['!=', 'order_status', [147, 148]],
- ])
- ->groupBy(['prod_id'])
- ->asArray()->all();
-
- return $result;
- }
-
- /**
- * Function Description:取消门票订单
- * Function Name: cancelTicketOrder
- * @param int $order_id 订单id
- * @param array $order_info 订单数据
- * @param int $user_id 用户id
- * @param string $cancel_reason 退票原因
- * @param int $lvmama_flag 是否需要去驴妈妈退票
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function cancelTicketOrder($order_id, $order_info, $user_id, $cancel_reason, $lvmama_flag = 1)
- {
- $transaction = Yii::$app->db->beginTransaction();
- try {
- #region 1.更新订单信息
- $update_value = [
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'ORDER_STATUS' => 148,
- 'ORDER_VALID_STATUS' => 0,
- 'ORDER_DISABLE_USER_ID' => $user_id,
- 'ORDER_DISABLE_TIME' => date('Y-m-d H:i:s'),
- ];
- $update_where = [
- 'or',
- ['=', 'order_id', $order_id],
- ['=', 'parent_order_id', $order_id],
- ];
- $res = self::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新订单信息失败');
- }
- #endregion
- #region 2.更新opera_product_run
- foreach ($order_info as $key => $vel) {
- $update_value = [
- 'UPDATE_USER_ID' => $user_id,
- 'UPDATE_TIME' => date('Y-m-d H:i:s'),
- 'SALED_COUNT' => new Expression('SALED_COUNT-' . $vel['order_num']),
- ];
- $update_where = [
- 'and',
- ['=', 'prod_id', $vel['prod_id']],
- ['=', 'run_date', $vel['run_date']],
- ['=', 'cancel_flag', 0],
- ];
- $res = OperaProductRun::updateAll($update_value, $update_where);
- if (!$res) {
- throw new Exception('更新opera_product_run失败');
- }
- }
- #endregion
-
- //驴妈妈订单取消需要去驴妈妈渠道申请退款
- $opera_prod = new OperaProduct();
- $lvmama_order_connect = new LvmamaOrderConnect();
- $org_id = $opera_prod::find()->from('opera_product')->where(['prod_id' => $order_info[0]['parent_prod_id']])->asArray()->one();
- if ($org_id['ORG_ID'] == 1369 && $lvmama_flag == 1) {//org_id=1369时就是驴妈妈的产品
- //查出主订单所有关联订单
- $lvmama_ids = $lvmama_order_connect::find()->select('partner_id,lvmama_id')->from('lvmama_order_connect')->where(['main_order_id' => $order_id])->asArray()->all();
- if (!empty($lvmama_ids)) {
- foreach ($lvmama_ids as $val) {
- $cancel_lvmama = Util::OrderCancelForLvmama($val['partner_id'], $val['lvmama_id']);
- if ($cancel_lvmama['state']['code'] != 1000) {
- $result['code'] = '1';
- $result['info'] = '退票失败';
- $result['error'] = '驴妈妈订单取消失败:' . $cancel_lvmama['message']['solution'];
- return $result;
- }
- }
- }
- }
- #region 3.插入日志
- $order_opera_log = new OrderOperaLog();
- $order_opera_log->attributes = [
- 'order_id' => $order_id,
- 'opera_user_id' => $user_id,
- 'opera_type' => 2,
- 'opera_time' => date('Y-m-d H:i:s'),
- 'opera_detail' => '取消原因:' . $cancel_reason,
- 'opera_platform' => '统一退票',
- ];
- $res = $order_opera_log->insert();
- if (!$res) {
- throw new Exception('插入日志失败');
- }
- #endregion
- $transaction->commit();
-
- $result['code'] = '0';
- $result['info'] = '退票成功';
- $result['data'] = $order_id;
- } catch (Exception $e) {
- # 回滚事务
- $result['code'] = '1';
- $result['info'] = '退票失败';
- $result['error'] = $e->getMessage();
- }
-
- return $result;
- }
-
- /**
- * Function Description:获取某个车次的所有订单 经过白名单过滤的所有订单
- * Function Name: getOrderArrayFromRunbus
- * @param int $run_id 班次id
- * @param int $bus_order_id 车次ID
- *
- * @return array
- *
- * @author Redstop
- */
- public function getOrderArrayFromRunbus($run_id, $bus_order_id)
- {
- $result = self::find()->select([
- 'parent_order_id', "customer_mobile", "main_corp_id"
- ])->from(self::tableName())
- ->innerJoin('appoint_send_message', 'appoint_send_message.order_id = order_main.parent_order_id')
- ->where([
- 'and',
- ['=', 'run_id', $run_id],
- ['=', 'run_bus_order_id', $bus_order_id],
- ['>', 'parent_order_id', 0],
- ['in', 'order_status', [146, 147]],
- ['=', 'order_main.cancel_flag', 0],
- ['=', 'appoint_send_message.cancel_flag', 0],
- ['=', 'agent_level', 1],
- ['in', 'order_prod_type', [81, 82, 369]],
- ])
- ->groupBy('parent_order_id')
- ->asArray()->all();
- return $result;
- }
-
- /*
- * 判断车票销售层级是否是终端
- */
- public function check_cancel($order_id)
- {
- $result = self::find()->select('agent_level')
- ->from(self::tableName())
- ->where(['order_id' => $order_id])
- ->asArray()
- ->one();
- return $result['agent_level'];
- }
-
- /**
- * Function Description:查询巴士起点位置信息及相关出行信息
- * Function Name: get_bus_position_info
- * @param $order_id
- * @param $run_date
- *
- * @return array|null|ActiveRecord
- *
- * @author 娄梦宁
- */
- public function get_bus_position_info($order_id, $run_date)
- {
- $select = [
- 'longitude' => '(select property from base_resource_property where res_id=m.prod_start_station_res_id and type_id=212 and cancel_flag=0 limit 1)',
- 'latitude' => '(select property from base_resource_property where res_id=m.prod_start_station_res_id and type_id=213 and cancel_flag=0 limit 1) ',
- 'address' => ' (select ifnull(property,"") from base_resource_property where res_id=m.prod_start_station_res_id and type_id=279 and cancel_flag=0 limit 1)',
- 'res_id' => 'prod_start_station_res_id',
- 'res_name' => 'prod_start_station_res_name',
- 'bus_id' => 'r.send_bus_res_id',
- 'bus_no' => 'r.send_bus_no',
- 'driver_name' => 'r.send_driver_name',
- 'driver_mobile' => 'send_driver_mobile',
- 'color' => '(select res_name from base_resource where res_id=b.bus_color)',
- 'lng' => 'g.longitude',
- 'lat' => 'g.latitude',
- 'img_url' => 'b.bus_img_path',
- 'bus_name' => '(select res_name from base_resource where res_id=b.brand_id)',
- 'seat_list' => '(select group_concat(run_bus_seat_name) from order_main where parent_order_id=m.parent_order_id and cancel_flag = 0)',
- 'appoint_message' => '(select count(order_id) FROM appoint_send_message where order_id = m.parent_order_id and cancel_flag = 0 ) ',
- 'click_send_message' => '(select count(order_id) FROM wechat_click_message where order_id = m.parent_order_id and cancel_flag = 0 ) '
- ];
- $current_day = date("Y-m-d");
- $result = self::find()->select($select)
- ->from('order_main m')
- ->leftJoin('run_bus r', 'm.run_id=r.run_id and m.run_bus_order_id=r.bus_order_id')
- ->leftJoin('base_bus b', 'b.bus_id=r.send_bus_res_id')
- ->leftJoin('gps_new g', "g.run_date = '{$current_day}' and g.bus_no=r.send_bus_no ")
- ->where(['and', ['=', 'parent_order_id', $order_id], ['=', 'm.run_date', $run_date]])
- ->orderBy(['g.create_time' => SORT_DESC])
- ->limit(1)
- ->asArray()->one();
- return $result;
- }
-
- /*
- * 获取订单渠道号
- */
- public function getOutsideSaleOrgId($order_id_arr)
- {
- $result = self::find()->select('outside_sale_org_id')->from(self::tableName())
- ->where(['in', 'order_id', $order_id_arr])
- ->limit(1)
- ->asArray()
- ->one();
- return $result['outside_sale_org_id'];
- }
-
- public function getOperaLine()
- {
- return $this->hasOne(OperaLine::className(), ['LINE_ID' => 'PARENT_PROD_ID']);
- }
-
-
- /**
- * Function Description:查询订单里面的票种
- * Function Name: getRunTicketInfo
- * @param $run_id
- *
- * @return array|ActiveRecord[]
- *
- * @author 李健
- */
- public function getRunTicketInfo($run_id)
- {
- $select = [
- 'order.order_id',
- 'order.prod_id',
- 'order.prod_start_station_area_name as start_area',
- 'order.prod_end_station_area_name as end_area',
- 'order.prod_start_station_res_name as start_station',
- 'order.prod_end_station_res_name as end_station',
- 'order.prod_start_station_time as start_time',
- 'order.prod_end_station_time as end_time',
- 'order.run_bus_order_id as bus_order_id',
- 'dict.type_name as seat_type',
- 'order.run_bus_seat_name as seat_name',
- 'order.order_price',
- 'if_print' => new Expression('if(`order`.order_print_times>0,"是","否")')
- ];
- $where = ['and'];
- $where[] = ['=', 'order.run_id', $run_id];
- $where[] = ['=', 'order.order_valid_status', 1];
- $where[] = ['=', 'order.cancel_flag', 0];
- $where[] = ['>', 'order.parent_order_id', 0];
- $where[] = ['=', 'order.order_prod_type', 82];
- $res = self::find()
- ->select($select)
- ->from(self::tableName() . ' order')
- ->leftJoin(DictType::tableName() . ' dict', 'dict.id=`order`.run_bus_seat_type')
- ->where($where)
- ->asArray()
- ->all();
- return $res;
- }
-
- /**
- * Function Description:获取订单班次信息(获取座次详情时)
- * Function Name: getOrderInfoForGetSeat
- * @param $order_id
- *
- * @return array|null|ActiveRecord
- *
- * @author 娄梦宁
- */
- public function getOrderInfoForGetSeat($order_id)
- {
- $select = [
- 'son_order' => 'group_concat(order_id)',
- 'seat_name' => 'group_concat(distinct run_bus_seat_name)',
- 'line_id' => 'parent_prod_id',//线路id
- 'run_id',//班次id
- 'run_bus_order_id',//班次车号
- 'run_bus_seat_seq_id' => 'group_concat(distinct run_bus_seat_seq_id)',//座位号
- 'run_date',//班次日期
- 'customer_mobile',//手机号
- 'bus_order_id' => "group_concat(distinct run_bus_order_id)",//车次号
- 'start_seq_id' => 'prod_start_station_seq_id',//开始站顺序号
- 'end_seq_id' => 'prod_end_station_seq_id',//结束站站顺序号
- 'start_area_id' => 'prod_start_station_area_id',//起点poi id
- 'start_area_name' => 'PROD_START_STATION_AREA_NAME',
- 'end_area_id' => 'prod_end_station_area_id',//终点 poi id
- 'end_area_name' => 'PROD_END_STATION_AREA_NAME',
- 'cnt' => 'count(1)',//子订单数
- 'run_x' => "concat('run_',year(run_date),LPAD(month(run_date),2,0))",
- 'run_time',
- 'create_time',
- 'prod_start_station_date',
- 'prod_start_station_time'
- ];
- $result = self::find()->select($select)
- ->from(self::tableName())
- ->where(['and', ['=', 'parent_order_id', $order_id], ['=', 'cancel_flag', 0]])
- ->asArray()
- ->one();
- return $result;
- }
-
- /**
- * Function Description:获取订单所有座位序列号
- * Function Name: getSeatNumber
- * @param $order_id
- *
- * @return mixed
- *
- * @author 娄梦宁
- */
- public function getSeatNumber($order_id)
- {
- $result = self::find()->select('group_concat(RUN_BUS_SEAT_NAME) as seat_no')->from(self::tableName())->where(['and', ['=', 'cancel_flag', 0], ['=', 'parent_order_id', $order_id]])->asArray()->one();
- return $result['seat_no'];
- }
-
- /**
- * Des:根据订单ID获取车辆信息
- * Name: getBusInfoByOrderId
- * @param $order_id
- * @return array
- * @author 倪宗锋
- */
- public function getBusInfoByOrderId($order_id)
- {
- $select = [
- 'c.BUS_NO', 'c.SEAT_MATRIX_ID', 'c.BUS_TYPE_RES_ID', 'c.BUS_ID', 'c.BUS_NO', 'c.BUS_COLOR'
- ];
- $getInfo = self::find()->select($select)
- ->from(self::tableName() . ' a')
- ->innerJoin(RunBus::tableName() . ' b', 'a.RUN_ID = b.RUN_ID and a.RUN_BUS_ORDER_ID = b.BUS_ORDER_ID')
- ->leftJoin(BaseBus::tableName() . ' c', 'b.SEND_BUS_RES_ID = c.BUS_ID')
- ->where(['=', 'a.PARENT_ORDER_ID', $order_id])
- ->groupBy('a.ORDER_ID')
- ->asArray()
- ->one();
- return $getInfo;
- }
-
- /**
- * Function Description:获取订单对应的所有子订单
- * Function Name: getSonOrderArr
- * @param $order_id
- *
- * @return array|ActiveRecord[]
- *
- * @author 娄梦宁
- */
- public function getSonOrderArr($order_id)
- {
- $result = self::find()->select('order_id')
- ->from(self::tableName())
- ->where(['and', ['=', 'cancel_flag', 0], ['=', 'parent_order_id', $order_id]])
- ->asArray()
- ->all();
- return $result;
- }
-
- /**
- * Function Description:获取订单所属供应商
- * Function Name: getProdTopOrgId
- * @param $order_id
- *
- * @return mixed
- *
- * @author 娄梦宁
- */
- public function getProdTopOrgId($order_id)
- {
- $result = self::find()->select('prod_top_org_id')->from(self::tableName())
- ->where(['and', ['=', 'cancel_flag', 0], ['=', 'order_id', $order_id]])
- ->asArray()
- ->one();
- return $result['prod_top_org_id'];
- }
-
- /**
- * Des:派车时,更新order_main中的座位名称
- * Name: updateOrderMainForNewBusByOldMatrix
- * @param $run_id
- * @param $bus_order_id
- * @param $res_id
- * @param $user_id
- * @author 倪宗锋
- */
- public function updateOrderMainForNewBusByOldMatrix($run_id, $bus_order_id, $res_id, $user_id)
- {
- $sql = "update order_main a
- INNER JOIN base_resource_matrix b on a.RUN_BUS_SEAT_SEQ_ID = b.POS_SEQ_ID
- SET a.RUN_BUS_SEAT_NAME = b.POS_NAME , a.UPDATE_USER_ID = $user_id
- where a.run_id= {$run_id} and a.RUN_BUS_ORDER_ID = {$bus_order_id}
- and b.RES_ID={$res_id} and b.CANCEL_FLAG=0";
- \Yii::$app->db->createCommand($sql)->execute();
- }
-
- /**
- * Des:派车时,更新order_main中的座位名称
- * Name: updateOrderMainForNewBusByNewMatrix
- * @param $run_id
- * @param $bus_order_id
- * @param $res_id
- * @param $user_id
- * @author 倪宗锋
- */
- public function updateOrderMainForNewBusByNewMatrix($run_id, $bus_order_id, $res_id, $user_id)
- {
- $sql = "update order_main a
- INNER JOIN bus_seat_matrix b on a.RUN_BUS_SEAT_SEQ_ID = b.POS_SEQ_ID
- SET a.RUN_BUS_SEAT_NAME = b.POS_NAME , a.UPDATE_USER_ID = $user_id
- where a.run_id= {$run_id} and a.RUN_BUS_ORDER_ID = {$bus_order_id}
- and b.RES_ID={$res_id} and b.CANCEL_FLAG=0";
- \Yii::$app->db->createCommand($sql)->execute();
- }
-
- /**
- * Function Description:根据订单号获取其所属车票是否需要检票
- * Function Name: getTicketChecked
- * @param $order_id
- *
- * @return array|null|ActiveRecord
- *
- * @author 娄梦宁
- */
- public function getTicketChecked($order_id)
- {
- $result = self::find()->select('b.is_checked')
- ->from(self::tableName() . ' a')
- ->leftJoin('opera_tickets b', 'a.prod_id=b.ticket_id')
- ->where(['and', ['=', 'a.parent_order_id', $order_id], ['=', 'b.cancel_flag', 0]])
- ->limit(1)
- ->asArray()
- ->one();
- return $result['is_checked'];
- }
-
- /**
- * Function Description:校验供应商订单号是否存在
- * Function Name: checkOutsideOrderNo
- * @param $outside_order_no
- *
- * @return array
- *
- * @author 娄梦宁
- */
- public function checkOutsideOrderNo($outside_order_no, $org_id)
- {
- $where = [
- 'and',
- ['=', 'outside_order_no', $outside_order_no],
- ['=', 'parent_order_id', 0],
- ['=', 'ORDER_PROD_TYPE', 81],
- ['=', 'cancel_flag', 0],
- ['=', 'outside_sale_org_id', $org_id]
- ];
- $result = self::find()->select(['order_id', 'outside_sale_org_id', 'order_status'])->from(self::tableName())
- ->where($where)->orderBy('order_id desc')->limit(1)->asArray()->all();
- return $result;
- }
-
- /**
- * Function Description:修改保险单号到ORDER_CONFIRM_CODE
- * Function Name: updateInsuranceNo
- * @param $param ['policyno','order_id']
- *
- * @return integer
- *
- * @author 付泓程
- */
- public function updateInsuranceNo($param)
- {
-
- $update_value = [
- 'ORDER_CONFIRM_CODE' => $param['policyno'],
- 'UPDATE_TIME' => date('Y-m-d H:i:s')
- ];
- $update_where = [
- 'AND',
- ['OR',
- ['=', 'ORDER_ID', $param['order_id']],
- ['=', 'PARENT_ORDER_ID', $param['order_id']]
- ],
- ['=', 'CANCEL_FLAG', 0],
- ];
- $result = self::updateAll($update_value, $update_where);
- return $result;
-
- }
-
- /**
- * 获取检票通知的订单号
- * @return a
- */
- public function getZybCheckTicketOrder()
- {
-
- $select = [
- "prodCnt" => new Expression("count(1)") ,
- "outside_order_no" => "OUTSIDE_ORDER_NO",
- "customer_name" => "CUSTOMER_NAME",
- "customer_mobile" => "CUSTOMER_MOBILE",
- "customer_id_no" => new Expression("GROUP_CONCAT(DISTINCT CUSTOMER_ID_NO)")
- ];
- $where = [
- 'and',
- ["=", "RUN_DATE", date("Y-m-d")],
- [">=", "RUN_TIME", date("H:i")],
- ["<", "RUN_TIME", date("H:i", strtotime('+5 minute'))],
- ["=", "OUTSIDE_SALE_ORG_ID", 1835],
- ];
- $result = self::find()->select($select)
- ->where($where)
- ->groupBy("OUTSIDE_ORDER_NO")
- ->limit(1)
- ->asArray()
- ->all();
- return $result;
- }
-
- }
|