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.
 
 
 
 
 
 

613 linhas
21 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: admin
  5. * Date: 2017/5/31
  6. * Time: 16:49
  7. */
  8. namespace backend\modules\zzcs\controllers;
  9. use backend\modules\zzcs\models\BaseMainCorporation;
  10. use backend\modules\zzcs\models\BaseSupplier;
  11. use backend\modules\zzcs\service\Payment;
  12. use backend\modules\zzcs\models\BaseUser;
  13. use yii\db\Exception;
  14. use yii\web\Controller;
  15. use Yii;
  16. class PaymentController extends Controller
  17. {
  18. public $layout = '@backend/modules/zzcs/views/layouts/zzcs';
  19. public $enableCsrfValidation = false;
  20. public $service = null;
  21. /**
  22. * Des:获取service类初始化
  23. * Name: service
  24. * @return Payment
  25. * @author 倪宗锋
  26. */
  27. public function service()
  28. {
  29. if ($this->service == null) {
  30. $this->service = new Payment();
  31. }
  32. return $this->service;
  33. }
  34. /**
  35. * Des:管理页面
  36. * Name: actionCopeManager
  37. * @return string
  38. * @author 倪宗锋
  39. */
  40. public function actionCopeManager()
  41. {
  42. $user_id = Yii::$app->request->cookies->getValue('user_id', 2);
  43. $model_user = new BaseUser();
  44. $user_info = $model_user->getUserInfo($user_id);
  45. $data['main_corp_id'] = $user_info[0]["MAIN_CORP_ID"];
  46. //获取供应商
  47. $baseSupplier = new BaseSupplier();
  48. $getList = $baseSupplier->getSupplierList();
  49. $data['supplier_list'] = $getList;
  50. // 获取列表
  51. $start_date = date('Y-m-01 00:00:00');
  52. $end_date = date('Y-m-d 23:59:59', strtotime(date('Y-m-1') . " +1 month -1 day"));
  53. $param = $this->service()->getGetParam();//获取参数 通过get方式
  54. if (empty($param['date_type'])) {
  55. $param['date_type'] = 1;
  56. }
  57. if (empty($param['start_date'])) {
  58. $param['start_date'] = $start_date;
  59. $param['end_date'] = $end_date;
  60. }
  61. $getWhere = $this->service()->getWhere($param);//获取查询条件
  62. $result = $this->service()->getTotal($getWhere);//获取统计数据
  63. $total_row = $result['page']['total_count'];
  64. $total_page = $result['page']['total_page'];
  65. $page_size = $getWhere['param']['page_size'];
  66. $current_page = $getWhere['param']['current_page'];
  67. $data['list'] = $this->service()->getList($getWhere);//获取列表
  68. $data['purchase'] = $result['sum_info']['total_price'];
  69. $data['indemnity'] = $result['sum_info']['reparations_price'];
  70. $page_size_arr = [10=>10, 20=>20, 30=>30, 50=>50, 100=>100,$total_row=>'all'];
  71. $page_arr = $this->service()->getPage($total_row, $page_size, $current_page);
  72. $page = [
  73. 'page_size' => $page_size,
  74. 'current_page' => $current_page,
  75. 'total_row' => $total_row,
  76. 'total_page' => $total_page
  77. ];
  78. $data['page_arr'] = $page_arr;
  79. $data['page'] = $page;
  80. $data['page_size'] = $page_size;
  81. $data['page_size_arr'] = $page_size_arr;
  82. $data["where"] = json_encode($getWhere);
  83. return $this->render('cope_manager', $data);
  84. }
  85. /**
  86. * Des:账单界面
  87. * Name: actionCopeManager
  88. * @return string
  89. * @author 倪宗锋
  90. */
  91. public function actionCopeAccount()
  92. {
  93. // 获取供应商列表
  94. $base_supplier=new BaseSupplier();
  95. $result=$base_supplier->getSupplierList();
  96. $data['supplier_list'] = $result;
  97. // 获取数据列表
  98. $param = array(
  99. 'current_page' => Yii::$app->request->get('current_page', '1'),//当前页
  100. 'page_size' => Yii::$app->request->get('page_size', '10'),//每页展示条数
  101. 'org_id' => Yii::$app->request->get('org_id', ''),//供应商ID
  102. 'batch_id' => Yii::$app->request->get('batch_id', ''),//对账单号
  103. 'status' => Yii::$app->request->get('status', ''),//对账状态1待核对,2待结算,3已结算,4已取消
  104. );
  105. $user_id = Yii::$app->request->cookies->getValue('user_id', 2);
  106. $model_user = new BaseUser();
  107. $user_info = $model_user->getUserInfo($user_id);
  108. $param["main_corp_id"] = $user_info[0]["MAIN_CORP_ID"];
  109. $getList = $this->service()->getBalance($param);
  110. // 分页信息
  111. $current_page = $param['current_page'];
  112. $page_size = $param['page_size'];
  113. $total_row = $getList['page']['total_count'];
  114. $total_page = $getList['page']['total_page'];
  115. $data['list'] = $getList['order_list'];
  116. $page_size_arr = [10, 20, 30, 50, 100];
  117. $page_arr = $this->service()->getPage($total_row, $page_size, $current_page);
  118. $page = [
  119. 'page_size' => $page_size,
  120. 'current_page' => $current_page,
  121. 'total_row' => $total_row,
  122. 'total_page' => $total_page
  123. ];
  124. $data['page_arr'] = $page_arr;
  125. $data['page'] = $page;
  126. $data['page_size'] = $page_size;
  127. $data['page_size_arr'] = $page_size_arr;
  128. return $this->render('cope_account_statement',$data);
  129. }
  130. /**
  131. * Des:获取供应商列表
  132. * Name: actionGetSupplier
  133. * @return string
  134. * @author 倪宗锋
  135. */
  136. public function actionGetSupplier()
  137. {
  138. $baseSupplier = new BaseSupplier();
  139. $getList = $baseSupplier->getSupplierList();
  140. return json_encode(['code' => 0, 'list' => $getList]);
  141. }
  142. /**
  143. * Des:获取列表
  144. * Name: actionGetList
  145. * @return string
  146. * @author 倪宗锋
  147. */
  148. public function actionGetList()
  149. {
  150. $param = $this->service()->getParam();//获取参数
  151. $getWhere = $this->service()->getWhere($param);//获取查询条件
  152. try {
  153. if ($getWhere['param']['current_page'] == 1) {//第一页时才获取统计数据
  154. $data = $this->service()->getTotal($getWhere);//获取统计数据
  155. $data['page']['page_size'] = $getWhere['param']['page_size'];
  156. $data['page']['current_page'] = $getWhere['param']['current_page'];
  157. }
  158. $data['order_list'] = $this->service()->getList($getWhere);//获取列表
  159. } catch (Exception $e) {
  160. $json['code'] = '1';
  161. $json['info'] = '获取列表失败';
  162. return json_encode($json);
  163. }
  164. $json['code'] = '0';
  165. $json['info'] = '获取列表成功';
  166. $json['data'] = $data;
  167. return json_encode($json);
  168. }
  169. /**
  170. * Function Description:检查列表
  171. * Function Name: actionCheckId
  172. *
  173. * @return string
  174. *
  175. * @author 李健
  176. */
  177. public function actionCheckId()
  178. {
  179. $type = Yii::$app->request->post('type', '');
  180. $id = Yii::$app->request->post('id', '');
  181. $status = Yii::$app->request->post('status', '');
  182. $order_ids = explode(',', trim($id, ','));
  183. $str_id = '';
  184. foreach ($order_ids as $order_id) {
  185. $res = $this->service()->getStatus($order_id);
  186. if(!$res){
  187. if($type==1){
  188. continue;
  189. }
  190. $str_id .= $order_id . ',';
  191. }
  192. if ($type == 1) {
  193. if ($res[$status] != 1) {
  194. $str_id .= $res['order_id'] . ', ';
  195. }
  196. } elseif ($type == 2 || $type == 3) {
  197. if ($res[$status] != 2) {
  198. $str_id .= $res['order_id'] . ',';
  199. }
  200. }
  201. }
  202. if ($str_id != '') {
  203. $str_id = rtrim($str_id, ', ');
  204. $json['code'] = 1;
  205. $json['info'] = ' 订单编号为' . $str_id . '的数据结算状态异常!请重新选择';
  206. } else {
  207. $json['code'] = 0;
  208. $json['info'] = '';
  209. }
  210. return json_encode($json);
  211. }
  212. /**
  213. * Des:关账
  214. * Name: actionClosesAmount
  215. * @return string
  216. * @author 倪宗锋
  217. */
  218. public function actionCloseByOrderId()
  219. {
  220. $base_user=new BaseUser();
  221. $main_corp_id=$base_user->getMainCorp();
  222. $str = trim(Yii::$app->request->post('order_id_str', ''), ',');
  223. $getWhere=[
  224. 'main_corp_id'=>$main_corp_id,
  225. 'bus_where'=>" a.id in ($str)",
  226. 'order_where'=>" a.order_id in ($str)",
  227. ];
  228. $checkFlag = $this->service()->checkClosesAmount($getWhere);//校验是否可以关账
  229. if ($checkFlag == false) {
  230. $json['code'] = '1';
  231. $json['info'] = '关账失败!所选订单中有非待结算状态的订单!';
  232. return json_encode($json);
  233. }
  234. $closeFlag = $this->service()->closesAmount($getWhere);//执行关账操作
  235. if ($closeFlag == false) {
  236. $json['code'] = '1';
  237. $json['info'] = '关账失败!数据处理失败!';
  238. return json_encode($json);
  239. }
  240. $json['code'] = '0';
  241. $json['info'] = '关账成功!';
  242. return json_encode($json);
  243. }
  244. /**
  245. * Function Description:关账
  246. * Function Name: actionCloseByOrderId
  247. *
  248. * @return string
  249. * @throws Exception
  250. *
  251. * @author 李健
  252. */
  253. // public function actionCloseByOrderId()
  254. // {
  255. // $str = trim(Yii::$app->request->post('order_id_str', ''), ',');
  256. //
  257. // $res = $this->service()->closeByOrderId($str);
  258. // if ($res == false) {
  259. // $json['code'] = '1';
  260. // $json['info'] = '关账失败!数据处理失败!';
  261. // return json_encode($json);
  262. // }
  263. // $json['code'] = '0';
  264. // $json['info'] = '关账成功!';
  265. // return json_encode($json);
  266. // }
  267. /**
  268. * Des:生成对账单
  269. * Name: ActionAddBalance
  270. * @return string
  271. * @author 倪宗锋
  272. */
  273. public function actionAddBalanceByOrderId()
  274. {
  275. // $param = $this->service()->getParam();//获取参数
  276. // $getWhere = $this->service()->getWhere($param);//获取查询条件
  277. $base_user=new BaseUser();
  278. $main_corp_id=$base_user->getMainCorp();
  279. $str = trim(Yii::$app->request->post('order_id_str', ''), ',');
  280. $start_date = Yii::$app->request->post('start_date', '');
  281. $end_date = Yii::$app->request->post('end_date', '');
  282. $getWhere=[
  283. 'start_date'=>$start_date,
  284. 'end_date'=>$end_date,
  285. 'main_corp_id'=>$main_corp_id,
  286. 'bus_where'=>" a.id in ($str)",
  287. 'order_where'=>" a.order_id in ($str) and a.cancel_flag=0",
  288. ];
  289. $checkFlag = $this->service()->checkIsAllCloses($getWhere);//检测是否所有记录状态都是关账状态
  290. if ($checkFlag == false) {
  291. $json['code'] = '1';
  292. $json['info'] = '生成对账单失败!所选订单中有非已关账状态的订单!';
  293. return json_encode($json);
  294. }
  295. $addFlag = $this->service()->addBalance($getWhere);//生成对账单
  296. if ($addFlag == false) {
  297. $json['code'] = '1';
  298. $json['info'] = '生成对账单失败!数据处理失败!';
  299. return json_encode($json);
  300. }
  301. $json['code'] = '0';
  302. $json['info'] = '生成对账单成功!';
  303. return json_encode($json);
  304. }
  305. /**
  306. * Function Description:生成对账单
  307. * Function Name: actionAddBalanceByOrderId
  308. *
  309. * @return string
  310. * @throws Exception
  311. *
  312. * @author 李健
  313. */
  314. // public function actionAddBalanceByOrderId()
  315. // {
  316. // $str = trim(Yii::$app->request->post('order_id_str', ''), ',');
  317. // $start_date = Yii::$app->request->post('start_date', '');
  318. // $end_date = Yii::$app->request->post('end_date', '');
  319. //
  320. // $user_id = Yii::$app->request->cookies->getValue('user_id', 2);
  321. // $model_user = new BaseUser();
  322. // $user_info = $model_user->getUserInfo($user_id);
  323. // $main_corp_id = $user_info[0]["MAIN_CORP_ID"];
  324. // $addFlag = $this->service()->addBalanceByOrderId($str, $start_date, $end_date, $main_corp_id);//生成对账单
  325. // if ($addFlag == false) {
  326. // $json['code'] = '1';
  327. // $json['info'] = '生成对账单失败!数据处理失败!';
  328. // return json_encode($json);
  329. // }
  330. // $json['code'] = '0';
  331. // $json['info'] = '生成对账单成功!';
  332. // return json_encode($json);
  333. // }
  334. /**
  335. * Des:取消关账
  336. * Name: actionCancelCloses
  337. * @return string
  338. * @author 倪宗锋
  339. */
  340. public function actionCancelByOrderId()
  341. {
  342. // $param = $this->service()->getParam();//获取参数
  343. // $getWhere = $this->service()->getWhere($param);//获取查询条件
  344. $base_user=new BaseUser();
  345. $main_corp_id=$base_user->getMainCorp();
  346. $str = trim(Yii::$app->request->post('order_id_str', ''), ',');
  347. $getWhere=[
  348. 'main_corp_id'=>$main_corp_id,
  349. 'bus_where'=>" a.id in ($str)",
  350. 'order_where'=>" a.order_id in ($str)",
  351. ];
  352. $checkFlag = $this->service()->checkIsAllCloses($getWhere);//检测是否所有记录状态都是关账状态
  353. if ($checkFlag == false) {
  354. $json['code'] = '1';
  355. $json['info'] = '取消关账失败!所选订单中有非已关账状态的订单!';
  356. return json_encode($json);
  357. }
  358. $addFlag = $this->service()->cancelCloses($getWhere);//执行取消关账操作
  359. if ($addFlag == false) {
  360. $json['code'] = '1';
  361. $json['info'] = '取消关账失败!数据处理失败!';
  362. return json_encode($json);
  363. }
  364. $json['code'] = '0';
  365. $json['info'] = '取消关账成功!';
  366. return json_encode($json);
  367. }
  368. /**
  369. * Des:获取对账单列表
  370. * Name: actionGetBalance
  371. * @return string
  372. * @author 倪宗锋
  373. */
  374. public function actionGetBalance()
  375. {
  376. $param = array(
  377. 'current_page' => Yii::$app->request->post('current_page', ''),//当前页
  378. 'page_size' => Yii::$app->request->post('page_size', ''),//每页展示条数
  379. 'org_id' => Yii::$app->request->post('org_id', ''),//供应商ID
  380. 'batch_id' => Yii::$app->request->post('batch_id', ''),//对账单号
  381. 'status' => Yii::$app->request->post('status', ''),//对账状态1待核对,2待结算,3已结算,4已取消
  382. );
  383. $user_id = Yii::$app->request->cookies->getValue('user_id', 2);
  384. $model_user = new BaseUser();
  385. $user_info = $model_user->getUserInfo($user_id);
  386. $param["main_corp_id"] = $user_info[0]["MAIN_CORP_ID"];
  387. $getList = $this->service()->getBalance($param);
  388. $json['code'] = '0';
  389. $json['info'] = '获取列表成功';
  390. $getList['page']['page_size'] = $param['page_size'];
  391. $getList['page']['current_page'] = $param['current_page'];
  392. $json['data'] = $getList;
  393. return json_encode($json);
  394. }
  395. /**
  396. * Function Description:取消关账通过id
  397. * Function Name: actionCancelByOrderId
  398. *
  399. * @return string
  400. * @throws Exception
  401. *
  402. * @author 李健
  403. */
  404. // public function actionCancelByOrderId()
  405. // {
  406. // $str = trim(Yii::$app->request->post('order_id_str', ''), ',');
  407. //
  408. // $res = $this->service()->cancelByOrderId($str);
  409. // if ($res == false) {
  410. // $json['code'] = '1';
  411. // $json['info'] = '取消关账失败!数据处理失败!';
  412. // return json_encode($json);
  413. // }
  414. // $json['code'] = '0';
  415. // $json['info'] = '生成对账单成功!';
  416. // return json_encode($json);
  417. // }
  418. /**
  419. * Des:取消对账
  420. * Name: cancelBalance
  421. * @return string
  422. * @author 倪宗锋
  423. */
  424. public function actionCancelBalance()
  425. {
  426. $id = Yii::$app->request->post('id', '');
  427. //校验对账单状态
  428. $flag = $this->service()->checkBalanceStatus($id, array(1));
  429. if ($flag == false) {
  430. $json['code'] = '2';
  431. $json['info'] = '失败!待核对的账单才可以执行取消操作!';
  432. return json_encode($json);
  433. }
  434. $flag = $this->service()->cancelBalance($id);
  435. if ($flag == false) {
  436. $json['code'] = '2';
  437. $json['info'] = '取消对账失败!';
  438. return json_encode($json);
  439. }
  440. $json['code'] = '0';
  441. $json['info'] = '取消对账成功';
  442. return json_encode($json);
  443. }
  444. /**
  445. * Des:确认对账单
  446. * Name: actionConfirmedBalance
  447. * @return string
  448. * @author 倪宗锋
  449. */
  450. public function actionConfirmedBalance()
  451. {
  452. $id = Yii::$app->request->post('id', '');
  453. //校验对账单状态
  454. $flag = $this->service()->checkBalanceStatus($id, array(1));
  455. if ($flag == false) {
  456. $json['code'] = '2';
  457. $json['info'] = '失败!待核对的账单才可以确认核对!';
  458. return json_encode($json);
  459. }
  460. $flag = $this->service()->confirmedBalance($id);
  461. if ($flag == false) {
  462. $json['code'] = '2';
  463. $json['info'] = '确认对账单状态失败!';
  464. return json_encode($json);
  465. }
  466. $json['code'] = '0';
  467. $json['info'] = '确认对账单状态成功';
  468. return json_encode($json);
  469. }
  470. /**
  471. * Des:确认结算
  472. * Name: actionBalancing
  473. * @return string
  474. * @author 倪宗锋
  475. */
  476. public function actionBalancing()
  477. {
  478. $id = Yii::$app->request->post('id', '');
  479. //校验对账单状态
  480. $flag = $this->service()->checkBalanceStatus($id, array(2));
  481. if ($flag == false) {
  482. $json['code'] = '2';
  483. $json['info'] = '失败!已核对的账单才可以结算!';
  484. return $json;
  485. }
  486. $flag = $this->service()->balancing($id);
  487. if ($flag == false) {
  488. $json['code'] = '2';
  489. $json['info'] = '结算订单失败!system error';
  490. return json_encode($json);
  491. }
  492. $json['code'] = '0';
  493. $json['info'] = '结算订单成功';
  494. return json_encode($json);
  495. }
  496. /**
  497. * Des:导出excel
  498. * Name: excelBalance
  499. * @return string
  500. * @author 倪宗锋
  501. */
  502. public function actionExcelBalance()
  503. {
  504. $id = Yii::$app->request->get('id', '');
  505. $info = $this->service()->getAccountInfo($id);
  506. if ($info == false) {
  507. echo '导出excel失败!';
  508. die;
  509. }
  510. $list = $this->service()->getListForExcel($info);
  511. /**======生成excel=========**/
  512. ob_clean();
  513. $fileName = '【' . $info['org_name'] . '】应付账单-' . $info['start_date'] . '~' . $info['end_date'] . '.csv';
  514. $fileName = iconv("utf-8", "gb2312", $fileName);
  515. header("Content-type:text/csv");
  516. header("Content-Disposition:attachment;filename=" . $fileName);
  517. header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
  518. header('Expires:0');
  519. header('Pragma:public');
  520. $data = '';
  521. foreach ($list as $key => $val) {
  522. if ($key == 0) {
  523. $data .= implode(',', array_keys($val)) . "\n";
  524. }
  525. $data .= '"' . implode('","', array_values($val)) . "\"\n";
  526. }
  527. $data = chr(0xEF) . chr(0xBB) . chr(0xBF) . $data;
  528. echo $data;
  529. return '';
  530. }
  531. /**
  532. * Function Description:未关账前导出
  533. * Function Name: actionBeforeExcelBalance
  534. *
  535. *
  536. * @author LUOCJ
  537. */
  538. public function actionBeforeExcelBalance()
  539. {
  540. $param = $this->service()->getGetParam();//获取参数
  541. $getWhere = $this->service()->getWhere($param);//获取查询条件
  542. $list = $this->service()->getList($getWhere,1);//获取列表 1为导出
  543. $fin_list = [];
  544. foreach ($list as $k => $v) {
  545. $fin_list[$k]['order_id'] = $v['order_id'];
  546. $fin_list[$k]['outside_order_no'] = $v['outside_order_no'];
  547. $fin_list[$k]['run_date'] = $v['run_date'];
  548. $fin_list[$k]['create_time'] = $v['create_time'];
  549. $fin_list[$k]['parent_prod_name'] = $v['parent_prod_name'];
  550. $fin_list[$k]['prod_type_des'] = $v['prod_type_des'];
  551. $fin_list[$k]['prodName'] = $v['prodName'];
  552. $fin_list[$k]['prodNum'] = $v['prodNum'];
  553. $fin_list[$k]['base_price'] = $v['base_price'];
  554. $fin_list[$k]['reparations_price'] = $v['reparations_price'];
  555. $fin_list[$k]['supplier_name'] = $v['supplier_name'];
  556. $fin_list[$k]['prodNum'] = $v['prodNum'];
  557. }
  558. $title = ['订单ID', '渠道订单ID', '出游时间', '预订时间', '产品名称', '产品类型', '房型/票种', '间夜/票数', '成本', '赔款', '供应商'];
  559. $file_name ='应付账单';
  560. /**======生成excel=========**/
  561. Payment::to_excel($file_name,$title, $fin_list);
  562. }
  563. /**
  564. * Function Description:修改账单备注
  565. * Function Name: actionChangeRemark
  566. *
  567. * @return string
  568. *
  569. * @author 娄梦宁
  570. */
  571. public function actionChangeRemark(){
  572. $account_id=Yii::$app->request->post('account_id',0);//账单id
  573. $remark=Yii::$app->request->post('remark','');//备注
  574. $result=$this->service()->changeRemark($account_id,$remark);
  575. return json_encode($result);
  576. }
  577. }