RemitController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. <?php
  2. namespace backend\controllers;
  3. use backend\helpers\PaginationHelper;
  4. use backend\helpers\ValidatorHelper;
  5. use backend\models\BatchRemitLog;
  6. use backend\models\RemitLog;
  7. use backend\models\RemitOrder;
  8. use common\helpers\Utils;
  9. use common\pay\RemitForm;
  10. use Yii;
  11. use yii\helpers\ArrayHelper;
  12. class RemitController extends BaseController
  13. {
  14. /**
  15. * 获取财务打款审核列表
  16. * @return \yii\web\Response
  17. */
  18. public function actionGetFinanceRemitList()
  19. {
  20. $data = Yii::$app->getRequest()->get();
  21. $data['status'] = isset($data['status']) ? trim($data['status']) : '';
  22. $data['batch_no'] = isset($data['batch_no']) ? trim($data['batch_no']) : '';
  23. $data['inStartTime'] = isset($data['inStartTime']) ? trim($data['inStartTime']) : '';
  24. $data['inEndTime'] = isset($data['inEndTime']) ? trim($data['inEndTime']) : '';
  25. $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1;
  26. $data['pageSize'] = isset($data['pageSize']) ? intval($data['pageSize']) : 20;
  27. $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'create_time desc';
  28. $data['search'] = isset($data['search']) ? trim($data['search']) : '';
  29. $data = ValidatorHelper::validateData($data, [
  30. ['status', 'string'],
  31. ['inStartTime', 'integer'],
  32. ['inEndTime', 'integer'],
  33. ['page', 'integer', 'min' => 1],
  34. ['pageSize', 'integer', 'min' => 1],
  35. ['orderBy', 'string'],
  36. ], $errors);
  37. if ($data == false) {
  38. return $this->outJson(0, '', $errors);
  39. }
  40. $query = RemitOrder::find()
  41. ->select('batch_no,amount,audit_status,audit_name,audit_reason,
  42. reaudit_name,reaudit_reason,audit_time,reaudit_time,create_time')
  43. ->addSelect(['count(*) as batch_count,sum(amount) as cny_amount']);
  44. // ->orderBy($data['orderBy']);
  45. $where = [];
  46. if ($data['status'] == 'all') {
  47. // 全部列表
  48. } else if ($data['status'] == 'first_trial') {
  49. // 初审列表明细
  50. $where = [
  51. 'OR',
  52. ['audit_status' => 0],
  53. ['audit_status' => 4],
  54. ];
  55. } else if ($data['status'] == 're_trial') {
  56. // 复审列表明细
  57. $where = [
  58. 'AND',
  59. ['audit_status' => 1],
  60. ];
  61. $data['orderBy'] = 'audit_time desc';
  62. } else {
  63. // 审核不通过明细
  64. $where = [
  65. 'AND',
  66. ['audit_status' => 3],
  67. ];
  68. }
  69. $query->orderBy($data['orderBy']);
  70. $query->where($where);
  71. $query->andFilterWhere(['>=', 'create_time', $data['inStartTime']]);
  72. $query->andFilterWhere(['<', 'create_time', $data['inEndTime']]);
  73. $query->andFilterWhere([
  74. 'or',
  75. ['like', 'batch_no', $data['search']]
  76. ]);
  77. if (!empty($data['batch_no'])) {
  78. $query->andFilterWhere(['batch_no' => $data['batch_no']]);
  79. }
  80. $queryClone = clone $query;
  81. $query->groupBy('batch_no');
  82. $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
  83. if ($result) {
  84. // 统计
  85. $sum = $queryClone->select(['COUNT(*) AS pay_count', 'SUM(amount) AS amount_sum'])->asArray()->limit(1)->one();
  86. $lastRow = [
  87. 'batch_no' => '',
  88. 'batch_count' => $sum['pay_count'],
  89. 'cny_amount' => !empty($sum['amount_sum']) ? $sum['amount_sum'] : 0,
  90. 'create_time' => '',
  91. 'audit_status' => null,
  92. 'audit_time' => '',
  93. 'audit_reason' => '',
  94. 'audit_name' => '',
  95. 'reaudit_time' => '',
  96. 'reaudit_reason' => '',
  97. 'reaudit_name' => '',
  98. ];
  99. array_push($result['dataList'], $lastRow);
  100. // 有小数就显示小数,没有就只显示整数部分
  101. if ($result['dataList']) {
  102. foreach ($result['dataList'] as $k => $v) {
  103. $result['dataList'][$k]['cny_amount'] = Utils::formatFloatOrInt($v['cny_amount']);
  104. }
  105. }
  106. }
  107. return $this->outJson(1, $result);
  108. }
  109. /**
  110. * 批次详细信息
  111. * @return \yii\web\Response
  112. */
  113. public function actionFinanceRemitDetail()
  114. {
  115. $data = Yii::$app->getRequest()->get();
  116. $data['batch_no'] = isset($data['batch_no']) ? trim($data['batch_no']) : '';
  117. $data['remit_no'] = isset($data['remit_no']) ? trim($data['remit_no']) : '';
  118. $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1;
  119. $data['pageSize'] = isset($data['pageSize']) ? intval($data['pageSize']) : 20;
  120. $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'remit_no asc';
  121. $data['search'] = isset($data['search']) ? trim($data['search']) : '';
  122. $query = RemitOrder::find()
  123. ->select('id,batch_no,remit_no,pay_type,biz_no,payee_name,
  124. amount,bank_name,bank_branch,bank_card_no,bank_province,bank_city,bank_code,memo,ret_msg')
  125. ->andWhere(['batch_no' => $data['batch_no']]);
  126. if (!empty($data['search'])) {
  127. $query->andFilterWhere(['like', 'remit_no', $data['search']]);
  128. }
  129. if (!empty($data['remit_no'])) {
  130. $query->andFilterWhere(['like', 'remit_no', $data['remit_no']]);
  131. }
  132. $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
  133. return $this->outJson(1, $result);
  134. }
  135. /**
  136. * 获取某条记录的备注
  137. */
  138. public function actionMemo()
  139. {
  140. $data = \Yii::$app->getRequest()->get();
  141. $data['id'] = isset($data['id']) ? $data['id'] : 0;
  142. $remit = RemitOrder::findOne(['id' => $data['id']]);
  143. return $this->outJson(1, $remit);
  144. }
  145. /**
  146. * 修改某条记录的备注
  147. */
  148. public function actionMemoUpdate()
  149. {
  150. $data = \Yii::$app->getRequest()->post();
  151. $data['id'] = isset($data['id']) ? $data['id'] : 0;
  152. $data['memo'] = isset($data['memo']) ? $data['memo'] : '';
  153. $info = RemitOrder::findOne(['id' => $data['id']]);
  154. if (!$info) {
  155. return $this->outJson(0, [], '该记录不存在');
  156. }
  157. $info->memo = $data['memo'];
  158. $rs = $info->save();
  159. if (!$rs) {
  160. return $this->outJson(0, [], '数据操作失败');
  161. }
  162. return $this->outJson(1, ['id' => $info['id']], '操作成功');
  163. }
  164. /**
  165. * 检测批次号是否存在
  166. * @return \yii\web\Response
  167. */
  168. public function actionCheckBatchNo()
  169. {
  170. $batchNo = trim(Yii::$app->getRequest()->get('batchNo'));
  171. if ($batchNo == '' || !is_numeric($batchNo)) {
  172. return $this->outJson(0, [], '参数非法');
  173. }
  174. if (RemitOrder::find()->where(['batch_no' => $batchNo])->exists()) {
  175. return $this->outJson(0, [], '批次号已存在');
  176. }
  177. return $this->outJson(1, $batchNo, "操作成功");
  178. }
  179. /**
  180. * 导入批次
  181. * @return \yii\web\Response
  182. * @throws \yii\db\Exception
  183. */
  184. public function actionImportRemitOrder()
  185. {
  186. $data = \Yii::$app->getRequest()->post();
  187. $data['list'] = json_decode($data['list'], true);
  188. if (!empty($data['list'])) {
  189. $rows = [];
  190. foreach ($data['list'] as $item) {
  191. $remitNo = RemitOrder::generateRemitNo();
  192. if ($remitNo) {
  193. $rows[] = [
  194. 'remit_no' => $remitNo,
  195. 'batch_no' => $data['batch_no'],
  196. 'biz_type' => 1,
  197. 'biz_no' => $item[0],
  198. 'pay_type' => 5,
  199. 'payee_name' => $item[1],
  200. 'amount' => $item[2],
  201. 'bank_name' => $item[3],
  202. 'bank_branch' => $item[4],
  203. 'bank_card_no' => $item[5],
  204. 'bank_province' => $item[6],
  205. 'bank_city' => $item[7],
  206. 'bank_code' => $item[8],
  207. 'memo' => $item[9],
  208. 'create_time' => time(),
  209. ];
  210. }
  211. }
  212. if ($rows) {
  213. $command = RemitOrder::getDb()->createCommand();
  214. $columns = array_combine(array_keys($rows[0]), array_keys($rows[0]));
  215. $sql = $command->batchInsert(RemitOrder::tableName(), $columns, $rows)->getSql();
  216. if ($command->setSql(str_ireplace("INSERT INTO", "INSERT IGNORE INTO", $sql))->execute()) {
  217. // 记录日志
  218. $logData = [];
  219. $logData['memo'] = '导入批次';
  220. isset($data['admin_id']) && $logData['admin_id'] = trim($data['admin_id']);
  221. isset($data['admin_name']) && $logData['admin_name'] = trim($data['admin_name']);
  222. isset($data['admin_ip']) && $logData['admin_ip'] = trim($data['admin_ip']);
  223. BatchRemitLog::addLog($data, $logData);
  224. return $this->outJson(1, [], '导入批次成功');
  225. } else {
  226. return $this->outJson(0, [], '123');
  227. }
  228. } else {
  229. return $this->outJson(0, [], '234');
  230. }
  231. } else {
  232. return $this->outJson(0, [], '表中无数据');
  233. }
  234. }
  235. /**
  236. * 操作日志
  237. * @return \yii\web\Response
  238. */
  239. public function actionGetBatchRemitLog()
  240. {
  241. $data = Yii::$app->getRequest()->get();
  242. $data['batch_no'] = isset($data['batch_no']) ? $data['batch_no'] : '';
  243. $rs = BatchRemitLog::find()->where(['batch_no' => $data['batch_no']])->asArray()->all();
  244. return $this->outJson(1, $rs);
  245. }
  246. /**
  247. * 批次初审
  248. * @return \yii\web\Response
  249. */
  250. public function actionBatchAudit()
  251. {
  252. $data = Yii::$app->getRequest()->post();
  253. if (!isset($data['batch_no']) || trim($data['batch_no']) == '') {
  254. return $this->outJson(0, [], '打款批次号不能为空');
  255. }
  256. $batchNo = $data['batch_no'];
  257. if (!isset($data['audit_status']) || trim($data['audit_status']) == '') {
  258. return $this->outJson(0, [], '审核状态不能为空');
  259. }
  260. $model = RemitOrder::findByBatchNo($batchNo);
  261. if ($model == null) {
  262. return $this->outJson(0, [], '打款单不存在');
  263. }
  264. if ($model->doBatchAudit($data)) {
  265. return $this->outJson(1, [], '操作成功');
  266. } else {
  267. return $this->outJson(0, [], $model->getFirstError('audit_status'));
  268. }
  269. }
  270. /**
  271. * 批次复审
  272. * @return \yii\web\Response
  273. */
  274. public function actionBatchReAudit()
  275. {
  276. $data = Yii::$app->getRequest()->post();
  277. if (!isset($data['batch_no']) || trim($data['batch_no']) == '') {
  278. return $this->outJson(0, [], '打款批次号不能为空');
  279. }
  280. $batchNo = $data['batch_no'];
  281. if (!isset($data['audit_status']) || trim($data['audit_status']) == '') {
  282. return $this->outJson(0, [], '审核状态不能为空');
  283. }
  284. $model = RemitOrder::findByBatchNo($batchNo);
  285. if ($model == null) {
  286. return $this->outJson(0, [], '打款单不存在');
  287. }
  288. if ($model->doBatchReAudit($data)) {
  289. return $this->outJson(1, [], '操作成功');
  290. } else {
  291. return $this->outJson(0, [], $model->getFirstError('audit_status'));
  292. }
  293. }
  294. /**
  295. * 创建打款单
  296. * @return \yii\web\Response
  297. */
  298. public function actionCreate()
  299. {
  300. $data = Yii::$app->getRequest()->post();
  301. $unsetFields = ['audit_status', 'audit_admin_id', 'audit_name', 'audit_reason', 'audit_time',
  302. 'reaudit_admin_id', 'reaudit_name', 'reaudit_reason', 'reaudit_time', 'pay_status', 'pay_time',
  303. 'complete_time', 'out_no', 'out_no_crc32', 'ret_code', 'res_code', 'ret_msg', 'sign',
  304. 'create_time', 'last_modified'];
  305. foreach ($unsetFields as $field) {
  306. unset($data[$field]);
  307. }
  308. if (!isset($data['biz_no']) || trim($data['biz_no']) == '') {
  309. return $this->outJson(0, [], '业务单号不能为空');
  310. }
  311. if (!isset($data['biz_type']) || trim($data['biz_type']) == '') {
  312. return $this->outJson(0, [], '业务类型不能为空');
  313. }
  314. if (RemitOrder::checkBizExist($data['biz_no'], $data['biz_type'])) {
  315. return $this->outJson(0, [], '业务号已存在,请勿重复添加');
  316. }
  317. $remitNo = RemitOrder::generateRemitNo();
  318. if ($remitNo == false) {
  319. return $this->outJson(0, [], '打款单号生成失败');
  320. }
  321. $data['remit_no'] = $remitNo;
  322. $data['create_time'] = time();
  323. $model = new RemitOrder();
  324. $model->setAttributes($data);
  325. if ($model->save()) {
  326. $logData = [];
  327. $logData['memo'] = "创建打款单";
  328. isset($data['admin_id']) && $logData['admin_id'] = trim($data['admin_id']);
  329. isset($data['admin_name']) && $logData['admin_name'] = trim($data['admin_name']);
  330. isset($data['admin_ip']) && $logData['admin_ip'] = trim($data['admin_ip']);
  331. RemitLog::addLog($model->getAttributes(), $logData);
  332. return $this->outJson(1, [], '操作成功');
  333. } else {
  334. return $this->outJson(0, [], $model->getFirstErrors());
  335. }
  336. }
  337. /**
  338. * 初审
  339. * @return \yii\web\Response
  340. */
  341. public function actionAudit()
  342. {
  343. $data = Yii::$app->getRequest()->post();
  344. if (!isset($data['remit_no']) || trim($data['remit_no']) == '') {
  345. return $this->outJson(0, [], '打款单号不能为空');
  346. }
  347. $remitNo = $data['remit_no'];
  348. if (!isset($data['audit_status']) || trim($data['audit_status']) == '') {
  349. return $this->outJson(0, [], '审核状态不能为空');
  350. }
  351. $model = RemitOrder::findByRemitNo($remitNo);
  352. if ($model == null) {
  353. return $this->outJson(0, [], '打款单不存在');
  354. }
  355. if ($model->doAudit($data)) {
  356. return $this->outJson(1, [], '操作成功');
  357. } else {
  358. return $this->outJson(0, [], $model->getFirstError('audit_status'));
  359. }
  360. }
  361. /**
  362. * 复审
  363. * @return \yii\web\Response
  364. */
  365. public function actionReaudit()
  366. {
  367. $data = Yii::$app->getRequest()->post();
  368. if (!isset($data['remit_no']) || trim($data['remit_no']) == '') {
  369. return $this->outJson(0, [], '打款单号不能为空');
  370. }
  371. $remitNo = $data['remit_no'];
  372. if (!isset($data['audit_status']) || trim($data['audit_status']) == '') {
  373. return $this->outJson(0, [], '审核状态不能为空');
  374. }
  375. $model = RemitOrder::findByRemitNo($remitNo);
  376. if ($model == null) {
  377. return $this->outJson(0, [], '打款单不存在');
  378. }
  379. if ($model->doReAudit($data)) {
  380. return $this->outJson(1, [], '操作成功');
  381. } else {
  382. return $this->outJson(0, [], $model->getFirstError('audit_status'));
  383. }
  384. }
  385. /**
  386. * 打款
  387. * @return \yii\web\Response
  388. */
  389. public function actionOutremit()
  390. {
  391. $model = new RemitForm();
  392. $model->setAttributes(Yii::$app->getRequest()->post());
  393. if ($model->outRemit()) {
  394. return $this->outJson(1, [], '操作成功');
  395. } else {
  396. return $this->outJson(0, [], $model->getFirstErrors());
  397. }
  398. }
  399. public function actionNotify()
  400. {
  401. $model = new RemitForm();
  402. $data = Yii::$app->getRequest()->post();
  403. if ($model->handleNotify($data)) {
  404. return $this->outJson(1, $model->getOutNotifyResult());
  405. } else {
  406. return $this->outJson(0, $model->getOutNotifyResult());
  407. }
  408. }
  409. /**
  410. * 打款列表数据
  411. */
  412. public function actionGetRemitList()
  413. {
  414. $model = new RemitOrder();
  415. $result = $model->getList(Yii::$app->request->post());
  416. if ($result['code']) {
  417. return $this->outJson(1, $result['data'], $result['message']);
  418. } else {
  419. return $this->outJson(0, [], $result['message']);
  420. }
  421. }
  422. /**
  423. * 更改打款状态
  424. */
  425. public function actionUpdatePayStatus()
  426. {
  427. $model = new RemitOrder();
  428. $result = $model->updatePayStatus(Yii::$app->request->post());
  429. if ($result['code']) {
  430. return $this->outJson(1, $result['data'], $result['message']);
  431. } else {
  432. return $this->outJson(0, [], $result['message']);
  433. }
  434. }
  435. /**
  436. * 日志
  437. */
  438. public function actionGetRemitLog()
  439. {
  440. $model = new RemitLog();
  441. $result = $model->getList(Yii::$app->request->post());
  442. if ($result['code']) {
  443. return $this->outJson(1, $result['data'], $result['message']);
  444. } else {
  445. return $this->outJson(0, [], $result['message']);
  446. }
  447. }
  448. }