[
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}
/**
* Author:Steven
* Desc:酒店订单列表
* @return string
*/
public function actionIndex()
{
$searchModel = new searchOrderMain();
$searchModel->date_from = date('Y-m-d', strtotime('-3 days'));
$searchModel->date_to = date('Y-m-d');
$rs = $searchModel->search_list(Yii::$app->request->queryParams);
$dataProvider = $rs['dataProvider'];
$status_arr = $rs['status_arr'];
$channel_status_arr = $rs['channel_status_arr'];
$channel = BaseSupplier::find()
->select(['DISTINCT(a.ID)', 'a.SUPPLIER_NAME'])
->joinWith('baseSupplierSale as b', false)
->from('base_supplier as a')
->where(['and',
['=', 'b.PARENT_TYPE', 25],
['=', 'a.SUPPLIER_TYPE', 301],
['=', 'a.cancel_flag', 0],
['=', 'a.IS_DISABLED', 0],
['=', 'b.cancel_flag', 0],
['or', ['=', 'main_corp_id', Yii::$app->user->identity->MAIN_CORP_ID], ['=', 'main_corp_id', 0],
],
])
// -> createCommand() -> getRawSql();
->asArray()->all();
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'status_arr' => $status_arr,
'channel_status_arr' => $channel_status_arr,
'model_list' => $channel,
]);
}
/**
* Notes:接受渠道订单
* User: Steven
* Date: 2018/1/19
* Time: 11:37
* @param $id
* @param $status //渠道的订单状态
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionReceiveChannel($id, $status)
{
$order = $this->findModel($id);
if ($order->CHANNEL_ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
$order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_ACCEPT;
$order->UPDATE_USER_ID = Yii::$app->user->id;
if (!$order->receiveChannel()) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '接单失败']);
}
//这里需要判断是哪个渠道 //直连的订单,需要推送状态
if ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ali']['supplier_id']) { //阿里
Yii::$app->runAction('hotel/ali/confirm-order', ['tid' => $order->OUTSIDE_ORDER_NO, 'opt_type' => '2']);
} elseif ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ctrip']['supplier_id']) { //
$interFace = OrderChannelInfo::findOne(['CANCEL_FLAG' => 0, 'ORDER_ID' => $order->ORDER_ID]);
if ($interFace != null) {
$params = [
'OrderID' => $order->OUTSIDE_ORDER_NO,//订单ID
'InterfaceConfirmNo' => $order->ORDER_CONFIRM_CODE,//酒店确认号
'OrderStatus' => CtripOrder::ORDER_STATUS_COMFIRMED,//订单状态 3:确认;4:拒绝
'InterFaceSendID' => $interFace->InterFaceSendID,//订单接口发送号
'ResultCode' => CtripOrder::RETURN_CODE_SUCCESS,
'Message' => 'Success',
'channelId' => Yii::$app->params['ctrip']['relation_supplier_id'],//渠道ID 携程传1
];
$set = new SetService();
$setDes = $set->setOrderStatus($params);
if ($setDes['flag'] == false) {
zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => '直连订单状态推送失败:',
'msg' => '客服接单:' . $order->ORDER_ID . "\n接单成功,但状态推送失败,请先电话告知携程渠道该订单已接单,并告知技术人员予以解决",
'touser' => $this->_developerList]
);
}
}
} elseif ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['wx_hotel']['supplier_id']) { //微信商城
//推送微信商城
$res = Util::confirmHotelOrder($order->ORDER_ID);
if ($res['code'] != 0) {
/*zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => '直连订单状态推送失败:',
'msg' => '接单失败【微信商城订单】:' . $order->ORDER_ID . ' ' . $res['info'],
'touser' => $this->_developerList]
);*/
}
}
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:拒绝渠道订单
* User: Steven
* Date: 2018/1/19
* Time: 11:41
* @param $id
* @param $status
* @param $msg默认为满房
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionRefuseChannel($id, $status, $msg = 101)
{
$order = $this->findModel($id);
if ($order->CHANNEL_ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_REJECT;
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
if ($order->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_SEND) { //待发单 渠道状态:拒绝 订单状态:取消
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CANCEL;
$order->ORDER_VALID_STATUS = 0;
if (!$order->refuseChannel(true)) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '拒单失败']);
}
} //待安排、已取消
elseif ($order->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_CONFIRM || $order->ORDER_STATUS == OrderMain::ORDER_STATUS_CANCEL) {
if (!$order->refuseChannel(false)) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '拒单失败']);
}
}
if ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ali']['supplier_id']) { //阿里
Yii::$app->runAction('hotel/ali/confirm-order', ['tid' => $order->OUTSIDE_ORDER_NO, 'opt_type' => '1']);
} elseif ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ctrip']['supplier_id']) {
$interFace = OrderChannelInfo::findOne(['CANCEL_FLAG' => 0, 'ORDER_ID' => $order->ORDER_ID]);
if ($interFace != null) {
$params = [
'OrderID' => $order->OUTSIDE_ORDER_NO,//订单ID
'InterfaceConfirmNo' => '',//酒店确认号
'OrderStatus' => CtripOrder::ORDER_STATUS_REFUSED,//订单状态 3:确认;4:拒绝
'InterFaceSendID' => $interFace->InterFaceSendID,//订单接口发送号
'ResultCode' => $msg, // 101:满房 103 价格错误
'Message' => CtripOrder::RETURN_MSG[$msg],
'channelId' => Yii::$app->params['ctrip']['relation_supplier_id'],//渠道ID 携程传1
];
$set = new SetService();
$setDes = $set->setOrderStatus($params);
if ($setDes['flag'] == false) {
zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => '直连订单状态推送失败:',
'msg' => '客服拒单:' . $order->ORDER_ID . "\n拒单成功,但状态推送失败,请先电话告知渠道该订单已接单,并告知技术人员予以解决",
'touser' => $this->_developerList]
);
}
}
} else { //微信商城 拒绝渠道订单 向微信发起订单取消
$res = Util::interfaceZzcx($order->ORDER_ID, 3);//如果不是需要通知微信的渠道订单,则不发送通知
if ($res['code'] != 0) {
/*zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => '直连订单状态推送失败:',
'msg' => '接单失败【微信商城订单】:' . $order->ORDER_ID . ' ' . $res['info'],
'touser' => $this->_developerList,
]
);*/
}
}
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:订单列表-确认订单
* User: Steven
* Date: 2018/1/19
* Time: 11:43
* @param $id
* @param $status
* @param $msg
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionConfirm($id, $status, $msg)
{
$postMsg = Yii::$app->request->post("copyMsg");
$order = $this->findModel($id);
$tmp_channel_status = $order->CHANNEL_ORDER_STATUS;
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CONFIRMED;
if ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL)
$order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_ACCEPT;
$order->ORDER_CONFIRM_CODE = $postMsg;
$order->ORDER_LEVEL = OrderMain::ORDER_LEVEL_SURE;
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
if ($order->validate()) {
//渠道状态已取消,不能确认
if ($order->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_CONFIRMED) {
zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => 'CS直连订单状态推送失败:',
'msg' => '渠道已取消订单:' . $order->ORDER_ID . "不能确认订单",
'touser' => $this->_developerList . $this->_messageList,
]
);
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '订单无法确认,请联系客服发取消单']);
}
if (!$order->confirm()) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '确认失败']);
} elseif ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL) { //直连
//对接的订单,需要推送状态
if ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ali']['supplier_id'] &&
$tmp_channel_status == OrderMain::ORDER_CHANNEL_STATUS_WAITING) { //阿里
//这里㤇判断是否已经接单,如果没有接单的话,需要推送状态,如果接单了,相当于确认状态已经推送携程了,不能重复推送
Yii::$app->runAction('hotel/ali/confirm-order', ['tid' => $order->OUTSIDE_ORDER_NO, 'opt_type' => '2']);
} elseif ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ctrip']['supplier_id']) {
//这里不需要向阿里渠道那样,因为携程是需要确认号的,即使已经确认了,也要通过此接口,更新确认号,所以不需要判读
$interFace = OrderChannelInfo::findOne(['CANCEL_FLAG' => 0, 'ORDER_ID' => $order->ORDER_ID]);
if ($interFace != null) {
$params = [
'OrderID' => $order->OUTSIDE_ORDER_NO,//订单ID
'InterfaceConfirmNo' => $order->ORDER_CONFIRM_CODE,//酒店确认号
'OrderStatus' => CtripOrder::ORDER_STATUS_COMFIRMED,//订单状态 3:确认;4:拒绝
'InterFaceSendID' => $interFace->InterFaceSendID,//订单接口发送号
'ResultCode' => CtripOrder::RETURN_CODE_SUCCESS,
'Message' => 'Success',
'channelId' => Yii::$app->params['ctrip']['relation_supplier_id'],//渠道ID 携程传
];
$set = new SetService();
$setDes = $set->setOrderStatus($params);
if ($setDes['flag'] == false) {
zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => '直连订单状态推送失败:',
'msg' => '酒店已经确认了直连订单:' . $order->ORDER_ID . "\n但是直连状态推送失败,请手动接单。",
'touser' => $this->_developerList]
);
}
}
} elseif ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['wx_hotel']['supplier_id']) { //微信商城
$res = Util::confirmHotelOrder($order->ORDER_ID);
if (!$res) {
zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => '直连订单状态推送失败:',
'msg' => '接单失败【微信商城订单】:' . $order->ORDER_ID . ' ' . $res['info'],
'touser' => $this->_developerList]
);
}
}
}
} else {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => $order->getErrors()]);
}
$order->resetMem(); //将缓存中用于提醒酒店处理订单的数据删除
$logger = new TopLogger();
$logger->log([date("Y-m-d H:i:s"), 'cs后台确认,清除缓存,订单号:' . $order->ORDER_ID . ',订单状态:' . $order->ORDER_STATUS . "\n" . PHP_EOL], 'ali/error');
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:发单到酒店
* User: Steven
* Date: 2018/1/19
* Time: 11:44
* @param $id
* @param $status
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionSendHotel($id, $status)
{
$order = $this->findModel($id);
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_WAITING_CONFIRM; //变为待安排(待确认)
$order->ORDER_LEVEL = OrderMain::ORDER_LEVEL_SURE;
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
if (!$order->sendOrder()) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '发单失败']);
}
$order->setMemcache($order->ORDER_ID, OrderMain::ORDER_STATUS_WAITING_CONFIRM, $order->PROD_TOP_ORG_ID, $order->PROD_NAME);
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:取消单
* User: Steven
* Date: 2018/1/17
* Time: 18:32
* @param $id
* @param $status
* @param $msg
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionCancelOrder($id, $status, $msg)
{
$order = $this->findModel($id);
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
//直连-渠道申请取消-订单待安排
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->ORDER_VALID_STATUS = 0;
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
if ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL && //直连订单
($order->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL || $order->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_CONFIRMED) //渠道接单状态 申请取消 已同意取消
&& ($order->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_CONFIRM || $order->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_SEND)) { //订单状态是待确认 待发单
$order->ORDER_LEVEL = OrderMain::ORDER_LEVEL_CANCEL;
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CANCEL;
$order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_CONFIRMED;
if (!$order->cancelOrder($msg)) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '取消失败']);
}
$order->resetMem();
} else { //非直连订单
if ($order->ORDER_STATUS != 313) {
$order->ORDER_LEVEL = OrderMain::ORDER_LEVEL_CANCEL;
}
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CANCEL;
if (!$order->refuse($msg, 'cancel_order')) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '取消失败']);
}
if ($status == OrderMain::ORDER_STATUS_CHANGING) {
$order->setMemcache($order->ORDER_ID, OrderMain::ORDER_STATUS_CANCEL_BEFORE_CONFIRM, $order->PROD_TOP_ORG_ID, $order->PROD_NAME);
} else {
$order->resetMem();
}
}
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:订单退改
* User: Steven
* Date: 2018/1/19
* Time: 11:44
* @param $id
* @param $status
* @param $msg
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionBackChange($id, $status, $msg)
{
$order = $this->findModel($id);
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CHANGING;
$order->UPDATE_USER_ID = Yii::$app->user->id;
if (!$order->backChange($msg)) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '退改失败']);
}
$order->setMemcache($order->ORDER_ID, OrderMain::ORDER_STATUS_WAITING_SEND, $order->PROD_TOP_ORG_ID, $order->PROD_NAME);
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:向酒店供应商申请退单
* User: Steven
* Date: 2018/1/19
* Time: 11:45
* @param $id
* @param $status
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionCancelConfirming($id, $status)
{
$order = $this->findModel($id);
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
$order->ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_WAITING_CONFIRM;
$order->UPDATE_USER_ID = Yii::$app->user->id;
if (!$order->cancelConfirming()) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '申请退单失败']);
}
$order->setMemcache($order->ORDER_ID, OrderMain::ORDER_STATUS_CANCEL_BEFORE_CONFIRM, $order->PROD_TOP_ORG_ID, $order->PROD_NAME);
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:取消退改
* User: Steven
* Date: 2018/1/19
* Time: 11:45
* @param $id
* @param $status
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionCancelBackChange($id, $status)
{
$order = $this->findModel($id);
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CONFIRMED;
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
if (!$order->cancelBackChange()) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '取消退改失败']);
}
// $order->setMemcache($order->ORDER_ID, OrderMain::ORDER_STATUS_CANCEL_BEFORE_CONFIRM, $order->PROD_TOP_ORG_ID, $order->PROD_NAME);
$order->resetMem();
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:同意退单
* User: Steven
* Date: 2018/1/18
* Time: 11:57
* @param $id
* @param $status
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionAgreeCancel($id, $status)
{
$order = $this->findModel($id);
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->ORDER_LEVEL = 2;
$order->ORDER_VALID_STATUS = 0;
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
$flag = true;
if ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL && $order->ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_WAITING_CONFIRM) { //待退单确认
$order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_CONFIRMED;
$flag = false;
}
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CANCEL;
if (!$order->agreeCancel($flag, 'agree-cancel')) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '同意退单失败']);
}
$order->resetMem();
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Notes:拒绝退单
* User: Steven
* Date: 2018/1/18
* Time: 11:36
* @param $id
* @param $status
* @return string
* @throws NotFoundHttpException
* @throws \yii\db\Exception
*/
public function actionRefuseCancel($id, $status)
{
$order = $this->findModel($id);
if ($order->ORDER_STATUS != $status) {
return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
}
$order->ORDER_STATUS = OrderMain::ORDER_STATUS_CONFIRMED;
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->UPDATE_TIME = date('Y-m-d H:i:s', time());
if ($status == OrderMain::ORDER_TYPE_CHANNEL && $status == OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_WAITING_CONFIRM) { //待退单确认
$order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_REJECT;
}
if (!$order->refuseCancel()) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '拒绝退单失败']);
}
$order->resetMem();
return \GuzzleHttp\json_encode(['code' => 0]);
}
/**
* Steven
* 获取该供应商下所有的邮件信息
*/
public function actionGetEmailInfo($supplier_id)
{
$emails = BaseSupplierLink::find()->select(['LINK_NAME', 'EMAIL'])->where(['SUPPLIER_ID' => $supplier_id, 'CANCEL_FLAG' => 0])->asArray()->all();
return \GuzzleHttp\json_encode(['code' => 0, 'data' => $emails]);
}
/**
* Steven
* 发送 邮件
*/
public function actionSendEmail($id, $msg)
{
$order = $this->findModel($id);
$filename = "【" . $order->ORDER_ID . "】" . $order->CUSTOMER_NAME . $order->PROD_START_STATION_DATE . ".doc";
$html = $order->wordHtml($order->ORDER_LEVEL);
$mail = Yii::$app->mailer->compose();
/*$email = BaseSupplierLink::find()->select(['EMAIL'])->where(['SUPPLIER_ID' => $order->PROD_TOP_ORG_ID, 'CANCEL_FLAG' => 0])->asArray()->one();
if (empty($email)) {
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '邮件发送失败,供应商邮件未设置!']);
}*/
$email_arr = explode(',', $msg);
$mail->setTo($email_arr);
// $mail->setTo('shifp@zhizhuchuxing.com');
$mail->setSubject($filename);
$mail->attachContent($html, ['fileName' => $filename, 'contentType' => 'text/plain']);
// $mail->setTextBody("酒店确认单:
订单号:{$order->ORDER_ID}
烦请尽快确认"); //发布纯文字文本
$mail->setHtmlBody("
酒店确认单:
订单号:{$order->ORDER_ID}
烦请尽快确认"); //发布可以带html标签的文本
if ($mail->send()) {
$seq_id = ($order->RUN_BUS_SEAT_SEQ_ID) == -1 ? 1 : $order->RUN_BUS_SEAT_SEQ_ID + 1;
OrderMain::updateAll(['RUN_BUS_SEAT_SEQ_ID' => $seq_id, 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $order->ORDER_ID], ['PARENT_ORDER_ID' => $order->ORDER_ID]]]);
$order->saveLog('send_email_success', false, $msg);
return \GuzzleHttp\json_encode(['code' => 0, 'msg' => '邮件发送成功']);
} else {
OrderMain::updateAll(['RUN_BUS_SEAT_SEQ_ID' => -1, 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $order->ORDER_ID], ['PARENT_ORDER_ID' => $order->ORDER_ID]]]);
$order->saveLog('send_email_error', false, $msg);
return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '邮件发送失败,请手动发邮件到酒店!']);
}
}
/**
* Author:Steven
* Desc:酒店订单白名单处理
* @return string
*/
public function actionOrderWhiteList()
{
$exception = new OrderHtExceptionList();
if (Yii::$app->request->isPost) {
$param = Yii::$app->request->post();
if ($exception->load($param) && $exception->save()) {
// 保存操作日志
$order_model = OrderMain::findOne(['ORDER_ID' => $param['OrderHtExceptionList']['order_id'], 'CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0]);
$order_model->saveLog('add_white_list', false, OrderHtExceptionList::WHITE_ARRAY[$param['OrderHtExceptionList']['status']]);
return '';
} else {
Yii::$app->session->setFlash('error', "添加失败!");
}
}
return $this->render('_order_whitelist', [
'model' => $exception,
]);
}
/**
* @Author wanglg
* @Desc 获取订单备注信息,用于弹框显示
* @return string
*/
public function actionGetComment()
{
$request = Yii::$app->request->post();
$comment = new OrderComment();
$comment_list = $comment->getCommentList($request['order_id']);
$data['comment_list'] = $comment_list;
return json_encode($data);
}
/**
* @Author wanglg
* @Desc 修改确认号form框
* @return string
*/
public function actionUpdateConfirm()
{
$model = new OrderMain(['scenario' => 'upConfirm']);
$request = Yii::$app->request->get();
return $this->render('_updateConfirmCode', [
'model' => $model,
'hidden' => $request['param'],
]);
}
/**
* @Author wanglg
* @Desc 获取订单发票信息,用于弹框显示
* @return string
*/
public function actionGetInvoice()
{
$request = Yii::$app->request->post();
$model = new OrderInvoiceInfo();
$invoice_list = $model->getInvoiceInfo($request['order_id']);
$invoice_list[0]['NeedInvoice'] = OrderInvoiceInfo::NEEDINVOICE[$invoice_list[0]['NeedInvoice']];
$invoice_list[0]['EarllyPrepare'] = OrderInvoiceInfo::EARLLYPREPARE[$invoice_list[0]['EarllyPrepare']];
$invoice_list[0]['PostType'] = OrderInvoiceInfo::POSTTYPE[$invoice_list[0]['PostType']];
$invoice_list[0]['InvoiceType'] = OrderInvoiceInfo::INVOICETYPE[$invoice_list[0]['InvoiceType']];
$invoice_list[0]['Status'] = OrderInvoiceInfo::ORDER_STATUS_DESC[$invoice_list[0]['Status']];
$data['invoice_list'] = $invoice_list;
return json_encode($data);
}
/**
* @Author wanglg
* @Desc 录入订单发票信息页面
* @return bool|string
*/
public function actionAddInvoiceView()
{
if (empty(Yii::$app->request->get('order_id')) || empty(Yii::$app->request->get('channel_id'))) {
return json_encode(array('code' => '1', 'msg' => '参数有误'));
}
$model = OrderInvoiceInfo::findOne(['OrderID' => Yii::$app->request->get('order_id')]);
if (empty($model)) {
// 用户选择发票类型,用于显示赋值
$type = Yii::$app->request->get('type') == 2 ? 2 : 1;
$model = Yii::$app->request->get('type') == 2 ? new OrderInvoiceInfo(['scenario' => 'exclusive']) : new OrderInvoiceInfo(['scenario' => 'showInvoice']);
$model->InvoiceType = $type;
$model->ChannelId = Yii::$app->request->get('channel_id');
} else {
$scenario = $model->InvoiceType == 1 ? 'addInvoice' : 'exclusive';
$model->scenario = $scenario;
}
return $this->render('_add_invoice', ['model' => $model, 'order_id' => Yii::$app->request->get('order_id')]);
}
/**
* @Author wanglg
* @Desc 录入发票操作
*/
public function actionAddInvoice()
{
$request = Yii::$app->request->post();
$model = OrderInvoiceInfo::findOne(['OrderID' => $request['OrderInvoiceInfo']['OrderID']]);
if (empty($model)) {
$msg = '添加发票成功!';
$logDesc = '添加发票';
$model = new OrderInvoiceInfo();
$model->CreateUseId = Yii::$app->user->id;
} else {
$msg = '修改发票信息成功';
$logDesc = '修改发票';
}
if ($model->load($request) && $model->validate()) {
$model->Status = 1;
if ($model->save()) {
// 添加或修改发票信息成功
Yii::$app->session->setFlash('success', $msg);
// 记录日志
$model->addInvoice($logDesc);
return '';
}
}
Yii::$app->session->setFlash('error', "添加发票失败!");
return $this->renderPartial('_add_invoice', [
'model' => $model,
'order_id' => $request['OrderInvoiceInfo']['OrderID'],
]);
}
/**
* @Author wanglg
* @Desc 申请开发票,修改发票信息状态
* @return string
*/
public function actionUpdateInvoiceStatus()
{
$order_id = Yii::$app->request->get('id');
$user_id = Yii::$app->user->id;
if (empty($order_id)) {
return json_encode(array('code' => 1, 'msg' => '申请参数不能为空'));
}
if (empty($user_id)) {
return json_encode(array('code' => 1, 'msg' => '请重新登录再提交申请'));
}
$model = OrderInvoiceInfo::findOne(['OrderID' => $order_id, 'Status' => [1, 5]]);
$user = BaseUser::findOne(['ID' => $user_id, 'CANCEL_FLAG' => 0]);
if (empty($model)) {
return json_encode(array('code' => 2, 'msg' => '当前发票不允许执行该操作'));
}
$model->Status = 2;
$model->ApplyUser = $user_id;
$model->CreateTime = date('Y-m-d H:i:s');
$update = $model->update();
if ($update) {
// 记录开票日志
$model->applyInvoice();
zOfficeWechat::sendMsg([
'agentid' => zOfficeWechat::SEND_HOTEL,
'title' => '【发票通知】您有一个新的发票任务等待开具:',
'msg' => "关联订单号:" . $order_id . "\n申请人:" . $user->TRUE_NAME . "\n申请时间:" . date('Y-m-d H:i:s') . "\n请至CS系统财务管理-发票管理进行操作",
'touser' => $this->_financeList,
// 'touser' => $this->_private,
]);
}
$res = $update == 0 ? json_encode(array('code' => 3, 'msg' => '申请开票失败,请重新申请')) : json_encode(array('code' => 0, 'msg' => '申请开票成功'));
return $res;
}
/**
* @Author wanglg
* @Desc 修改确认号
* @return string
*/
public function actionUpdateConfirmCode()
{
$request = Yii::$app->request->post();
$uid = Yii::$app->user->id;
$order = $this->findModel($request['order_id']);
$count = OrderMain::find()
->select(['count(*) as count'])->where(['ORDER_ID' => $request['order_id'], 'ORDER_STATUS' => $request['order_status'], 'CHANNEL_ORDER_STATUS' => $request['channel_order_status'], 'CANCEL_FLAG' => 0])
// -> createCommand() -> getRawSql();
->asArray()->one();
if ($count['count'] == 0) {
Yii::$app->session->setFlash('error', "订单状态已改变,请重新刷新页面");
return '';
}
$res = OrderMain::updateAll(['ORDER_CONFIRM_CODE' => $request['OrderMain']['ORDER_CONFIRM_CODE'], 'UPDATE_USER_ID' => $uid, 'UPDATE_TIME' => date('Y-m-d H:i:s')], ['and', 'CANCEL_FLAG= 0',
['or', 'ORDER_ID=' . $request['order_id'], 'PARENT_ORDER_ID=' . $request['order_id']]]);
!$res ? Yii::$app->session->setFlash('error', "修改确认号失败!") : Yii::$app->session->setFlash('success', "修改确认号成功!");
if ($res) {
$order->saveLog('update_confirm', false, $request['OrderMain']['ORDER_CONFIRM_CODE']);
return '';
}
}
/**
* @Author wanglg
* @Desc 获取订单详情
* @param $id
* @return string
*/
public function actionOrderDetail($id)
{
$request = Yii::$app->request->post();
$model = new OrderMain();
$supplier = new \backend\modules\api\models\BaseSupplier();
$channel_list = $supplier->getChannelList();
$data = $model->orderDetail($id);
$order_log_model = new OperaHotelLog();
$order_logs = $order_log_model->getOrderLog($id);
$main_order = array();
// 加载库存,通过pjax实现
if (Yii::$app->request->isAjax) {
$request = Yii::$app->request->get();
// 查询库存信息
$orderModel = new CommonOrder(['scenario' => 'Product']);
if ($orderModel->load($request, '') && $orderModel->validate()) {
$data['hotel_child_order_detail'] = $orderModel->getHotelStock();
}
}
foreach ($data['data'] as $order) {
if ($order['PARENT_ORDER_ID'] == 0) {
$main_order = $order;
}
}
return $this->render('orderDetail', [
'model' => $model,
'channel_list' => $channel_list,
'data' => $data,
'child_order' => $data['hotel_child_order_detail'],
'main_order' => $main_order,
'log' => $order_logs,
]);
}
/**
* @Author wanglg
* @Desc 修改入住需求
* @return string
*/
public function actionUpdateCheckIn()
{
$param = Yii::$app->request->post();
$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();
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 修改订单客户信息
* @return string
*/
public function actionUpdateCustomer()
{
$request = Yii::$app->request->post();
// $main_order = OrderMain::findOne(['ORDER_ID' => $request['OrderMain']['ORDER_ID'], 'CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0, 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN]);
$main_order = OrderMain::find()
->select(['order_main.*', 'opera_hotel_room.PARENT_ROOM_TYPE', 'opera_hotel_room.HOTEL_ID', 'opera_hotel_room.ROOM_TYPE'])
->joinWith('operaHotelRoom')
->from('order_main')
->where(['ORDER_ID' => $request['OrderMain']['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' => $request['OrderMain']['CUSTOMER_NAME'], 'CUSTOMER_MOBILE' => $request['OrderMain']['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=' . $request['OrderMain']['ORDER_ID'], 'PARENT_ORDER_ID=' . $request['OrderMain']['ORDER_ID']]]);
} else {
$update_res = OrderMain::updateAll(['CUSTOMER_NAME' => $request['OrderMain']['CUSTOMER_NAME'], 'CUSTOMER_MOBILE' => $request['OrderMain']['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=' . $request['OrderMain']['ORDER_ID'], 'PARENT_ORDER_ID=' . $request['OrderMain']['ORDER_ID']]]);
}
// 修改成功则添加日志记录
if ($update_res) {
$log_desc = "修改客人信息:修改客人信息【{$main_order['CUSTOMER_NAME']}】为【{$request['OrderMain']['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' => $request['OrderMain']['ORDER_ID']);
$order_log = new OperaHotelLog();
if ($order_log->load($log_arr, '') && $order_log->validate()) {
if (!$order_log->save()) {
throw new \Exception('记录日志失败!');
}
}
}
empty($update_res) ? Yii::$app->session->setFlash('error', '修改客人信息失败') : Yii::$app->session->setFlash('success', '修改客人信息成功');
return $this->redirect(['/hotel/ordermain/order-detail', 'id' => $request['OrderMain']['ORDER_ID']]);
}
/**
* @Author wanglg
* @Desc 添加备注
* @return
*/
public function actionComment()
{
$request = Yii::$app->request->get();
if (empty($request['comment_txt'])) {
return false;
}
// 查询主订单
$main_order = OrderMain::find()
->select(['order_main.*', 'opera_hotel_room.PARENT_ROOM_TYPE', 'opera_hotel_room.HOTEL_ID', 'opera_hotel_room.ROOM_TYPE'])
->joinWith('operaHotelRoom')
->from('order_main')
->where(['ORDER_ID' => $request['order_id'], 'order_main.CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0, 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN])
->asArray()->one();
$comment_arr = array('ORDER_ID' => $request['order_id'], 'COMMENT_TYPE' => $request['comment_type'], 'COMMENT_TXT' => $request['comment_txt'],
'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 ($request['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=' . $request['order_id'], 'PARENT_ORDER_ID=' . $request['order_id']]]);
}
$comment = new OrderComment();
if ($comment->load($comment_arr, '') && $comment->validate()) {
if (!$comment->save()) {
Yii::$app->session->setFlash('error', '添加备注失败');
} else {
Yii::$app->session->setFlash('success', '添加备注成功');
}
}
$log_type = $request['comment_type'] == 0 ? '内部备注' : '公共备注';
// 保存添加备注日志
$log_desc = "添加备注:【{$log_type}】 【{$request['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' => $request['order_id']);
$order_log = new OperaHotelLog();
if ($order_log->load($log_arr, '') && $order_log->validate()) {
if (!$order_log->save()) {
throw new \Exception('记录日志失败!');
}
}
return $this->redirect(['/hotel/ordermain/order-detail', 'id' => $request['order_id']]);
}
/**
* @Author wanglg
* @Desc 删除备注
* @return int|\yii\web\Response
*/
public function actionDelComment()
{
$request = Yii::$app->request->get();
$order = OrderComment::findOne($request['comment_id']);
$order->CANCEL_FLAG = 1;
$order->UPDATE_USER_ID = Yii::$app->user->id;
$order->UPDATE_TIME = date('Y-m-d H:i:s');
$main_order = OrderMain::find()
->select(['order_main.*', 'opera_hotel_room.PARENT_ROOM_TYPE', 'opera_hotel_room.HOTEL_ID', 'opera_hotel_room.ROOM_TYPE'])
->joinWith('operaHotelRoom')
->from('order_main')
->where(['ORDER_ID' => $request['order_id'], 'order_main.CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0, 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN])
->asArray()->one();
// 如果是公共备注生成修改单
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]]);
}
if (!$order->update()) {
Yii::$app->session->setFlash('error', '删除失败');
} else {
Yii::$app->session->setFlash('success', '删除成功');
}
$log_type = $request['comment_type'] == 0 ? '内部备注' : '公共备注';
// 保存添加备注日志
$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' => $request['order_id']);
$order_log = new OperaHotelLog();
if ($order_log->load($log_arr, '') && $order_log->validate()) {
if (!$order_log->save()) {
throw new \Exception('记录日志失败!');
}
}
return $this->redirect(['/hotel/ordermain/order-detail', 'id' => $request['order_id']]);
}
/**
* @Author wanglg
* @Desc修改采购价
* @return string
*/
public function actionUpdatePurchasePrice()
{
$request = Yii::$app->request->post();
$order_main = OrderMain::findOne(['ORDER_ID' => $request['order_id'], 'CANCEL_FLAG' => 0]);
$data = json_decode($request['data'], true);
$transa = Yii::$app->db->beginTransaction();
try {
if (in_array($order_main['ORDER_STATUS'], array(198, 382))) // 待确认 - 退改中的订单需要生成修改单
{
OrderMain::updateAll(['ORDER_LEVEL' => 1], "CANCEL_FLAG=0 and ORDER_VALID_STATUS=1 and
(ORDER_ID={$request['order_id']} or PARENT_ORDER_ID={$request['order_id']})");
}
foreach ($data as $key => $day) {
// 查询订单入住该天的订单信息
$sel_old_info = OrderMain::find()
->select(['a.BASE_PRICE', 'a.ORDER_PRICE', 'a.TOTAL_COMMISSION', 'a.ORDER_STATUS', 'a.OUTSIDE_SALE_ORG_ID', 'b.HOTEL_ID', 'b.PARENT_ROOM_TYPE', 'b.ROOM_TYPE'])
->leftJoin('opera_hotel_room b', 'a.PARENT_PROD_ID=b.HOTEL_ID AND b.ROOM_TYPE=a.PROD_ID and b.CANCEL_FLAG=0')
->from('order_main a')
->where(['a.PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date'], 'a.CANCEL_FLAG' => 0, 'a.ORDER_VALID_STATUS' => 1])
// -> createCommand()->getRawSql();
->asArray()->one();
if ($sel_old_info['BASE_PRICE'] == $day['base_price']) continue; //如果当天价格相等则不进行修改
if (!$sel_old_info) {
throw new \Exception('修改采购价 -- 未找到相关信息');
}
// 只有待发单-待安排-退改中状态的订单允许进行修改
if (!in_array($sel_old_info['ORDER_STATUS'], array('313', '198', '382'))) {
throw new \Exception('事务异常-目前只有待发单-待安排-退改中状态的订单允许进行修改');
}
// 修改子订单采购价
$update_order = OrderMain::updateAll(['BASE_PRICE' => $day['base_price'], 'PROFIT_VALUE' => $sel_old_info['ORDER_PRICE'] - $sel_old_info['TOTAL_COMMISSION'] - $day['base_price'],
'UPDATE_TIME' => date('Y-m-d H:i:s'), 'UPDATE_USER_ID' => Yii::$app->user->id],
['ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date']]);
if (!$update_order) {
throw new \Exception('修改子订单成本价失败');
}
// 保存操作日志
$log_desc = "修改采购价:修改【{$day['run_date']}】采购价【{$sel_old_info['BASE_PRICE']}】为【{$day['base_price']}】";
$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' => $sel_old_info['HOTEL_ID'],
'PARENT_ROOM_TYPE' => $sel_old_info['PARENT_ROOM_TYPE'], 'ROOM_TYPE' => $sel_old_info['ROOM_TYPE'], 'LOG_DESC' => $log_desc, 'ORDER_ID' => $request['order_id']);
$order_log = new OperaHotelLog();
if ($order_log->load($log_arr, '') && $order_log->validate()) {
if (!$order_log->save()) {
throw new \Exception('记录修改日志失败!');
}
}
}
/** 修改主订单信息**/
// 计算子订单的成本和利润之和
$sum_orders = OrderMain::find()->select(['SUM(BASE_PRICE) as sum_base_price', 'SUM(PROFIT_VALUE) AS sum_profit_value'])
->where(['PARENT_ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0])->asArray()->one();
if (empty($sum_orders)) {
throw new \Exception('修改采购价 -- 未找到子订单信息');
}
// 修改主订单
$update_parent_order = OrderMain::updateAll(['UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s'),
'BASE_PRICE' => $sum_orders['sum_base_price'], 'PROFIT_VALUE' => $sum_orders['sum_profit_value']],
['ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0]);
if (!$update_parent_order) {
throw new \Exception('修改采购价 -- 修改主订单信息失败');
}
$transa->commit();
// 渠道预付款处理,修改采购价
$comm_model = new CommonOrder();
$update_res = $comm_model->previousBalance(CommonOrder::UPDATE_ORDER_DEDUCTION_TYPE, $request['order_id']);
if ($update_res['code'] != 0) {
// 通知处理
$this->sendAliMsgToRtx('预付款处理失败', '关联订单:' . "{$request['order_id']}\n" . '修改采购价:' . $update_res['msg'], $this->_developerList);
}
} catch (\Exception $e) {
$transa->rollBack();
return json_encode(array('code' => 1, 'info' => $e->getMessage()));
}
return json_encode(array('code' => 0, 'info' => '修改成功', 'order_id' => $request['order_id']));
}
/**
* Author:Steven
* Desc:直连失败订单处理
* @return string
*/
public function actionExceptionOrder()
{
$flag = false;
$orderChannelInfo = new OrderChannelInfo(['scenario' => 'error_order']);
$data['orderChannelInfo'] = $orderChannelInfo;
if (Yii::$app->request->post()) {
$param = Yii::$app->request->post('OrderChannelInfo');
$outside_order_id = trim($param['channel_order_id']);
$order_id = trim($param['ORDER_ID']);
$order_main = OrderMain::find()
->leftJoin('opera_hotel_room', 'order_main.PARENT_PROD_ID=opera_hotel_room.HOTEL_ID and order_main.PROD_ID=opera_hotel_room.ROOM_TYPE and opera_hotel_room.CANCEL_FLAG=0')
->select(['outside_sale_org_id', 'PARENT_PROD_ID', 'PROD_ID', 'opera_hotel_room.PARENT_ROOM_TYPE'])->where([
'ORDER_ID' => $order_id,
'PARENT_ORDER_ID' => 0,
'order_main.CANCEL_FLAG' => 0,
'OUTSIDE_ORDER_NO' => "{$outside_order_id}",
])->asArray()->one();
if (empty($order_main)) {
return '';
}
if ($order_main['outside_sale_org_id'] == Yii::$app->params['ctrip']['supplier_id']) {
$effect_count = OrderChannelInfo::updateAll([
'ORDER_ID' => $order_id,
], "CANCEL_FLAG=0 and channel_order_id=$outside_order_id");
} elseif ($order_main['outside_sale_org_id'] == Yii::$app->params['ali']['supplier_id']) {
//这里需要查询ali_order的支付宝流水号
$ali_order = AliOrder::find()
->select(['AlipayTradeNo'])
->where(['TaoBaoOrderId' => $outside_order_id])
->asArray()->one();
if (!empty($ali_order)) {
$orderLog = new OperaHotelLog();
$orderLog->CREATE_USER_ID = Yii::$app->params['ali']['base_user_id'];
$orderLog->HOTEL_ID = $order_main['PARENT_PROD_ID'];
$orderLog->LOG_TYPE = OperaHotelLog::LOG_TYPE_ORDER;
$orderLog->ROOM_TYPE = $order_main['PROD_ID'];
$orderLog->PARENT_ROOM_TYPE = $order_main['PARENT_ROOM_TYPE'];
$orderLog->LOG_DESC = "支付订单,支付宝流水号:" . $ali_order['AlipayTradeNo'];
$orderLog->ORDER_ID = $order_id;
}
}
$count = OrderMain::updateAll([
'DOCKING_TYPE' => 556,
'CHANNEL_ORDER_STATUS' => 550,
], "ORDER_ID=$order_id or PARENT_ORDER_ID=$order_id");
$flag = true;
// 记录日志
if ($count) {
$model = OrderMain::findOne(['CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => 0, 'ORDER_ID' => $order_id, 'ORDER_LEVEL' => [0, 1], 'ORDER_STATUS' => [147, 198, 313, 314], 'ORDER_VALID_STATUS' => 1]);
$model->saveLog('exception-order');
}
return '';
}
$data['flag'] = $flag;
return $this->render('_exception_order', ['data' => $data]);
}
/**
* @Author wanglg
* @Desc 修改销售价
*/
public function actionUpdateSalePrice()
{
$request = Yii::$app->request->post();
// 首先判断订单是否是直连订单,直连订单不允许修改销售价
$main_order = OrderMain::findOne(['ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0]);
if ($main_order['DOCKING_TYPE'] == 556) // 556 直连 557 录单
{
return ['code' => 1, 'msg' => '直连订单不允许修改销售价'];
}
$data = json_decode($request['data'], true);
$transa = Yii::$app->db->beginTransaction();
try {
foreach ($data as $key => $day) {
// 查询订单入住该天的订单信息
$sel_old_info = OrderMain::find()
->select(['a.ORDER_PRICE', 'a.OUTSIDE_SALE_ORG_ID', 'a.BASE_PRICE', 'b.HOTEL_ID', 'b.PARENT_ROOM_TYPE', 'b.ROOM_TYPE'])
->leftJoin('opera_hotel_room b', 'a.PARENT_PROD_ID=b.HOTEL_ID AND b.ROOM_TYPE=a.PROD_ID and b.CANCEL_FLAG=0')
->from('order_main a')
->where(['a.PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date'], 'a.CANCEL_FLAG' => 0, 'a.ORDER_VALID_STATUS' => 1])
// -> createCommand()->getRawSql();
->asArray()->one();
if (!$sel_old_info) throw new \Exception('修改销售价 -- 未找到相关信息');
if ($sel_old_info['ORDER_PRICE'] == $day['sale_price']) continue; //如果当天价格相等则不进行修改
// 渠道佣金规则
$commission_role = BaseSupplier::find()
->select(['b.BACK_COMMISION_METHOD', "b.BACK_PERCENT", "b.BACK_VALUE"])
->innerJoin('base_supplier_sale as b', 'a.ID=b.SUPPLIER_ID AND b.PARENT_TYPE=25 and b.CANCEL_FLAG=0')
->from('base_supplier as a')
->where(['a.id' => $sel_old_info['OUTSIDE_SALE_ORG_ID'], 'a.CANCEL_FLAG' => 0, 'a.IS_DISABLED' => 0])->asArray()->one();
//更改销售价和利润
//修改销售单价的时候,渠道佣金也要根据当前设置佣金规则设置新的佣金金额
$commission_sql = empty($commission_role['BACK_COMMISION_METHOD']) ? 0
: ($commission_role['BACK_COMMISION_METHOD'] == 308 ? number_format($day['sale_price'] * $commission_role['BACK_PERCENT'] / 100, 2)
: $commission_role['BACK_VALUE']);
$profit = $day['sale_price'] - $sel_old_info['BASE_PRICE'] - $commission_sql;
$update_orders = OrderMain::updateAll(['UPDATE_TIME' => date('Y-m-d H:i:s'), 'UPDATE_USER_ID' => Yii::$app->user->id, 'ORDER_PRICE' => $day['sale_price'], 'TOTAL_COMMISSION' => $commission_sql, 'PROFIT_VALUE' => $profit],
['PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date'], 'CANCEL_FLAG' => 0, 'ORDER_VALID_STATUS' => 1]);
if (!$update_orders) {
throw new \Exception('修改子订单成本价失败');
}
// 保存操作日志
$log_desc = "修改销售价:修改【{$day['run_date']}】销售价【{$sel_old_info['ORDER_PRICE']}】为【{$day['sale_price']}】";
$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' => $sel_old_info['HOTEL_ID'],
'PARENT_ROOM_TYPE' => $sel_old_info['PARENT_ROOM_TYPE'], 'ROOM_TYPE' => $sel_old_info['ROOM_TYPE'], 'LOG_DESC' => $log_desc, 'ORDER_ID' => $request['order_id']);
$order_log = new OperaHotelLog();
if ($order_log->load($log_arr, '') && $order_log->validate()) {
if (!$order_log->save()) {
throw new \Exception('记录修改日志失败!');
}
}
}
// 修改主订单信息
// 计算子订单的成本和利润之和
$sum_orders = OrderMain::find()
->select(['SUM(ORDER_PRICE) as sum_order_price', 'SUM(TOTAL_COMMISSION) as sum_total_commission', 'SUM(PROFIT_VALUE) AS sum_profit_value'])
->where(['PARENT_ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0])->asArray()->one();
if (empty($sum_orders)) {
throw new \Exception('修改销售价--未找到子订单信息');
}
// 修改主订单
$update_parent_order = OrderMain::updateAll(['UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s'), 'ORDER_PRICE' => $sum_orders['sum_order_price'], 'PROFIT_VALUE' => $sum_orders['sum_profit_value'],
'TOTAL_COMMISSION' => $sum_orders['sum_total_commission']], ['ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0]);
if (!$update_parent_order) {
throw new \Exception('修改销售价--修改主订单信息失败');
}
$transa->commit();
// 渠道预付款处理,修改采购价
$comm_model = new CommonOrder();
$update_res = $comm_model->previousBalance(CommonOrder::UPDATE_ORDER_DEDUCTION_TYPE, $request['order_id']);
if ($update_res['code'] != 0) {
$this->sendAliMsgToRtx('预付款处理失败', '关联订单:' . "{$request['order_id']}\n" . '修改销售价:' . $update_res['msg'], $this->_developerList);
}
} catch (\Exception $e) {
$transa->rollBack();
return json_encode(array('code' => 1, 'info' => $e->getMessage()));
}
return json_encode(array('code' => 0, 'info' => '修改成功'));
}
/**
* Displays a single OrderMain model.
* @param integer $id
* @return mixed
*/
public function actionView($id)
{
$request = Yii::$app->request->get();
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
/**
* Creates a new OrderMain model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
{
$model = new OrderMain();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->ID]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
/**
* Updates an existing OrderMain model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->ID]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
/**
* Deletes an existing OrderMain model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$this->findModel($id)->delete();
return $this->redirect(['index']);
}
/**
* Finds the OrderMain model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return OrderMain the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
if (($model = OrderMain::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
/**
* CS调用订单是否可下
*
* @param $hotel integer
* @param $room integer
* @param $channel integer
* @param $date string 日期 用,分隔
* @param $count string 日期对应的数量 用,分隔
*
* @author wangxj
*/
public function actionCheckAvailable($hotel, $room, $channel, $date, $count)
{
$date_array = explode(',', $date);
$count_array = explode(',', $count);
if (count($date_array) === count($count_array)) {
$result = ['flag' => 'true', 'message' => []];
$data = [
'PROD_ID' => $room,
'PARENT_PROD_ID' => $hotel,
'OUTSIDE_SALE_ORG_ID' => $channel,
];
foreach ($date_array as $key => $item) {
$tmp_order = new OrderMain();
$tmp_order->load($data + ['RUN_DATE' => $item, 'room_count' => $count_array[$key]], '');
$tmp_order->orderAvailable();
if ($tmp_order->hasErrors()) {
$result['flag'] = 'false';
$result['message'][] = $tmp_order->getErrorMsg();
}
}
$result['message'] = array_unique($result['message']);
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $result;
} else {
throw new HttpException('400', '数据不匹配,无法操作');
}
}
/**
* @Author wanglg
* @Desc获取房型库存价格列表
* @return array
*/
public function actionGetPriceList()
{
/*$param = [
'RoomNum' => 2,
'RoomID' => 2474,
'DistribID' => 669,
'CheckIn' => '2018-01-18',
'CheckOut' => '2018-01-21',
];*/
$request = Yii::$app->request->post();
if (empty($request['RoomNum'])) {
return json_encode(array('code' => 1, 'info' => '缺少必要参数'));
}
$orderModel = new CommonOrder(['scenario' => 'Product']);
if ($orderModel->load($request, '') && $orderModel->validate()) {
$price_res = $orderModel->getHotelStock();
// return json_encode($price_res);
return json_encode(array('code' => 0, 'info' => '获取成功', 'data' => $price_res));
} else {
$error = array_values($orderModel->getFirstErrors());
return json_encode(array('code' => 1, 'info' => implode('|', $error)));
}
}
/**
* @Author wanglg
* @Desc 导出订单信息
*/
public function actionExport()
{
set_time_limit(0);
ini_set("memory_limit", "-1");
$obj = new searchOrderMain();
$obj->date_from = date('Y-m-d', strtotime('-3 days'));
$obj->date_to = date('Y-m-d');
$search = Yii::$app->request->queryParams;
$dataProvider = $obj->exportList($search);
$data = $dataProvider->getModels();
$date_type = $search['searchOrderMain']['date_type'] == 1 ? '预订日期' : (($search['searchOrderMain']['date_type'] == 2) ? '入住日期' : '离店日期');
$objPHPExcel = new zPhpExcel(); //实例化PHPExcel类
$cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
if (!\PHPExcel_Settings::setCacheStorageMethod($cacheMethod)) {
die($cacheMethod . " 缓存方法不可用" . EOL);
}
$objSheet = $objPHPExcel->getActiveSheet(); //获取当前活动sheet的操作对象
$objSheet->setTitle('User');
$objPHPExcel->file_name = '订单信息' . date('Y-m-d H_i_s') . '_' . $date_type;
// 定义要需要导出的字段
$order_sort = ['ORDER_ID', 'PARENT_PROD_NAME', 'PROD_NAME', 'CREATE_TIME', 'CREATE_USER_NAME', 'PROD_SUPPLY_ORG_NAME', 'PROD_START_STATION_DATE',
'PROD_END_STATION_DATE', 'room_count', 'ORDER_CONFIRM_CODE', 'CUSTOMER_NAME', 'CUSTOMER_MOBILE', 'SUPPLIER_NAME', 'OUTSIDE_ORDER_NO', 'ORDER_PRICE', 'BASE_PRICE', 'TOTAL_COMMISSION',
'PROFIT_VALUE', 'PAY_WAY', 'ORDER_STATUS', 'CUSTOMER_MEMO', 'SALES_NAME', 'PRINCIPAL', 'ORDER_TITLE_ID'];
//设置表头
$a_k = range('A', 'X');
foreach ($a_k as $key => $item) {
$objSheet->setCellValue($item . '1', $obj->getAttributeLabel($order_sort[$key]));
}
foreach ($data as $key => $datum) {
foreach ($a_k as $index => $item) {
if ($item == 'M')
$objSheet->setCellValue($item . ($key + 2), $datum->baseChannel->SUPPLIER_NAME);
elseif ($item == 'E') // 操作人, 客服
$objSheet->setCellValue($item . ($key + 2), $datum->user->TRUE_NAME);
elseif ($item == 'I') // 间夜数
$objSheet->setCellValue($item . ($key + 2), $datum['room_count']);
elseif ($item == 'V') // 采购负责人
$objSheet->setCellValue($item . ($key + 2), $datum->salesMan->TRUE_NAME);
elseif ($item == 'W') // 运营负责人
$objSheet->setCellValue($item . ($key + 2), $datum->principalMan->TRUE_NAME);
elseif ($item == 'S') // 支付方式
$objSheet->setCellValue($item . ($key + 2), $datum->baseChannel->settleType->TYPE_NAME);
elseif ($item == 'T') // 订单状态
$objSheet->setCellValue($item . ($key + 2), $datum->statusLabel->TYPE_NAME);
elseif ($item == 'X') // 组合单
{
$group = ($datum->ORDER_TITLE_ID == 0) ? '否' : '是(组合订单号:' . $datum->ORDER_TITLE_ID . ')';
$objSheet->setCellValue($item . ($key + 2), $group);
} else
$objSheet->setCellValue($item . ($key + 2), $datum->$order_sort[$index]);
}
}
//设置宽度
$objPHPExcel->setColumnSize(range('B', 'X'), [25, 30, 25, 10, 25, 20, 20, 10, 15, 15, 15, 20, 20, 10, 10, 10, 10, 10, 15, 20, 15, 15, 25]);
$objPHPExcel->output();
}
/**
* @Author wanglg
* @Desc 导出订单格式CSV
*/
public function actionExportCsv()
{
set_time_limit(0);
ini_set("memory_limit", "-1");
$obj = new searchOrderMain();
$obj->date_from = date('Y-m-d', strtotime('-3 days'));
$obj->date_to = date('Y-m-d');
$search = Yii::$app->request->queryParams;
$dataProvider = $obj->exportList($search);
$data = $dataProvider->getModels();
$date_type = $search['searchOrderMain']['date_type'] == 1 ? '预订日期' : (($search['searchOrderMain']['date_type'] == 2) ? '入住日期' : '离店日期');
$file_name = '订单信息 时间范围 ' . $search['searchOrderMain']['date_from'] . '~' . $search['searchOrderMain']['date_to'] . '_' . date('Y-m-d H_i_s') . '_' . $date_type;
// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
header('Content-Disposition: attachment;filename="' . $file_name . '.csv"');
header('Cache-Control: max-age=0');
$fp = fopen('php://output', 'a');
$order_sort = ['订单编号', '酒店名称', '预订产品', '预定时间', '预订人', '供应商', '入住时间',
'离店时间', '间夜数', '确认号', '客人姓名', '联系电话', '渠道商', '渠道商订单号', '订单金额', '成本金额', '渠道佣金',
'利润', '支付方式', '订单状态', '备注', '采购负责人', '运营负责人', '是否是组合订单'];
$attrs = ['ORDER_ID', 'PARENT_PROD_NAME', 'PROD_NAME', 'CREATE_TIME', 'CREATE_USER_NAME', 'PROD_SUPPLY_ORG_NAME', 'PROD_START_STATION_DATE',
'PROD_END_STATION_DATE', 'room_count', 'ORDER_CONFIRM_CODE', 'CUSTOMER_NAME', 'CUSTOMER_MOBILE', 'SUPPLIER_NAME', 'OUTSIDE_ORDER_NO', 'ORDER_PRICE', 'BASE_PRICE', 'TOTAL_COMMISSION',
'PROFIT_VALUE', 'PAY_WAY', 'ORDER_STATUS', 'CUSTOMER_MEMO', 'SALES_NAME', 'PRINCIPAL', 'ORDER_TITLE_ID'];
foreach ($order_sort as $key => $item) {
$order_sort[$key] = iconv('utf-8', 'GB18030', $item);
}
fputcsv($fp, $order_sort);
$data_count = count($data);
$num = 0; // 订单下标
while ($num < $data_count) {
$put_data = array();
foreach ($attrs as $k => $attr) {
if ($attr == 'CREATE_USER_NAME') {
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]->user->TRUE_NAME);
} elseif ($attr == 'SUPPLIER_NAME') {
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]->baseChannel->SUPPLIER_NAME);
} elseif ($attr == 'room_count') // 间夜数
{
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]['room_count']);
} elseif ($attr == 'SALES_NAME') // 采购负责人
{
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]->salesMan->TRUE_NAME);
} elseif ($attr == 'PRINCIPAL') // 运营负责人
{
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]->principalMan->TRUE_NAME);
} elseif ($attr == 'PAY_WAY') {
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]->baseChannel->settleType->TYPE_NAME);
} elseif ($attr == 'ORDER_STATUS') // 订单状态
{
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]->statusLabel->TYPE_NAME);
} elseif ($attr == 'ORDER_TITLE_ID') // 组合单
{
$group = ($data[$num]->ORDER_TITLE_ID == 0) ? '否' : '是(组合订单号:' . $data[$num]->ORDER_TITLE_ID . ')';
$put_data[] = iconv('utf-8', 'GB18030', $group);
} elseif ($attr == 'ORDER_PRICE' || $attr == 'PROD_START_STATION_DATE' || $attr == 'PROD_END_STATION_DATE' || $attr == 'BASE_PRICE' || $attr == 'room_count' || $attr == 'TOTAL_COMMISSION' || $attr == 'PROFIT_VALUE') // 组合单
{
$put_data[] = (string)iconv('utf-8', 'GB18030', $data[$num]->$attr);
} else {
$put_data[] = iconv('utf-8', 'GB18030', $data[$num]->$attr . "\t");
}
}
fputcsv($fp, $put_data);
if (is_int($num / 5000)) {
ob_flush();
flush();
}
$num++;
}
exit();
}
/**
* @Author wanglg
* @Desc 添加备注信息
* @param $order_id
* @param $comment_type
* @param $comment_txt
* @return bool|string
*/
public function actionAddcomment($order_id, $comment_type, $comment_txt)
{
$comment_arr = array('ORDER_ID' => $order_id, 'COMMENT_TYPE' => $comment_type, 'COMMENT_TXT' => $comment_txt,
'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');
$comment = new OrderComment();
if ($comment->load($comment_arr, '') && $comment->validate()) {
if (!$comment->save()) {
return false;
}
}
$data['order_comment'] = OrderComment::find()
->joinWith('user')
->where(['ORDER_ID' => $order_id, 'COMMENT_TYPE' => [0, 1], 'order_comment.CANCEL_FLAG' => 0])->asArray()->all();
return $this->render('order_detail', ['data' => $data]);
}
/**
* @Author wanglg
* @Desc 订单详情页
* @return string
*/
public function actionDetail()
{
$id = Yii::$app->request->get('id');
$model = new OrderMain();
$model->setScenario('csBook');
$comment_model = new OrderComment();
$common_order = new CommonOrder();
$stock_arr[1] = ['stock_id' => 0, 'stock_count' => 0];
$order_log_model = new OperaHotelLog();
if (Yii::$app->request->isAjax) {
$request = Yii::$app->request->get();
//订单详情操作:读取和修改
// 备注添加
if ($request['deal_type'] == 1) {
$model->comment($request);
}
// 删除备注
if ($request['deal_type'] == 2) {
$model->delComment($request);
}
// 修改客人信息
if ($request['deal_type'] == 3) {
$model->updateCustomer($request);
}
// 修改入住需求
if ($request['deal_type'] == 6) {
$model->updateCheckIn($request);
}
// 修改销售价
if ($request['deal_type'] == 7) {
$this->actionUpdateOrderPrice($id, $request);
}
// 修改采购价
if ($request['deal_type'] == 8) {
$this->actionUpdateBasePrice($id, $request);
}
// 获取订单详情信息
$data = $model->orderDetail($id);
// 获取价格信息
if ($request['deal_type'] == 5) {
$common_order->setScenario('Product');
$stock_res = $common_order->getOrderRoomNum($id, $request);
$stock_arr = empty($stock_res) ? $stock_arr : $stock_res;
$load_html = $model->getStockPriceList($request);
$data['hotel_child_order_detail'] = $load_html;
if (!empty($load_html)) {
$main_order['ORDER_PRICE'] = array_sum(array_column($load_html, 'ALL_PRICE'));
$main_order['TOTAL_MID_PRICE'] = array_sum(array_column($load_html, 'MID_PRICE'));
$main_order['TOTAL_COMMISSION'] = array_sum(array_column($load_html, 'TOTAL_COMMISSION'));
$main_order['PROFIT_VALUE'] = array_sum(array_column($load_html, 'BENEFIT'));
}
}
if ($request['deal_type'] == 9) {
$order_logs = $order_log_model->getOrderLog($id, $request['user_id']);
}
} else {
$data = $model->orderDetail($id);
$order_logs = $order_log_model->getOrderLog($id);
}
$supplier = new \backend\modules\api\models\BaseSupplier();
$channel_list = $supplier->getChannelList();
$log_users = $order_log_model->getLogUser($id);
foreach ($data['data'] as $order) {
if ($order['PARENT_ORDER_ID'] == 0) {
$main_order = $order;
}
}
return $this->render('order_detail', [
'hotel_log' => $order_log_model,
'log' => $order_logs,
'log_users' => $log_users,
'model' => $model,
'channel_list' => $channel_list,
'data' => $data,
'comment_model' => $comment_model,
'common_order' => $common_order,
'stock_arr' => $stock_arr,
'child_order' => $data['hotel_child_order_detail'],
'main_order' => $main_order]);
}
/**
* @Author wanglg
* @Desc 修改销售价
* @throws \yii\db\Exception
*/
public function actionUpdateOrderPrice($order_id, $request)
{
// 首先判断订单是否是直连订单,直连订单不允许修改销售价
$main_order = OrderMain::findOne(['ORDER_ID' => $order_id, 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0]);
if ($main_order['DOCKING_TYPE'] == 556) // 556 直连 557 录单
{
return ['code' => 1, 'msg' => '直连订单不允许修改销售价'];
}
$data = json_decode($request['data'], true);
$transa = Yii::$app->db->beginTransaction();
try {
foreach ($data as $key => $day) {
// 查询订单入住该天的订单信息
$sel_old_info = OrderMain::find()
->select(['a.ID', 'a.ORDER_PRICE', 'a.OUTSIDE_SALE_ORG_ID', 'a.BASE_PRICE', 'b.HOTEL_ID', 'b.PARENT_ROOM_TYPE', 'b.ROOM_TYPE'])
->leftJoin('opera_hotel_room b', 'a.PARENT_PROD_ID=b.HOTEL_ID AND b.ROOM_TYPE=a.PROD_ID and b.CANCEL_FLAG=0')
->from('order_main a')
->where(['a.PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date'], 'a.CANCEL_FLAG' => 0, 'a.ORDER_VALID_STATUS' => 1])
// -> createCommand()->getRawSql();
->asArray()->all();
if (!$sel_old_info) throw new \Exception('修改销售价 -- 未找到相关信息');
if ($sel_old_info['ORDER_PRICE'] == $day['sale_price']) continue; //如果当天价格相等则不进行修改
// 渠道佣金规则
$commission_role = BaseSupplier::find()
->select(['b.BACK_COMMISION_METHOD', "b.BACK_PERCENT", "b.BACK_VALUE"])
->innerJoin('base_supplier_sale as b', 'a.ID=b.SUPPLIER_ID AND b.PARENT_TYPE=25 and b.CANCEL_FLAG=0')
->from('base_supplier as a')
->where(['a.id' => $sel_old_info['OUTSIDE_SALE_ORG_ID'], 'a.CANCEL_FLAG' => 0, 'a.IS_DISABLED' => 0])->asArray()->one();
//更改销售价和利润
//修改销售单价的时候,渠道佣金也要根据当前设置佣金规则设置新的佣金金额
$commission_sql = empty($commission_role['BACK_COMMISION_METHOD']) ? 0
: ($commission_role['BACK_COMMISION_METHOD'] == 308 ? number_format($day['sale_price'] * $commission_role['BACK_PERCENT'] / 100, 2)
: $commission_role['BACK_VALUE']);
foreach ($sel_old_info as $old_info) {
$profit = $day['sale_price'] - $old_info['BASE_PRICE'] - $commission_sql;
$update_orders = OrderMain::updateAll(['UPDATE_TIME' => date('Y-m-d H:i:s'), 'UPDATE_USER_ID' => Yii::$app->user->id, 'ORDER_PRICE' => $day['sale_price'], 'TOTAL_COMMISSION' => $commission_sql, 'PROFIT_VALUE' => $profit],
['ID' => $old_info["ID"], 'PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date'], 'CANCEL_FLAG' => 0, 'ORDER_VALID_STATUS' => 1]);
if (!$update_orders) {
throw new \Exception('修改子订单成本价失败');
}
}
// 保存操作日志
$log_desc = "修改销售价:修改【{$day['run_date']}】销售价【{$sel_old_info[0]['ORDER_PRICE']}】为【{$day['sale_price']}】";
$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' => $sel_old_info[0]['HOTEL_ID'],
'PARENT_ROOM_TYPE' => $sel_old_info[0]['PARENT_ROOM_TYPE'], 'ROOM_TYPE' => $sel_old_info[0]['ROOM_TYPE'], 'LOG_DESC' => $log_desc, 'ORDER_ID' => $request['order_id']);
$order_log = new OperaHotelLog();
if ($order_log->load($log_arr, '') && $order_log->validate()) {
if (!$order_log->save()) {
throw new \Exception('记录修改日志失败!');
}
}
}
/** 修改主订单信息**/
// 计算子订单的成本和利润之和
$sum_orders = OrderMain::find()
->select(['SUM(ORDER_PRICE) as sum_order_price', 'SUM(TOTAL_COMMISSION) as sum_total_commission', 'SUM(PROFIT_VALUE) AS sum_profit_value'])
->where(['PARENT_ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0])->asArray()->one();
if (empty($sum_orders)) {
throw new \Exception('修改销售价--未找到子订单信息');
}
// 修改主订单
$update_parent_order = OrderMain::updateAll(['UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s'), 'ORDER_PRICE' => $sum_orders['sum_order_price'], 'PROFIT_VALUE' => $sum_orders['sum_profit_value'],
'TOTAL_COMMISSION' => $sum_orders['sum_total_commission']], ['ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0]);
if (!$update_parent_order) {
throw new \Exception('修改销售价--修改主订单信息失败');
}
$transa->commit();
// 渠道预付款处理,修改采购价
$comm_model = new CommonOrder();
$update_res = $comm_model->previousBalance(CommonOrder::UPDATE_ORDER_DEDUCTION_TYPE, $request['order_id']);
if ($update_res['code'] != 0) {
$this->sendAliMsgToRtx('预付款处理失败', '关联订单:' . "{$request['order_id']}\n" . '修改销售价:' . $update_res['msg'], $this->_developerList);
}
} catch (\Exception $e) {
$transa->rollBack();
return ['code' => 1, 'info' => $e->getMessage()];
}
return ['code' => 0, 'info' => '修改成功'];
}
/**
* @Author wanglg
* @Desc修改采购价
* @return string
*/
public function actionUpdateBasePrice($order_id, $request)
{
$order_main = OrderMain::findOne(['ORDER_ID' => $order_id, 'CANCEL_FLAG' => 0]);
$data = json_decode($request['data'], true);
$transa = Yii::$app->db->beginTransaction();
try {
if (in_array($order_main['ORDER_STATUS'], array(198, 382))) // 待确认 - 退改中的订单需要生成修改单
{
OrderMain::updateAll(['ORDER_LEVEL' => 1], "CANCEL_FLAG=0 and ORDER_VALID_STATUS=1 and
(ORDER_ID={$request['order_id']} or PARENT_ORDER_ID={$request['order_id']})");
}
foreach ($data as $key => $day) {
// 查询订单入住该天的订单信息
$sel_old_info = OrderMain::find()
->select(['ROUND(SUM(a.BASE_PRICE)/COUNT(a.ORDER_ID), 2) as BASE_PRICE', 'a.ORDER_PRICE', 'a.TOTAL_COMMISSION', 'a.ORDER_STATUS', 'a.OUTSIDE_SALE_ORG_ID', 'b.HOTEL_ID', 'b.PARENT_ROOM_TYPE', 'b.ROOM_TYPE'])
->leftJoin('opera_hotel_room b', 'a.PARENT_PROD_ID=b.HOTEL_ID AND b.ROOM_TYPE=a.PROD_ID and b.CANCEL_FLAG=0')
->from('order_main a')
->where(['a.PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date'], 'a.CANCEL_FLAG' => 0, 'a.ORDER_VALID_STATUS' => 1])
->groupBy('RUN_DATE')
->asArray()->one();
if ($sel_old_info['BASE_PRICE'] == $day['base_price']) continue; //如果当天价格相等则不进行修改
if (!$sel_old_info) {
throw new \Exception('修改采购价 -- 未找到相关信息');
}
// 只有待发单-待安排-退改中状态的订单允许进行修改
if (!in_array($sel_old_info['ORDER_STATUS'], array('313', '198', '382'))) {
throw new \Exception('事务异常-目前只有待发单-待安排-退改中状态的订单允许进行修改');
}
// 修改子订单采购价
$update_order = OrderMain::updateAll(['BASE_PRICE' => $day['base_price'], 'PROFIT_VALUE' => $sel_old_info['ORDER_PRICE'] - $sel_old_info['TOTAL_COMMISSION'] - $day['base_price'],
'UPDATE_TIME' => date('Y-m-d H:i:s'), 'UPDATE_USER_ID' => Yii::$app->user->id],
['ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => $request['order_id'], 'RUN_DATE' => $day['run_date']]);
if (!$update_order) {
throw new \Exception('修改子订单成本价失败');
}
// 保存操作日志
$log_desc = "修改采购价:修改【{$day['run_date']}】采购价【{$sel_old_info['BASE_PRICE']}】为【{$day['base_price']}】";
$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' => $sel_old_info['HOTEL_ID'],
'PARENT_ROOM_TYPE' => $sel_old_info['PARENT_ROOM_TYPE'], 'ROOM_TYPE' => $sel_old_info['ROOM_TYPE'], 'LOG_DESC' => $log_desc, 'ORDER_ID' => $request['order_id']);
$order_log = new OperaHotelLog();
if ($order_log->load($log_arr, '') && $order_log->validate()) {
if (!$order_log->save()) {
throw new \Exception('记录修改日志失败!');
}
}
}
/** 修改主订单信息**/
// 计算子订单的成本和利润之和
$sum_orders = OrderMain::find()->select(['SUM(BASE_PRICE) as sum_base_price', 'SUM(PROFIT_VALUE) AS sum_profit_value'])
->where(['PARENT_ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0])->asArray()->one();
if (empty($sum_orders)) {
throw new \Exception('修改采购价 -- 未找到子订单信息');
}
// 修改主订单
$update_parent_order = OrderMain::updateAll(['UPDATE_USER_ID' => Yii::$app->user->id, 'UPDATE_TIME' => date('Y-m-d H:i:s'),
'BASE_PRICE' => $sum_orders['sum_base_price'], 'PROFIT_VALUE' => $sum_orders['sum_profit_value']],
['ORDER_ID' => $request['order_id'], 'ORDER_VALID_STATUS' => 1, 'CANCEL_FLAG' => 0]);
if (!$update_parent_order) {
throw new \Exception('修改采购价 -- 修改主订单信息失败');
}
$transa->commit();
// 渠道预付款处理,修改采购价
$comm_model = new CommonOrder();
$update_res = $comm_model->previousBalance(CommonOrder::UPDATE_ORDER_DEDUCTION_TYPE, $request['order_id']);
if ($update_res['code'] != 0) {
// 通知处理
$this->sendAliMsgToRtx('预付款处理失败', '关联订单:' . "{$request['order_id']}\n" . '修改采购价:' . $update_res['msg'], $this->_developerList);
}
} catch (\Exception $e) {
$transa->rollBack();
return json_encode(array('code' => 1, 'info' => $e->getMessage()));
}
return json_encode(array('code' => 0, 'info' => '修改成功', 'order_id' => $request['order_id']));
}
/**
* @Author wanglg
* @Desc 修改入住需求时获取库存,合并以前的库存数量
* @return string
*/
public function actionGetChannelStock()
{
$request = Yii::$app->request->post();
$orderModel = new CommonOrder(['scenario' => 'Product']);
if ($orderModel->load($request, '') && $orderModel->validate()) {
$getStockRes = $orderModel->dealStock($request['order_id'], $request);
return json_encode(array('code' => 0, 'info' => '成功', 'data' => $getStockRes));
} else {
$error = array_values($orderModel->getFirstErrors());
return json_encode(['code' => 1, 'info' => $error[0]]);
}
}
}
?>