order.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <?php
  2. /**
  3. * 交易管理
  4. *
  5. *
  6. *
  7. ***/
  8. defined('InShopNC') or exit('Access Invalid!');
  9. class orderControl extends SystemControl{
  10. /**
  11. * 每次导出订单数量
  12. * @var int
  13. */
  14. const EXPORT_SIZE = 1000;
  15. public function __construct(){
  16. parent::__construct();
  17. Language::read('trade');
  18. }
  19. public function indexOp(){
  20. $model_order = Model('order');
  21. $condition = array();
  22. if($_GET['order_sn']) {
  23. $condition['order_sn'] = $_GET['order_sn'];
  24. }
  25. if($_GET['store_name']) {
  26. $condition['store_name'] = $_GET['store_name'];
  27. }
  28. if(in_array($_GET['order_state'],array('0','10','20','30','40'))){
  29. $condition['order_state'] = $_GET['order_state'];
  30. }
  31. if($_GET['payment_code']) {
  32. $condition['payment_code'] = $_GET['payment_code'];
  33. }
  34. if($_GET['buyer_name']) {
  35. $condition['buyer_name'] = $_GET['buyer_name'];
  36. }
  37. $if_start_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_time']);
  38. $if_end_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_time']);
  39. $start_unixtime = $if_start_time ? strtotime($_GET['query_start_time']) : null;
  40. $end_unixtime = $if_end_time ? strtotime($_GET['query_end_time']): null;
  41. if ($start_unixtime || $end_unixtime) {
  42. $condition['add_time'] = array('time',array($start_unixtime,$end_unixtime));
  43. }
  44. $order_list = $model_order->getOrderList($condition,30);
  45. foreach ($order_list as $order_id => $order_info) {
  46. //显示取消订单
  47. $order_list[$order_id]['if_cancel'] = $model_order->getOrderOperateState('system_cancel',$order_info);
  48. //显示收到货款
  49. $order_list[$order_id]['if_system_receive_pay'] = $model_order->getOrderOperateState('system_receive_pay',$order_info);
  50. }
  51. //显示支付接口列表(搜索)
  52. $payment_list = Model('payment')->getPaymentOpenList();
  53. Tpl::output('payment_list',$payment_list);
  54. Tpl::output('order_list',$order_list);
  55. Tpl::output('show_page',$model_order->showpage());
  56. Tpl::showpage('order.index');
  57. }
  58. /**
  59. * 平台订单状态操作
  60. *
  61. */
  62. public function change_stateOp() {
  63. $order_id = intval($_GET['order_id']);
  64. if($order_id <= 0){
  65. showMessage(L('miss_order_number'),$_POST['ref_url'],'html','error');
  66. }
  67. $model_order = Model('order');
  68. //获取订单详细
  69. $condition = array();
  70. $condition['order_id'] = $order_id;
  71. $order_info = $model_order->getOrderInfo($condition);
  72. if ($_GET['state_type'] == 'cancel') {
  73. $result = $this->_order_cancel($order_info);
  74. } elseif ($_GET['state_type'] == 'receive_pay') {
  75. $result = $this->_order_receive_pay($order_info,$_POST);
  76. }
  77. if (!$result['state']) {
  78. showMessage($result['msg'],$_POST['ref_url'],'html','error');
  79. } else {
  80. showMessage($result['msg'],$_POST['ref_url']);
  81. }
  82. }
  83. /**
  84. * 系统取消订单
  85. */
  86. private function _order_cancel($order_info) {
  87. $order_id = $order_info['order_id'];
  88. $model_order = Model('order');
  89. $logic_order = Logic('order');
  90. $if_allow = $model_order->getOrderOperateState('system_cancel',$order_info);
  91. if (!$if_allow) {
  92. return callback(false,'无权操作');
  93. }
  94. $result = $logic_order->changeOrderStateCancel($order_info,'system', $this->admin_info['name']);
  95. if ($result['state']) {
  96. $this->log(L('order_log_cancel').','.L('order_number').':'.$order_info['order_sn'],1);
  97. }
  98. return $result;
  99. }
  100. /**
  101. * 系统收到货款
  102. * @throws Exception
  103. */
  104. private function _order_receive_pay($order_info, $post) {
  105. $order_id = $order_info['order_id'];
  106. $model_order = Model('order');
  107. $logic_order = Logic('order');
  108. $if_allow = $model_order->getOrderOperateState('system_receive_pay',$order_info);
  109. if (!$if_allow) {
  110. return callback(false,'无权操作');
  111. }
  112. if (!chksubmit()) {
  113. Tpl::output('order_info',$order_info);
  114. //显示支付接口列表
  115. $payment_list = Model('payment')->getPaymentOpenList();
  116. //去掉预存款和货到付款
  117. foreach ($payment_list as $key => $value){
  118. if ($value['payment_code'] == 'predeposit' || $value['payment_code'] == 'offline') {
  119. unset($payment_list[$key]);
  120. }
  121. }
  122. Tpl::output('payment_list',$payment_list);
  123. Tpl::showpage('order.receive_pay');
  124. exit();
  125. }
  126. $order_list = $model_order->getOrderList(array('pay_sn'=>$order_info['pay_sn'],'order_state'=>ORDER_STATE_NEW));
  127. $result = $logic_order->changeOrderReceivePay($order_list,'system',$this->admin_info['name'],$post);
  128. if ($result['state']) {
  129. $this->log('将订单改为已收款状态,'.L('order_number').':'.$order_info['order_sn'],1);
  130. }
  131. return $result;
  132. }
  133. /**
  134. * 查看订单
  135. *
  136. */
  137. public function show_orderOp(){
  138. $order_id = intval($_GET['order_id']);
  139. if($order_id <= 0 ){
  140. showMessage(L('miss_order_number'));
  141. }
  142. $model_order = Model('order');
  143. $order_info = $model_order->getOrderInfo(array('order_id'=>$order_id),array('order_goods','order_common','store'));
  144. //订单变更日志
  145. $log_list = $model_order->getOrderLogList(array('order_id'=>$order_info['order_id']));
  146. Tpl::output('order_log',$log_list);
  147. //退款退货信息
  148. $model_refund = Model('refund_return');
  149. $condition = array();
  150. $condition['order_id'] = $order_info['order_id'];
  151. $condition['seller_state'] = 2;
  152. $condition['admin_time'] = array('gt',0);
  153. $return_list = $model_refund->getReturnList($condition);
  154. Tpl::output('return_list',$return_list);
  155. //退款信息
  156. $refund_list = $model_refund->getRefundList($condition);
  157. Tpl::output('refund_list',$refund_list);
  158. //卖家发货信息
  159. if (!empty($order_info['extend_order_common']['daddress_id'])) {
  160. $daddress_info = Model('daddress')->getAddressInfo(array('address_id'=>$order_info['extend_order_common']['daddress_id']));
  161. Tpl::output('daddress_info',$daddress_info);
  162. }
  163. Tpl::output('order_info',$order_info);
  164. Tpl::showpage('order.view');
  165. }
  166. /**
  167. * 导出
  168. *
  169. */
  170. public function export_step1Op(){
  171. $lang = Language::getLangContent();
  172. $model_order = Model('order');
  173. $condition = array();
  174. if($_GET['order_sn']) {
  175. $condition['order_sn'] = $_GET['order_sn'];
  176. }
  177. if($_GET['store_name']) {
  178. $condition['store_name'] = $_GET['store_name'];
  179. }
  180. if(in_array($_GET['order_state'],array('0','10','20','30','40'))){
  181. $condition['order_state'] = $_GET['order_state'];
  182. }
  183. if($_GET['payment_code']) {
  184. $condition['payment_code'] = $_GET['payment_code'];
  185. }
  186. if($_GET['buyer_name']) {
  187. $condition['buyer_name'] = $_GET['buyer_name'];
  188. }
  189. $if_start_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_time']);
  190. $if_end_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_time']);
  191. $start_unixtime = $if_start_time ? strtotime($_GET['query_start_time']) : null;
  192. $end_unixtime = $if_end_time ? strtotime($_GET['query_end_time']): null;
  193. if ($start_unixtime || $end_unixtime) {
  194. $condition['add_time'] = array('time',array($start_unixtime,$end_unixtime));
  195. }
  196. if (!is_numeric($_GET['curpage'])){
  197. $count = $model_order->getOrderCount($condition);
  198. $array = array();
  199. if ($count > self::EXPORT_SIZE ){ //显示下载链接
  200. $page = ceil($count/self::EXPORT_SIZE);
  201. for ($i=1;$i<=$page;$i++){
  202. $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
  203. $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
  204. $array[$i] = $limit1.' ~ '.$limit2 ;
  205. }
  206. Tpl::output('list',$array);
  207. Tpl::output('murl','index.php?act=order&op=index');
  208. Tpl::showpage('export.excel');
  209. }else{ //如果数量小,直接下载
  210. $data = $model_order->getOrderList($condition,'','*','order_id desc',self::EXPORT_SIZE);
  211. $this->createExcel($data);
  212. }
  213. }else{ //下载
  214. $limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
  215. $limit2 = self::EXPORT_SIZE;
  216. $data = $model_order->getOrderList($condition,'','*','order_id desc',"{$limit1},{$limit2}");
  217. $this->createExcel($data);
  218. }
  219. }
  220. /**
  221. * 生成excel
  222. *
  223. * @param array $data
  224. */
  225. private function createExcel($data = array()){
  226. Language::read('export');
  227. import('libraries.excel');
  228. $excel_obj = new Excel();
  229. $excel_data = array();
  230. //设置样式
  231. $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
  232. //header
  233. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_no'));
  234. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_store'));
  235. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_buyer'));
  236. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_xtimd'));
  237. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_count'));
  238. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_yfei'));
  239. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_paytype'));
  240. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_state'));
  241. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_storeid'));
  242. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_buyerid'));
  243. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_bemail'));
  244. //data
  245. foreach ((array)$data as $k=>$v){
  246. $tmp = array();
  247. $tmp[] = array('data'=>'NC'.$v['order_sn']);
  248. $tmp[] = array('data'=>$v['store_name']);
  249. $tmp[] = array('data'=>$v['buyer_name']);
  250. $tmp[] = array('data'=>date('Y-m-d H:i:s',$v['add_time']));
  251. $tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['order_amount']));
  252. $tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['shipping_fee']));
  253. $tmp[] = array('data'=>orderPaymentName($v['payment_code']));
  254. $tmp[] = array('data'=>orderState($v));
  255. $tmp[] = array('data'=>$v['store_id']);
  256. $tmp[] = array('data'=>$v['buyer_id']);
  257. $tmp[] = array('data'=>$v['buyer_email']);
  258. $excel_data[] = $tmp;
  259. }
  260. $excel_data = $excel_obj->charset($excel_data,CHARSET);
  261. $excel_obj->addArray($excel_data);
  262. $excel_obj->addWorksheet($excel_obj->charset(L('exp_od_order'),CHARSET));
  263. $excel_obj->generateXML($excel_obj->charset(L('exp_od_order'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
  264. }
  265. }