|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297 |
- <?php
-
- namespace backend\modules\hotel\models;
-
- use backend\modules\api\controllers\BalanceController;
- use backend\modules\api\logic\BaseBalance;
- use backend\modules\hotel\models\Ali\TopLogger;
- use backend\modules\zzcs\models\BaseUser;
- use backend\modules\zzcs\models\DictType;
- use backend\modules\zzcs\models\OrderFinanceReparations;
- use common\components\zHttp;
- use common\components\zOfficeWechat;
- use common\models\BaseSupplier;
- use common\models\BaseUserAuth;
- use Yii;
- use yii\data\ActiveDataProvider;
- use yii\data\SqlDataProvider;
- use yii\db\ActiveRecord;
- use yii\db\Exception;
- use common\components\zPhpWord;
-
- /**
- * 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 //子房型编号 ROOM_TYPE
- * @property integer $PARENT_PROD_ID //酒店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 $CHANNEL_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 string $DOCKING_TYPE
- */
- class OrderMain extends ActiveRecord
- {
- const ORDER_CHANNEL_STATUS_PAYING = 708; //渠道待支付
- const ORDER_CHANNEL_STATUS_WAITING = 550; //待处理
- const ORDER_CHANNEL_STATUS_ACCEPT = 551; //已接单
- const ORDER_CHANNEL_STATUS_REJECT = 552; //已拒绝
- const ORDER_CHANNEL_STATUS_APPLY_CANCEL = 553; //申请取消
- const ORDER_CHANNEL_STATUS_APPLY_CANCEL_REJECT = 554; //取消被拒
- const ORDER_CHANNEL_STATUS_APPLY_CANCEL_WAITING_CONFIRM = 564; //退单待确认 并不是渠道订单状态,仍然是CS订单状态
- const ORDER_CHANNEL_STATUS_APPLY_CANCEL_CONFIRMED = 563; //已同意取消
- const ORDER_CHANNEL_STATUS_APPLY_MODIFY = 713; //申请修改
- const ORDER_CHANNEL_STATUS_MODIFY_REJECT = 714; //拒绝修改
-
-
- const ORDER_STATUS_NO_PAID = 145; //订单待支付
- const ORDER_STATUS_WAITING_SEND = 313; //待发单
- const ORDER_STATUS_WAITING_CONFIRM = 198; //待确认
- const ORDER_STATUS_CONFIRMED = 314; //已确认
- const ORDER_STATUS_CHANGING = 382; //退改中
- const ORDER_STATUS_CANCEL_BEFORE_CONFIRM = 383; //已取消 已安排情况下发退改后取消
- const ORDER_STATUS_FINISH = 147; //已完成
- const ORDER_STATUS_CANCEL = 148; //已取消
-
- const ORDER_PROD_TYPE_MAIN = 25; //主订单
- const ORDER_PROD_TYPE_SUM = 26; //子订单
-
- const ORDER_TYPE_CHANNEL = 556; //直连
- const ORDER_TYPE_CS = 557; //录单
-
- const ORDER_DISABLE_TYPE_CONFIRMED = 1; //同意退单
- const ORDER_DISABLE_TYPE_REJECT = 2; //拒绝退单
-
- const ORDER_LEVEL_SURE = 0; //确认单
- const ORDER_LEVEL_CHANGE = 1; //修改单
- const ORDER_LEVEL_CANCEL = 2; //取消单
-
- const STOCK_TYPE_BUYOUT = 228; //买断
- const STOCK_TYPE_RESERVE = 230; //保留
- const STOCK_TYPE_INQUIRY = 229; //现询
-
- const DISTRIB_STOCK_TYPE_RESERVE = 1; //消耗渠道的库存类型 1:固定数量(保留)
- const DISTRIB_STOCK_TYPE_INQUIRY = 2; //2: 超卖(现询房)
-
-
- const order_level_array = [
- self::ORDER_LEVEL_SURE => '确认单',
- self::ORDER_LEVEL_CHANGE => '修改单',
- self::ORDER_LEVEL_CANCEL => '取消单',
- ];
-
-
- public $purchaser_id;
- public $purchase_id;
- public $date_type = 1; //查询时的时间类型,1:创建时间,2:入住时间,3:离店时间
- public $start_date;
- public $end_date;
- public $hotel_name;
- public $hotel_id;
- public $room_count; //订单间夜数
- public $principal_id; //运营负责人;
-
- public $compensate_out; // 赔出
- public $compensate_in; // 赔入
-
- public $jianye_count; //间夜数
- public $order_count; //订单数
- public $order_price; //销售额
- public $base_price; //成本价
- public $total_commission; //佣金
- public $profit_value; //利润
- public $principal; //运营负责人
- public $order_status_name; // 订单状态名称
- public $channel_name; // 渠道名称
- public $docking_type_desc; // 对接类型名称
- public $sendUser = 'shifp|wanglg'; // 酒店相关信息通知用户
-
- /**
- * @inheritdoc
- */
- public static function tableName()
- {
- return 'order_main';
- }
-
- /**
- * @inheritdoc
- */
- public function rules()
- {
- return [
- [['ID', 'ORDER_BOOK_STATUS', 'PROD_START_STATION_TIME_MINUTES', 'OUTSIDE_ORDER_NO', 'BASE_PRICE', 'ORDER_PRICE'], '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', 'CHANNEL_ORDER_STATUS', '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', 'hotel_id'], 'integer'],
- [['ORDER_DESCRIPTION'], 'string'],
- [['room_count'], 'match', 'pattern' => '/^[1-9]\d*$/', 'message' => '库存信息不能为空', 'on' => 'csBook'],
- [['OUTSIDE_ORDER_NO', 'OUTSIDE_SALE_ORG_ID', 'CUSTOMER_NAME', 'PROD_START_STATION_DATE', 'PROD_END_STATION_DATE'], 'required', 'on' => 'csBook'],
- [['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' => 80],
- [['DOCKING_TYPE', 'room_count', 'ORDER_TITLE_ID', 'PRINCIPAL_ID'], 'safe'],
- // [['ORDER_CONFIRM_CODE'], 'number', 'skipOnEmpty' => true],
- [['ORDER_CONFIRM_CODE'], 'match', 'pattern' => '/[^\x{4e00}-\x{9fa5}]+$/u', 'message' => '确认号中不能出现中文字符', 'skipOnEmpty' => true],
- [['ORDER_CONFIRM_CODE'], 'required', 'on' => 'upConfirm'],
- ];
- }
-
- /**
- * @inheritdoc
- */
- public function attributeLabels()
- {
- return [
- 'ID' => 'ID',
- 'CANCEL_FLAG' => 'Cancel Flag',
- 'MAIN_CREATE_USER_ID' => 'Main Create User ID',
- 'CREATE_USER_ID' => '跟单客服',
- 'CREATE_TIME' => '预订时间',
- 'UPDATE_USER_ID' => 'Update User ID',
- 'UPDATE_TIME' => 'Update Time',
- 'SALE_ORG_ID' => 'Sale Org ID',
- 'SALE_TOP_ORG_ID' => 'Sale Top Org ID',
- 'PROD_TOP_ORG_ID' => 'Prod Top Org ID', //供应商ID
- 'ORDER_ID' => '订单号',
- 'ORDER_DESCRIPTION' => 'Order Description',
- 'OUTSIDE_ORDER_NO' => '渠道商订单号',
- 'ORDER_VALID_STATUS' => 'Order Valid Status',
- 'ORDER_BOOK_STATUS' => 'Order Book Status',
- 'ORDER_PAY_STATUS' => 'Order Pay Status',
- 'ORDER_PAY_MAIN_ID' => 'Order Pay Main ID',
- 'ORDER_PAY_USER_ID' => 'Order Pay User ID',
- 'ORDER_PAY_TIME' => 'Order Pay Time',
- 'ORDER_PRINT_TIMES' => 'Order Print Times',
- 'PARENT_ORDER_ID' => 'Parent Order ID',
- 'PROD_ID' => 'Prod ID',
- 'PARENT_PROD_ID' => 'Parent Prod ID',
- 'PROD_NAME' => '房型名称',
- 'PARENT_PROD_NAME' => '酒店名称',
- 'ORDER_PRICE' => '订单金额',
- 'ORDER_PROD_TYPE' => 'Order Prod Type',
- 'PROD_SUPPLY_ORG_NAME' => 'Prod Supply Org Name',
- 'BASE_PRICE' => '订单金额',
- 'MID_PRICE' => 'Mid Price',
- 'RUN_ID' => 'Run ID',
- 'RUN_DATE' => 'Run Date',
- 'RUN_DATE_NUM' => 'Run Date Num',
- 'RUN_TIME' => 'Run Time',
- 'RUN_TIME_MINUTES' => 'Run Time Minutes',
- 'RUN_BUS_ORDER_ID' => 'Run Bus Order ID',
- 'RUN_BUS_SEAT_TYPE' => 'Run Bus Seat Type',
- 'RUN_BUS_SEAT_SEQ_ID' => 'Run Bus Seat Seq ID',
- 'RUN_BUS_SEAT_ID' => 'Run Bus Seat ID',
- 'RUN_BUS_SEAT_NAME' => 'Run Bus Seat Name',
- 'PROD_START_STATION_RES_ID' => 'Prod Start Station Res ID',
- 'PROD_START_STATION_RES_NAME' => 'Prod Start Station Res Name',
- 'PROD_START_STATION_CHECKPORT_RES_ID' => 'Prod Start Station Checkport Res ID',
- 'PROD_START_STATION_CHECKPORT_RES_NAME' => 'Prod Start Station Checkport Res Name',
- 'PROD_START_STATION_SEQ_ID' => 'Prod Start Station Seq ID',
- 'PROD_START_STATION_DATE' => '入住日期', //入住日期
- 'PROD_START_STATION_DATE_NUM' => 'Prod Start Station Date Num',
- 'PROD_START_STATION_TIME' => 'Prod Start Station Time',
- 'PROD_START_STATION_TIME_MINUTES' => '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' => 'Prod End Station Res ID',
- 'PROD_END_STATION_RES_NAME' => 'Prod End Station Res Name',
- 'PROD_END_STATION_SEQ_ID' => 'Prod End Station Seq ID',
- 'PROD_END_STATION_DATE' => '入离店时间', //离店时间
- 'PROD_END_STATION_DATE_NUM' => 'Prod End Station Date Num',
- 'PROD_END_STATION_TIME' => 'Prod End Station Time',
- 'PROD_END_STATION_TIME_MINUTES' => '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' => 'Customer Sex',
- 'CUSTOMER_MOBILE' => '联系电话',
- 'CUSTOMER_ID_TYPE' => 'Customer Id Type',
- 'CUSTOMER_ID_NO' => 'Customer Id No',
- 'CUSTOMER_ADDRESS' => 'Customer Address',
- 'CUSTOMER_ADDRESS_AREA_ID' => 'Customer Address Area ID',
- 'CUSTOMER_POSTCODE' => 'Customer Postcode',
- 'CUSTOMER_MEMO' => '备注', //备注已经移到order_comment表
- 'MEMBER_ID' => 'Member ID',
- 'MEMBER_SCORE_PAY' => 'Member Score Pay',
- 'MEMBER_SCORE_GET' => 'Member Score Get',
- 'ORDER_STATUS' => '订单状态',
- 'ORDER_DISABLE_TYPE' => 'Order Disable Type',
- 'ORDER_DISABLE_USER_ID' => 'Order Disable User ID',
- 'ORDER_DISABLE_TIME' => 'Order Disable Time',
- 'ORDER_DISABLE_PERCENT' => 'Order Disable Percent',
- 'ORDER_DISABLE_FEE' => 'Order Disable Fee',
- 'ORDER_DISABLE_APPLY_USER_ID' => 'Order Disable Apply User ID',
- 'ORDER_DISABLE_APPLY_TIME' => 'Order Disable Apply Time',
- 'KEEP_END_TIME' => 'Keep End Time',
- 'KEEP_END_MINUTES' => 'Keep End Minutes',
- 'if_gift' => 'If Gift',
- 'reorder_times' => 'Reorder Times',
- 'IF_LAST_PROD' => 'If Last Prod',
- 'ORDER_LEVEL' => 'Order Level',
- 'ORDER_CONFIRM_CODE' => '确认号',
- 'OUTSIDE_SALE_ORG_ID' => '销售渠道', //渠道商ID
- 'IS_UP' => 'Is Up',
- 'APPLY_ID' => 'Apply ID',
- 'SALES_MAN' => 'Sales Man',
- 'RECEIVE_VALUE' => 'Receive Value',
- 'REAL_PASSENGER_NUM' => 'Real Passenger Num',
- 'STOCK_TYPE' => 'Stock Type',
- 'REFUSE_FLAG' => 'Refuse Flag',
- 'PROFIT_VALUE' => 'Profit Value',
- 'TOTAL_COMMISSION' => 'Total Commission',
- 'room_count' => '间夜数',
- ];
- }
-
- /**
- * @return \yii\db\ActiveQuery 酒店
- */
- public function getOperaHotel()
- {
- return $this->hasOne(OperaHotel::className(), ['HOTEL_ID' => 'PARENT_PROD_ID']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 直连发单
- */
- public function getOrderHtStatusLog()
- {
- return $this->hasOne(OrderHtStatusLog::className(), ['ORDER_ID' => 'ORDER_ID']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 供应商
- */
- public function getBaseSupplier()
- {
- return $this->hasOne(BaseSupplier::className(), ['ID' => 'PROD_TOP_ORG_ID']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 渠道商
- */
- public function getBaseChannel()
- {
- return $this->hasOne(BaseSupplier::className(), ['ID' => 'OUTSIDE_SALE_ORG_ID']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 订单状态
- */
- public function getStatusLabel()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'ORDER_STATUS']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 渠道接单状态
- */
- public function getChannelStatusLabel()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'CHANNEL_ORDER_STATUS']);
- }
-
- public function getDockingType()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'DOCKING_TYPE']);
- }
-
- public function getChannelOrderStatus()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'CHANNEL_ORDER_STATUS']);
- }
-
- public function getOperaHotelRoom()
- {
- return $this->hasOne(OperaHotelRoom::className(), ['HOTEL_ID' => 'PARENT_PROD_ID', 'ROOM_TYPE' => 'PROD_ID'])
- ->andOnCondition([OperaHotelRoom::tableName() . '.CANCEL_FLAG' => 0]);
- }
-
- public function getOrderInvoiceInfo()
- {
- return $this->hasOne(OrderInvoiceInfo::className(), ['OrderID' => 'ORDER_ID']);
- }
-
- public function getOrderFinanceReparations()
- {
- return $this->hasOne(OrderFinanceReparations::className(), ['order_id' => 'ORDER_ID'])
- ->andOnCondition([OrderFinanceReparations::tableName() . '.CANCEL_FLAG' => 0]);
- }
-
-
- public function getChannelRoom()
- {
- return $this->hasOne(RunHotelDistrib::className(), [
- 'HOTEL_ID' => 'PARENT_PROD_ID',
- 'ROOM_TYPE' => 'PROD_ID',
- 'RUN_DATE' => 'RUN_DATE',
- 'DISTRIB_ID' => 'OUTSIDE_SALE_ORG_ID']);
- }
-
- public function getSubRoom()
- {
- return $this->hasOne(RunHotelSubRoom::className(), [
- 'HOTEL_ID' => 'PARENT_PROD_ID',
- 'ROOM_TYPE' => 'PROD_ID',
- 'RUN_DATE' => 'RUN_DATE']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 客服
- */
- public function getUser()
- {
- return $this->hasOne(BaseUser::className(), ['ID' => 'CREATE_USER_ID']);
- }
-
- /**
- * @Author wanglg
- * @Desc 运营负责人
- * @return \yii\db\ActiveQuery
- */
- public function getPrincipalMan()
- {
- return $this->hasOne(BaseUser::className(), ['ID' => 'PRINCIPAL_ID']);
- }
-
- /**
- * @Author wanglg
- * @Desc 采购负责人
- * @return \yii\db\ActiveQuery
- */
- public function getSalesMan()
- {
- return $this->hasOne(BaseUser::className(), ['ID' => 'SALES_MAN']);
- }
-
- //订单备注
- public function getPublicMemo()
- {
- return $this->hasMany(OrderComment::className(), ['ORDER_ID' => 'ORDER_ID'])
- ->andOnCondition(['order_comment.COMMENT_TYPE' => OrderComment::TYPE_PUBLIC, 'order_comment.CANCEL_FLAG' => 0]);
- }
-
- //获取所有订单备注
- public function getAllMemo()
- {
- return $this->hasMany(OrderComment::className(), ['ORDER_ID' => 'ORDER_ID'])
- ->andOnCondition(['order_comment.CANCEL_FLAG' => 0, 'order_comment.COMMENT_TYPE' => [0, 1]]);
- }
-
- public function getOrderFinanceStatus()
- {
- return $this->hasOne(OrderFinanceStatus::className(), ['order_id' => 'ORDER_ID']);
- }
-
- public function getSendOrderUser()
- {
- return $this->hasOne(OrderHtStatusLog::className(), ['ORDER_ID' => 'ORDER_ID'])
- ->andOnCondition(['order_ht_status_log.CANCEL_FLAG' => 0, 'order_ht_status_log.ORDER_STATUS' => OrderMain::ORDER_STATUS_WAITING_CONFIRM]);
- }
-
- /**
- * @Author wanglg
- * @Desc 统计报表查询订单信息
- * @param $params
- * @return SqlDataProvider
- */
- public function search($params)
- {
- $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : '';
- if ($op == 'cusServiceSend') {
- $query = OrderMain::find()
- ->joinWith('baseChannel c')
- ->joinWith('statusLabel')
- ->joinWith('user')
- ->joinWith('salesMan m')
- ->joinWith('orderHtStatusLog.user as lu')
- ->from($this->tableName() . ' t');
- } else {
- $query = OrderMain::find()
- ->joinWith('baseChannel c')
- ->joinWith('salesMan m')
- ->joinWith('statusLabel')
- ->joinWith('user')
- ->from($this->tableName() . ' t');
- }
-
- //间夜数,添加select时,需要注意,如果数据库中其他表有主键,$dataProvider->getModels()会自动以主键去除重复。所以返回的结果有可能比sql查出来的少
- $query->select(['t.CREATE_TIME', 't.CREATE_USER_ID', 't.SALES_MAN as SALES_MAN', 't.PRINCIPAL_ID', 't.ORDER_ID', 't.PARENT_PROD_ID', 't.PROD_ID', 't.CUSTOMER_NAME',
- 't.CUSTOMER_MOBILE', 't.PARENT_PROD_NAME', 't.PROD_NAME', 't.OUTSIDE_SALE_ORG_ID', 't.PROD_START_STATION_DATE', 't.PROD_END_STATION_DATE',
- 't.ORDER_PRICE', 't.BASE_PRICE', 't.TOTAL_COMMISSION', 't.PROFIT_VALUE', 'c.SUPPLIER_NAME as CHANNEL_NAME', 'base_user.TRUE_NAME AS INPUT_CREATE_USER',
- 'm.TRUE_NAME AS PURCHASE_TRUE_NAME', 'dict_type.TYPE_NAME AS ORDER_STATUS_NAME',
- 'IF(0=0, 0, 0) as order_count', 'IF(0=0, 0, 0) AS compensate_out', 'IF(0=0, 0, 0) AS compensate_in']);
-
-
- $this->PARENT_PROD_ID = isset($params['hotel_id']) ? $params['hotel_id'] : ''; //酒店
- $this->OUTSIDE_SALE_ORG_ID = (isset($params['org_sale_id']) && $params['org_sale_id'] != 0) ? $params['org_sale_id'] : ''; //渠道
- $this->CREATE_USER_ID = isset($params['user_id']) ? $params['user_id'] : '';
- $this->principal_id = empty($params['principal_id']) ? '' : $params['principal_id'];
- $this->date_type = isset($params['date_type']) ? $params['date_type'] : '';
- $this->purchaser_id = empty($params['purchaser_id']) ? '' : $params['purchaser_id'];
- $this->start_date = isset($params['start_date']) ? $params['start_date'] : '';
- $this->end_date = isset($params['end_date']) ? $params['end_date'] : '';
- $this->PROD_ID = isset($params['room_type']) ? $params['room_type'] : '';
- $this->PARENT_PROD_NAME = isset($params['hotel_name']) ? $params['hotel_name'] : '';
-
- if ($op == 'cusServiceSend') {
- $query->addSelect(['order_ht_status_log.CREATE_USER_ID AS SEND_USER_ID', 'lu.TRUE_NAME AS SEND_CREATE_USER']);
- $query->andFilterWhere([
- 'OUTSIDE_SALE_ORG_ID' => $this->OUTSIDE_SALE_ORG_ID,
- 'order_prod_type' => 25,
- 't.cancel_flag' => 0,
- 'ORDER_VALID_STATUS' => 1,
- 't.DOCKING_TYPE' => 556,
- 'PROD_ID' => $this->PROD_ID,
- 't.SALES_MAN' => $this->purchaser_id,
- 't.PRINCIPAL_ID' => $this->principal_id,
- ]);
- } else {
- $query->andFilterWhere([
- 'OUTSIDE_SALE_ORG_ID' => $this->OUTSIDE_SALE_ORG_ID,
- 'order_prod_type' => 25,
- 't.cancel_flag' => 0,
- 'ORDER_VALID_STATUS' => 1,
- 'prod_id' => $this->PROD_ID,
- 't.create_user_id' => $this->CREATE_USER_ID,
- 't.SALES_MAN' => $this->purchaser_id,
- 't.PRINCIPAL_ID' => $this->principal_id,
- ]);
- }
- if ($op == 'cusServiceSend') {
- $send_where = empty($params['send_user_id']) ? ['order_ht_status_log.ORDER_STATUS' => OrderMain::ORDER_STATUS_WAITING_CONFIRM, 'order_ht_status_log.BEFORE_STATUS' => OrderMain::ORDER_STATUS_WAITING_SEND]
- : ['order_ht_status_log.ORDER_STATUS' => OrderMain::ORDER_STATUS_WAITING_CONFIRM, 'order_ht_status_log.BEFORE_STATUS' => OrderMain::ORDER_STATUS_WAITING_SEND, 'order_ht_status_log.CREATE_USER_ID' => $params['send_user_id']];
- $query->andFilterWhere($send_where);
- } else {
- $query->andFilterWhere(['in', 'ORDER_STATUS', [198, 314, 147, 313, 382]]);
- }
- $hotel_id = $this->PARENT_PROD_ID;
- if ($hotel_id != 0) {
- $query->andFilterWhere([
- '=', 'PARENT_PROD_ID', $hotel_id,
- ]);
- }
-
- $date_type = $this->date_type;
- $query->addSelect(['(select count(*) from order_main where cancel_flag = 0 and order_prod_type = 26 and PARENT_ORDER_ID = t.order_id) as room_count']);
- /*if ($date_type == 2) {
- $query->addSelect(["(select count(*) from order_main where cancel_flag = 0 and order_prod_type = 26 and PROD_START_STATION_DATE between '{$this->start_date}' and '{$this->end_date}' and PARENT_ORDER_ID = t.order_id) as room_count"]);
- } else {
- $query->addSelect(['(select count(*) from order_main where cancel_flag = 0 and order_prod_type = 26 and PARENT_ORDER_ID = t.order_id) as room_count']);
- }*/
- if ($date_type == 1) {
- if ($this->start_date == $this->end_date)
- $query->andFilterWhere([
- 'like', 't.CREATE_TIME', $this->start_date,
- ]);
- else
- $query->andFilterWhere([
- 'between', 't.CREATE_TIME', $this->start_date . ' 00:00:00', $this->end_date . ' 23:59:59',
- ]);
- } elseif ($date_type == 2) {
- $query->andFilterWhere(['or', ['and', ['<=', 'prod_start_station_date', $this->start_date], ['>', 'prod_end_station_date', $this->start_date]],
- ['and', ['<=', 'prod_start_station_date', $this->end_date], ['>', 'prod_end_station_date', $this->end_date]],
- ['and', ['>=', 'prod_start_station_date', $this->start_date], ['<=', 'prod_end_station_date', $this->end_date]]]);
- } elseif ($date_type == 3) {
- if ($this->start_date == $this->end_date)
- $query->andFilterWhere([
- 'like', 'PROD_END_STATION_DATE', $this->start_date,
- ]);
- else
- $query->andFilterWhere([
- 'between', 'PROD_END_STATION_DATE', $this->start_date, $this->end_date,
- ]);
- }
-
- $query->groupBy('t.ORDER_ID');
-
- // 处理查询订单权限信息
- $order_where = $this->userRoleWhere('t');
- $query->andFilterWhere($order_where);
- //订单总数
- $totalCount = $query->count();
- $sql = $query->createCommand()->getRawSql();
-
- if (!in_array($op, ['cusServiceSend', 'cusService'])) {
- $report = new Report();
- $params['date_from'] = $params['start_date'];
- $params['date_to'] = $params['end_date'];
- $params['channel_id'] = $params['org_sale_id'];
- // 赔入赔出权限处理
- $compensate_where = $this->userRoleWhere('b');
- $sql_finance = $report->getCompensateInOrOut($params, $op)
- ->andFilterWhere($compensate_where)->createCommand()->getRawSql();
-
- $sql = "SELECT a.CREATE_TIME, a.CREATE_USER_ID, a.SALES_MAN, a.PRINCIPAL_ID, a.ORDER_ID, a.PARENT_PROD_ID, a.PROD_ID, a.CUSTOMER_NAME, a.CUSTOMER_MOBILE,
- a.PARENT_PROD_NAME, a.PROD_NAME, a.OUTSIDE_SALE_ORG_ID, a.PROD_START_STATION_DATE, a.PROD_END_STATION_DATE, a.ORDER_PRICE, a.BASE_PRICE, a.TOTAL_COMMISSION,
- a.PROFIT_VALUE, a.CHANNEL_NAME, a.INPUT_CREATE_USER, a.PURCHASE_TRUE_NAME, SUM(a.compensate_out) as compensate_out, SUM(a.compensate_in) as compensate_in, a.ORDER_STATUS_NAME,
- a.order_count, a.room_count
- FROM ({$sql} UNION {$sql_finance}, a.order_id) a GROUP BY ORDER_ID";
- }
-
- $dataProvider = new SqlDataProvider([
- 'sql' => 'SELECT b.* FROM(' . $sql . ') b',
- 'totalCount' => $totalCount,
- 'pagination' => [
- 'pageSize' => 15,
- ],
- ]);
-
- return $dataProvider;
- }
-
- /**
- * @Author wanglg
- * @Desc 报表统计查询权限条件
- * @param $alias查询条件关联别名设置
- */
- public function userRoleWhere($alias = '')
- {
- $alias = empty($alias) ? '' : $alias . '.';
- if (Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_OPERATOR) {
- $where = [$alias . 'PRINCIPAL_ID' => Yii::$app->user->id];
- } elseif (Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_PURCHASE) {
- $where = [$alias . 'SALES_MAN' => Yii::$app->user->id];
- } elseif (Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_CUS_ADMIN
- || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_CS
- || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::FINANCIAL_OFFICER) {
- // 酒店管理员、客服管理人员、后台管理人员和系统管理员、财务人员可以查看所有数据
- $where = [];
- } else {
- $where = [$alias . 'ID' => -1];
- }
- return $where;
- }
-
- /**
- * @Author wanglg
- * @Desc 获取订单详情
- * @param $order_id
- * @return array
- */
- public function orderDetail($order_id)
- {
- $data = array();
- $data['data'] = OrderMain::find()
- ->select(['a.CREATE_USER_ID', 'a.ORDER_ID', 'a.ORDER_PRICE', 'a.ORDER_TITLE_ID', 'a.BASE_PRICE', 'a.TOTAL_COMMISSION', 'a.PROFIT_VALUE', 'a.RUN_DATE', 'a.OUTSIDE_SALE_ORG_ID',
- 'a.IF_LAST_PROD', 'a.ORDER_LEVEL', 'c.SUPPLIER_NAME as channel_name', 'b.type_name as order_status_name', 'a.ORDER_PAY_STATUS', 'a.DOCKING_TYPE', 'a.ORDER_STATUS', 'a.CHANNEL_ORDER_STATUS',
- 'd.type_name as docking_type_desc', 'IFNULL(e.type_name, "") channel_order_status_desc', 'h.base_room_type', 'a.ORDER_DESCRIPTION', 'a.PARENT_PROD_NAME', 'a.OUTSIDE_ORDER_NO',
- 'a.ORDER_CONFIRM_CODE', 'a.PARENT_ORDER_ID', 'a.PARENT_PROD_ID', 'PROD_ID', 'a.PROD_NAME', 'a.RUN_TIME', 'a.CUSTOMER_MEMO', 'a.CUSTOMER_NAME', 'a.CUSTOMER_MOBILE', 'a.CREATE_TIME', 'a.PROD_START_STATION_DATE', 'a.PROD_END_STATION_DATE',
- 'g.gathering_status', 'g.payment_status', 'ss.COMMISION_FLAG', 'ss.COMMISION_TYPE', 'ss.BACK_COMMISION_METHOD', 'ss.BACK_PERCENT', 'ss.BACK_VALUE', 'opera_hotel_room.ID as RoomId',
- 'pm.TRUE_NAME as PRINCIPAL_NAME'])
- ->joinWith('statusLabel b')
- ->joinWith('baseChannel c')
- ->joinWith('dockingType d')
- ->joinWith('channelOrderStatus e')
- ->joinWith('operaHotelRoom')
- ->joinWith('subRoom as h')
- ->joinWith('orderFinanceStatus g')
- ->joinWith('principalMan as pm')
- ->leftJoin('base_supplier_sale as ss', 'a.OUTSIDE_SALE_ORG_ID=ss.SUPPLIER_ID and ss.CANCEL_FLAG=0 and ss.PARENT_TYPE=25')
- ->where(['and', 'a.CANCEL_FLAG=0', 'a.ORDER_PROD_TYPE in (25, 26)', ['or', 'a.ORDER_ID=' . $order_id, 'a.PARENT_ORDER_ID=' . $order_id]])
- ->from('order_main a')
- ->asArray()->all();
-
- $data['order_comment'] = OrderComment::find()
- ->joinWith('user')
- ->where(['ORDER_ID' => $order_id, 'COMMENT_TYPE' => [0, 1], 'order_comment.CANCEL_FLAG' => 0])->asArray()->all();
-
- $data['hotel_child_order_detail'] = OrderMain::find()
- ->select(['PARENT_PROD_ID', 'COUNT(*) AS TOTAL', 'STOCK_TYPE', 'ORDER_ID', 'ORDER_DESCRIPTION', 'RUN_DATE', 'PARENT_ORDER_ID', 'PROD_ID', 'COUNT(*) * ORDER_PRICE AS ALL_PRICE', 'COUNT(*) * MID_PRICE as TOTAL_MID_PRICE',
- 'PROD_NAME', 'ORDER_PRICE', 'CONVERT(SUM(BASE_PRICE)/COUNT(*), DECIMAL(10, 2)) AS BASE_PRICE', 'CONVERT((ORDER_PRICE - SUM(BASE_PRICE)/COUNT(*) - MID_PRICE-TOTAL_COMMISSION) * COUNT(*), DECIMAL(10, 2)) AS BENEFIT',
- 'TOTAL_COMMISSION * COUNT(*) AS TOTAL_COMMISSION', 'RUN_TIME AS CHECKIN_TIME',
- 'ORDER_CONFIRM_CODE', 'OUTSIDE_SALE_ORG_ID', 'b.COMMISION_FLAG', 'b.BACK_COMMISION_TYPE', 'b.BACK_COMMISION_METHOD', 'b.BACK_PERCENT', 'b.BACK_VALUE'])
- ->leftJoin('base_supplier_sale as b', 'a.OUTSIDE_SALE_ORG_ID=b.SUPPLIER_ID and b.CANCEL_FLAG=0 and b.PARENT_TYPE=25')
- ->from('order_main a')
- ->where(['PARENT_ORDER_ID' => $order_id, 'a.CANCEL_FLAG' => 0, 'ORDER_PROD_TYPE' => [25, 26]])
- ->groupBy('RUN_DATE')
- // ->createCommand() ->getRawSql();
- ->asArray()->all();
-
- $data['hotel_order_detail'] = OrderMain::find()
- ->select(['order_status',
- 'order_description',
- 'outside_order_no',
- 'parent_prod_name as hotel_name',
- 'order_confirm_code',
- 'refuse_flag',
- 'prod_name as product_name',
- 'prod_start_station_date as start_date',
- 'prod_end_station_date as end_date',
- 'run_date',
- 'run_time as checkin_time',
- 'customer_memo',
- 'customer_name',
- 'customer_mobile',
- 'order_price',
- 'create_time',
- 'order_pay_time'])
- ->where(['and', 'cancel_flag=0', 'parent_order_id=0', 'order_prod_type IN (25, 26)', 'order_id=' . $order_id])
- // -> createCommand() -> getSql();
- ->asArray()->one();
- $data['hotel_child_order_detail'] = array_change_key_case($data['hotel_child_order_detail'], CASE_UPPER);
- $data['hotel_order_detail'] = array_change_key_case($data['hotel_child_order_detail'], CASE_UPPER);
-
- return $data;
- }
-
- // 查询主订单相关信息
- public function ordersInfo($order_id)
- {
- $query = OrderMain::find()
- ->where(['and', 'CANCEL_FLAG=0', 'ORDER_PROD_TYPE in (25, 26)', ['or', 'ORDER_ID=' . $order_id, 'PARENT_ORDER_ID=' . $order_id]])
- ->all();
-
- return $query;
- }
-
- /**
- * User: wangxj
- * 酒店状态发生变化时,设置memcache,供酒店供应商提示获取缓存
- *
- * @param $order_id
- * @param $type
- */
- public static function setMemcache($order_id, $type, $prod_top_org_id, $prod_name, $expire = 0)
- {
- $cache = Yii::$app->cacheCS;
- $cache->encrypt = false;
- $newOrder = $cache->get('hotel_newOrder');
- $tmp = array();
- if ($order_id) {
- if ($newOrder && count($newOrder) > 0) {
- //按天为单位读取缓存
- if (isset($newOrder[$prod_top_org_id])) {
-
- array_push($newOrder[$prod_top_org_id], array('order_id' => $order_id, 'type' => $type, 'room_name' => $prod_name, 'status' => 0));
- } else {
- $newOrder[$prod_top_org_id] = array(array('order_id' => $order_id, 'type' => $type, 'room_name' => $prod_name, 'status' => 0));
- }
- $tmp = $newOrder;
-
- } else {
- $tmp[$prod_top_org_id] = array(array('order_id' => $order_id, 'type' => $type, 'room_name' => $prod_name, 'status' => 0));
- }
- $cache->set('hotel_newOrder', $tmp, 0, $expire);
- }
- }
-
- /**
- * User: wangxj
- * 取消单时,清除缓存中的订单
- *
- * @param $order_id
- */
- public function resetMem()
- {
- OrderMain::resetMemcache($this->ORDER_ID);
- }
-
- public static function resetMemcache($order_id)
- {
- $cache = Yii::$app->cacheCS;
- $cache->encrypt = false;
- $newOrder = $cache->get('hotel_newOrder');
-
- if ($newOrder && count($newOrder) > 0) {
- foreach ($newOrder as &$hotels) {
- if (count($hotels) > 0) {
- foreach ($hotels as $key => &$order) {
- if ($order['order_id'] == $order_id) {
- unset($hotels[$key]);
- $cache->set('hotel_newOrder', $newOrder);
- }
- }
-
- }
- }
- }
- }
-
- /**
- * User:Steven
- * Desc:有损取消没有地方记录,需要按照发单人统计订单,服务于客服的绩效分析
- */
- public function getTemOrder()
- {
- $sql = "SELECT count(c.order_id) AS count,d.USER_NAME,d.TRUE_NAME FROM (SELECT a.order_id,b.CREATE_USER_ID,b.ORDER_STATUS FROM order_main a LEFT JOIN order_ht_status_log b ON a.ORDER_ID=b.ORDER_ID AND b.ORDER_STATUS=198
- WHERE a.PARENT_ORDER_ID=0 AND a.CANCEL_FLAG=0 AND a.ORDER_VALID_STATUS=1 AND a.DOCKING_TYPE=556 AND a.CREATE_TIME BETWEEN '2017-06-01 00:00:00' AND '2017-06-30 00:00:00') AS c
- LEFT JOIN base_user d ON c.CREATE_USER_ID=d.ID AND d.CANCEL_FLAG=0
- WHERE c.ORDER_STATUS IS NOT NULL GROUP BY c.CREATE_USER_ID ORDER BY count;";
- $connection = Yii::$app->db;
- $res = $connection->createCommand($sql)->queryAll();
-
- return $res;
- }
-
- /**
- * Notes:接受渠道订单
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:14
- * @return bool
- * @throws Exception
- */
- public function receiveChannel()
- {
- $tran = Yii::$app->db->beginTransaction();
-
- try {
- $count = OrderMain::updateAll([
- 'CHANNEL_ORDER_STATUS' => $this->CHANNEL_ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time()),
- ],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
-
- //保存日志
- $this->saveLog('receive_channel', $this->getOldAttribute('ORDER_STATUS'));
-
- if (!$this->save() || $count <= 0) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * Notes:拒绝渠道订单
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:16
- * @param $flag
- * @return bool
- * @throws Exception
- */
- public function refuseChannel($flag)
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- $count = OrderMain::updateAll([
- 'CHANNEL_ORDER_STATUS' => $this->CHANNEL_ORDER_STATUS,
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'ORDER_VALID_STATUS' => $this->ORDER_VALID_STATUS,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time()),
- ],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
-
- //保存日志
- $this->saveLog('refuse_channel', $this->getOldAttribute('ORDER_STATUS'));
- if ($flag) {
- $rs = $this->rollbackStocks();
- if (!$rs) {
- throw new Exception('');
- }
- }
-
- if (!$this->save() || $count <= 0) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
-
- /**
- * Notes:酒店确认,输入确认号
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:19
- * @return bool
- * @throws Exception
- */
- public function confirm()
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'CHANNEL_ORDER_STATUS' => $this->CHANNEL_ORDER_STATUS,
- 'ORDER_CONFIRM_CODE' => $this->ORDER_CONFIRM_CODE,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'ORDER_LEVEL' => $this->ORDER_LEVEL,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time()),
- ],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
-
- //保存日志
- $this->saveLog('confirm', $this->getOldAttribute('ORDER_STATUS'));
-
- if (!$this->save() || $count <= 0) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * Notes:发单
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:22
- * @return bool
- * @throws Exception
- */
- public function sendOrder()
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- //更新子订单
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'ORDER_LEVEL' => $this->ORDER_LEVEL,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
- //保存日志 order_ht_status_log该表中订单的状态信息也在这这个方法里面处理
- $this->saveLog('send_order', $this->getOldAttribute('ORDER_STATUS'));
-
- if (!$this->save() || $count <= 0) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * Notes:退改
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:25
- * @param $msg
- * @return bool
- * @throws Exception
- */
- public function backChange($msg)
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- //更新子订单
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
- //保存日志
- $this->saveLog('back-change', $this->getOldAttribute('ORDER_STATUS'), $msg);
- $order_apply_bounce = new OrderHtApplyBounce();
- $order_apply_bounce->ORDER_ID = $this->ORDER_ID;
- $order_apply_bounce->CREATE_USER_ID = Yii::$app->user->id;
- $order_apply_bounce->UPDATE_USER_ID = Yii::$app->user->id;
- $order_apply_bounce->REASON = $msg;
- $order_apply_bounce->CREATE_TIME = date('Y-m-d H:i:s', time());
- $order_apply_bounce->UPDATE_TIME = date('Y-m-d H:i:s', time());
-
- if (!$this->save() || $count <= 0 || !$order_apply_bounce->save()) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * Notes:向酒店供应商申请退单
- * User: Steven
- * Date: 2018/1/3
- * Time: 16:31
- * @return bool
- * @throws Exception
- */
- public function cancelConfirming()
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- //更新子订单
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
- //保存日志
- $this->saveLog('cancel-confirming', $this->getOldAttribute('ORDER_STATUS'));
-
- if (!$this->save() || $count <= 0) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * Notes:同意退单
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:33
- * @param bool $type
- * @param $action
- * @return bool
- * @throws Exception
- */
- public function agreeCancel($type = true, $action)
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- //更新子订单
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'CHANNEL_ORDER_STATUS' => $this->CHANNEL_ORDER_STATUS,
- 'ORDER_VALID_STATUS' => $this->ORDER_VALID_STATUS,
- 'ORDER_LEVEL' => $this->ORDER_LEVEL,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time()),
- ],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
- //回退库存
- $rs = $this->rollbackStocks();
- //保存日志
- $this->saveLog($action, $this->getOldAttribute('ORDER_STATUS'));
- if (!$this->save() || $count <= 0 || !$rs) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * Notes:拒绝退单
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:41
- * @return bool
- * @throws Exception
- */
- public function refuseCancel()
- {
- /*if (Yii::$app->db->transaction)
- $commitFlag = false;
- else {
- $commitFlag = true;
- $tran = Yii::$app->db->beginTransaction();
- }*/
- $tran = Yii::$app->db->beginTransaction();
- try {
- //更新子订单
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'CHANNEL_ORDER_STATUS' => $this->CHANNEL_ORDER_STATUS,
- 'ORDER_VALID_STATUS' => $this->ORDER_VALID_STATUS,
- 'ORDER_LEVEL' => $this->ORDER_LEVEL,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time()),
- ],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
- //保存日志
- $this->saveLog('refuse-cancel', $this->getOldAttribute('ORDER_STATUS'));
- if (!$this->save() || $count <= 0) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
-
- /**
- * Notes:取消退改
- * User: Steven
- * Date: 2018/1/3
- * Time: 16:13
- * @return bool
- * @throws Exception
- */
- public function cancelBackChange()
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- //更新子订单
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
- //保存日志
- $this->saveLog('cancel_back_change', $this->getOldAttribute('ORDER_STATUS'));
- if (!$this->save() || $count <= 0) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * Notes:取消订单
- * User: Steven
- * Date: 2018/1/4
- * Time: 19:04
- * @param $reason
- * @return bool
- * @throws Exception
- */
- public function cancelOrder($reason = '')
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- #region 1、更新子订单
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'CHANNEL_ORDER_STATUS' => $this->CHANNEL_ORDER_STATUS,
- 'ORDER_VALID_STATUS' => $this->ORDER_VALID_STATUS,
- 'ORDER_LEVEL' => $this->ORDER_LEVEL,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time()),
- ],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
- #endregion
- //回退库存
- $resRollback = $this->rollbackStocks();
- if (!$this->save() || !$resRollback || $count < 0) {
- throw new Exception('取消失败');
- }
- $this->saveLog('cancel_order', $this->getOldAttribute('ORDER_STATUS'));
- $tran->commit();
-
- // 下单渠道供应商预付款处理及房态推送处理
- $room_info = OperaHotelRoom::findOne(['HOTEL_ID' => $this->PARENT_PROD_ID, 'CANCEL_FLAG' => 0, 'ROOM_TYPE' => $this->PROD_ID]);
- $soap_param = array('hotel_id' => $this->PARENT_PROD_ID, 'parent_room_type' => $room_info->PARENT_ROOM_TYPE, 'room_type' => $this->PROD_ID,
- 'begin_date' => $this->PROD_START_STATION_DATE, 'end_date' => $this->PROD_END_STATION_DATE, 'channel_id' => $this->OUTSIDE_SALE_ORG_ID);
- zHttp::syncRequest(CommonOrder::SEND_REQUEST_GET, Yii::$app->params['prepay_interface'], array('type' => CommonOrder::CANCEL_ORDER_DEDUCTION_TYPE, 'order_id' => $this->ORDER_ID));
- zHttp::syncRequest(CommonOrder::SEND_REQUEST_GET, Yii::$app->params['push_info_interface'], array('param' => $soap_param));
- } catch (\Exception $e) {
- $error = $e->getMessage();
- $arr = array(
- "agentid" => 1000002,
- "title" => '订单取消失败:',
- "msg" => "订单取消失败\n订单号:" . $this->ORDER_ID . "\n失败原因:" . $error,
- "touser" => $this->sendUser);
- zOfficeWechat::sendMsg($arr);
- $tran->rollBack();
-
- return false;
- }
-
- return true;
- }
-
-
- /**
- * Notes: 供应商拒单,输入拒单原因
- * User: Steven
- * Date: 2018/1/18
- * Time: 11:49
- * @param $msg
- * @param string $type
- * @return bool
- * @throws Exception
- */
- public function refuse($msg, $type = 'refuse')
- {
- $tran = Yii::$app->db->beginTransaction();
- try {
- $count = OrderMain::updateAll([
- 'ORDER_STATUS' => $this->ORDER_STATUS,
- 'CHANNEL_ORDER_STATUS' => $this->CHANNEL_ORDER_STATUS,
- 'UPDATE_USER_ID' => $this->UPDATE_USER_ID,
- 'ORDER_LEVEL' => $this->ORDER_LEVEL,
- 'ORDER_VALID_STATUS' => $this->ORDER_VALID_STATUS,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time()),
- ],
- [
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- ]);
-
- //回退库存
- $rollback = $this->rollbackStocks();
-
- //保存日志
- $this->saveLog($type, $this->getOldAttribute('ORDER_STATUS'), $msg);
-
- if (!$this->save() || $count <= 0 || !$rollback) {
- throw new Exception('');
- }
- $tran->commit();
-
- return true;
- } catch (Exception $exception) {
- $tran->rollBack();
-
- return false;
- }
- }
-
- /**
- * 添加备注
- */
- public function addNote()
- {
-
- }
-
- /**
- * 保存日志
- *
- * @param $type string 类型
- * @param $status_flag mixed 为false时,不需要保存订单状态日志,否则将 $status_flag作为订单原状态
- */
- public function saveLog($type, $status_flag = false, $msg = '')
- {
- //写订单日志、状态日志
- //订单表没有基础房型id,需要查一下
- $baseRoom = OperaHotelRoom::findOne(['CANCEL_FLAG' => 0, 'HOTEL_ID' => $this->PARENT_PROD_ID, 'ROOM_TYPE' => $this->PROD_ID]);
- $orderLog = new OperaHotelLog();
- $orderLog->CREATE_USER_ID = Yii::$app->user->id;
- $orderLog->HOTEL_ID = $this->PARENT_PROD_ID;
- $orderLog->LOG_TYPE = OperaHotelLog::LOG_TYPE_ORDER;
- $orderLog->ROOM_TYPE = $this->PROD_ID;
- $orderLog->PARENT_ROOM_TYPE = $baseRoom->PARENT_ROOM_TYPE;
- switch ($type) {
- case 'receive_channel':
- $orderLog->LOG_DESC = "接受渠道订单:" . $this->ORDER_ID;
- break;
- case 'refuse_channel':
- $orderLog->LOG_DESC = "拒绝渠道订单:" . $this->ORDER_ID;
- break;
- case 'refuse':
- $orderLog->LOG_DESC = "拒绝了订单:" . $this->ORDER_ID . "(原因:" . $msg . ")";
- break;
- case 'confirm':
- $orderLog->LOG_DESC = "确认订单:" . $this->ORDER_ID . "(确认号:" . $this->ORDER_CONFIRM_CODE . ")";
- break;
- case 'note':
- $orderLog->LOG_DESC = $msg;
- break;
- case 'cancel_confirm':
- $orderLog->LOG_DESC = "供应商确认退单,订单号为:" . $this->ORDER_ID;
- break;
- case 'cancel_reject':
- $orderLog->LOG_DESC = "供应商拒绝退单,订单号为:" . $this->ORDER_ID;
- break;
- case 'send_order': //发单
- $orderLog->LOG_DESC = "订单号为:" . $this->ORDER_ID . '的状态由待发单变为待确认';
- break;
- case 'cancel_order': //取消单
- $orderLog->LOG_DESC = "取消订单,订单号为:" . $this->ORDER_ID;
- break;
- case 'back-change': //退改
- $orderLog->LOG_DESC = "发起退改,退改原因:" . $msg;
- break;
- case 'cancel-confirming': //申请退单
- $orderLog->LOG_DESC = "向供应商申请退单";
- break;
- case 'cancel_back_change': //申请退单
- $orderLog->LOG_DESC = "取消退改";
- break;
- case 'agree-cancel': //申请退单
- $orderLog->LOG_DESC = "同意退单,订单已取消";
- break;
- case 'refuse-cancel': //申请退单
- $orderLog->LOG_DESC = "拒绝退单";
- break;
- case 'exception-order': //申请退单
- $orderLog->LOG_DESC = "直连失败订单,直连状态由录单变为直连,订单号:" . $this->ORDER_ID . ",渠道单号:" . $this->OUTSIDE_ORDER_NO;
- break;
- case 'update_confirm': //申请退单
- $orderLog->LOG_DESC = "将确认号(" . $this->ORDER_CONFIRM_CODE . ")修改为:" . $msg;
- break;
- case 'add_white_list': //添加白名单
- $orderLog->LOG_DESC = "添加白名单订单号:" . $this->ORDER_ID . ',白名单类型:' . $msg;
- break;
- case 'send_email_success':
- $orderLog->LOG_DESC = "通过邮件形式发送订单信息到酒店,邮件发送成功,收件人:" . $msg;
- break;
- case 'send_email_error':
- $orderLog->LOG_DESC = "通过邮件形式发送订单信息到酒店,邮件发送失败,收件人:" . $msg;
- break;
- default:
- $orderLog->LOG_DESC = '';
- }
- $orderLog->ORDER_ID = $this->ORDER_ID;
- $orderLog->save();
-
- if ($status_flag) {
- $statusLog = new OrderHtStatusLog();
- $statusLog->CREATE_USER_ID = Yii::$app->user->id;
- $statusLog->UPDATE_USER_ID = Yii::$app->user->id;
- $statusLog->BEFORE_STATUS = $status_flag;
- $statusLog->ORDER_STATUS = $this->ORDER_STATUS;
- $statusLog->ORDER_ID = $this->ORDER_ID;
- $statusLog->save();
- }
- }
-
-
- /**
- * 下载确认修改单的word
- */
- public function wordHtml($down_type)
- {
- $user_id = Yii::$app->user->id;
- $order_id = $this->ORDER_ID;
- $type = OrderMain::order_level_array[$this->ORDER_LEVEL];
- $confirm_org = OperaHotel::find()->joinWith('confirmOrganization')->where(['HOTEL_ID' => $this->PARENT_PROD_ID])->one();
- $confirm_org_full_name = $confirm_org->confirmOrganization->ORG_NAME;
- $hotel_name = $confirm_org->HOTEL_NAME;
- $product_name = $this->PROD_NAME;
- $customer_name = $this->CUSTOMER_NAME;
- $base_price = $this->BASE_PRICE;
- $customer_mobile = $this->CUSTOMER_MOBILE;
- $date_check_in = $this->PROD_START_STATION_DATE;
- $date_check_out = $this->PROD_END_STATION_DATE;
- $confirm_code = $this->ORDER_CONFIRM_CODE;
- //从日志查询最后一次确认人 cs系统导出不需要确认人信息,确认人信息通过邮件确认
- $confirm_user = '';
- if ($down_type) {
- $log = OrderHtStatusLog::find()->joinWith('user')->where([OrderHtStatusLog::tableName() . '.CANCEL_FLAG' => 0,
- 'ORDER_ID' => $order_id, 'ORDER_STATUS' => OrderMain::ORDER_STATUS_CONFIRMED])
- ->orderBy([OrderHtStatusLog::tableName() . '.CREATE_TIME' => SORT_DESC])->one();
- $confirm_user = $log->user->TRUE_NAME;
- }
-
- //备注
- $notes = OrderComment::findAll(['ORDER_ID' => $order_id, 'CANCEL_FLAG' => 0, 'COMMENT_TYPE' => OrderComment::TYPE_PUBLIC]);
- $customer_memo = '';
- if (!empty($notes)) {
- foreach ($notes as $note) {
- $customer_memo .= $note->COMMENT_TXT . '<br />';
- }
- $customer_memo = substr($customer_memo, 0, -6);
- }
- $confirm_org_id = $confirm_org->CONFIRM_FROM;
- if ($confirm_org_id == 1) {
- $head_org_name = "上海南顺";
- } elseif ($confirm_org_id == 2) {
- $head_org_name = '上海蜘蛛行';
- } elseif ($confirm_org_id == 3) {
- $head_org_name = '上海自在';
- } elseif ($confirm_org_id == 4) {
- $head_org_name = '杭州启程';
- } elseif ($confirm_org_id == 5) {
- $head_org_name = '杭州倒计时';
- } elseif ($confirm_org_id == 6) {
- $head_org_name = '千旅集散';
- }elseif ($confirm_org_id == 7) {
- $head_org_name = '昆山文商旅';
- } else {
- $head_org_name = '上海蜘蛛行';
- }
-
- //供应商
- $supplier = BaseSupplier::find()->joinWith('settleType')->joinWith('settleCycle')->where(['base_supplier.ID' => $confirm_org->SUPPLIER_ID])->one();
- $payType = $supplier->settleType->TYPE_NAME;
- $paySeq = $supplier->settleCycle->TYPE_NAME;
- $phpWord = new zPhpWord();
-
- //入住详情
- $mes = '';
- $total_price = 0;
- $messageHeight = 70;
- $sub_orders = OrderMain::find()
- ->addSelect([
- '*',
- 'count(*) as order_count',
- 'sum(base_price) as order_price',
- ])->asArray()->where(['PARENT_ORDER_ID' => $order_id, 'CANCEL_FLAG' => 0])->groupBy(['PROD_START_STATION_DATE', 'STOCK_TYPE'])->all();
- if (!empty($sub_orders)) {
- foreach ($sub_orders as $v) {
- $mes .= "<div>" . $v['PROD_START_STATION_DATE'] . ' ' . ' ' . '结算价:' . $v['BASE_PRICE'] . '元/间' . ' 数量:' . $v['order_count'] . '间 ' .
- (in_array($v['PARENT_PROD_ID'], [81, 23]) ? ($v['STOCK_TYPE'] == 228 ? '买断房价格' : '其他价格') : '') . "</div>";
- $total_price += $v['BASE_PRICE'] * $v['order_count'];
- $messageHeight += 30;
- }
- }
- $messageHeight .= 'px';
- $message = $mes . '订单总计:' . $total_price . '元';
-
- //当前操作人及时间
- /* @var $login_user User */
- $login_user = Yii::$app->user->identity;
- $action_user_name = $login_user->TRUE_NAME;
- // $action_date = date('Y-m-d H:i');
- $action_date = date('Y-m-d');
-
- return <<< WORD
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF - 8">
- <title>{$type}</title>
- </head>
- <style>
- td {
- padding: 6px; height: 45px;
- }
- </style>
- <body style="margin: 0 auto;width: 800px;font-family: 宋体">
- <div>
- <!--头部-->
- <div style="width: 100%;text-align: center;margin-top: 15px;">
- <span style="font-family: 宋体;font-size: 42px;font-weight: 600;">{$head_org_name}{$type}</span></div>
- </div>
- <!--body部-->
- <div style="margin-top: 30px;">
- <table border="2" cellpadding="0" cellspacing="0"
- style="width: 100%;height: 100%; border-color: #a9c6c9;border-collapse: collapse;">
- <tr>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">订单号:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;text-align: center;">{$order_id}</td>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">付款方式:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;text-align: center;">{$payType} {$paySeq}</td>
- </tr>
- <tr>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">发 自:</th>
- <td colspan="3" style="padding: 4px; height: 45px;font-size: 16px;text-align: center;font-weight: 600;">{$confirm_org_full_name}</td>
- </tr>
- <tr>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">传 真:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;text-align: center;">0571-86697329</td>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">电 话:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;text-align: center;">0571-86699832</td>
- </tr>
- </table>
- <div style='height: 60px;'> </div>
- <table border="2" cellpadding="0" cellspacing="0"
- style="width: 100%;height: 100%; border-color: #a9c6c9;border-collapse: collapse;">
- <tr >
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">预订房型:</th>
- <td colspan="3" style="padding: 4px; height: 45px;font-size: 16px;text-align: center;font-weight: 600;">{$hotel_name} {$product_name}</td>
- </tr>
- <tr>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">客人姓名:</th>
- <td colspan="3" style="padding: 4px; height: 45px;font-size: 16px;text-align: center;">{$customer_name}</td>
- </tr>
- <tr>
- <th style="padding: 4px; height: 50px;font-size: 16px;width: 120px;">结算总价:</th>
- <td colspan="3" style="padding: 4px; height: 50px;font-size: 16px;text-align: center;"> {$base_price}元</td>
- </tr>
- <tr>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">入住日期:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;font-weight: 600;"> {$date_check_in}</td>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">离店日期:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;font-weight: 600;"> {$date_check_out}</td>
- </tr>
- <tr style="height: 70px;">
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">备 注:</th>
- <td colspan="3" style="padding: 4px; height: 45px;font-size: 16px;text-align: center;">{$customer_memo}</td>
- </tr>
- <tr>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">酒店确认号:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;"> {$confirm_code}</td>
- <th style="padding: 4px; height: 45px;font-size: 16px;width: 120px;">确认人:</th>
- <td style="padding: 4px; height: 45px;font-size: 16px;">$confirm_user</td>
- </tr>
- <tr style="height: {$messageHeight};">
- <td colspan="4" style="line-height: 20px; font-size: 16px;padding-left: 20px; padding-right: 20px;word-break:break-all">{$message}</td>
- </tr>
- </table>
- <div style="height:50px;padding: 20px;float: right;text-align: right;"><br>
- <table>
- <tr >
- <td style="width: 50%;"></td>
- <td style="font-size: 16px;font-weight: 600;">操作人:</td><td style="font-size: 16px;">{$action_user_name}</td>
- </tr>
- <tr >
- <td style="width: 50%"></td>
- <td style="font-weight: 600;font-size: 16px;">操作日期:</td><td style="font-size: 16px;">{$action_date}</td>
- </tr>
- </table>
- <!-- <span style="font-weight: 600;font-size: 13px;">操 作 人:</span><span style="font-size: 13px;">王海顺</span><br><br>
- <span style="font-weight: 600;margin-top: 5px;font-size: 13px;">操作日期12:</span><span style="font-size: 13px;">2016-12-12</span>-->
- </div>
- </div>
- <div style="padding: 20px;width:800px;text-align: center;margin-top: 55px;">
- <span style="font-size: 12px;color: darkgray">* {$confirm_org_full_name} 电话:021-33280578 传真:021-33280184</span>
- </div>
- </div>
- </div>
- </body>
- </html>
- WORD;
- }
-
- /*
- * 酒店供应商导出订单列表所需的列表头
- */
- public static function supplierExportAttributes()
- {
- return [
- 'ORDER_ID',
- 'CREATE_TIME',
- 'PARENT_PROD_NAME',
- 'PROD_NAME',
- 'PROD_START_STATION_DATE',
- 'PROD_END_STATION_DATE',
- 'room_count',
- 'CUSTOMER_NAME',
- 'CUSTOMER_MOBILE',
- 'BASE_PRICE',
- 'ORDER_STATUS',
- 'CUSTOMER_MEMO',
- ];
- }
-
- /**
- * Notes:新的退单逻辑
- * 该接口没有关于订单的更新,需要在该接口外做处理
- * User: Steven
- * Date: 2018/1/4
- * Time: 18:38
- * @return bool
- */
- public function rollbackStocks()
- {
- //查询子订单
- $orders = OrderMain::findAll([
- 'CANCEL_FLAG' => 0,
- 'PARENT_ORDER_ID' => $this->ORDER_ID,
- 'ORDER_PROD_TYPE' => self::ORDER_PROD_TYPE_SUM,
- 'OUTSIDE_SALE_ORG_ID' => $this->OUTSIDE_SALE_ORG_ID,
- ]);
- $room_distrib = OperaRoomDistrib::findOne([
- 'ROOM_ID' => $this->RUN_ID,
- 'DISTRIB_ID' => $this->OUTSIDE_SALE_ORG_ID,
- 'CANCEL_FLAG' => 0,
- ]);
- foreach ($orders as $order) {
- //渠道已售数量要减去
- $distrib = RunHotelDistrib::findOne([
- 'HOTEL_ID' => $order->PARENT_PROD_ID,
- 'ROOM_TYPE' => $order->PROD_ID,
- 'RUN_DATE' => $order->RUN_DATE,
- 'DISTRIB_ID' => $order->OUTSIDE_SALE_ORG_ID,
- ]);
- $distrib->SALED_COUNT == 0 ? true : $distrib->SALED_COUNT -= 1;
- $runHotel = RunHotel::findOne([
- 'HOTEL_ID' => $order->PARENT_PROD_ID,
- 'BASE_ROOM_TYPE' => $distrib->BASE_ROOM_TYPE, //订单表没有这字段,但是run_hotel_distrib有
- 'RUN_DATE' => $order->RUN_DATE,
- 'STOCK_TYPE' => $order->STOCK_TYPE,
- ]);
- if ($order->RUN_BUS_SEAT_TYPE == self::DISTRIB_STOCK_TYPE_RESERVE) { //消耗渠道的库存类型:1:固定数量
- //这里需要处理:当当前房型、当前渠道设置了保留房的失效时间,如果当前时间属于失效时间范围内,则渠道库存不退回,基础房型中的保留房库存不回退,但买断房库存需要回退
- if (!empty($room_distrib['LATEST_COMFIRM_TIME']) && $room_distrib['LATEST_COMFIRM_TIME'] != -1) { //说明有保留房的最晚立即确认时间
- $time_arr = explode(',', $room_distrib['LATEST_COMFIRM_TIME']);
- $date = date('Y-m-d', strtotime($order->RUN_DATE . "-{$time_arr[0]} day"));
- $latest_confirm_time = $date . ' ' . $time_arr[1];//该子房型在$order->RUN_DATE这一天看来,保留房失效的时间起点
- if (time() >= strtotime($latest_confirm_time)) { //如果这个日期消耗的库存是保留房,那么这个日期改保留房已经过期 渠道固定数量不退回,基础房型如果消耗的是保留房,也不退回
- if ($order->STOCK_TYPE != self::STOCK_TYPE_RESERVE) { //消耗的基础房型的库存不是保留 要回退 但是,如果是保留的话,不回退
- $runHotel->REMAINING_COUNT += 1;
- $runHotel->SALED_COUNT == 0 ? true : $runHotel->SALED_COUNT -= 1;
- // $distrib->REMAINING_COUNT += 1;
- } else { //消耗的是保留 不回退
- $runHotel->SALED_COUNT == 0 ? true : $runHotel->SALED_COUNT -= 1;
- }
- } else { //保留房库存没有过期 所有库存照常回退
- $runHotel->REMAINING_COUNT += 1;
- $runHotel->SALED_COUNT == 0 ? true : $runHotel->SALED_COUNT -= 1;
- $distrib->REMAINING_COUNT += 1;
- }
- } else { //没有设置保留房失效时间 所有库存照常回退
- $runHotel->REMAINING_COUNT += 1;
- $runHotel->SALED_COUNT == 0 ? true : $runHotel->SALED_COUNT -= 1;
- $distrib->REMAINING_COUNT += 1;
- }
- } else { //消耗的是渠道的超卖 即没有保留房,也即没有保留房失效时间之说
- $runHotel->REMAINING_COUNT += 1;
- $runHotel->SALED_COUNT == 0 ? true : $runHotel->SALED_COUNT -= 1;
- }
- $resRunHotel = $runHotel->save();
- $resDistrib = $distrib->save();
- if (!$resRunHotel || !$resDistrib) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * @Author wanglg
- * @Desc 获取库存记录,用于修改入住需求的库存合并
- * @param $params
- */
- public function getStockArr($params)
- {
- $orders = OrderMain::findAll(['PRRENT_ORDER_ID' => $params['order_id'], 'CANCEL_FLAG' => 0, 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_SUM,
- 'OUTSIDE_SALE_ORG_ID' => $params['DistribID']]);
- $room_distrib = OperaRoomDistrib::findOne([
- 'ROOM_ID' => $params['RoomId'],
- 'DISTRIB_ID' => $params['DistribID'],
- 'CANCEL_FLAG' => 0,
- ]);
-
- OperaHotelRoom::find()
- ->joinWith('runHotel b')
- ->where(['a.ID' => $params['RoomID'], 'a.CANCEL_FLAG' => 0,])
- ->from('opera_hotel_room a');
- foreach ($orders as $order) {
- $old_stock = OperaHotelRoom::find()
- ->joinWith('runHotel b')
- ->where(['a.ID' => $params['RoomID'], 'a.CANCEL_FLAG' => 0, 'b.RUN_DATE' => $order->RUN_DATE, 'b.STOCK_TYPE' => $order->STOCK_TYPE])
- ->from('opera_hotel_room a')
- ->asArray()->one();
- }
- }
-
- /**
- * 回退库存
- * 正常取消(包括拒单),库存和已售数均回退
- * 异常取消,已售数均回退,基础房型各项数据均回退,渠道固定数量不回退
- *
- * @param bool $type 是否为正常取消
- * @return bool
- */
- public function rollbackStock($type = true)
- {
- $logger = new TopLogger();
- $orders = OrderMain::findAll(['CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => $this->ORDER_ID]);
- foreach ($orders as $order) {
- $distrib = RunHotelDistrib::findOne([
- 'HOTEL_ID' => $order->PARENT_PROD_ID,
- 'ROOM_TYPE' => $order->PROD_ID,
- 'RUN_DATE' => $order->RUN_DATE,
- 'DISTRIB_ID' => $order->OUTSIDE_SALE_ORG_ID,
- ]);
- $distrib->SALED_COUNT -= 1;
- $runHotel = RunHotel::findOne([
- 'HOTEL_ID' => $order->PARENT_PROD_ID,
- 'BASE_ROOM_TYPE' => $distrib->BASE_ROOM_TYPE, //订单表没有这字段,但是run_hotel_distrib有
- 'RUN_DATE' => $order->RUN_DATE,
- 'STOCK_TYPE' => $order->STOCK_TYPE,
- ]);
- $logger->log([date("Y-m-d H:i:s"), '回退库存:' . $distrib->SALED_COUNT . ', 订单信息:' . $this->ORDER_ID . ',剩余库存数量:' . $runHotel->REMAINING_COUNT . PHP_EOL], 'ali/error');
- // if ($order->STOCK_TYPE != OrderMain::STOCK_TYPE_INQUIRY) {
- if ($type) {
- $distrib->REMAINING_COUNT += 1;
- $runHotel->REMAINING_COUNT += 1;
- } else {
- $runHotel->REMAINING_COUNT += 1;
- }
- $runHotel->SALED_COUNT -= 1;
- $rs_run_hotel = $runHotel->save();
- $rs_distribe = $distrib->save();
- $logger->log([date("Y-m-d H:i:s"), '回退库存,订单信息:' . $this->ORDER_ID . ',run_hotel_distrib执行结果' . $rs_distribe . ',run_hotel执行结果:' . $rs_run_hotel . PHP_EOL], 'ali/error');
- if (!$rs_run_hotel || !$rs_distribe) {
- return false;
- }
- }
- if ($this->DOCKING_TYPE != OrderMain::ORDER_TYPE_CHANNEL) {
- //如果是携程渠道,并且是直连的房型,线下操作后,要及时推送最新的房态到携程
- $diret_info = OrderMain::find()
- ->leftJoin('opera_hotel_room b', 'a.PARENT_PROD_ID=b.HOTEL_ID and a.PROD_ID=b.ROOM_TYPE and b.CANCEL_FLAG=0')
- ->leftJoin('channel_hotel_relation c', 'a.PARENT_PROD_ID=c.HotelId and c.ChannelId=' . Yii::$app->params['ctrip']['relation_supplier_id'])
- ->leftJoin('channel_room_relation d', 'b.ID=d.RoomId and d.ChannelId=' . Yii::$app->params['ctrip']['relation_supplier_id'])
- ->from('order_main a')
- ->select(['a.ORDER_ID', 'a.PROD_START_STATION_DATE', 'a.PROD_END_STATION_DATE', 'b.ID', 'b.HOTEL_ID', 'b.PARENT_ROOM_TYPE', 'b.ROOM_TYPE', 'c.ChannelHotelId', 'd.ChannelRoomId'])
- ->where(['a.ORDER_ID' => $this->ORDER_ID, 'a.PARENT_ORDER_ID' => 0, 'a.ORDER_PROD_TYPE' => 25, 'a.CANCEL_FLAG' => 0])
- // -> createCommand() -> getRawSql();
- ->asArray()->one();
- if (!empty($diret_info['ChannelHotelId']) && isset($diret_info['ChannelRoomId'])) {
- //向携程推送房态
- $status_data = ['hotel_id' => $diret_info['HOTEL_ID'], 'parent_room_type' => $diret_info['PARENT_ROOM_TYPE'], 'room_type' => $diret_info['ROOM_TYPE'],
- 'StartDate' => $diret_info['PROD_START_STATION_DATE'], 'EndDate' => $diret_info['PROD_END_STATION_DATE']];
- $price_data = ['hotel_id' => $diret_info['HOTEL_ID'], 'parent_room_type' => $diret_info['PARENT_ROOM_TYPE'], 'room_type' => $diret_info['ROOM_TYPE'],
- 'StartDate' => $diret_info['PROD_START_STATION_DATE'], 'EndDate' => $diret_info['PROD_END_STATION_DATE']];
- $quantity_data = ['hotel_id' => $diret_info['HOTEL_ID'], 'parent_room_type' => $diret_info['PARENT_ROOM_TYPE'], 'room_type' => $diret_info['ROOM_TYPE'],
- 'StartDate' => $diret_info['PROD_START_STATION_DATE'], 'EndDate' => $diret_info['PROD_END_STATION_DATE']];
- $log = new TopLogger();
- $room_info_res = Yii::$app->runAction('hotel/ctrip/set-room-info', ['param' => $status_data]);
- $log->log([date("Y-m-d H:i:s"), '推送房态结果:' . $room_info_res . PHP_EOL], 'ali/error');
- $room_price_res = Yii::$app->runAction('hotel/ctrip/set-room-price', ['param' => $price_data]);
- $log->log([date("Y-m-d H:i:s"), '推送房价结果:' . $room_price_res . PHP_EOL], 'ali/error');
- $room_quantity_res = Yii::$app->runAction('hotel/ctrip/update-room-quantity', ['param' => $quantity_data]);
- $log->log([date("Y-m-d H:i:s"), '推送保留房结果:' . $room_quantity_res . PHP_EOL], 'ali/error');
- }
- }
- $log = new TopLogger();
- $model = new BaseBalance($this->ORDER_ID, 2, '订单取消,金额回退');
- $supplier_data = $model->cancelBalanceMain(); //供应商取消
- $log->log([date("Y-m-d H:i:s"), '供应商:' . json_encode($supplier_data) . PHP_EOL], 'yufukuan');
- $channel_data = $model->cancelChannelBalanceMain(); // 渠道商取消
- $log->log([date("Y-m-d H:i:s"), '渠道商:' . json_encode($channel_data) . PHP_EOL], 'yufukuan');
-
- return true;
- }
-
- /**
- * 订单是否可下,区别于直接
- *
- * @author wangxj
- */
- public function orderAvailable()
- {
- $room = $this->operaHotelRoom;
- if ($room == null || $room->IS_ONSALE == 0) {
- $this->addError('PROD_ID', '房型已下线');
- }
-
- $roomDistrib = OperaRoomDistrib::findOne(['ROOM_ID' => $room->ID, 'DISTRIB_ID' => $this->OUTSIDE_SALE_ORG_ID, 'CANCEL_FLAG' => 0]);
- if ($roomDistrib == null || $roomDistrib->AUTHORITY_STATUS == 0) {
- $this->addError('OUTSIDE_SALE_ORG_ID', '该房型渠道授权已关闭');
- } else {
- $channelRoom = $this->channelRoom;
- if ($channelRoom->RUN_STATUS == 329) {
- $this->addError('PROD_ID', $this->RUN_DATE . ' 已关房');
- }
-
- $subRoom = $channelRoom->runHotelSubRoom;
- if ($subRoom == null || $subRoom->RUN_STATUS == 0) {
- $this->addError('PROD_ID', $this->RUN_DATE . ' 已满房');
- }
-
- $roomStock = $channelRoom->roomStock;
- if ($roomStock == null) {
- $this->addError('PROD_ID', $this->RUN_DATE . ' 基础库存数据错误,请联系后台查看原因');
- } else {
- $count = 0;
- foreach ($roomStock as $item) {
- $count += $item->REMAINING_COUNT;
- }
- if ($count < $this->room_count) {
- $this->addError('PROD_ID', $this->RUN_DATE . ' 基础房型库存不足');
- }
- }
-
- if ($channelRoom->REMAINING_COUNT < $this->room_count && $channelRoom->OVERSELL_FLAG == 0) {
- $this->addError('PROD_ID', $this->RUN_DATE . ' 房型渠道库存不足');
- }
-
- }
-
- }
-
- /**
- * Notes:将其他库存大于基础房型买断+保留的渠道库存设置为买断+保留
- * User: Steven
- * Date: 2018/1/9
- * Time: 18:20
- * @param $hotel_id
- * @param $room_id
- * @param $check_in
- * @param $check_out
- * @param $distrib_id
- */
- public function UpdateStockByShare($params)
- {
- $query = RunHotelDistrib::find()
- ->select(['a.ID', 'a.DISTRIB_ID', 'a.HOTEL_ID', 'a.BASE_ROOM_TYPE', 'b.ROOM_TYPE', 'a.RUN_DATE', 'a.REMAINING_COUNT',
- 'a.PROD_PRICE', 'a.CUS_PRICE', 'a.RUN_STATUS as DISTRIB_RUN_STATUS', 'a.OVERSELL_FLAG', 'c.STOCK_TYPE',
- 'c.IS_ONSALE as ROOM_DAY_IS_ONSALE', 'b.IS_ONSALE as ROOM_IS_ONSALE', 'a.GIFT_ID',
- 'SUM(case c.stock_type when 228 then c.remaining_count else 0 end) as BUYOUT', //买断
- 'SUM(case c.stock_type when 229 then c.remaining_count else 0 end) as INQUIRY', //现询
- 'SUM(case c.stock_type when 230 then c.remaining_count else 0 end) as RETAIN'//保留
- ])
- ->joinWith('operaHotelRoom b', false)
- ->joinWith(['runHotel c'], false)
- ->from('run_hotel_distrib a')
- ->where([
- 'a.HOTEL_ID' => $params['hotel_id'],
- 'b.ID' => $params['room_id'],
- ]);
- $query->andFilterWhere(['between', 'a.RUN_DATE', $params['check_in'], $params['check_out']])->groupBy('a.ID');
- $sql = $query->createCommand()->getRawSql();
- $data = $query->asArray()->all();
- if (!empty($data)) {
- foreach ($data as $item) {
- if ($item['REMAINING_COUNT'] > $item['RETAIN'] + $item['BUYOUT']) {
- RunHotelDistrib::updateAll([
- 'REMAINING_COUNT' => $item['RETAIN'] + $item['BUYOUT']],
- ['ID' => $item['ID']]);
- $soap_param = array('hotel_id' => $params['hotel_id'], 'parent_room_type' => $item['BASE_ROOM_TYPE'], 'room_type' => $item['ROOM_TYPE'],
- 'begin_date' => $item['RUN_DATE'], 'end_date' => $item['RUN_DATE'], 'channel_id' => $item['DISTRIB_ID']);
- zHttp::syncRequest(CommonOrder::SEND_REQUEST_GET, Yii::$app->params['push_info_interface'], array('param' => $soap_param));
- }
- }
- }
- }
-
- /**
- * Notes:返回对象中的错误数据
- * User: Steven
- * Date: 2017/12/29
- * Time: 18:00
- * @param null $obj
- * @return string
- */
- public function getErrorMsg($obj = null)
- {
- $obj = empty($obj) ? $this : $obj;
- $errors = $obj->getErrors();
- $str = [];
- foreach ($errors as $error) {
- $str[] = implode(';', $error);
- }
-
- return implode(';', $str);
- }
-
- /**
- * @Author wanglg
- * @Desc 验证同一渠道下订单号不能重复
- * @param $attribute
- */
- public function noRepeat($attribute)
- {
- $res = OrderMain::findOne(['OUTSIDE_SALE_ORG_ID' => $this->OUTSIDE_SALE_ORG_ID, 'OUTSIDE_ORDER_NO' => $this->$attribute]);
- if ($res) {
- $this->addError($attribute, '渠道订单号已存在');
- }
- }
-
- /**
- * @Author wanglg
- * @Desc 保存备注信息
- * @return bool|\yii\web\Response
- */
- public function comment($param)
- {
- if (empty($param['comment_txt']) || empty($param['order_id'])) {
- return false;
- }
-
- // 查询主订单
- $main_order = OrderMain::find()
- ->select(['ORDER_STATUS', 'opera_hotel_room.PARENT_ROOM_TYPE', 'opera_hotel_room.HOTEL_ID', 'opera_hotel_room.ROOM_TYPE'])
- ->joinWith('operaHotelRoom')
- ->from('order_main')
- ->where(['ORDER_ID' => $param['order_id'], 'order_main.CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0, 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN])
- ->asArray()->one();
-
- foreach ($param['comment_txt'] as $key => $val) {
- $comment = new OrderComment();
- if (trim($val) != '') {
- $comment_arr = array('ORDER_ID' => $param['order_id'], 'COMMENT_TYPE' => $key, 'COMMENT_TXT' => $val,
- 'CANCEL_FLAG' => 0, 'CREATE_USER_ID' => Yii::$app->user->id, 'CREATE_TIME' => date('Y-m-d H:i:s'), 'UPDATE_USER_ID' => 0, 'UPDATE_TIME' => '0');
- if ($comment->load($comment_arr, '') && $comment->validate()) {
- if (!$comment->save()) {
- return false;
- }
- }
-
- // 如果是已确认或退改中的订单修改生成修改单
- if ($key == 1 && in_array($main_order['ORDER_STATUS'], array(198, 382))) {
- OrderMain::updateAll(['UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s'), 'ORDER_LEVEL' => 1],
- ['and', 'CANCEL_FLAG=0', 'ORDER_PROD_TYPE in (25, 26)', ['or', 'ORDER_ID=' . $param['order_id'], 'PARENT_ORDER_ID=' . $param['order_id']]]);
- }
- $log_type = $key == 0 ? '内部备注' : '公共备注';
- $log_desc = "添加备注:【{$log_type}】 【{$val}】";
- $log_arr = array('CREATE_USER_ID' => Yii::$app->user->id, 'CREATE_TIME' => date('Y-m-d H:i:s'), 'LOG_TYPE' => OperaHotelLog::LOG_TYPE_ORDER, 'HOTEL_ID' => $main_order['HOTEL_ID'],
- 'PARENT_ROOM_TYPE' => $main_order['PARENT_ROOM_TYPE'], 'ROOM_TYPE' => $main_order['ROOM_TYPE'], 'LOG_DESC' => $log_desc, 'ORDER_ID' => $param['order_id']);
- $order_log = new OperaHotelLog();
- if ($order_log->load($log_arr, '') && $order_log->validate()) {
- if (!$order_log->save()) {
- throw new \Exception('记录日志失败!');
- }
- }
- }
- }
- return true;
- }
-
- /**
- * @Author wanglg
- * @Desc 删除备注
- * @return int|\yii\web\Response
- */
- public function delComment($param)
- {
- $order = OrderComment::findOne($param['comment_id']);
- $order->CANCEL_FLAG = 1;
- $order->UPDATE_USER_ID = Yii::$app->user->id;
- $order->UPDATE_TIME = date('Y-m-d H:i:s');
-
- if (!$order->save()) {
- return false;
- }
-
- $main_order = OrderMain::find()
- ->select(['order_main.ORDER_STATUS', 'opera_hotel_room.PARENT_ROOM_TYPE', 'opera_hotel_room.HOTEL_ID', 'opera_hotel_room.ROOM_TYPE'])
- ->joinWith('operaHotelRoom')
- ->from('order_main')
- ->where(['ORDER_ID' => $param['order_id'], 'order_main.CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0, 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN])
- ->asArray()->one();
-
- $log_type = $order['COMMENT_TYPE'] == 0 ? '内部备注' : '公共备注';
- // 如果是公共备注生成修改单
- if ($order->COMMENT_TYPE == 1 && in_array($main_order['ORDER_STATUS'], array(198, 382))) {
- OrderMain::updateAll(['UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s'), 'ORDER_LEVEL' => 1],
- ['and', 'CANCEL_FLAG=0', 'ORDER_PROD_TYPE in (25, 26)', ['or', 'ORDER_ID=' . $order->ORDER_ID, 'PARENT_ORDER_ID=' . $order->ORDER_ID]]);
- }
-
- $log_desc = "删除备注:【{$log_type}】 【{$order['COMMENT_TXT']}】";
- $log_arr = array('CREATE_USER_ID' => Yii::$app->user->id, 'CREATE_TIME' => date('Y-m-d H:i:s'), 'LOG_TYPE' => OperaHotelLog::LOG_TYPE_ORDER, 'HOTEL_ID' => $main_order['HOTEL_ID'],
- 'PARENT_ROOM_TYPE' => $main_order['PARENT_ROOM_TYPE'], 'ROOM_TYPE' => $main_order['ROOM_TYPE'], 'LOG_DESC' => $log_desc, 'ORDER_ID' => $param['order_id']);
- $order_log = new OperaHotelLog();
- if ($order_log->load($log_arr, '') && $order_log->validate()) {
- if (!$order_log->save()) {
- throw new \Exception('记录日志失败!');
- }
- }
-
- return true;
- }
-
- /**
- * @Author wanglg
- * @Desc 修改客人姓名
- * @return int|\yii\web\Response
- */
- public function updateCustomer($param)
- {
- $main_order = OrderMain::find()
- ->select(['ORDER_STATUS', 'CUSTOMER_NAME', 'opera_hotel_room.PARENT_ROOM_TYPE', 'opera_hotel_room.HOTEL_ID', 'opera_hotel_room.ROOM_TYPE'])
- ->joinWith('operaHotelRoom')
- ->from('order_main')
- ->where(['ORDER_ID' => $param['order_id'], 'order_main.CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0, 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN])
- ->asArray()->one();
- if (in_array($main_order['ORDER_STATUS'], array(198, 382))) {
- $update_res = OrderMain::updateAll(['CUSTOMER_NAME' => $param['customer_name'], 'CUSTOMER_MOBILE' => $param['customer_mobile'],
- 'UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s'), 'ORDER_LEVEL' => 1],
- ['and', 'CANCEL_FLAG=0', 'ORDER_PROD_TYPE in (25, 26)', ['or', 'ORDER_ID=' . $param['order_id'], 'PARENT_ORDER_ID=' . $param['order_id']]]);
- } else {
- $update_res = OrderMain::updateAll(['CUSTOMER_NAME' => $param['customer_name'], 'CUSTOMER_MOBILE' => $param['customer_mobile'],
- 'UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s')],
- ['and', 'CANCEL_FLAG=0', 'ORDER_PROD_TYPE in (25, 26)', ['or', 'ORDER_ID=' . $param['order_id'], 'PARENT_ORDER_ID=' . $param['order_id']]]);
- }
-
- // 修改成功则添加日志记录
- if ($update_res) {
- $log_desc = "修改客人信息:修改客人信息【{$main_order['CUSTOMER_NAME']}】为【{$param['customer_name']}】";
- $log_arr = array('CREATE_USER_ID' => Yii::$app->user->id, 'CREATE_TIME' => date('Y-m-d H:i:s'), 'LOG_TYPE' => OperaHotelLog::LOG_TYPE_ORDER, 'HOTEL_ID' => $main_order['HOTEL_ID'],
- 'PARENT_ROOM_TYPE' => $main_order['PARENT_ROOM_TYPE'], 'ROOM_TYPE' => $main_order['ROOM_TYPE'], 'LOG_DESC' => $log_desc, 'ORDER_ID' => $param['order_id']);
- $order_log = new OperaHotelLog();
- if ($order_log->load($log_arr, '') && $order_log->validate()) {
- if (!$order_log->save()) {
- throw new \Exception('记录日志失败!');
- }
- }
- }
-
-
- return empty($update_res) ? false : true;
- }
-
- /**
- * @Author wanglg
- * @Desc 获取库存数组
- * @param $params
- * @return mixed
- */
- public function getOrderRoomNum($id, $params)
- {
- $common_order = new CommonOrder(['scenario' => 'Product']);
- $common_order->load($params, '');
- $stock_info = $common_order->getChannelStock($id);
- $arr = [];
- foreach ($stock_info as $item) {
- $arr[] = $item['OVERSELL_FLAG'] == 1 ? $item['BUYOUT'] + $item['INQUIRY'] + $item['RETAIN'] : $item['REMAINING_COUNT'];
- }
- if (!empty($stock_info)) {
- $minStock = min($arr) > 20 ? 20 : min($arr);
- for ($i = 0; $i <= $minStock; $i++) {
- $stock_arr[$i] = [
- 'stock_id' => $i,
- 'stock_count' => $i,
- ];
- }
- }
-
- return $stock_arr;
- }
-
- /**
- * @Author wanglg
- * @Desc 获取库存价格列表
- * @param $request
- * @return array
- */
- public function getStockPriceList($request)
- {
- if (!isset($request['RoomNum'])) {
- return array('code' => 1, 'info' => '缺少必要参数');
- }
- $orderModel = new CommonOrder(['scenario' => 'Product']);
- if ($orderModel->load($request, '') && $orderModel->validate()) {
- $price_res = $orderModel->getChannelStock($request['id']);
- foreach ($price_res as $key => $val) {
- $price_res[$key]['ORDER_PRICE'] = $val['PROD_PRICE'];
- $price_res[$key]['ALL_PRICE'] = $val['PROD_PRICE'] * $request['RoomNum'];
- $price_res[$key]['MID_PRICE'] = 0;
-
- // 渠道佣金计算
- $single_commission = 0;
- if ($val['COMMISION_FLAG'] == 1) {
- if ($val['BACK_COMMISION_METHOD'] == BaseSupplier::BACK_COMMISION_METHOD_SALE) { //按照销售额 按返佣比例计算 取百分比
- $single_commission = $val['PROD_PRICE'] * ($val['BACK_PERCENT'] / 100) * $request['RoomNum'];
- } elseif ($val['BACK_COMMISION_METHOD'] == BaseSupplier::BACK_COMMISION_METHOD_SETTLE) { //按结算金额 按返佣固定金额 取固定金额
- $single_commission = $val['BACK_VALUE'] * $request['RoomNum'];
- } else {
- $commission[BaseSupplier::BACK_COMMISION_METHOD_SETTLE] = 0;
- }
- } else {
- $single_commission = 0;
- }
- $price_res[$key]['TOTAL_COMMISSION'] = $single_commission;
- // 计算订单平均单价
- if ($val['BUYOUT'] >= $request['RoomNum']) {
- $price_res[$key]['BASE_PRICE'] = round($val['BASE_PRICE_BUYOUT'], 2);
- $price_res[$key]['BENEFIT'] = (($val['PROD_PRICE'] - $val['BASE_PRICE_BUYOUT']) * $request['RoomNum']) - $single_commission;
- } elseif ($val['BUYOUT'] + $val['RETAIN'] >= $request['RoomNum']) {
- $price_res[$key]['BASE_PRICE'] = round(($val['BUYOUT'] * $val['BASE_PRICE_BUYOUT'] +
- $val['BASE_PRICE_RESERVE'] * ($request['RoomNum'] - $val['BUYOUT'])) / $request['RoomNum'], 2);
- //订单利润
- $price_res[$key]['BENEFIT'] = ($val['BUYOUT'] * ($val['PROD_PRICE'] - $val['BASE_PRICE_BUYOUT']) + ($val['PROD_PRICE'] - $val['BASE_PRICE_RESERVE']) * ($request['RoomNum'] - $val['BUYOUT'])) - $single_commission;
- } elseif ($val['BUYOUT'] + $val['RETAIN'] + $val['INQUIRY']) {
- $price_res[$key]['BASE_PRICE'] = round(($val['BUYOUT'] * $val['BASE_PRICE_BUYOUT'] +
- $val['BASE_PRICE_RESERVE'] * $val['RETAIN'] +
- $val['BASE_PRICE_INQUIRY'] * ($request['RoomNum'] - $val['BUYOUT'] - $val['RETAIN'])) / $request['RoomNum'], 2);
- $price_res[$key]['BENEFIT'] = $val['BUYOUT'] * ($val['PROD_PRICE'] - $val['BASE_PRICE_BUYOUT'])
- + $val['RETAIN'] * ($val['PROD_PRICE'] - $val['BASE_PRICE_RESERVE'])
- + ($request['RoomNum'] - $val['BUYOUT'] - $val['RETAIN']) * ($val['PROD_PRICE'] - $val['BASE_PRICE_INQUIRY']) - $single_commission;
- }
- }
- return $price_res;
- } else {
- $error = array_values($orderModel->getFirstErrors());
-
- return array('code' => 1, 'info' => implode('|', $error));
- }
- }
-
- /**
- * @Author wanglg
- * @Desc 修改入住需求
- * @param $params
- * @return string
- */
- public function updateCheckin($param)
- {
- $avail_data = array(
- 'HotelID' => $param['hotel_id'],
- 'RoomID' => $param['room_id'],
- 'RoomNum' => $param['room_count'],
- 'CheckIn' => $param['start_date'],
- 'CheckOut' => $param['end_date'],
- 'DistribID' => $param['org_id'],
- 'CreateUserID' => $param['user_id'],
- 'RoomPrices' => 0,
- 'IfCheckPrice' => false,
- );
- $newOrder = new CommonOrder(['scenario' => 'CheckRoomAvail']);
- if (!$newOrder->load($avail_data, '') || !$newOrder->validate()) {
- $error = array_values($newOrder->getFirstErrors());
-
- return json_encode(['code' => 1, 'info' => $error[0]]);
- }
-
- $is_avail = $newOrder->checkRoomAvail($param['order_id']);
- if ($is_avail['code'] != 0) {
- return json_encode(['code' => 2, 'info' => $is_avail['info']]);
- }
-
- $room_price = array();
- foreach ($is_avail['data']['room_price'] as $k => $room) {
- $room_price[] = array('RunDate' => $room['run_date'], 'Price' => $room['price']);
- }
-
- // 客人信息
- $uncus_names = explode(' ', $param['customer_name']);
- $all_cus_name = array_values(array_filter($uncus_names));
- $split_customer = array_map("self::customer", $all_cus_name);
-
- $make_order_arr = array(
- 'CreateUserID' => Yii::$app->user->id,
- 'ZZ_ORDER_ID' => $param['order_id'], //蜘蛛订单号
- 'OrderID' => $param['org_num'], //渠道订单号
- 'HotelID' => $param['hotel_id'], //酒店ID
- 'RoomID' => $param['room_id'], //房型ID
- 'DistribID' => $param['org_id'],//渠道ID
- 'RoomNum' => $param['room_count'], //房间数量
- 'CheckIn' => $param['start_date'], //入住日期
- 'CheckOut' => $param['end_date'], //离店日期,
- 'TotalPrice' => $is_avail['data']['total_price'],//订单总价
- 'Currency' => 'RMB', //币种
- 'ContactName' => $param['customer_name'],//联系人姓名
- 'ContactTel' => $param['customer_mobile'], //联系人电话
- 'OrderGuests' => $split_customer, //入住人信息
- 'Comment' => $param['customer_memo'], //客人备注
- 'NeedInvoice' => 0,
- 'InvoiceInfos' => array(),
- 'RoomPrices' => $room_price,
- );
-
- $newUpdateOrder = new CommonOrder(['scenario' => 'UpdateHotelOrder']);
- if ($newUpdateOrder->load($make_order_arr, '')) {
- $res = $newUpdateOrder->updateHotelOrder();
-
- return json_encode($res);
- } else {
- $error = array_values($newOrder->getFirstErrors());
-
- return json_encode(['code' => 3, 'info' => $error[0]]);
- }
- }
-
- /**
- * @Author wanglg
- * @Desc 客人信息处理
- * @param $item
- * @return array
- */
- public static function customer($item)
- {
- return array('Name' => $item);
- }
-
- /**
- * @Author wanglg
- * @Desc根据订单获取当前订单的房间数
- * @param $order_id
- * @return mixed
- */
- public function getRoomNum($order_id)
- {
- $order_info = OrderMain::find()
- ->select(['COUNT(ORDER_ID) as room_num'])
- // ->where(['AND', ['=', 'CANCEL_FLAG', 0], ['OR', ['=', 'ORDER_ID', $order_id], ['=', 'PARENT_ORDER_ID', $order_id]]])
- ->where(['CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => $order_id, 'ORDER_VALID_STATUS' => 1, 'ORDER_LEVEL' => [0, 1]])
- ->groupBy('RUN_DATE')
- ->limit(1)
- ->asArray()->one();
-
- return $order_info['room_num'];
- }
-
- /**
- * Function Description:根据外部订单号查询订单是否存在
- * Function Name: checkOutsideId
- * @param $outside_id
- * @param $supplier_id
- * @return array|ActiveRecord[]
- *
- * @author 娄梦宁
- */
- public static function getInfoByOutsideId($outside_id, $supplier_id)
- {
- $result = self::find()->from(self::tableName())
- ->where(['and', ['=', 'cancel_flag', 0], ['=', 'outside_sale_org_id', $supplier_id], ['=', 'outside_order_no', $outside_id]])
- ->asArray()->all();
- return $result;
- }
-
- /**
- * Function Description:查询订单外部订单号
- * Function Name: getOutSideId
- * @param $order_id
- *
- * @return mixed
- *
- * @author 娄梦宁
- */
- public function getOutSideId($order_id)
- {
- $result = self::find()->select('outside_order_no')->from(self::tableName())
- ->where(['and', ['=', 'cancel_flag', 0], ['=', 'order_id', $order_id]])
- ->asArray()
- ->one();
- return $result['outside_order_no'];
- }
-
- }
|