FinanceController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592
  1. <?php
  2. namespace Modules\Manage\Controllers;
  3. use App\Constants\CommonConstant;
  4. use App\Model\PaymentAttrModel;
  5. use App\Model\PaymentModel;
  6. use App\Repositories\Criterias\OrderLimitCriteria;
  7. use App\Repositories\Criterias\PaymentAttrCriteria;
  8. use App\Repositories\Criterias\PaymentAttrLimitCriteria;
  9. use App\Repositories\Criterias\PaymentLimitCriteria;
  10. use App\Repositories\Criterias\PaymentTypeLimitCriteria;
  11. use App\Repositories\OrderRepository;
  12. use App\Repositories\PaymentAttrRepository;
  13. use App\Repositories\PaymentTypeRepository;
  14. use App\Repositories\Service\PaymentService;
  15. use App\Repositories\VipRepository;
  16. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  17. use Modules\Manage\Responses\CommonPagesResponse;
  18. use Modules\Manage\Responses\CommonSuccessPkResponse;
  19. use Modules\Manage\Responses\PaymentSuccessUidResponse;
  20. class FinanceController extends BaseController
  21. {
  22. /**
  23. * 支付通道列表
  24. *
  25. * @param ValidatorFactoryInterface $validatorFactory
  26. * @param OrderRepository $orderRepository
  27. * @return mixed|CommonPagesResponse
  28. */
  29. public function paymentList(ValidatorFactoryInterface $validatorFactory)
  30. {
  31. $inputData = $this->getJsonData();
  32. $rules = [
  33. 'page' => 'nullable|integer',
  34. 'page_size' => 'nullable|integer',
  35. 'status' => 'nullable|in:1,2',
  36. 'name' => 'nullable|string'
  37. ];
  38. $validator = $validatorFactory->make($inputData, $rules);
  39. if ($validator->fails()) {
  40. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  41. return json_fail($validator->errors()->first());
  42. }
  43. $orders = [
  44. ['created_at', 'DESC'],
  45. ];
  46. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  47. if ($pageSize > 500) {
  48. $pageSize = CommonConstant::PAGE_SIZE;
  49. }
  50. $page = format_page($inputData['page'] ?? 1);
  51. // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
  52. $field = ['id', 'name', 'pay_code', 'status', 'created_at', 'updated_at', 'partner_id'];
  53. $payment = make(OrderRepository::class)->pushCriteria(new PaymentLimitCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize,
  54. $field, $page);
  55. return new CommonPagesResponse($payment);
  56. }
  57. /**
  58. * 支付通道添加
  59. *
  60. * @param ValidatorFactoryInterface $validatorFactory
  61. * @return mixed|PaymentSuccessUidResponse
  62. */
  63. public function paymentAdd(ValidatorFactoryInterface $validatorFactory)
  64. {
  65. $inputData = $this->getJsonData();
  66. $rules = [
  67. 'name' => 'required|string',
  68. 'pay_code' => 'required|string',
  69. 'partner_id' => 'required|string',
  70. ];
  71. $validator = $validatorFactory->make($inputData, $rules);
  72. if ($validator->fails()) {
  73. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  74. return json_fail($validator->errors()->first());
  75. }
  76. $setarr = [
  77. 'name' => $inputData['name'],
  78. 'status' => 1,
  79. 'pay_code' => $inputData['pay_code'],
  80. 'partner_id' => $inputData['partner_id'],
  81. ];
  82. $result = make(OrderRepository::class)->create($setarr);
  83. if (!$result) {
  84. return json_fail('创建失败');
  85. } else {
  86. $logSubject = '添加一个支付通道,通道名字:' . $inputData['name'];
  87. $logSvalue = $result->id;
  88. $logDbData = [
  89. 'after_items' => [
  90. $result->toArray(),
  91. ],
  92. 'before_items' => [],
  93. ];
  94. $this->log($logSubject, $logSvalue, $logDbData);
  95. return new PaymentSuccessUidResponse($result->manager_id);
  96. }
  97. }
  98. /**
  99. * 支付类型
  100. * @param ValidatorFactoryInterface $validatorFactory
  101. * @return mixed
  102. */
  103. public function paymentAttr(ValidatorFactoryInterface $validatorFactory)
  104. {
  105. $inputData = $this->getJsonData();
  106. $rules = [
  107. 'page' => 'nullable|integer',
  108. 'page_size' => 'nullable|integer',
  109. 'pay_type' => 'nullable|integer',
  110. 'status' => 'nullable|in:1,2',
  111. 'pay_code' => 'nullable',
  112. 'type_name' => 'nullable|string'
  113. ];
  114. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  115. if ($pageSize > 500) {
  116. $pageSize = CommonConstant::PAGE_SIZE;
  117. }
  118. $page = format_page($inputData['page'] ?? 1);
  119. $validator = $validatorFactory->make($inputData, $rules);
  120. if ($validator->fails()) {
  121. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  122. return json_fail($validator->errors()->first());
  123. }
  124. $orders = [
  125. ['created_at', 'DESC'],
  126. ];
  127. $paymentAttr = make(PaymentAttrRepository::class)
  128. ->pushCriteria(new PaymentAttrCriteria($inputData))
  129. ->pushCriteria(new PaymentAttrLimitCriteria($orders))
  130. ->paginate($pageSize, ['*'], $page);
  131. return new CommonPagesResponse($paymentAttr);
  132. }
  133. /**
  134. * 查询所有的
  135. * @return mixed
  136. */
  137. public function paymentAttrAll()
  138. {
  139. return json_success(PaymentAttrModel::query()
  140. ->select('uid', 'type_name', 'pay_code')
  141. ->get()->groupBy('pay_code'));
  142. }
  143. /**
  144. * 添加
  145. * @param ValidatorFactoryInterface $validatorFactory
  146. * @return mixed
  147. */
  148. public function createPaymentAttr(ValidatorFactoryInterface $validatorFactory)
  149. {
  150. $inputData = $this->getJsonData();
  151. $rules = [
  152. 'pay_code' => 'required',
  153. 'type_name' => 'required',
  154. 'code' => 'required'
  155. ];
  156. $validator = $validatorFactory->make($inputData, $rules);
  157. if ($validator->fails()) {
  158. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  159. return json_fail($validator->errors()->first());
  160. }
  161. // 查询是否有通道
  162. $paymentModel = make(PaymentModel::class)->where('uid', $inputData['pay_code'])
  163. ->first();
  164. if (!$paymentModel) {
  165. return json_fail('该支付通道不存在!');
  166. }
  167. $data = $inputData;
  168. $data['pay_code'] = $paymentModel->uid;
  169. $res = PaymentAttrModel::query()->create($data);
  170. if (!$res) {
  171. return json_fail('创建失败');
  172. }
  173. return json_success('创建成功');
  174. }
  175. /**
  176. * 修改
  177. * @param ValidatorFactoryInterface $validatorFactory
  178. * @return mixed
  179. */
  180. public function updatePaymentAttr(ValidatorFactoryInterface $validatorFactory)
  181. {
  182. $inputData = $this->getJsonData();
  183. $rules = [
  184. 'uid' => 'required',
  185. 'pay_code' => 'nullable',
  186. 'type_name' => 'nullable',
  187. 'code' => 'nullable'
  188. ];
  189. $validator = $validatorFactory->make($inputData, $rules);
  190. if ($validator->fails()) {
  191. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  192. return json_fail($validator->errors()->first());
  193. }
  194. $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['uid'])->first();
  195. if (!$paymentAttrModel) {
  196. return json_fail('该支付类型不存在!');
  197. }
  198. $paymentAttrModel->pay_code = $inputData['pay_code'] ?? $paymentAttrModel->pay_code;
  199. $paymentAttrModel->type_name = $inputData['type_name'] ?? $paymentAttrModel->type_name;
  200. $paymentAttrModel->code = $inputData['code'] ?? $paymentAttrModel->code;
  201. if (!$paymentAttrModel->save()) {
  202. return json_fail('修改失败!');
  203. }
  204. return json_success('修改成功!');
  205. }
  206. /**
  207. * 删除
  208. * @param ValidatorFactoryInterface $validatorFactory
  209. * @return mixed
  210. */
  211. public function deletePaymentAttr(ValidatorFactoryInterface $validatorFactory)
  212. {
  213. $inputData = $this->getJsonData();
  214. $rules = [
  215. 'uid' => 'required',
  216. ];
  217. $validator = $validatorFactory->make($inputData, $rules);
  218. if ($validator->fails()) {
  219. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  220. return json_fail($validator->errors()->first());
  221. }
  222. $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['uid'])->first();
  223. if (!$paymentAttrModel) {
  224. return json_fail('该支付类型不存在!');
  225. }
  226. if (!$paymentAttrModel->delete()) {
  227. return json_fail('删除失败!');
  228. }
  229. return json_success('删除成功!');
  230. }
  231. /**
  232. * 支付通道修改
  233. *
  234. * @param ValidatorFactoryInterface $validatorFactory
  235. * @return mixed|PaymentSuccessUidResponse
  236. */
  237. public function paymentUpdate(ValidatorFactoryInterface $validatorFactory)
  238. {
  239. $inputData = $this->getJsonData();
  240. $rules = [
  241. 'id' => 'required|integer',
  242. 'status' => 'nullable|in:1,2',
  243. 'name' => 'nullable|string',
  244. 'pay_code' => 'nullable|string',
  245. 'partner_id' => 'nullable|string',
  246. ];
  247. $validator = $validatorFactory->make($inputData, $rules);
  248. if ($validator->fails()) {
  249. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  250. return json_fail($validator->errors()->first());
  251. }
  252. $payment = make(OrderRepository::class)->findBy('id', $inputData['id']);
  253. if (empty($payment)) {
  254. return json_fail(trans('common.err_resource_not_found'));
  255. }
  256. $oldPayment = clone $payment;
  257. if (!empty($inputData['status'])) {
  258. $payment->status = $inputData['status'];
  259. }
  260. if (!empty($inputData['name'])) {
  261. $payment->name = $inputData['name'];
  262. }
  263. if (!empty($inputData['pay_code'])) {
  264. $payment->pay_code = $inputData['pay_code'];
  265. }
  266. if (!empty($inputData['partner_id'])) {
  267. $payment->partner_id = $inputData['partner_id'];
  268. }
  269. $result = $payment->save();
  270. if (!$result) {
  271. return json_fail('修改失败');
  272. } else {
  273. $logSubject = '修改一个支付通道,通道名字:' . $payment->name;
  274. $logSvalue = $payment->id;
  275. $logDbData = [
  276. 'after_items' => [
  277. $payment->toArray(),
  278. ],
  279. 'before_items' => [
  280. $oldPayment->toArray(),
  281. ],
  282. ];
  283. $this->log($logSubject, $logSvalue, $logDbData);
  284. return new PaymentSuccessUidResponse($payment->id);
  285. }
  286. }
  287. /**
  288. * 通道支付类型列表
  289. *
  290. * @param ValidatorFactoryInterface $validatorFactory
  291. * @return mixed|CommonPagesResponse
  292. */
  293. public function paymentTypeList(ValidatorFactoryInterface $validatorFactory)
  294. {
  295. $inputData = $this->getJsonData();
  296. $rules = [
  297. 'page' => 'nullable|integer',
  298. 'page_size' => 'nullable|integer',
  299. 'status' => 'nullable|in:1,2',
  300. 'pay_type' => 'nullable|in:1,2,3',
  301. 'payment_uid' => 'nullable|string',
  302. ];
  303. $validator = $validatorFactory->make($inputData, $rules);
  304. if ($validator->fails()) {
  305. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  306. return json_fail($validator->errors()->first());
  307. }
  308. $orders = [
  309. ['weights', 'DESC'],
  310. ];
  311. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  312. if ($pageSize > 500) {
  313. $pageSize = CommonConstant::PAGE_SIZE;
  314. }
  315. $page = format_page($inputData['page'] ?? 1);
  316. // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
  317. $field = [
  318. 'uid',
  319. 'name',
  320. 'pay_type',
  321. 'payment_attr_uid',
  322. 'status',
  323. 'created_at',
  324. 'updated_at',
  325. 'code',
  326. 'limit_type',
  327. 'limit',
  328. 'remark',
  329. 'payment_uid',
  330. 'belong_device',
  331. 'weights'
  332. ];
  333. $paymentType = make(PaymentTypeRepository::class)
  334. ->pushCriteria(new PaymentTypeLimitCriteria($inputData))
  335. ->pushCriteria(new OrderLimitCriteria($orders))
  336. ->paginate($pageSize, $field, $page);
  337. if ($paymentType->isNotEmpty()) {
  338. $payment = make(OrderRepository::class)->getPaymentData(['name', 'uid'])->keyBy('uid');
  339. foreach ($paymentType->items() as &$item) {
  340. $item->paymetn_name = $payment[$item->payment_uid]->name;
  341. }
  342. }
  343. return new CommonPagesResponse($paymentType);
  344. }
  345. /**
  346. * 通道支付类型添加
  347. *
  348. * @param ValidatorFactoryInterface $validatorFactory
  349. * @return mixed|PaymentSuccessUidResponse
  350. */
  351. public function paymentTypeAdd(ValidatorFactoryInterface $validatorFactory)
  352. {
  353. $inputData = $this->getJsonData();
  354. $rules = [
  355. 'name' => 'required|string',
  356. 'code' => 'required|string',
  357. 'limit_type' => 'required|integer',
  358. 'pay_type' => 'required|in:1,2,3,5',
  359. 'limit' => 'required|string',
  360. 'weights' => 'required|integer',
  361. 'remark' => 'nullable|string',
  362. 'belong_device' => 'nullable',
  363. ];
  364. $validator = $validatorFactory->make($inputData, $rules);
  365. if ($validator->fails()) {
  366. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  367. return json_fail($validator->errors()->first());
  368. }
  369. // 查询数据
  370. $paymentAttrModel = PaymentAttrModel::query()
  371. ->where('uid', $inputData['code'])
  372. ->first();
  373. if (!$paymentAttrModel) {
  374. return json_fail('该类型不存在!');
  375. }
  376. $setarr = [
  377. 'name' => $inputData['name'],
  378. 'status' => 2,
  379. 'payment_uid' => $paymentAttrModel->pay_code,
  380. 'pay_type' => $inputData['pay_type'],
  381. 'code' => $paymentAttrModel->code,
  382. 'payment_attr_uid' => $paymentAttrModel->uid,
  383. 'limit_type' => $inputData['limit_type'],
  384. 'limit' => $inputData['limit'],
  385. 'weights' => $inputData['weights'],
  386. 'remark' => $inputData['remark'],
  387. 'belong_device' => $inputData['belong_device'] ?? null,
  388. ];
  389. $result = make(PaymentTypeRepository::class)->create($setarr);
  390. if (!$result) {
  391. return json_fail('创建失败');
  392. } else {
  393. $logSubject = '添加一个通道类型, 名字:' . $inputData['name'];
  394. $logSvalue = $result->id;
  395. $logDbData = [
  396. 'after_items' => [
  397. $result->toArray(),
  398. ],
  399. 'before_items' => [],
  400. ];
  401. $this->log($logSubject, $logSvalue, $logDbData);
  402. return new PaymentSuccessUidResponse($result->uid);
  403. }
  404. }
  405. /**
  406. * 通道支付类型修改
  407. *
  408. * @param ValidatorFactoryInterface $validatorFactory
  409. * @return mixed|PaymentSuccessUidResponse
  410. */
  411. public function paymentTypeUpdate(ValidatorFactoryInterface $validatorFactory)
  412. {
  413. $inputData = $this->getJsonData();
  414. $rules = [
  415. 'name' => "required|string",
  416. 'uid' => "required",
  417. 'code' => 'required|string',
  418. 'limit_type' => 'required|integer',
  419. 'pay_type' => 'required|in:1,2,3,5',
  420. 'limit' => 'required|string',
  421. 'weights' => 'required|integer',
  422. 'remark' => 'nullable|string',
  423. 'status' => 'nullable|in:1,2',
  424. 'belong_device' => 'nullable',
  425. ];
  426. $validator = $validatorFactory->make($inputData, $rules);
  427. if ($validator->fails()) {
  428. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  429. return json_fail($validator->errors()->first());
  430. }
  431. $paymentType = make(PaymentTypeRepository::class)->findBy('uid', $inputData['uid']);
  432. if (empty($paymentType)) {
  433. return json_fail(trans('common.err_resource_not_found'));
  434. }
  435. $oldPaymentType = clone $paymentType;
  436. if (!empty($inputData['code'])) {
  437. // 查询数据
  438. $paymentAttrModel = PaymentAttrModel::query()
  439. ->where('uid', $inputData['code'])
  440. ->first();
  441. if (!$paymentAttrModel) {
  442. return json_fail('该类型不存在!');
  443. }
  444. $paymentType->payment_uid = $paymentAttrModel->pay_code;
  445. $paymentType->code = $paymentAttrModel->code;
  446. $paymentType->payment_attr_uid = $paymentAttrModel->uid;
  447. }
  448. if (!empty($inputData['limit_type'])) {
  449. $paymentType->limit_type = $inputData['limit_type'];
  450. }
  451. if (!empty($inputData['name'])) {
  452. $paymentType->name = $inputData['name'];
  453. }
  454. if (!empty($inputData['pay_type'])) {
  455. $paymentType->pay_type = $inputData['pay_type'];
  456. }
  457. if (!empty($inputData['limit'])) {
  458. $paymentType->limit = $inputData['limit'];
  459. }
  460. if (!empty($inputData['weights'])) {
  461. $paymentType->weights = $inputData['weights'];
  462. }
  463. if (!empty($inputData['remark'])) {
  464. $paymentType->remark = $inputData['remark'];
  465. }
  466. if (!empty($inputData['status'])) {
  467. $paymentType->status = $inputData['status'];
  468. }
  469. if (!empty($inputData['belong_device'])) {
  470. $paymentType->belong_device = $inputData['belong_device'];
  471. } else {
  472. $paymentType->belong_device = null;
  473. }
  474. $result = $paymentType->save();
  475. if (!$result) {
  476. return json_fail('修改失败');
  477. } else {
  478. $logSubject = '修改一个通道类型, 名字:' . $paymentType->name;
  479. $logSvalue = $paymentType->uid;
  480. $logDbData = [
  481. 'after_items' => [
  482. $paymentType->toArray(),
  483. ],
  484. 'before_items' => [
  485. $oldPaymentType->toArray(),
  486. ],
  487. ];
  488. $this->log($logSubject, $logSvalue, $logDbData);
  489. make(PaymentService::class)->delPaymentTypeCache();
  490. return new PaymentSuccessUidResponse($paymentType->uid);
  491. }
  492. }
  493. /**
  494. * 通道支付类型删除
  495. *
  496. * @param ValidatorFactoryInterface $validatorFactory
  497. * @return mixed|PaymentSuccessUidResponse
  498. */
  499. public function paymentTypeDelete(ValidatorFactoryInterface $validatorFactory)
  500. {
  501. $inputData = $this->getJsonData();
  502. $rules = [
  503. 'uid' => 'required|string',
  504. ];
  505. $validator = $validatorFactory->make($inputData, $rules);
  506. if ($validator->fails()) {
  507. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  508. return json_fail($validator->errors()->first());
  509. }
  510. $paymentType = make(PaymentTypeRepository::class)->findBy('uid', $inputData['uid']);
  511. if (empty($paymentType)) {
  512. return json_fail(trans('common.err_resource_not_found'));
  513. }
  514. $oldManagerType = clone $paymentType;
  515. $result = $paymentType->delete();
  516. if (!$result) {
  517. return json_fail('删除失败');
  518. } else {
  519. $logSubject = '删除一个通道类型,名字:' . $paymentType->name;
  520. $logSvalue = $oldManagerType->manager_id;
  521. $logDbData = [
  522. 'after_items' => [
  523. ],
  524. 'before_items' => [
  525. $oldManagerType->toArray(),
  526. ],
  527. ];
  528. $this->log($logSubject, $logSvalue, $logDbData);
  529. make(PaymentService::class)->delPaymentTypeCache();
  530. return new PaymentSuccessUidResponse($inputData['uid']);
  531. }
  532. }
  533. /**
  534. * 通道下拉
  535. *
  536. * @return CommonPagesResponse
  537. */
  538. public function paymentDown()
  539. {
  540. $payment = make(OrderRepository::class)->getPaymentData(['name', 'uid'])->keyBy('uid');
  541. return new CommonPagesResponse($payment);
  542. }
  543. }