Modules_Manage_Controllers_FinanceController.proxy.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  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. use \Hyperf\Di\Aop\ProxyTrait;
  23. use \Hyperf\Di\Aop\PropertyHandlerTrait;
  24. function __construct()
  25. {
  26. if (method_exists(parent::class, '__construct')) {
  27. parent::__construct(...func_get_args());
  28. }
  29. $this->__handlePropertyHandler(__CLASS__);
  30. }
  31. /**
  32. * 支付通道列表
  33. *
  34. * @param ValidatorFactoryInterface $validatorFactory
  35. * @param OrderRepository $orderRepository
  36. * @return mixed|CommonPagesResponse
  37. */
  38. public function paymentList(ValidatorFactoryInterface $validatorFactory)
  39. {
  40. $inputData = $this->getJsonData();
  41. $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'status' => 'nullable|in:1,2', 'name' => 'nullable|string'];
  42. $validator = $validatorFactory->make($inputData, $rules);
  43. if ($validator->fails()) {
  44. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  45. return json_fail($validator->errors()->first());
  46. }
  47. $orders = [['created_at', 'DESC']];
  48. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  49. if ($pageSize > 500) {
  50. $pageSize = CommonConstant::PAGE_SIZE;
  51. }
  52. $page = format_page($inputData['page'] ?? 1);
  53. // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
  54. $field = ['id', 'name', 'pay_code', 'status', 'created_at', 'updated_at', 'partner_id'];
  55. $payment = make(OrderRepository::class)->pushCriteria(new PaymentLimitCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
  56. return new CommonPagesResponse($payment);
  57. }
  58. /**
  59. * 支付通道添加
  60. *
  61. * @param ValidatorFactoryInterface $validatorFactory
  62. * @return mixed|PaymentSuccessUidResponse
  63. */
  64. public function paymentAdd(ValidatorFactoryInterface $validatorFactory)
  65. {
  66. $inputData = $this->getJsonData();
  67. $rules = ['name' => 'required|string', 'pay_code' => 'required|string', 'partner_id' => 'required|string'];
  68. $validator = $validatorFactory->make($inputData, $rules);
  69. if ($validator->fails()) {
  70. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  71. return json_fail($validator->errors()->first());
  72. }
  73. $setarr = ['name' => $inputData['name'], 'status' => 1, 'pay_code' => $inputData['pay_code'], 'partner_id' => $inputData['partner_id']];
  74. $result = make(OrderRepository::class)->create($setarr);
  75. if (!$result) {
  76. return json_fail('创建失败');
  77. } else {
  78. $logSubject = '添加一个支付通道,通道名字:' . $inputData['name'];
  79. $logSvalue = $result->id;
  80. $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
  81. $this->log($logSubject, $logSvalue, $logDbData);
  82. return new PaymentSuccessUidResponse($result->manager_id);
  83. }
  84. }
  85. /**
  86. * 支付类型
  87. * @param ValidatorFactoryInterface $validatorFactory
  88. * @return mixed
  89. */
  90. public function paymentAttr(ValidatorFactoryInterface $validatorFactory)
  91. {
  92. $inputData = $this->getJsonData();
  93. $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'pay_type' => 'nullable|integer', 'status' => 'nullable|in:1,2', 'pay_code' => 'nullable', 'type_name' => 'nullable|string'];
  94. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  95. if ($pageSize > 500) {
  96. $pageSize = CommonConstant::PAGE_SIZE;
  97. }
  98. $page = format_page($inputData['page'] ?? 1);
  99. $validator = $validatorFactory->make($inputData, $rules);
  100. if ($validator->fails()) {
  101. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  102. return json_fail($validator->errors()->first());
  103. }
  104. $orders = [['created_at', 'DESC']];
  105. $paymentAttr = make(PaymentAttrRepository::class)->pushCriteria(new PaymentAttrCriteria($inputData))->pushCriteria(new PaymentAttrLimitCriteria($orders))->paginate($pageSize, ['*'], $page);
  106. return new CommonPagesResponse($paymentAttr);
  107. }
  108. /**
  109. * 查询所有的
  110. * @return mixed
  111. */
  112. public function paymentAttrAll()
  113. {
  114. return json_success(PaymentAttrModel::query()->select('uid', 'type_name', 'pay_code')->get()->groupBy('pay_code'));
  115. }
  116. /**
  117. * 添加
  118. * @param ValidatorFactoryInterface $validatorFactory
  119. * @return mixed
  120. */
  121. public function createPaymentAttr(ValidatorFactoryInterface $validatorFactory)
  122. {
  123. $inputData = $this->getJsonData();
  124. $rules = ['pay_code' => 'required', 'type_name' => 'required', 'code' => 'required'];
  125. $validator = $validatorFactory->make($inputData, $rules);
  126. if ($validator->fails()) {
  127. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  128. return json_fail($validator->errors()->first());
  129. }
  130. // 查询是否有通道
  131. $paymentModel = make(PaymentModel::class)->where('uid', $inputData['pay_code'])->first();
  132. if (!$paymentModel) {
  133. return json_fail('该支付通道不存在!');
  134. }
  135. $data = $inputData;
  136. $data['pay_code'] = $paymentModel->uid;
  137. $res = PaymentAttrModel::query()->create($data);
  138. if (!$res) {
  139. return json_fail('创建失败');
  140. }
  141. return json_success('创建成功');
  142. }
  143. /**
  144. * 修改
  145. * @param ValidatorFactoryInterface $validatorFactory
  146. * @return mixed
  147. */
  148. public function updatePaymentAttr(ValidatorFactoryInterface $validatorFactory)
  149. {
  150. $inputData = $this->getJsonData();
  151. $rules = ['uid' => 'required', 'pay_code' => 'nullable', 'type_name' => 'nullable', 'code' => 'nullable'];
  152. $validator = $validatorFactory->make($inputData, $rules);
  153. if ($validator->fails()) {
  154. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  155. return json_fail($validator->errors()->first());
  156. }
  157. $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['uid'])->first();
  158. if (!$paymentAttrModel) {
  159. return json_fail('该支付类型不存在!');
  160. }
  161. $paymentAttrModel->pay_code = $inputData['pay_code'] ?? $paymentAttrModel->pay_code;
  162. $paymentAttrModel->type_name = $inputData['type_name'] ?? $paymentAttrModel->type_name;
  163. $paymentAttrModel->code = $inputData['code'] ?? $paymentAttrModel->code;
  164. if (!$paymentAttrModel->save()) {
  165. return json_fail('修改失败!');
  166. }
  167. return json_success('修改成功!');
  168. }
  169. /**
  170. * 删除
  171. * @param ValidatorFactoryInterface $validatorFactory
  172. * @return mixed
  173. */
  174. public function deletePaymentAttr(ValidatorFactoryInterface $validatorFactory)
  175. {
  176. $inputData = $this->getJsonData();
  177. $rules = ['uid' => 'required'];
  178. $validator = $validatorFactory->make($inputData, $rules);
  179. if ($validator->fails()) {
  180. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  181. return json_fail($validator->errors()->first());
  182. }
  183. $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['uid'])->first();
  184. if (!$paymentAttrModel) {
  185. return json_fail('该支付类型不存在!');
  186. }
  187. if (!$paymentAttrModel->delete()) {
  188. return json_fail('删除失败!');
  189. }
  190. return json_success('删除成功!');
  191. }
  192. /**
  193. * 支付通道修改
  194. *
  195. * @param ValidatorFactoryInterface $validatorFactory
  196. * @return mixed|PaymentSuccessUidResponse
  197. */
  198. public function paymentUpdate(ValidatorFactoryInterface $validatorFactory)
  199. {
  200. $inputData = $this->getJsonData();
  201. $rules = ['id' => 'required|integer', 'status' => 'nullable|in:1,2', 'name' => 'nullable|string', 'pay_code' => 'nullable|string', 'partner_id' => 'nullable|string'];
  202. $validator = $validatorFactory->make($inputData, $rules);
  203. if ($validator->fails()) {
  204. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  205. return json_fail($validator->errors()->first());
  206. }
  207. $payment = make(OrderRepository::class)->findBy('id', $inputData['id']);
  208. if (empty($payment)) {
  209. return json_fail(trans('common.err_resource_not_found'));
  210. }
  211. $oldPayment = clone $payment;
  212. if (!empty($inputData['status'])) {
  213. $payment->status = $inputData['status'];
  214. }
  215. if (!empty($inputData['name'])) {
  216. $payment->name = $inputData['name'];
  217. }
  218. if (!empty($inputData['pay_code'])) {
  219. $payment->pay_code = $inputData['pay_code'];
  220. }
  221. if (!empty($inputData['partner_id'])) {
  222. $payment->partner_id = $inputData['partner_id'];
  223. }
  224. $result = $payment->save();
  225. if (!$result) {
  226. return json_fail('修改失败');
  227. } else {
  228. $logSubject = '修改一个支付通道,通道名字:' . $payment->name;
  229. $logSvalue = $payment->id;
  230. $logDbData = ['after_items' => [$payment->toArray()], 'before_items' => [$oldPayment->toArray()]];
  231. $this->log($logSubject, $logSvalue, $logDbData);
  232. return new PaymentSuccessUidResponse($payment->id);
  233. }
  234. }
  235. /**
  236. * 通道支付类型列表
  237. *
  238. * @param ValidatorFactoryInterface $validatorFactory
  239. * @return mixed|CommonPagesResponse
  240. */
  241. public function paymentTypeList(ValidatorFactoryInterface $validatorFactory)
  242. {
  243. $inputData = $this->getJsonData();
  244. $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'status' => 'nullable|in:1,2', 'pay_type' => 'nullable|in:1,2,3', 'payment_uid' => 'nullable|string'];
  245. $validator = $validatorFactory->make($inputData, $rules);
  246. if ($validator->fails()) {
  247. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  248. return json_fail($validator->errors()->first());
  249. }
  250. $orders = [['weights', 'DESC']];
  251. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  252. if ($pageSize > 500) {
  253. $pageSize = CommonConstant::PAGE_SIZE;
  254. }
  255. $page = format_page($inputData['page'] ?? 1);
  256. // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate);
  257. $field = ['uid', 'name', 'pay_type', 'payment_attr_uid', 'status', 'created_at', 'updated_at', 'code', 'limit_type', 'limit', 'remark', 'payment_uid', 'belong_device', 'weights'];
  258. $paymentType = make(PaymentTypeRepository::class)->pushCriteria(new PaymentTypeLimitCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
  259. if ($paymentType->isNotEmpty()) {
  260. $payment = make(OrderRepository::class)->getPaymentData(['name', 'uid'])->keyBy('uid');
  261. foreach ($paymentType->items() as &$item) {
  262. $item->paymetn_name = $payment[$item->payment_uid]->name;
  263. }
  264. }
  265. return new CommonPagesResponse($paymentType);
  266. }
  267. /**
  268. * 通道支付类型添加
  269. *
  270. * @param ValidatorFactoryInterface $validatorFactory
  271. * @return mixed|PaymentSuccessUidResponse
  272. */
  273. public function paymentTypeAdd(ValidatorFactoryInterface $validatorFactory)
  274. {
  275. $inputData = $this->getJsonData();
  276. $rules = ['name' => 'required|string', 'code' => 'required|string', 'limit_type' => 'required|integer', 'pay_type' => 'required|in:1,2,3,5', 'limit' => 'required|string', 'weights' => 'required|integer', 'remark' => 'nullable|string', 'belong_device' => 'nullable'];
  277. $validator = $validatorFactory->make($inputData, $rules);
  278. if ($validator->fails()) {
  279. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  280. return json_fail($validator->errors()->first());
  281. }
  282. // 查询数据
  283. $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['code'])->first();
  284. if (!$paymentAttrModel) {
  285. return json_fail('该类型不存在!');
  286. }
  287. $setarr = ['name' => $inputData['name'], 'status' => 2, 'payment_uid' => $paymentAttrModel->pay_code, 'pay_type' => $inputData['pay_type'], 'code' => $paymentAttrModel->code, 'payment_attr_uid' => $paymentAttrModel->uid, 'limit_type' => $inputData['limit_type'], 'limit' => $inputData['limit'], 'weights' => $inputData['weights'], 'remark' => $inputData['remark'], 'belong_device' => $inputData['belong_device'] ?? null];
  288. $result = make(PaymentTypeRepository::class)->create($setarr);
  289. if (!$result) {
  290. return json_fail('创建失败');
  291. } else {
  292. $logSubject = '添加一个通道类型, 名字:' . $inputData['name'];
  293. $logSvalue = $result->id;
  294. $logDbData = ['after_items' => [$result->toArray()], 'before_items' => []];
  295. $this->log($logSubject, $logSvalue, $logDbData);
  296. return new PaymentSuccessUidResponse($result->uid);
  297. }
  298. }
  299. /**
  300. * 通道支付类型修改
  301. *
  302. * @param ValidatorFactoryInterface $validatorFactory
  303. * @return mixed|PaymentSuccessUidResponse
  304. */
  305. public function paymentTypeUpdate(ValidatorFactoryInterface $validatorFactory)
  306. {
  307. $inputData = $this->getJsonData();
  308. $rules = ['name' => "required|string", 'uid' => "required", 'code' => 'required|string', 'limit_type' => 'required|integer', 'pay_type' => 'required|in:1,2,3,5', 'limit' => 'required|string', 'weights' => 'required|integer', 'remark' => 'nullable|string', 'status' => 'nullable|in:1,2', 'belong_device' => 'nullable'];
  309. $validator = $validatorFactory->make($inputData, $rules);
  310. if ($validator->fails()) {
  311. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  312. return json_fail($validator->errors()->first());
  313. }
  314. $paymentType = make(PaymentTypeRepository::class)->findBy('uid', $inputData['uid']);
  315. if (empty($paymentType)) {
  316. return json_fail(trans('common.err_resource_not_found'));
  317. }
  318. $oldPaymentType = clone $paymentType;
  319. if (!empty($inputData['code'])) {
  320. // 查询数据
  321. $paymentAttrModel = PaymentAttrModel::query()->where('uid', $inputData['code'])->first();
  322. if (!$paymentAttrModel) {
  323. return json_fail('该类型不存在!');
  324. }
  325. $paymentType->payment_uid = $paymentAttrModel->pay_code;
  326. $paymentType->code = $paymentAttrModel->code;
  327. $paymentType->payment_attr_uid = $paymentAttrModel->uid;
  328. }
  329. if (!empty($inputData['limit_type'])) {
  330. $paymentType->limit_type = $inputData['limit_type'];
  331. }
  332. if (!empty($inputData['name'])) {
  333. $paymentType->name = $inputData['name'];
  334. }
  335. if (!empty($inputData['pay_type'])) {
  336. $paymentType->pay_type = $inputData['pay_type'];
  337. }
  338. if (!empty($inputData['limit'])) {
  339. $paymentType->limit = $inputData['limit'];
  340. }
  341. if (!empty($inputData['weights'])) {
  342. $paymentType->weights = $inputData['weights'];
  343. }
  344. if (!empty($inputData['remark'])) {
  345. $paymentType->remark = $inputData['remark'];
  346. }
  347. if (!empty($inputData['status'])) {
  348. $paymentType->status = $inputData['status'];
  349. }
  350. if (!empty($inputData['belong_device'])) {
  351. $paymentType->belong_device = $inputData['belong_device'];
  352. } else {
  353. $paymentType->belong_device = null;
  354. }
  355. $result = $paymentType->save();
  356. if (!$result) {
  357. return json_fail('修改失败');
  358. } else {
  359. $logSubject = '修改一个通道类型, 名字:' . $paymentType->name;
  360. $logSvalue = $paymentType->uid;
  361. $logDbData = ['after_items' => [$paymentType->toArray()], 'before_items' => [$oldPaymentType->toArray()]];
  362. $this->log($logSubject, $logSvalue, $logDbData);
  363. make(PaymentService::class)->delPaymentTypeCache();
  364. return new PaymentSuccessUidResponse($paymentType->uid);
  365. }
  366. }
  367. /**
  368. * 通道支付类型删除
  369. *
  370. * @param ValidatorFactoryInterface $validatorFactory
  371. * @return mixed|PaymentSuccessUidResponse
  372. */
  373. public function paymentTypeDelete(ValidatorFactoryInterface $validatorFactory)
  374. {
  375. $inputData = $this->getJsonData();
  376. $rules = ['uid' => 'required|string'];
  377. $validator = $validatorFactory->make($inputData, $rules);
  378. if ($validator->fails()) {
  379. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  380. return json_fail($validator->errors()->first());
  381. }
  382. $paymentType = make(PaymentTypeRepository::class)->findBy('uid', $inputData['uid']);
  383. if (empty($paymentType)) {
  384. return json_fail(trans('common.err_resource_not_found'));
  385. }
  386. $oldManagerType = clone $paymentType;
  387. $result = $paymentType->delete();
  388. if (!$result) {
  389. return json_fail('删除失败');
  390. } else {
  391. $logSubject = '删除一个通道类型,名字:' . $paymentType->name;
  392. $logSvalue = $oldManagerType->manager_id;
  393. $logDbData = ['after_items' => [], 'before_items' => [$oldManagerType->toArray()]];
  394. $this->log($logSubject, $logSvalue, $logDbData);
  395. make(PaymentService::class)->delPaymentTypeCache();
  396. return new PaymentSuccessUidResponse($inputData['uid']);
  397. }
  398. }
  399. /**
  400. * 通道下拉
  401. *
  402. * @return CommonPagesResponse
  403. */
  404. public function paymentDown()
  405. {
  406. $payment = make(OrderRepository::class)->getPaymentData(['name', 'uid'])->keyBy('uid');
  407. return new CommonPagesResponse($payment);
  408. }
  409. }