Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

568 linhas
24 KiB

  1. <?php
  2. namespace backend\modules\hotel\controllers;
  3. use backend\modules\hotel\models\Ali\TopLogger;
  4. use backend\modules\hotel\models\CtripOrder;
  5. use backend\modules\hotel\models\OperaHotel;
  6. use backend\modules\hotel\models\OrderChannelInfo;
  7. use backend\modules\hotel\models\OrderComment;
  8. use backend\modules\hotel\models\SetService;
  9. use common\components\zOfficeWechat;
  10. use common\components\zPhpExcel;
  11. use common\models\BaseSupplier;
  12. use common\models\User;
  13. use Yii;
  14. use backend\modules\hotel\models\OrderMain;
  15. use backend\modules\hotel\models\search\searchOrderMain;
  16. use yii\data\ArrayDataProvider;
  17. use yii\web\NotFoundHttpException;
  18. use yii\filters\VerbFilter;
  19. use yii\web\ServerErrorHttpException;
  20. use backend\modules\api\util\Util;
  21. /**
  22. * SupplierBackendController implements the CRUD actions for OrderMain model.
  23. */
  24. class SupplierBackendController extends BaseController
  25. {
  26. // public $_messageList = 'wangxj';
  27. public $_messageList = 'gaoj|panlj|wuwh|jim|zhuym|huangjq|huyz|';
  28. // public $enableCsrfValidation = false;
  29. /**
  30. * @inheritdoc
  31. */
  32. public function behaviors()
  33. {
  34. return [
  35. 'verbs' => [
  36. 'class' => VerbFilter::className(),
  37. 'actions' => [
  38. 'delete' => ['POST'],
  39. ],
  40. ],
  41. ];
  42. }
  43. /**
  44. * Lists all OrderMain models.
  45. * @return mixed
  46. */
  47. public function actionIndex()
  48. {
  49. $searchModel = new searchOrderMain();
  50. $searchModel->date_from = date('Y-m-d', strtotime('-3 days'));
  51. $searchModel->date_to = date('Y-m-d');
  52. $dataProvider = $searchModel->supplierSearch(Yii::$app->request->queryParams);
  53. //要根据状态获取各状态的数量,所以把$dataProvider的models全部取出后,再筛选状态,减少sql查询次数,以达到优化时间的目的
  54. //至少需要查询2次,一次获取数量,一次正常状态查询以实现分页功能
  55. $tmp_dataProvider = unserialize(serialize($dataProvider));
  56. $tmp_dataProvider->pagination = false;
  57. $models = $tmp_dataProvider->getModels();
  58. $status_arr = [];
  59. $providerData = [];
  60. if (!empty($models)) {
  61. foreach ($models as $model) {
  62. $status_arr[0] += 1;
  63. if (!isset($status_arr[$model->ORDER_STATUS])) {
  64. $status_arr[$model->ORDER_STATUS] = 0;
  65. }
  66. $status_arr[$model->ORDER_STATUS] += 1;
  67. //符合状态的订单存起来供页面显示
  68. if ($searchModel->ORDER_STATUS == '' || $searchModel->ORDER_STATUS == $model->ORDER_STATUS)
  69. $providerData[] = $model;
  70. }
  71. }
  72. $dataProvider = new ArrayDataProvider([
  73. 'allModels' => $providerData
  74. ]);
  75. //登录账号所属酒店
  76. $base_supplier = User::find()
  77. ->addSelect(['base_supplier.ID'])
  78. ->leftJoin('base_supplier', 'base_supplier.ID = base_user.TOP_ORG_ID')
  79. ->where(['base_user.ID' => Yii::$app->user->id])
  80. ->asArray()->one();
  81. return $this->render('index', [
  82. 'searchModel' => $searchModel,
  83. 'dataProvider' => $dataProvider,
  84. 'status_arr' => $status_arr,
  85. 'supplier_id' => $base_supplier['ID']
  86. ]);
  87. }
  88. /**
  89. * Author:Steven
  90. * Desc:查看订单详情页面
  91. * @param $id
  92. * @return string
  93. * @throws NotFoundHttpException
  94. * @throws ServerErrorHttpException
  95. */
  96. public function actionView($id)
  97. {
  98. $model = $this->findModel($id);
  99. //子订单
  100. $detail = OrderMain::find()
  101. ->addSelect([
  102. 'order_main.*',
  103. 'count(run_date) as room_count', //每一天的间数
  104. ])->where(['PARENT_ORDER_ID' => $model->ORDER_ID, 'CANCEL_FLAG' => 0])
  105. ->groupBy('RUN_DATE')->all();
  106. if (empty($detail)) {
  107. throw new ServerErrorHttpException('订单数据不完整。');
  108. }
  109. //订单备注,公共备注
  110. $notes = OrderComment::find()->joinWith('user')
  111. ->where(['order_comment.CANCEL_FLAG' => 0, 'ORDER_ID' => $model->ORDER_ID, 'COMMENT_TYPE' => OrderComment::TYPE_PUBLIC])
  112. ->all();
  113. return $this->render('view', [
  114. 'model' => $model,
  115. 'detail' => $detail,
  116. 'notes' => $notes
  117. ]);
  118. }
  119. /**
  120. * Notes:
  121. * User: Steven
  122. * Date: 2018/1/19
  123. * Time: 13:10
  124. * @param $order_id
  125. * @param $status
  126. * @param $msg //确认号
  127. * @return string
  128. * @throws NotFoundHttpException
  129. * @throws \yii\db\Exception
  130. */
  131. public function actionConfirm($order_id, $status, $msg)
  132. {
  133. // $postMsg = Yii::$app->request->post("copyMsg");
  134. $order = $this->findModel($order_id);
  135. $tmp_channel_status = $order->CHANNEL_ORDER_STATUS;
  136. $logger = new TopLogger();
  137. $logger->log([date("Y-m-d H:i:s"), '酒店确认,渠道订单号:' . $order_id . ',渠道订单状态:' . $tmp_channel_status . "\n" . PHP_EOL], 'ali/error');
  138. if ($order->ORDER_STATUS != $status) {
  139. return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
  140. }
  141. $order->ORDER_STATUS = OrderMain::ORDER_STATUS_CONFIRMED;
  142. $order->ORDER_CONFIRM_CODE = $msg;
  143. $order->ORDER_LEVEL = OrderMain::ORDER_LEVEL_SURE;
  144. $order->UPDATE_USER_ID = Yii::$app->user->id;
  145. $order->UPDATE_TIME = date('Y-m-d H:i:s', time());
  146. if ($order->validate()) {
  147. //渠道状态已取消,不能确认
  148. if ($order->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_CONFIRMED) {
  149. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '订单无法确认,请联系客服发取消单']);
  150. }
  151. if ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL) { //这里一定要在判断完渠道状态后再修改渠道的订单状态
  152. $order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_ACCEPT;
  153. }
  154. if (!$order->confirm()) {
  155. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '确认失败']);
  156. } elseif ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL) {
  157. $order->resetMem();
  158. if ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ali']['supplier_id'] && $tmp_channel_status == OrderMain::ORDER_CHANNEL_STATUS_WAITING) { //阿里直连
  159. // 记录酒店发送是否发送确认日志
  160. $userIp = Yii::$app->request->userIP;
  161. $logger->log([date("Y-m-d H:i:s"), '酒店确认,发送阿里确认状态,渠道订单号:' . $order_id . ',渠道订单号:' . $order->OUTSIDE_ORDER_NO . "\n请求ip:" . $userIp . PHP_EOL], 'ali/error');
  162. //这里㤇判断是否已经接单,如果没有接单的话,需要推送状态,如果接单了,相当于确认状态已经推送携程了,不能重复推送
  163. Yii::$app->runAction('hotel/ali/confirm-order', ['tid' => $order->OUTSIDE_ORDER_NO, 'opt_type' => '2']);
  164. $logger->log([date("Y-m-d H:i:s"), '酒店确认,通过RunAction,订单号:' . $order_id . "\n" . PHP_EOL], 'ali/error');
  165. } elseif ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['ctrip']['supplier_id']) { //携程直连
  166. //对接的订单,需要推送状态
  167. //这里不需要向阿里渠道那样,因为携程是需要确认号的,即使已经确认了,也要通过此接口,更新确认号,所以不需要判读
  168. $interFace = OrderChannelInfo::findOne(['CANCEL_FLAG' => 0, 'ORDER_ID' => $order->ORDER_ID]);
  169. if ($interFace != null) {
  170. $params = [
  171. 'OrderID' => $order->OUTSIDE_ORDER_NO,//订单ID
  172. 'InterfaceConfirmNo' => $order->ORDER_CONFIRM_CODE,//酒店确认号
  173. 'OrderStatus' => CtripOrder::ORDER_STATUS_COMFIRMED,//订单状态 3:确认;4:拒绝
  174. 'InterFaceSendID' => $interFace->InterFaceSendID,//订单接口发送号
  175. 'ResultCode' => CtripOrder::RETURN_CODE_SUCCESS,
  176. 'Message' => 'Success',
  177. 'channelId' => Yii::$app->params['ctrip']['relation_supplier_id'],//渠道ID 携程传1
  178. ];
  179. $set = new SetService();
  180. $setDes = $set->setOrderStatus($params);
  181. if ($setDes['flag'] == false) {
  182. zOfficeWechat::sendMsg([
  183. 'agentid' => zOfficeWechat::SEND_HOTEL,
  184. 'title' => '直连订单状态推送失败:',
  185. 'msg' => '酒店已经确认了直连订单:' . $order->ORDER_ID . "\n但是直连状态推送失败,请手动接单。",
  186. 'touser' => 'gaoj,wangxj,shifp,yuw']
  187. );
  188. }
  189. }
  190. } elseif ($order->OUTSIDE_SALE_ORG_ID == Yii::$app->params['wx_hotel']['supplier_id']) { //微信商城
  191. // 推送微信商城
  192. $res = Util::confirmHotelOrder($order->ORDER_ID);
  193. if ($res['code'] != 0) {
  194. zOfficeWechat::sendMsg([
  195. 'agentid' => zOfficeWechat::SEND_HOTEL,
  196. 'title' => '直连订单状态推送失败:',
  197. 'msg' => '接单失败【微信商城订单】:' . $order->ORDER_ID . ' ' . $res['info'],
  198. 'touser' => $this->_developerList]
  199. );
  200. }
  201. }
  202. }
  203. } else {
  204. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => $order->getErrors()]);
  205. }
  206. $order->resetMem();
  207. $logger->log([date("Y-m-d H:i:s"), '酒店确认,清除缓存,订单号:' . $order_id . ',订单状态:' . $order->ORDER_STATUS . '订单渠道:' . $order->OUTSIDE_SALE_ORG_ID . "\n" . '渠道订单状态:' . $tmp_channel_status . PHP_EOL], 'ali/error');
  208. return \GuzzleHttp\json_encode(['code' => 0]);
  209. }
  210. /**
  211. * Author:Steven
  212. * Desc:拒单
  213. * @param $order_id
  214. * @param $status
  215. * @param $msg
  216. * @return string
  217. * @throws NotFoundHttpException
  218. */
  219. public function actionRefuse($order_id, $status, $msg)
  220. {
  221. $order = $this->findModel($order_id);
  222. //这里需要判断渠道订单状态:
  223. //当渠道接单状态为已接单或拒绝取消,然后发单给酒店,这个时候酒店不应该有拒单按钮的
  224. //防止酒店页面在未刷新的情况下,点击拒绝
  225. if ($order->ORDER_STATUS != $status && $order->CHANNEL_ORDER_STATUS != OrderMain::ORDER_CHANNEL_STATUS_ACCEPT && $order->CHANNEL_ORDER_STATUS != OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_REJECT) {
  226. return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
  227. }
  228. //当渠道状态为待接单,酒店拒单了,这个时候为了不直接影响服务数据,不直接推送拒绝给直连渠道,由客服自己决定(高瑾:2017-12-22)
  229. //当渠道接单状态为已接单或拒绝取消,然后发单给酒店,这个时候酒店不应该有拒单按钮的(高瑾:2017-12-22)
  230. $order->ORDER_STATUS = OrderMain::ORDER_STATUS_CANCEL;
  231. if ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL)
  232. $order->CHANNEL_ORDER_STATUS = OrderMain::ORDER_CHANNEL_STATUS_REJECT;
  233. $order->UPDATE_USER_ID = Yii::$app->user->id;
  234. $order->ORDER_LEVEL = OrderMain::ORDER_LEVEL_CANCEL;
  235. $order->UPDATE_TIME = date('Y-m-d H:i:s', time());
  236. if ($order->validate()) {
  237. if (!$order->refuse($msg)) {
  238. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => '拒单失败']);
  239. }
  240. //重要:这里渠道拒单不推送渠道拒单状态,原因是有些订单,即使酒店拒单了,但是我们依然还是要收渠道的钱,所以拒绝渠道的订单均由我们人工操作(截止目前(2017-11-23)阿里、携程都实用这个逻辑:)
  241. // elseif ($order->DOCKING_TYPE == OrderMain::ORDER_TYPE_CHANNEL) {
  242. // //对接的订单,需要推送状态
  243. // $interFace = OrderChannelInfo::findOne(['CANCEL_FLAG' => 0, 'ORDER_ID' => $order->ORDER_ID]);
  244. // if ($interFace != null) {
  245. // $params = [
  246. // 'OrderID' => $order->ORDER_ID,//订单ID
  247. // 'InterfaceConfirmNo' => '',//酒店确认号
  248. // 'OrderStatus' => 4,//订单状态 3:确认;4:拒绝
  249. // 'InterFaceSendID' => $interFace->InterFaceSendID,//订单接口发送号
  250. // 'channelId' => Yii::$app->params['ctrip']['relation_supplier_id'],//渠道ID 携程传1
  251. // ];
  252. // $set = new SetService();
  253. // $setDes = $set->setOrderStatus($params);
  254. // if ($setDes['flag'] == false) {
  255. // zOfficeWechat::sendMsg([
  256. // 'agentid' => zOfficeWechat::SEND_HOTEL,
  257. // 'title' => '直连订单状态推送失败:',
  258. // 'msg' => '酒店已经拒绝了直连订单:' . $order->ORDER_ID . "\n但是直连状态推送失败,请手动拒单。",
  259. // 'touser' => 'gaoj,wangxj,shifp,yuw']
  260. // );
  261. // }
  262. //
  263. // }
  264. // }
  265. } else {
  266. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => $order->getErrors()]);
  267. }
  268. //拒单成功,清除
  269. $order->resetMem();
  270. //发企业微信
  271. /* @var $user User */
  272. $user = Yii::$app->user->identity;
  273. $supplier = BaseSupplier::findOne(['ID' => $user->TOP_ORG_ID]);
  274. $customer_list = $this->_messageList;
  275. $arr = array(
  276. "agentid" => 1000002,
  277. "title" => '酒店拒单:',
  278. "msg" => $supplier->SUPPLIER_NAME . '拒绝订单:' . $order->ORDER_ID,
  279. "touser" => $customer_list);
  280. zOfficeWechat::sendMsg($arr);
  281. return \GuzzleHttp\json_encode(['code' => 0]);
  282. }
  283. /**
  284. * @param $order_id
  285. * @param $msg string 备注内容
  286. */
  287. public function actionAddNote($order_id, $msg)
  288. {
  289. $order = $this->findModel($order_id);
  290. //添加备注
  291. $note = new OrderComment();
  292. $note->ORDER_ID = $order_id;
  293. $note->COMMENT_TXT = $msg;
  294. $note->COMMENT_TYPE = OrderComment::TYPE_PUBLIC;
  295. //记录添加备注的操作日志
  296. $order->saveLog('note', false, '添加备注:' . $msg);
  297. if ($note->save()) {
  298. return \GuzzleHttp\json_encode(['code' => 0]);
  299. } else {
  300. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => $note->getErrors()]);
  301. }
  302. }
  303. /**
  304. * Notes:已安排订单取消,酒店同意取消
  305. * User: Steven
  306. * Date: 2018/1/18
  307. * Time: 11:51
  308. * @param $order_id
  309. * @param $status
  310. * @return string
  311. * @throws NotFoundHttpException
  312. * @throws \yii\db\Exception
  313. */
  314. public function actionCancelSure($order_id, $status)
  315. {
  316. $order = $this->findModel($order_id);
  317. if ($order->ORDER_STATUS != $status) {
  318. return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
  319. }
  320. $order->ORDER_DISABLE_TYPE = OrderMain::ORDER_DISABLE_TYPE_CONFIRMED;
  321. $order->ORDER_STATUS = OrderMain::ORDER_STATUS_CANCEL;
  322. $order->ORDER_LEVEL = OrderMain::ORDER_LEVEL_CANCEL;
  323. $order->UPDATE_TIME = date('Y-m-d H:i:s', time());
  324. $flag = $order->getOldAttribute('ORDER_STATUS');
  325. $logger = new TopLogger();
  326. $trans = Yii::$app->db->beginTransaction();
  327. try {
  328. $res = $order->save();
  329. if (!$res) {
  330. throw new \Exception();
  331. }
  332. $roolback = $order->rollbackStocks();
  333. $order->saveLog('cancel_confirm', $flag);
  334. $order->resetMem();
  335. //修改子订单的状态值
  336. $orders_res = OrderMain::updateAll([
  337. 'ORDER_STATUS' => OrderMain::ORDER_STATUS_CANCEL,
  338. 'ORDER_DISABLE_TYPE' => OrderMain::ORDER_DISABLE_TYPE_CONFIRMED,
  339. 'ORDER_LEVEL' => OrderMain::ORDER_LEVEL_CANCEL,
  340. 'UPDATE_TIME' => date('Y-m-d H:i:s', time())
  341. ],
  342. ['CANCEL_FLAG' => 0, 'PARENT_ORDER_ID' => $order->ORDER_ID]);
  343. if (!$orders_res) {
  344. throw new \Exception('修改子订单失败');
  345. }
  346. //发企业微信
  347. /* @var $user User */
  348. $user = Yii::$app->user->identity;
  349. $supplier = BaseSupplier::findOne(['ID' => $user->TOP_ORG_ID]);
  350. $customer_list = $this->_messageList;
  351. $arr = array(
  352. "agentid" => 1000002,
  353. "title" => '酒店同意退单:',
  354. "msg" => '酒店' . $supplier->SUPPLIER_NAME . "\n订单号:" . $order->ORDER_ID,
  355. "touser" => $customer_list);
  356. zOfficeWechat::sendMsg($arr);
  357. $trans->commit();
  358. return \GuzzleHttp\json_encode(['code' => 0]);
  359. } catch (\Exception $e) {
  360. $trans->rollBack();
  361. $error_arr = array(
  362. "agentid" => 1000002,
  363. "title" => '酒店同意退单失败:',
  364. "msg" => "订单号:" . $order->ORDER_ID,
  365. "touser" => $this->_messageList
  366. );
  367. zOfficeWechat::sendMsg($error_arr);
  368. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => $order->getErrors()]);
  369. }
  370. }
  371. /**
  372. * Notes:已安排订单取消,酒店拒绝取消
  373. * User: Steven
  374. * Date: 2018/1/18
  375. * Time: 11:52
  376. * @param $order_id
  377. * @param $status
  378. * @return string
  379. * @throws NotFoundHttpException
  380. */
  381. public function actionCancelReject($order_id, $status)
  382. {
  383. $order = $this->findModel($order_id);
  384. if ($order->ORDER_STATUS != $status) {
  385. return \GuzzleHttp\json_encode(['code' => 2, 'msg' => '订单状态已经发生变化,请刷新后再操作']);
  386. }
  387. $order->ORDER_DISABLE_TYPE = OrderMain::ORDER_DISABLE_TYPE_CONFIRMED;
  388. $order->ORDER_STATUS = OrderMain::ORDER_STATUS_CONFIRMED;
  389. $order->UPDATE_TIME = date('Y-m-d H:i:s', time());
  390. if (!is_numeric($order->ORDER_CONFIRM_CODE)) {
  391. $order->ORDER_CONFIRM_CODE = '';
  392. }
  393. $flag = $order->getOldAttribute('ORDER_STATUS');
  394. if ($order->save()) {
  395. $order->saveLog('cancel_confirm', $flag);
  396. //清除memcache缓存
  397. $order->resetMem();
  398. //发企业微信
  399. /* @var $user User */
  400. $user = Yii::$app->user->identity;
  401. $supplier = BaseSupplier::findOne(['ID' => $user->TOP_ORG_ID]);
  402. $customer_list = $this->_messageList;
  403. $arr = array(
  404. "agentid" => 1000002,
  405. "title" => '酒店拒绝退单:',
  406. "msg" => '酒店' . $supplier->SUPPLIER_NAME . "\n订单号:" . $order->ORDER_ID,
  407. "touser" => $customer_list);
  408. zOfficeWechat::sendMsg($arr);
  409. return \GuzzleHttp\json_encode(['code' => 0]);
  410. } else
  411. return \GuzzleHttp\json_encode(['code' => 1, 'msg' => $order->getErrors()]);
  412. }
  413. public function actionDownload($id, $type = 1)
  414. {
  415. $order = OrderMain::findOne(['ORDER_ID' => $id, 'PARENT_ORDER_ID' => 0, 'CANCEL_FLAG' => 0]);
  416. $order_id = $order->ORDER_ID;
  417. $filename = "【" . $order_id . "】" . $order->CUSTOMER_NAME . $order->PROD_START_STATION_DATE . ".doc";
  418. ob_start(); //--网页显示
  419. echo '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word"
  420. xmlns="http://www.w3.org/TR/REC-html40">';
  421. $html = $order->wordHtml($type);
  422. echo $html;
  423. header('Content-type: application/word');
  424. header("Content-Disposition: attachment; filename=\"{$filename}\"");
  425. // @readfile($filename,0777);
  426. ob_flush();
  427. flush();
  428. exit();
  429. }
  430. /**
  431. * @Author wanglg
  432. * @Desc 获取订单内部备注信息,用于弹框显示
  433. * @return string
  434. */
  435. public function actionGetComment()
  436. {
  437. $request = Yii::$app->request->post();
  438. $comment = new OrderComment();
  439. $comment_list = $comment->getPublicComment($request['order_id']);
  440. $data['comment_list'] = $comment_list;
  441. return json_encode($data);
  442. }
  443. /**
  444. * 导出订单列表
  445. */
  446. public function actionExport()
  447. {
  448. $searchModel = new searchOrderMain();
  449. $search = Yii::$app->request->queryParams;
  450. $dataProvider = $searchModel->supplierSearch($search);
  451. $dataProvider->pagination = false;
  452. $query = $dataProvider->query;
  453. $query->andFilterWhere(['order_main.ORDER_STATUS' => $searchModel->ORDER_STATUS]);
  454. $data = $dataProvider->getModels();
  455. $objPHPExcel = new zPhpExcel(); //实例化PHPExcel类
  456. $objPHPExcel->file_name = '订单信息' . date('Y-m-d');
  457. $objSheet = $objPHPExcel->getActiveSheet();
  458. $objSheet->setTitle('订单列表');
  459. //设置表头
  460. $attributes = OrderMain::supplierExportAttributes();
  461. $order = new OrderMain();
  462. foreach ($attributes as $key => $item) {
  463. //A1为编号不需要设置
  464. $objSheet->setCellValue(chr(66 + $key) . '1', $order->getAttributeLabel($item));
  465. }
  466. //内存设置,位置不一定合理
  467. ini_set("memory_limit", "-1");
  468. foreach ($data as $key => $datum) {
  469. foreach ($attributes as $index => $item) {
  470. if ($index === 0)
  471. $objSheet->setCellValue('A' . ($key + 2), $key + 1);
  472. //订单状态、备注需要特殊处理
  473. if ($item === 'ORDER_STATUS') {
  474. $str = $datum->statusLabel->TYPE_NAME;
  475. } elseif ($item === 'CUSTOMER_MEMO') {
  476. $str = '';
  477. if (!empty($datum->publicMemo)) {
  478. foreach ($datum->publicMemo as $memo) {
  479. $str .= $memo->COMMENT_TXT . ';';
  480. }
  481. $str = substr($str, 0, -1);
  482. }
  483. } else {
  484. $str = $datum->$item;
  485. }
  486. $objSheet->setCellValue(chr(66 + $index) . ($key + 2), $str);
  487. }
  488. }
  489. //设置宽度
  490. $objPHPExcel->setColumnSize(range('C', 'M'), [20, 40, 25, 12, 12, 10, 10, 12, 12, 10, 40]);
  491. $objPHPExcel->output();
  492. }
  493. /**
  494. * 获取memcache中的订单列表,只要198和383状态的订单
  495. * 返回memcache中对应酒店的缓存订单,查询过 1 次之后,置status为1
  496. * @param $supplier_id integer
  497. */
  498. public function actionMemList($supplier_id)
  499. {
  500. $mem = Yii::$app->cacheCS;
  501. $newOrder = $mem->get('hotel_newOrder');
  502. if ($newOrder && count($newOrder) > 0) {
  503. if (isset($newOrder[$supplier_id])) {
  504. $tmp = $newOrder[$supplier_id];
  505. foreach ($newOrder[$supplier_id] as &$order) {
  506. $order['status'] = in_array($order['type'], array(198, 383)) ? 1 : 0;
  507. }
  508. $mem->set('hotel_newOrder', $newOrder);
  509. return \GuzzleHttp\json_encode($tmp);
  510. }
  511. }
  512. return \GuzzleHttp\json_encode(array());
  513. }
  514. /**
  515. * Finds the OrderMain model based on its primary key value.
  516. * If the model is not found, a 404 HTTP exception will be thrown.
  517. * @param integer $id
  518. * @return OrderMain the loaded model
  519. * @throws NotFoundHttpException if the model cannot be found
  520. */
  521. protected function findModel($id)
  522. {
  523. if (($model = OrderMain::findOne(['ORDER_ID' => $id, 'CANCEL_FLAG' => 0])) !== null) {
  524. return $model;
  525. } else {
  526. throw new NotFoundHttpException('无效的订单号,请刷新页面后重试');
  527. }
  528. }
  529. }