Sellerorder.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. <?php
  2. namespace app\home\controller;
  3. use think\facade\View;
  4. use think\facade\Lang;
  5. use think\facade\Db;
  6. /**
  7. * ============================================================================
  8. * DSMall多用户商城
  9. * ============================================================================
  10. * 版权所有 2014-2028 长沙德尚网络科技有限公司,并保留所有权利。
  11. * 网站地址: http://www.csdeshang.com
  12. * ----------------------------------------------------------------------------
  13. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
  14. * 不允许对程序代码以任何形式任何目的的再发布。
  15. * ============================================================================
  16. * 控制器
  17. */
  18. class Sellerorder extends BaseSeller
  19. {
  20. public function initialize()
  21. {
  22. parent::initialize();
  23. Lang::load(base_path() . 'home/lang/' . config('lang.default_lang') . '/sellerorder.lang.php');
  24. }
  25. /**
  26. * 订单列表
  27. *
  28. */
  29. public function index()
  30. {
  31. //上级店铺id
  32. $store_id = session('store_id');
  33. $store_arr = Db::name('store')->field('store_id,store_name')
  34. ->where('p_id', $store_id)
  35. ->whereOr('store_id', $store_id)
  36. ->select();
  37. View::assign('store_arr', $store_arr);
  38. $store_ids = $store_arr->column('store_id');
  39. $store_column = [];
  40. foreach ($store_arr as $store) {
  41. $store_column[$store['store_id']] = $store['store_name'];
  42. }
  43. //店铺搜索条件
  44. $store_id_input = input('param.store_id', 0);
  45. if (!empty($store_id_input)) {
  46. if (in_array($store_id_input, $store_ids)) {
  47. $store_ids = [$store_id_input];
  48. } else {
  49. $store_ids = [0];
  50. }
  51. }
  52. View::assign('store_id_input', $store_id_input);
  53. $order_model = model('order');
  54. $condition = [];
  55. $condition[] = ['store_id', 'in', $store_ids];
  56. $order_sn = input('get.order_sn');
  57. if ($order_sn != '') {
  58. $condition[] = ['order_sn', '=', $order_sn];
  59. }
  60. $buyer_name = input('get.buyer_name');
  61. if ($buyer_name != '') {
  62. $condition[] = ['buyer_name', '=', $buyer_name];
  63. }
  64. $allow_state_array = ['state_new', 'state_pay', 'state_send', 'state_success', 'state_cancel'];
  65. $state_type = input('param.state_type');
  66. if (in_array($state_type, $allow_state_array)) {
  67. $condition[] = ['order_state', '=', str_replace($allow_state_array, [ORDER_STATE_NEW, ORDER_STATE_PAY, ORDER_STATE_SEND, ORDER_STATE_SUCCESS, ORDER_STATE_CANCEL], $state_type)];
  68. } else {
  69. $state_type = 'store_order';
  70. }
  71. $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/', input('get.query_start_date'));
  72. $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/', input('get.query_end_date'));
  73. $start_unixtime = $if_start_date ? strtotime(input('get.query_start_date')) : null;
  74. $end_unixtime = $if_end_date ? (strtotime(input('get.query_end_date')) + 86399) : null;
  75. if ($start_unixtime) {
  76. $condition[] = ['add_time', '>=', $start_unixtime];
  77. }
  78. if ($end_unixtime) {
  79. $condition[] = ['add_time', '<=', $end_unixtime];
  80. }
  81. $skip_off = input('get.buyer_name');
  82. if ($skip_off == 1) {
  83. $condition[] = ['order_state', '<>', ORDER_STATE_CANCEL];
  84. }
  85. $order_list = $order_model->getOrderList($condition, 10, '*', 'order_id desc', 0, ['order_goods', 'order_common', 'ppintuanorder', 'member']);
  86. View::assign('show_page', $order_model->page_info->render());
  87. //页面中显示那些操作
  88. foreach ($order_list as $key => $order_info) {
  89. //显示取消订单
  90. $order_info['if_cancel'] = $order_model->getOrderOperateState('store_cancel', $order_info);
  91. //显示调整运费
  92. $order_info['if_modify_price'] = $order_model->getOrderOperateState('modify_price', $order_info);
  93. //显示修改价格
  94. $order_info['if_spay_price'] = $order_model->getOrderOperateState('spay_price', $order_info);
  95. //显示发货
  96. $order_info['if_send'] = $order_model->getOrderOperateState('send', $order_info);
  97. //显示锁定中
  98. $order_info['if_lock'] = $order_model->getOrderOperateState('lock', $order_info);
  99. //显示物流跟踪
  100. $order_info['if_deliver'] = $order_model->getOrderOperateState('deliver', $order_info);
  101. //店铺名称
  102. $order_info['store_name'] = $store_column[$order_info['store_id']];
  103. foreach ($order_info['extend_order_goods'] as $value) {
  104. $value['image_240_url'] = goods_cthumb($value['goods_image'], 240, $value['store_id']);
  105. $value['goods_type_cn'] = get_order_goodstype($value['goods_type']);
  106. $value['goods_url'] = (string)url('Goods/index', ['goods_id' => $value['goods_id']]);
  107. if ($value['goods_type'] == 5) {
  108. $order_info['zengpin_list'][] = $value;
  109. } else {
  110. $order_info['goods_list'][] = $value;
  111. }
  112. }
  113. if (empty($order_info['zengpin_list'])) {
  114. $order_info['goods_count'] = count($order_info['goods_list']);
  115. } else {
  116. $order_info['goods_count'] = count($order_info['goods_list']) + 1;
  117. }
  118. $order_list[$key] = $order_info;
  119. }
  120. View::assign('order_list', $order_list);
  121. /* 设置卖家当前菜单 */
  122. $this->setSellerCurMenu('sellerorder');
  123. /* 设置卖家当前栏目 */
  124. $this->setSellerCurItem($state_type);
  125. return View::fetch($this->template_dir . 'index');
  126. }
  127. /**
  128. * 卖家订单详情
  129. *
  130. */
  131. public function show_order()
  132. {
  133. $order_id = intval(input('param.order_id'));
  134. if ($order_id <= 0) {
  135. $this->error(lang('param_error'));
  136. }
  137. $order_model = model('order');
  138. $condition = [];
  139. $condition[] = ['order_id', '=', $order_id];
  140. $condition[] = ['store_id', '=', session('store_id')];
  141. $order_info = $order_model->getOrderInfo($condition, ['order_common', 'order_goods', 'member', 'ppintuanorder']);
  142. if (empty($order_info)) {
  143. $this->error(lang('store_order_none_exist'));
  144. }
  145. $refundreturn_model = model('refundreturn');
  146. $order_list = [];
  147. $order_list[$order_id] = $order_info;
  148. $order_list = $refundreturn_model->getGoodsRefundList($order_list, 1); //订单商品的退款退货显示
  149. $order_info = $order_list[$order_id];
  150. $refund_all = isset($order_info['refund_list'][0]) ? $order_info['refund_list'][0] : '';
  151. if (!empty($refund_all) && $refund_all['seller_state'] < 3) {//订单全部退款商家审核状态:1为待审核,2为同意,3为不同意
  152. View::assign('refund_all', $refund_all);
  153. }
  154. //显示锁定中
  155. $order_info['if_lock'] = $order_model->getOrderOperateState('lock', $order_info);
  156. //显示调整运费
  157. $order_info['if_modify_price'] = $order_model->getOrderOperateState('modify_price', $order_info);
  158. //显示调整价格
  159. $order_info['if_spay_price'] = $order_model->getOrderOperateState('spay_price', $order_info);
  160. //显示取消订单
  161. $order_info['if_cancel'] = $order_model->getOrderOperateState('store_cancel', $order_info);
  162. //显示发货
  163. $order_info['if_send'] = $order_model->getOrderOperateState('send', $order_info);
  164. //显示物流跟踪
  165. $order_info['if_deliver'] = $order_model->getOrderOperateState('deliver', $order_info);
  166. //显示系统自动取消订单日期
  167. if ($order_info['order_state'] == ORDER_STATE_NEW) {
  168. $order_info['order_cancel_day'] = $order_info['add_time'] + config('ds_config.order_auto_cancel_day') * 24 * 3600;
  169. }
  170. //显示快递信息
  171. if ($order_info['shipping_code'] != '') {
  172. $express = rkcache('express', true);
  173. $order_info['express_info']['express_code'] = $express[$order_info['extend_order_common']['shipping_express_id']]['express_code'];
  174. $order_info['express_info']['express_name'] = $express[$order_info['extend_order_common']['shipping_express_id']]['express_name'];
  175. $order_info['express_info']['express_url'] = $express[$order_info['extend_order_common']['shipping_express_id']]['express_url'];
  176. } else {
  177. $order_info['express_info']['express_code'] = '';
  178. $order_info['express_info']['express_name'] = '';
  179. $order_info['express_info']['express_url'] = '';
  180. }
  181. //显示系统自动收获时间
  182. if ($order_info['order_state'] == ORDER_STATE_SEND) {
  183. $order_info['order_confirm_day'] = $order_info['delay_time'] + config('ds_config.order_auto_receive_day') * 24 * 3600;
  184. }
  185. //如果订单已取消,取得取消原因、时间,操作人
  186. if ($order_info['order_state'] == ORDER_STATE_CANCEL) {
  187. $order_info['close_info'] = $order_model->getOrderlogInfo(['order_id' => $order_info['order_id']], 'log_id desc');
  188. }
  189. $order_info['chain_order_type'] = 0;
  190. //如果是待自提则获取提货码
  191. $chain_order_model = model('chain_order');
  192. $chain_order_info = $chain_order_model->getChainOrderInfo([['order_id', '=', $order_info['order_id']]]);
  193. if ($chain_order_info) {
  194. $order_info['chain_order_type'] = $chain_order_info['chain_order_type'];
  195. }
  196. foreach ($order_info['extend_order_goods'] as $value) {
  197. $value['image_240_url'] = goods_cthumb($value['goods_image'], 240, $value['store_id']);
  198. $value['goods_type_cn'] = get_order_goodstype($value['goods_type']);
  199. $value['goods_url'] = (string)url('Goods/index', ['goods_id' => $value['goods_id']]);
  200. if ($value['goods_type'] == 5) {
  201. $order_info['zengpin_list'][] = $value;
  202. } else {
  203. $order_info['goods_list'][] = $value;
  204. }
  205. }
  206. if (empty($order_info['zengpin_list'])) {
  207. $order_info['goods_count'] = count($order_info['goods_list']);
  208. } else {
  209. $order_info['goods_count'] = count($order_info['goods_list']) + 1;
  210. }
  211. View::assign('order_info', $order_info);
  212. //发货信息
  213. if (!empty($order_info['extend_order_common']['daddress_id'])) {
  214. $daddress_info = model('daddress')->getAddressInfo(['daddress_id' => $order_info['extend_order_common']['daddress_id']]);
  215. View::assign('daddress_info', $daddress_info);
  216. }
  217. /* 设置卖家当前菜单 */
  218. $this->setSellerCurMenu('sellerorder');
  219. /* 设置卖家当前栏目 */
  220. $this->setSellerCurItem();
  221. return View::fetch($this->template_dir . 'show_order');
  222. }
  223. /**
  224. * 卖家订单状态操作
  225. *
  226. */
  227. public function change_state()
  228. {
  229. $state_type = input('param.state_type');
  230. $order_id = intval(input('param.order_id'));
  231. $order_model = model('order');
  232. $condition = [];
  233. $condition[] = ['order_id', '=', $order_id];
  234. $condition[] = ['store_id', '=', session('store_id')];
  235. $order_info = $order_model->getOrderInfo($condition);
  236. if ($state_type == 'order_cancel') {
  237. $result = $this->_order_cancel($order_info, input('post.'));
  238. } elseif ($state_type == 'modify_price') {
  239. $result = $this->_order_ship_price($order_info, input('post.'));
  240. } elseif ($state_type == 'spay_price') {
  241. $result = $this->_order_spay_price($order_info, input('post.'));
  242. }
  243. if (!$result['code']) {
  244. ds_json_encode(10001, $result['msg']);
  245. } else {
  246. ds_json_encode(10000, $result['msg']);
  247. }
  248. }
  249. /**
  250. * 打印订单
  251. *
  252. */
  253. public function print_order()
  254. {
  255. $order_id = ds_delete_param(input('param.order_id'));
  256. if (empty($order_id)) {
  257. $this->error(lang('param_error'));
  258. }
  259. $order_model = model('order');
  260. $condition = [];
  261. $condition[] = ['order_id', 'in', $order_id];
  262. $condition[] = ['store_id', '=', session('store_id')];
  263. $order_list = $order_model->getOrderList($condition, '', '*', 'order_id desc', 0, ['order_common', 'order_goods']);
  264. if (empty($order_list)) {
  265. $this->error(lang('member_printorder_ordererror'));
  266. }
  267. //卖家信息
  268. $store_model = model('store');
  269. $store_info = $store_model->getStoreInfoByID(session('store_id'));
  270. if (!empty($store_info['store_avatar'])) {
  271. $store_info['store_avatar'] = ds_get_pic(ATTACH_STORE . DIRECTORY_SEPARATOR . $store_info['store_id'], $store_info['store_avatar']);
  272. }
  273. if (!empty($store_info['store_seal'])) {
  274. $store_info['store_seal'] = ds_get_pic(ATTACH_STORE, $store_info['store_seal']);
  275. }
  276. View::assign('store_info', $store_info);
  277. //订单商品
  278. foreach ($order_list as $key => $order_info) {
  279. $goods_all_num = 0;
  280. $goods_total_price = 0;
  281. if (isset($order_info['extend_order_goods']) && !empty($order_info['extend_order_goods'])) {
  282. foreach ($order_info['extend_order_goods'] as $k => $v) {
  283. $v['goods_name'] = str_cut($v['goods_name'], 100);
  284. $goods_all_num += $v['goods_num'];
  285. $v['goods_all_price'] = ds_price_format($v['goods_num'] * $v['goods_price']);
  286. $goods_total_price += $v['goods_all_price'];
  287. $order_list[$key]['extend_order_goods'][$k] = $v;
  288. }
  289. //优惠金额
  290. $order_list[$key]['promotion_amount'] = $goods_total_price - $order_info['goods_amount'];
  291. $order_list[$key]['goods_all_num'] = $goods_all_num;
  292. $order_list[$key]['goods_total_price'] = ds_price_format($goods_total_price);
  293. $order_list[$key]['total_page'] = ceil(count($order_info['extend_order_goods']) / 15);
  294. }
  295. }
  296. View::assign('order_list', $order_list);
  297. return View::fetch($this->template_dir . 'print_order');
  298. }
  299. /**
  300. * 取消订单
  301. * @param unknown $order_info
  302. */
  303. private function _order_cancel($order_info, $post)
  304. {
  305. $order_model = model('order');
  306. $logic_order = model('order', 'logic');
  307. if (!request()->isPost()) {
  308. View::assign('order_info', $order_info);
  309. View::assign('order_id', $order_info['order_id']);
  310. echo View::fetch($this->template_dir . 'cancel');
  311. exit();
  312. } else {
  313. $if_allow = $order_model->getOrderOperateState('store_cancel', $order_info);
  314. if (!$if_allow) {
  315. return ds_callback(false, lang('have_no_legalpower'));
  316. }
  317. $msg = $post['state_info1'] != '' ? $post['state_info1'] : $post['state_info'];
  318. try {
  319. Db::startTrans();
  320. $logic_order->changeOrderStateCancel($order_info, 'seller', session('member_name'), $msg);
  321. } catch (\Exception $e) {
  322. Db::rollback();
  323. return ds_callback(false, $e->getMessage());
  324. }
  325. Db::commit();
  326. return ds_callback(true, lang('ds_common_op_succ'));
  327. }
  328. }
  329. /**
  330. * 修改运费
  331. * @param unknown $order_info
  332. */
  333. private function _order_ship_price($order_info, $post)
  334. {
  335. $order_model = model('order');
  336. $logic_order = model('order', 'logic');
  337. if (!request()->isPost()) {
  338. View::assign('order_info', $order_info);
  339. View::assign('order_id', $order_info['order_id']);
  340. echo View::fetch($this->template_dir . 'edit_price');
  341. exit();
  342. } else {
  343. $if_allow = $order_model->getOrderOperateState('modify_price', $order_info);
  344. if (!$if_allow) {
  345. return ds_callback(false, lang('have_no_legalpower'));
  346. }
  347. return $logic_order->changeOrderShipPrice($order_info, 'seller', session('member_name'), $post['shipping_fee']);
  348. }
  349. }
  350. /**
  351. * 修改商品价格
  352. * @param unknown $order_info
  353. */
  354. private function _order_spay_price($order_info, $post)
  355. {
  356. $order_model = model('order');
  357. $logic_order = model('order', 'logic');
  358. if (!request()->isPost()) {
  359. View::assign('order_info', $order_info);
  360. View::assign('order_id', $order_info['order_id']);
  361. echo View::fetch($this->template_dir . 'edit_spay_price');
  362. exit();
  363. } else {
  364. $if_allow = $order_model->getOrderOperateState('spay_price', $order_info);
  365. if (!$if_allow) {
  366. return ds_callback(false, lang('have_no_legalpower'));
  367. }
  368. return $logic_order->changeOrderSpayPrice($order_info, 'seller', session('member_name'), $post['goods_amount']);
  369. }
  370. }
  371. /**
  372. * 用户中心右边,小导航
  373. *
  374. * @param string $menu_type 导航类型
  375. * @param string $menu_key 当前导航的menu_key
  376. * @return
  377. */
  378. function getSellerItemList()
  379. {
  380. $menu_array = [
  381. [
  382. 'name' => 'store_order',
  383. 'text' => lang('ds_member_path_all_order'),
  384. 'url' => (string)url('Sellerorder/index'),
  385. ],
  386. [
  387. 'name' => 'state_new',
  388. 'text' => lang('ds_member_path_wait_pay'),
  389. 'url' => (string)url('Sellerorder/index', ['state_type' => 'state_new']),
  390. ],
  391. [
  392. 'name' => 'state_pay',
  393. 'text' => lang('ds_member_path_wait_send'),
  394. 'url' => (string)url('Sellerorder/index', ['state_type' => 'state_pay']),
  395. ],
  396. [
  397. 'name' => 'state_send',
  398. 'text' => lang('ds_member_path_sent'),
  399. 'url' => (string)url('Sellerorder/index', ['state_type' => 'state_send']),
  400. ],
  401. [
  402. 'name' => 'state_success',
  403. 'text' => lang('ds_member_path_finished'),
  404. 'url' => (string)url('Sellerorder/index', ['state_type' => 'state_success']),
  405. ],
  406. [
  407. 'name' => 'state_cancel',
  408. 'text' => lang('ds_member_path_canceled'),
  409. 'url' => (string)url('Sellerorder/index', ['state_type' => 'state_cancel']),
  410. ],
  411. ];
  412. return $menu_array;
  413. }
  414. public function export()
  415. {
  416. //上级店铺id
  417. $store_id = session('store_id');
  418. $store_arr = Db::name('store')->field('store_id,store_name')
  419. ->where('p_id', $store_id)
  420. ->whereOr('store_id', $store_id)
  421. ->select();
  422. $store_ids = $store_arr->column('store_id');
  423. $store_column = [];
  424. foreach ($store_arr as $store) {
  425. $store_column[$store['store_id']] = $store['store_name'];
  426. }
  427. //店铺搜索条件
  428. $store_id_input = input('param.store_id', 0);
  429. if (!empty($store_id_input)) {
  430. if (in_array($store_id_input, $store_ids)) {
  431. $store_ids = [$store_id_input];
  432. } else {
  433. $store_ids = [0];
  434. }
  435. }
  436. $order_model = model('order');
  437. $condition = [];
  438. $condition[] = ['store_id', 'in', $store_ids];
  439. $ids = input('get.ids');
  440. if (!empty($ids)) {
  441. $condition[] = ['order_id', 'in', explode(',', $ids)];
  442. }
  443. $order_sn = input('get.order_sn');
  444. if ($order_sn != '') {
  445. $condition[] = ['order_sn', '=', $order_sn];
  446. }
  447. $buyer_name = input('get.buyer_name');
  448. if ($buyer_name != '') {
  449. $condition[] = ['buyer_name', '=', $buyer_name];
  450. }
  451. $allow_state_array = ['state_new', 'state_pay', 'state_send', 'state_success', 'state_cancel'];
  452. $state_type = input('param.state_type');
  453. if (in_array($state_type, $allow_state_array)) {
  454. $condition[] = ['order_state', '=', str_replace($allow_state_array, [ORDER_STATE_NEW, ORDER_STATE_PAY, ORDER_STATE_SEND, ORDER_STATE_SUCCESS, ORDER_STATE_CANCEL], $state_type)];
  455. } else {
  456. $state_type = 'store_order';
  457. }
  458. $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/', input('get.query_start_date'));
  459. $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/', input('get.query_end_date'));
  460. $start_unixtime = $if_start_date ? strtotime(input('get.query_start_date')) : null;
  461. $end_unixtime = $if_end_date ? (strtotime(input('get.query_end_date')) + 86399) : null;
  462. if ($start_unixtime) {
  463. $condition[] = ['add_time', '>=', $start_unixtime];
  464. }
  465. if ($end_unixtime) {
  466. $condition[] = ['add_time', '<=', $end_unixtime];
  467. }
  468. $skip_off = input('get.buyer_name');
  469. if ($skip_off == 1) {
  470. $condition[] = ['order_state', '<>', ORDER_STATE_CANCEL];
  471. }
  472. $order_list = $order_model->getOrderList($condition, 0, '*', 'order_id desc', 0, ['order_goods', 'order_common', 'ppintuanorder', 'member']);
  473. //页面中显示那些操作
  474. foreach ($order_list as $key => $order_info) {
  475. //显示取消订单
  476. $order_info['if_cancel'] = $order_model->getOrderOperateState('store_cancel', $order_info);
  477. //显示调整运费
  478. $order_info['if_modify_price'] = $order_model->getOrderOperateState('modify_price', $order_info);
  479. //显示修改价格
  480. $order_info['if_spay_price'] = $order_model->getOrderOperateState('spay_price', $order_info);
  481. //显示发货
  482. $order_info['if_send'] = $order_model->getOrderOperateState('send', $order_info);
  483. //显示锁定中
  484. $order_info['if_lock'] = $order_model->getOrderOperateState('lock', $order_info);
  485. //显示物流跟踪
  486. $order_info['if_deliver'] = $order_model->getOrderOperateState('deliver', $order_info);
  487. //店铺名称
  488. $order_info['store_name'] = $store_column[$order_info['store_id']];
  489. foreach ($order_info['extend_order_goods'] as $value) {
  490. $value['image_240_url'] = goods_cthumb($value['goods_image'], 240, $value['store_id']);
  491. $value['goods_type_cn'] = get_order_goodstype($value['goods_type']);
  492. $value['goods_url'] = (string)url('Goods/index', ['goods_id' => $value['goods_id']]);
  493. if ($value['goods_type'] == 5) {
  494. $order_info['zengpin_list'][] = $value;
  495. } else {
  496. $order_info['goods_list'][] = $value;
  497. }
  498. }
  499. if (empty($order_info['zengpin_list'])) {
  500. $order_info['goods_count'] = count($order_info['goods_list']);
  501. } else {
  502. $order_info['goods_count'] = count($order_info['goods_list']) + 1;
  503. }
  504. $order_list[$key] = $order_info;
  505. }
  506. $this->createExcel($order_list);
  507. }
  508. /**
  509. * 生成excel
  510. *
  511. * @param array $data
  512. */
  513. private function createExcel($data = [])
  514. {
  515. Lang::load(base_path() . 'admin/lang/' . config('lang.default_lang') . '/export.lang.php');
  516. $excel_obj = new \excel\Excel();
  517. $excel_data = [];
  518. //设置样式
  519. $excel_obj->setStyle(['id' => 's_title', 'Font' => ['FontName' => '宋体', 'Size' => '12', 'Bold' => '1']]);
  520. //header
  521. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_no')];
  522. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_store')];
  523. $excel_data[0][] = ['styleid' => 's_title', 'data' => '商品名称'];
  524. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_buyer')];
  525. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_xtimd')];
  526. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_count')];
  527. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_yfei')];
  528. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_paytype')];
  529. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_state')];
  530. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_storeid')];
  531. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_buyerid')];
  532. $excel_data[0][] = ['styleid' => 's_title', 'data' => lang('exp_od_bemail')];
  533. //data
  534. foreach ((array)$data as $k => $v) {
  535. $tmp = [];
  536. $tmp[] = ['data' => $v['order_sn']];
  537. $tmp[] = ['data' => $v['store_name']];
  538. $goods_name = [];
  539. if (!empty($v['extend_order_goods'])) {
  540. foreach ($v['extend_order_goods'] as $goods) {
  541. $goods_name[] = $goods['goods_name'] . '*' . $goods['goods_num'];
  542. }
  543. }
  544. $tmp[] = ['data' => implode('/', $goods_name)];
  545. $tmp[] = ['data' => $v['buyer_name']];
  546. $tmp[] = ['data' => date('Y-m-d H:i:s', $v['add_time'])];
  547. $tmp[] = ['format' => 'Number', 'data' => ds_price_format($v['order_amount'])];
  548. $tmp[] = ['format' => 'Number', 'data' => ds_price_format($v['shipping_fee'])];
  549. $tmp[] = ['data' => get_order_payment_name($v['payment_code'])];
  550. $tmp[] = ['data' => get_order_state($v)];
  551. $tmp[] = ['data' => $v['store_id']];
  552. $tmp[] = ['data' => $v['buyer_id']];
  553. $tmp[] = ['data' => $v['buyer_email']];
  554. $excel_data[] = $tmp;
  555. }
  556. $excel_data = $excel_obj->charset($excel_data, CHARSET);
  557. $excel_obj->addArray($excel_data);
  558. $excel_obj->addWorksheet($excel_obj->charset(lang('exp_od_order'), CHARSET));
  559. $excel_obj->generateXML($excel_obj->charset(lang('exp_od_order'), CHARSET) . input('param.page') . '-' . date('Y-m-d-H', TIMESTAMP));
  560. }
  561. }
  562. ?>