Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

703 Zeilen
32 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: admin
  5. * Date: 2017/5/15
  6. * Time: 15:05
  7. */
  8. class gathering extends base
  9. {
  10. //获取应收订单列表
  11. public function getList($post)
  12. {
  13. $getWhere = $this->getWhere($post);
  14. if ($getWhere['param']['current_page'] == 1) {
  15. /**==========获取记录数和总金额============**/
  16. $sql_1 = "
  17. select sum(y.cnt) 'cnt',format(sum(y.total_price),2) 'total_price',format(sum(y.total_commission),2) 'total_commission',
  18. format(sum(y.reparations_price),2) 'reparations_price'
  19. FROM (
  20. SELECT COUNT(1) cnt,ifnull(SUM(a.order_title_all_price),0) 'total_price',
  21. ifnull(SUM(order_title_all_affi),0) 'total_commission',
  22. IFNULL(SUM(c.reparations),0) 'reparations_price'
  23. from order_title a
  24. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  25. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  26. WHERE {$getWhere['ziyou_where']}
  27. union ALL
  28. SELECT count(1) cnt,ifnull(sum(x.ORDER_PRICE),0) total_price,
  29. ifnull(sum(x.TOTAL_COMMISSION),0) 'total_commission',
  30. ifnull(sum(x.reparations_price),0) 'reparations_price'
  31. FROM (
  32. SELECT
  33. a.ORDER_PRICE,a.TOTAL_COMMISSION,
  34. (SELECT MAX(RUN_DATE) from order_main WHERE ORDER_ID = a.PARENT_ORDER_ID) 'run_date',
  35. IFNULL(b.gathering_status,1) 'status',
  36. FORMAT(IFNULL((SELECT reparations from order_finance_reparations WHERE order_id=a.ORDER_ID),0),2) as 'reparations_price'
  37. FROM order_main a
  38. LEFT JOIN order_finance_status b ON a.ORDER_ID = b.order_id and b.type =1
  39. WHERE {$getWhere['order_where']}
  40. ) x
  41. ) y
  42. ";
  43. $getTotal = $this->query($sql_1);
  44. $data['page']['total_count'] = $getTotal[0]['cnt'];
  45. $data['page']['total_page'] = (string)ceil($getTotal[0]['cnt'] / $getWhere['param']['page_size']);
  46. $data['sum_info'] = $getTotal[0];
  47. }
  48. /**==========获取列表============**/
  49. $offset = ($getWhere['param']['current_page'] - 1) * $getWhere['param']['page_size'];
  50. $sql_2 = "
  51. select z.*
  52. FROM (
  53. SELECT x.*,'' AS 'prodName'
  54. from (
  55. SELECT a.order_title_id 'order_id', a.outside_order_no,a.create_time,
  56. a.order_title_prod_name 'parent_prod_name',
  57. '' as 'order_description',
  58. (SELECT SUPPLIER_NAME from base_supplier WHERE ID = a.outside_sale_org_id) 'supplier_name',
  59. FORMAT(a.order_title_all_price,2) 'order_price',FORMAT(a.order_title_all_affi,2) 'total_commission',
  60. IFNULL(b.gathering_status,1) 'status',
  61. CASE IFNULL(b.gathering_status,1)
  62. WHEN 1 THEN '待结算'
  63. WHEN 2 THEN '已关账'
  64. WHEN 3 THEN '结算中'
  65. WHEN 4 THEN '已结算'
  66. ELSE '待结算' END AS 'status_des' ,
  67. a.start_date 'run_date',
  68. FORMAT(IFNULL(c.reparations,0),2) 'reparations_price',
  69. '巴士自由行' as 'prod_type_des',
  70. '' as 'prodNum'
  71. from order_title a
  72. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  73. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  74. WHERE {$getWhere['ziyou_where']}
  75. ) x
  76. GROUP BY x.order_id
  77. ) z
  78. UNION ALL
  79. SELECT a.ORDER_ID 'order_id',a.OUTSIDE_ORDER_NO 'outside_order_no',a.CREATE_TIME 'create_time',
  80. (SELECT CONCAT(PARENT_PROD_NAME, '<br />',PROD_START_STATION_RES_NAME,' - ',PROD_END_STATION_RES_NAME) from order_main WHERE PARENT_ORDER_ID = a.ORDER_ID LIMIT 1) 'parent_prod_name',
  81. a.ORDER_DESCRIPTION 'order_description',
  82. (SELECT SUPPLIER_NAME from base_supplier WHERE ID = a.OUTSIDE_SALE_ORG_ID) 'supplier_name',
  83. format(a.ORDER_PRICE,2) 'order_price',format(a.TOTAL_COMMISSION,2) 'total_commission',IFNULL(b.gathering_status,1) 'status',
  84. CASE IFNULL(b.gathering_status,1)
  85. WHEN 1 THEN '待结算'
  86. WHEN 2 THEN '已关账'
  87. WHEN 3 THEN '结算中'
  88. WHEN 4 THEN '已结算'
  89. ELSE '待结算' END AS 'status_des' ,
  90. (SELECT MAX(RUN_DATE) from order_main WHERE PARENT_ORDER_ID = a.ORDER_ID) 'run_date',
  91. FORMAT(IFNULL((SELECT reparations from order_finance_reparations WHERE order_id=a.ORDER_ID),0),2) as 'reparations_price',
  92. CASE
  93. WHEN a.ORDER_PROD_TYPE in (25,26) THEN '酒店'
  94. WHEN a.ORDER_PROD_TYPE in (81,82,38,369) THEN '车票'
  95. WHEN a.ORDER_PROD_TYPE in (258,282,311) THEN '门票'
  96. else '' END as 'prod_type_des',
  97. '' as 'prodNum',
  98. '' as 'prodName'
  99. from order_main a
  100. LEFT JOIN order_finance_status b on a.ORDER_ID = b.order_id and b.type =1
  101. WHERE {$getWhere['order_where']}
  102. ORDER BY create_time desc
  103. LIMIT {$getWhere['param']['page_size']} offset $offset;
  104. ";
  105. $list = $this->query($sql_2);
  106. /**==========设置返回值============**/
  107. if (empty($list) == false) {
  108. foreach ($list as $key => $value) {
  109. if (empty($value['order_description'])) {
  110. continue;
  111. }
  112. $list[$key]['prodNum'] = 0;
  113. $list[$key]['prodName'] = '';
  114. $scripTionArr = explode('|', $value['order_description']);
  115. foreach ($scripTionArr as $vl) {
  116. if (empty($vl)) {
  117. continue;
  118. }
  119. $vls = explode(',', $vl);
  120. if (empty($vls['2'])) {
  121. $list[$key]['prodNum'] = $vls[0];
  122. } else {
  123. $list[$key]['prodNum'] = $vls['2'];
  124. $list[$key]['prodName'] = $vls['0'];
  125. }
  126. }
  127. unset($list[$key]['order_description']);
  128. }
  129. }
  130. $json['code'] = '0';
  131. $json['info'] = '获取列表成功';
  132. $data['order_list'] = $list;
  133. $data['page']['page_size'] = $getWhere['param']['page_size'];
  134. $data['page']['current_page'] = $getWhere['param']['current_page'];
  135. $json['data'] = $data;
  136. return $json;
  137. }
  138. /**
  139. * @param $post
  140. * @return mixed
  141. */
  142. public function closesAmount($post)
  143. {
  144. $getWhere = $this->getWhere($post);
  145. /**============判断是否可以关账===================**/
  146. $sql_1 = "
  147. select sum(y.cnt) 'cnt'
  148. FROM (
  149. SELECT count(1) cnt
  150. FROM (
  151. SELECT
  152. a.ORDER_PRICE,a.TOTAL_COMMISSION,
  153. (SELECT MAX(RUN_DATE) from order_main WHERE ORDER_ID = a.PARENT_ORDER_ID) 'run_date',
  154. IFNULL(b.gathering_status,1) 'status',
  155. FORMAT(IFNULL((SELECT reparations from order_finance_reparations WHERE order_id=a.ORDER_ID),0),2) as 'reparations_price'
  156. FROM order_main a
  157. LEFT JOIN order_finance_status b ON a.ORDER_ID = b.order_id and b.type =1
  158. WHERE {$getWhere['order_where']}
  159. and IFNULL(b.gathering_status,1) != 1
  160. )x
  161. UNION ALL
  162. SELECT COUNT(1) cnt
  163. from order_title a
  164. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  165. WHERE {$getWhere['ziyou_where']} and IFNULL(b.gathering_status,1) != 1
  166. ) y
  167. ";
  168. $getTotal = $this->query($sql_1);
  169. if ($getTotal['0']['cnt'] >= 1) {
  170. $json['code'] = '1';
  171. $json['info'] = '关账失败!所选订单中有非待结算状态订单!';
  172. return $json;
  173. }
  174. /**==========插入新记录=============**/
  175. $sql1 = "
  176. INSERT into order_finance_status(order_id,update_time, type)
  177. SELECT x.order_id,NOW(),1
  178. from (
  179. SELECT a.ORDER_ID 'order_id'
  180. from order_main a
  181. LEFT JOIN order_finance_status b on a.ORDER_ID = b.order_id and b.type =1
  182. WHERE {$getWhere['order_where']}
  183. and b.gathering_status is null
  184. union ALL
  185. SELECT a.order_title_id 'order_id'
  186. from order_title a
  187. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  188. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  189. WHERE {$getWhere['ziyou_where']}
  190. and b.gathering_status is null
  191. )x
  192. ";
  193. $this->insert($sql1);
  194. /**==========更新旧新记录=============**/
  195. $sql2 = "UPDATE order_title a
  196. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  197. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  198. SET b.gathering_status = 2
  199. WHERE {$getWhere['ziyou_where']};
  200. UPDATE order_main a
  201. JOIN order_finance_status b on a.ORDER_ID = b.order_id and b.type =1
  202. SET b.gathering_status = 2
  203. WHERE {$getWhere['order_where']}
  204. ";
  205. $this->exec($sql2);
  206. $json['code'] = '0';
  207. $json['info'] = '已关账';
  208. return $json;
  209. }
  210. //生成对账单
  211. public function addBalance($post)
  212. {
  213. $getWhere = $this->getWhere($post);
  214. $check = $this->checkCanCloses($getWhere);
  215. if ($check == false) {
  216. $json['code'] = '1';
  217. $json['info'] = '关账失败!所选订单中有非关账状态订单!';
  218. return $json;
  219. }
  220. /**============生成对账单===================**/
  221. $time = microtime(true) * 10000;
  222. $sql = "
  223. INSERT into order_finance_balance_account(org_id,org_name,price,commission_price,
  224. reparations_price,type,batch_id,start_date,end_date,account_bank,account_name,account_num,sett_frequency,order_type)
  225. SELECT s.org_id,s.org_name,sum(price),sum(affi),sum(reparations),2 as 'type',concat('{$time}','',s.org_id) 'batch_id',
  226. '{$getWhere['param']['start_date']}' as 'start_date','{$getWhere['param']['end_date']}' as 'end_date',
  227. s.ACCOUNT_BANK,s.ACCOUNT_NAME,s.ACCOUNT_NUM,s.TYPE_NAME,1
  228. FROM (
  229. SELECT x.org_id,(SELECT SUPPLIER_NAME from base_supplier WHERE ID = x.org_id) 'org_name',
  230. x.price,x.affi,x.reparations,
  231. c.ACCOUNT_BANK,c.ACCOUNT_NAME,c.ACCOUNT_NUM,d.TYPE_NAME
  232. from(
  233. SELECT a.outside_sale_org_id 'org_id',SUM(a.order_title_all_price) 'price',SUM(a.order_title_all_affi) 'affi',
  234. IFNULL(SUM(c.reparations),0) 'reparations'
  235. from order_title a
  236. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  237. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  238. WHERE {$getWhere['ziyou_where']}
  239. GROUP BY a.outside_sale_org_id
  240. ) x
  241. LEFT join base_supplier c on c.ID=x.org_id
  242. LEFT JOIN dict_type d on c.SETT_FREQUENCY = d.ID
  243. UNION ALL
  244. SELECT t.*
  245. from(
  246. SELECT x.org_id,x.org_name,
  247. sum(x.price) 'price',sum(x.commission_price) 'affi',sum(x.reparations_price) 'reparations',
  248. c.ACCOUNT_BANK,c.ACCOUNT_NAME,c.ACCOUNT_NUM,d.TYPE_NAME
  249. FROM (
  250. SELECT a.OUTSIDE_SALE_ORG_ID 'org_id',
  251. (SELECT SUPPLIER_NAME from base_supplier WHERE ID = a.OUTSIDE_SALE_ORG_ID) 'org_name',
  252. format(a.ORDER_PRICE,2) 'price',
  253. format(a.TOTAL_COMMISSION,2) 'commission_price',
  254. FORMAT(IFNULL((SELECT reparations from order_finance_reparations WHERE order_id=a.ORDER_ID),0),2) as 'reparations_price',
  255. 2 as 'type',
  256. IFNULL(b.gathering_status,1) 'status',
  257. (SELECT MAX(RUN_DATE) from order_main WHERE ORDER_ID = a.PARENT_ORDER_ID) 'run_date'
  258. from order_main a
  259. LEFT JOIN order_finance_status b on a.ORDER_ID = b.order_id and b.type =1
  260. WHERE {$getWhere['order_where']}
  261. and b.gathering_status = 2
  262. ) x
  263. LEFT join base_supplier c on c.ID=x.org_id
  264. LEFT JOIN dict_type d on c.SETT_FREQUENCY = d.ID
  265. GROUP BY x.org_id
  266. ) as t
  267. ) as s
  268. GROUP BY s.org_id
  269. ";
  270. $this->insert($sql);
  271. $sql2 = "
  272. UPDATE order_title a
  273. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  274. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  275. SET b.gathering_status = 3 ,b.gathering_batch_id = CONCAT('{$time}','',a.outside_sale_org_id)
  276. WHERE {$getWhere['ziyou_where']};
  277. UPDATE order_finance_status t1
  278. INNER JOIN (
  279. SELECT a.OUTSIDE_SALE_ORG_ID 'org_id',
  280. a.ORDER_ID
  281. from order_main a
  282. LEFT JOIN order_finance_status b on a.ORDER_ID = b.order_id and b.type =1
  283. WHERE {$getWhere['order_where']}
  284. and b.gathering_status = 2
  285. ) t2 on t1.order_id = t2.ORDER_ID
  286. set t1.gathering_batch_id = CONCAT('{$time}','',t2.org_id)
  287. ,t1.gathering_status = 3
  288. ";
  289. $this->edit($sql2);
  290. $json['code'] = '0';
  291. $json['info'] = '已生成对账单';
  292. return $json;
  293. }
  294. //取消关账
  295. public function cancelCloses($post)
  296. {
  297. $getWhere = $this->getWhere($post);
  298. $check = $this->checkCanCloses($getWhere);
  299. if ($check == false) {
  300. $json['code'] = '1';
  301. $json['info'] = '关账失败!所选订单中有非关账状态订单!';
  302. return $json;
  303. }
  304. /**============关联对账单记录==============**/
  305. $sql2 = "
  306. UPDATE order_title a
  307. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  308. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  309. SET b.gathering_status = 1
  310. WHERE {$getWhere['ziyou_where']} and b.gathering_status = 2;
  311. UPDATE order_main a
  312. LEFT JOIN order_finance_status b on a.ORDER_ID = b.order_id and b.type =1
  313. SET b.gathering_status = 1
  314. WHERE {$getWhere['order_where']}
  315. and b.gathering_status = 2;
  316. ";
  317. $this->edit($sql2);
  318. $json['code'] = '0';
  319. $json['info'] = '已取消关账';
  320. return $json;
  321. }
  322. //获取查询条件
  323. public function getWhere($post)
  324. {
  325. /**==========接收参数============**/
  326. $param = array(
  327. 'date_type' => empty($post['date_type']) ? '' : $post['date_type'],//时间类型
  328. 'start_date' => empty($post['start_date']) ? '' : $post['start_date'],//开始时间
  329. 'end_date' => empty($post['end_date']) ? '' : $post['end_date'],//接收时间
  330. 'org_id' => empty($post['org_id']) ? '' : $post['org_id'],//渠道商ID
  331. 'settlement_status' => empty($post['settlement_status']) ? '0' : $post['settlement_status'],//结算状态值
  332. 'prod_type' => empty($post['prod_type']) ? '0' : $post['prod_type'],//订单产品类型
  333. 'more_search' => empty($post['more_search ']) ? '' : $post['more_search '],//更多查询条件
  334. 'current_page' => empty($post['current_page']) ? '1' : $post['current_page'],//当前页
  335. 'page_size' => empty($post['page_size']) ? '10' : $post['page_size'],//每页展示条数
  336. );
  337. /**==========拼接查询条件============**/
  338. /***********************自由行查询**********************************/
  339. $ziyou_where = " a.order_title_status in (3) and a.cancel_flag = 0 ";
  340. if (!empty($param['prod_type']) and $param['prod_type'] != 'ziyou') {
  341. $ziyou_where .= ' and a.cancel_flag = 1';
  342. }
  343. //出游时间
  344. if ($param['date_type'] == '2' && $param['start_date']) {
  345. $ziyou_where .= " and a.start_date >= '{$param['start_date']}'";//大于等于起始日期
  346. }
  347. if ($param['date_type'] == '2' && $param['end_date']) {
  348. $ziyou_where .= " and a.start_date < date_add('{$param['end_date']}', INTERVAL 1 day)";//大于等于起始日期
  349. }
  350. //收款状态
  351. if ($param['settlement_status']) {
  352. $ziyou_where .= " and IFNULL(b.gathering_status,1) = {$param['settlement_status']} ";
  353. }
  354. //预定时间
  355. if ($param['date_type'] == '1' && $param['start_date']) {
  356. $ziyou_where .= " and a.create_date >= '{$param['start_date']}'";//大于等于起始日期
  357. }
  358. if ($param['date_type'] == '1' && $param['end_date']) {
  359. $ziyou_where .= " and a.create_date < date_add('{$param['end_date']}', INTERVAL 1 day)";//小于结束日期的第二天凌晨
  360. }
  361. //渠道商ID
  362. if ($param['org_id']) {
  363. $ziyou_where .= " and a.outside_sale_org_id = '{$param['org_id']}'";
  364. }
  365. //更多查询
  366. if ($param['more_search']) {
  367. $ziyou_where .= " and (a.order_title_id like '%{$param['more_search']}%' or a.order_title_prod_name like '%{$param['more_search']}%')";
  368. }
  369. /***********************========订单查询========*************************************/
  370. $order_where = " a.CANCEL_FLAG=0 and (a.order_status in(146,147,314) or a.CHANNEL_ORDER_STATUS in (551,554,553)) and a.PARENT_ORDER_ID = 0 and a.order_title_id=0 ";//获取所有已完成的有效的主订单
  371. if (!empty($param['prod_type']) and $param['prod_type'] == 'ziyou') {
  372. $order_where .= ' and a.order_title_id=1';
  373. } elseif (!empty($param['prod_type'])) {
  374. $order_where .= " and a.ORDER_PROD_TYPE in ({$param['prod_type']})";
  375. }
  376. //结算时间
  377. if ($param['date_type'] == '2' && $param['start_date']) {
  378. $order_where .= " and (SELECT MIN(RUN_DATE) from order_main WHERE a.ORDER_ID = PARENT_ORDER_ID) >= '{$param['start_date']}'";//大于等于起始日期
  379. }
  380. if ($param['date_type'] == '2' && $param['end_date']) {
  381. $order_where .= " and (SELECT MIN(RUN_DATE) from order_main WHERE a.ORDER_ID = PARENT_ORDER_ID) < date_add('{$param['end_date']}', INTERVAL 1 day)";//小于日期
  382. }
  383. //收款状态
  384. if ($param['settlement_status']) {
  385. $order_where .= " and IFNULL(b.payment_status,1) = {$param['settlement_status']}";
  386. }
  387. //预定时间
  388. if ($param['date_type'] == '1' && $param['start_date']) {
  389. $order_where .= " and a.CREATE_TIME >= DATE_FORMAT('{$param['start_date']}' ,'%Y-%m-%d %H:%i:%s')";//大于等于起始日期
  390. }
  391. if ($param['date_type'] == '1' && $param['end_date']) {
  392. $order_where .= " and a.CREATE_TIME < date_add(DATE_FORMAT('{$param['end_date']}' ,'%Y-%m-%d %H:%i:%s'), INTERVAL 1 day)";//小于结束日期的第二天凌晨
  393. }
  394. //渠道商ID
  395. if ($param['org_id']) {
  396. $order_where .= " and a.OUTSIDE_SALE_ORG_ID = '{$param['org_id']}'";
  397. }
  398. //更多查询
  399. if ($param['more_search']) {
  400. $order_where .= " and (a.ORDER_ID like '%{$param['more_search']}%' or a.PARENT_PROD_NAME like '%{$param['more_search']}%')";
  401. }
  402. return array('order_where' => $order_where, 'ziyou_where' => $ziyou_where, 'param' => $param);
  403. }
  404. /**========检测是否可以生成对账单或取消关账=========**/
  405. public function checkCanCloses($getWhere)
  406. {
  407. /**============判断是否可以生成对账单===================**/
  408. $sql_1 = "
  409. select sum(x.cnt) cnt
  410. from(
  411. SELECT COUNT(1) cnt
  412. from order_title a
  413. LEFT JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  414. WHERE {$getWhere['ziyou_where']} and IFNULL(b.gathering_status,1) != 2
  415. union all
  416. SELECT
  417. count(1) cnt
  418. FROM order_main a
  419. LEFT JOIN order_finance_status b ON a.ORDER_ID = b.order_id and b.type =1
  420. WHERE {$getWhere['order_where']}
  421. and IFNULL(b.gathering_status,1) != 2
  422. )x
  423. ";
  424. $getTotal = $this->query($sql_1);
  425. if ($getTotal['0']['cnt'] >= 1) {
  426. return false;
  427. }
  428. return true;
  429. }
  430. /*********************对账单列表****************************************/
  431. //获取账单总记录数
  432. public function getBalance($post)
  433. {
  434. $param = array(
  435. 'current_page' => empty($post['current_page']) ? '1' : $post['current_page'],//当前页
  436. 'page_size' => empty($post['page_size']) ? '10' : $post['page_size'],//每页展示条数
  437. 'org_id' => empty($post['org_id']) ? '' : $post['org_id'],//供应商ID
  438. 'batch_id' => empty($post['batch_id']) ? '' : $post['batch_id'],//对账单号
  439. 'status' => empty($post['status']) ? '' : $post['status'],//对账状态1待核对,2待结算,3已结算,4已取消
  440. );
  441. $where = array();
  442. $where[] = ' type = 2 ';
  443. if (!empty($param['org_id'])) {
  444. $where[] = " org_id = {$param['org_id']} ";
  445. }
  446. if (!empty($param['batch_id'])) {
  447. $where[] = " batch_id like '%{$param['batch_id']}%' ";
  448. }
  449. if (!empty($param['status'])) {
  450. $where[] = " status = {$param['status']} ";
  451. }
  452. $whereStr = '';
  453. if (count($where)) {
  454. $whereStr .= implode(' and ', $where);
  455. }
  456. /**============第一页时返回总记录数和总页数==============**/
  457. if ($param['current_page'] == 1) {
  458. $sql_1 = "SELECT count(1) cnt
  459. FROM order_finance_balance_account
  460. WHERE $whereStr
  461. ";
  462. $getTotal = $this->query($sql_1);
  463. $data['page']['total_count'] = $getTotal[0]['cnt'];
  464. $data['page']['total_page'] = (string)ceil($getTotal[0]['cnt'] / $param['page_size']);
  465. }
  466. /**============获取分页列表数据==============**/
  467. $offset = ($param['current_page'] - 1) * $param['page_size'];
  468. $sql_2 = "SELECT id,org_id,org_name,price,commission_price,reparations_price,date,start_date,end_date,
  469. account_bank,account_num,account_name,sett_frequency,batch_id,
  470. CASE status
  471. WHEN 1 THEN '待核对'
  472. WHEN 2 THEN '待结算'
  473. WHEN 3 THEN '已结算'
  474. WHEN 4 THEN '已取消'
  475. ELSE 'error' END as 'status_des',
  476. status
  477. from order_finance_balance_account
  478. WHERE $whereStr
  479. ORDER BY id DESC
  480. LIMIT {$param['page_size']} OFFSET {$offset}";
  481. $list = $this->query($sql_2);
  482. $json['code'] = '0';
  483. $json['info'] = '获取列表成功';
  484. $data['order_list'] = $list;
  485. $data['page']['page_size'] = $param['page_size'];
  486. $data['page']['current_page'] = $param['current_page'];
  487. $json['data'] = $data;
  488. return $json;
  489. }
  490. /**取消对账**/
  491. public function cancelBalance($post)
  492. {
  493. $id = empty($post['id']) ? '' : $post['id'];//账单ID
  494. //校验对账单状态
  495. $flag = $this->checkBalanceStatus($id, array(1));
  496. if ($flag == false) {
  497. $json['code'] = '2';
  498. $json['info'] = '失败!待核对的账单才可以执行取消操作!';
  499. return $json;
  500. }
  501. //更改状态
  502. $sql = "
  503. update order_finance_balance_account a
  504. join order_finance_status b on a.batch_id=b.gathering_batch_id
  505. set a.`status` =4,b.gathering_status = 2
  506. WHERE a.`status` in(1) and a.id = $id
  507. ";
  508. $flag = $this->edit($sql);
  509. if ($flag) {
  510. $json['code'] = '0';
  511. $json['info'] = '取消成功!';
  512. } else {
  513. $json['code'] = '1';
  514. $json['info'] = '取消失败!';
  515. }
  516. return $json;
  517. }
  518. /**确认对账**/
  519. public function confirmedBalance($post)
  520. {
  521. $id = empty($post['id']) ? '' : $post['id'];//账单ID
  522. //校验对账单状态
  523. $flag = $this->checkBalanceStatus($id, array(1));
  524. if ($flag == false) {
  525. $json['code'] = '2';
  526. $json['info'] = '失败!待核对的账单才可以确认核对!';
  527. return $json;
  528. }
  529. //更改状态
  530. $sql = "
  531. update order_finance_balance_account a
  532. set a.`status` =2
  533. WHERE a.`status` = 1 and a.id = $id
  534. ";
  535. $flag = $this->edit($sql);
  536. if ($flag) {
  537. $json['code'] = '0';
  538. $json['info'] = '成功!';
  539. } else {
  540. $json['code'] = '1';
  541. $json['info'] = '失败!';
  542. }
  543. return $json;
  544. }
  545. //确认结算
  546. public function balancing($post)
  547. {
  548. $id = empty($post['id']) ? '' : $post['id'];//账单ID
  549. //校验对账单状态
  550. $flag = $this->checkBalanceStatus($id, array(2));
  551. if ($flag == false) {
  552. $json['code'] = '2';
  553. $json['info'] = '失败!已核对的账单才可以结算!';
  554. return $json;
  555. }
  556. //更改状态
  557. $sql = "
  558. update order_finance_balance_account a
  559. join order_finance_status b on a.batch_id=b.gathering_batch_id
  560. set a.`status` =3,b.gathering_status =4
  561. WHERE a.`status` in(2) and a.id = $id
  562. ";
  563. $flag = $this->edit($sql);
  564. if ($flag) {
  565. $json['code'] = '0';
  566. $json['info'] = '成功!';
  567. } else {
  568. $json['code'] = '1';
  569. $json['info'] = '失败!';
  570. }
  571. return $json;
  572. }
  573. //导出对账订单记录
  574. public function excelBalance()
  575. {
  576. $id = empty($_GET['id']) ? '' : $_GET['id'];//账单ID
  577. $sql1 = "select org_name,start_date,end_date,order_type from order_finance_balance_account WHERE id = {$id}";
  578. $info = $this->query($sql1);
  579. if (empty($info)) {
  580. return false;
  581. }
  582. $sql = "select z.* from (
  583. SELECT x.order_id '订单ID',x.outside_order_no '渠道订单ID',x.start_date '出游时间',
  584. x.create_time '预定时间','' as 'order_description',
  585. x.order_title_prod_name '产品名称','巴士自由行' as '产品类型',
  586. '' as '房型/票种',
  587. 0 as '间夜/票数',
  588. x.order_title_all_price '订单金额',x.order_title_all_affi '佣金',x.reparations '赔款',
  589. '{$info[0]['org_name']}' as '供应商'
  590. from (
  591. SELECT a.order_title_id 'order_id' ,a.outside_order_no ,a.start_date ,
  592. a.create_time,a.order_title_prod_name ,a.order_title_all_price ,a.order_title_all_affi ,
  593. IFNULL((SELECT reparations from order_finance_reparations WHERE order_id=a.order_title_id),0) as 'reparations'
  594. from order_title a
  595. JOIN order_finance_status b on a.order_title_id = b.order_id and b.type =1
  596. join order_finance_balance_account d on b.gathering_batch_id = d.batch_id
  597. LEFT JOIN order_finance_reparations c on a.order_title_id = c.order_id
  598. WHERE d.id={$id}
  599. ) x
  600. GROUP BY x.order_id
  601. UNION ALL
  602. SELECT
  603. c.ORDER_ID '订单ID',c.OUTSIDE_ORDER_NO '渠道订单ID',
  604. (SELECT MAX(RUN_DATE) from order_main WHERE PARENT_ORDER_ID = c.ORDER_ID) '出游时间',
  605. c.CREATE_TIME '预定时间',
  606. c.ORDER_DESCRIPTION 'order_description',
  607. (SELECT CONCAT(PARENT_PROD_NAME, '<br />',PROD_START_STATION_RES_NAME,' - ',PROD_END_STATION_RES_NAME) from order_main WHERE PARENT_ORDER_ID = c.ORDER_ID LIMIT 1) '产品名称',
  608. CASE
  609. WHEN c.ORDER_PROD_TYPE in (25,26) THEN '酒店'
  610. WHEN c.ORDER_PROD_TYPE in (81,82,38,369) THEN '车票'
  611. WHEN c.ORDER_PROD_TYPE in (258,282,311) THEN '门票'
  612. else '' END as '产品类型',
  613. '' as '房型/票种',0 as '间夜/票数',
  614. c.ORDER_PRICE '订单金额',c.TOTAL_COMMISSION '佣金',
  615. IFNULL((SELECT reparations from order_finance_reparations WHERE order_id=c.ORDER_ID),0) as '赔款',
  616. a.org_name '供应商'
  617. from order_finance_balance_account a
  618. JOIN order_finance_status b on a.batch_id = b.gathering_batch_id and b.type =1
  619. JOIN order_main c on b.order_id=c.ORDER_ID
  620. LEFT JOIN order_finance_reparations d on b.order_id=d.order_id
  621. WHERE a.id={$id}
  622. )z
  623. ORDER BY z.出游时间
  624. ";
  625. $list = $this->query($sql);
  626. if (empty($list) == false) {
  627. foreach ($list as $key => $value) {
  628. $order_description = $value['order_description'];
  629. unset($list[$key]['order_description']);
  630. if(empty($order_description)) {
  631. continue;
  632. }
  633. $list[$key]['间页/票数'] = 0;
  634. $list[$key]['房型/票种'] = '';
  635. $scripTionArr = explode('|', $order_description);
  636. foreach ($scripTionArr as $vl) {
  637. if (empty($vl)) {
  638. continue;
  639. }
  640. $vls = explode(',', $vl);
  641. if (empty($vls['2'])) {
  642. $list[$key]['间页/票数'] = $vls[0];
  643. } else {
  644. $list[$key]['间页/票数'] = $vls['2'];
  645. $list[$key]['房型/票种'] = $vls['0'];
  646. }
  647. }
  648. }
  649. }
  650. /**======生成excel=========**/
  651. ob_clean();
  652. $fileName = '【' . $info[0]['org_name'] . '】应收账单-' . $info[0]['start_date'] . '~' . $info[0]['end_date'] . '.csv';
  653. $fileName = iconv("utf-8", "gb2312", $fileName);
  654. header("Content-type:text/csv");
  655. header("Content-Disposition:attachment;filename=" . $fileName);
  656. header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
  657. header('Expires:0');
  658. header('Pragma:public');
  659. $data = '';
  660. foreach ($list as $key => $val) {
  661. if ($key == 0) {
  662. $data .= implode(',', array_keys($val)) . "\n";
  663. }
  664. $data .= '"' . implode('","', array_values($val)) . "\"\n";
  665. }
  666. $data = chr(0xEF) . chr(0xBB) . chr(0xBF) . $data;
  667. echo $data;
  668. return '';
  669. }
  670. //检测对账单状态
  671. public function checkBalanceStatus($id, $status)
  672. {
  673. $sql = "SELECT `status`
  674. from order_finance_balance_account
  675. WHERE id = $id";
  676. $info = $this->query($sql);
  677. if (empty($info[0]['status']) || !in_array($info[0]['status'], $status)) {
  678. return false;
  679. }
  680. return true;
  681. }
  682. }