| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <?php
- declare(strict_types=1);
- namespace SixShop\WechatPay\Entity;
- use SixShop\Core\Entity\BaseEntity;
- use SixShop\WechatPay\Enum\TransferBillStatusEnum;
- use SixShop\WechatPay\Event\TransferBillFailedEvent;
- use SixShop\WechatPay\Event\TrasferSceneReportEvent;
- use SixShop\WechatPay\Trait\ApiTrait;
- use think\facade\Db;
- use think\facade\Event;
- use think\Model;
- use think\Paginator;
- use function SixShop\Core\throw_logic_exception;
- /**
- * @mixin \SixShop\WechatPay\Model\WechatpayTransferBillModel
- */
- class WechatpayTransferBillEntity extends BaseEntity
- {
- use ApiTrait;
- public function getTransferBillList(array $params, array $page): Paginator
- {
- $query = $this->withSearch(['state', 'out_bill_no'], $params);
- return $query->append(['state_text'])->order('id', 'desc')->paginate($page);
- }
- public function getTransferBillStats(array $params): array
- {
- return $this->field('state, count(*) as count, sum(transfer_amount) as amount')
- ->group('state')
- ->select()
- ->toArray();
- }
- public function refreshTransferBill(int $id): array
- {
- // TODO 刷新转账单状态
- return $this->find($id)->toArray();
- }
- public function approveTransferBill(int $id): self
- {
- $transferBill = $this->findOrEmpty($id);
- if ($transferBill->isEmpty()) {
- throw new Exception('提现单不存在');
- }
- if ($transferBill->state !== TransferBillStatusEnum::APPLYING) {
- throw_logic_exception('非法操作');
- }
- // 转账场景报备信息
- $event = new TrasferSceneReportEvent($transferBill);
- Event::trigger($event);
- $result = $this->tranceferBill(
- outBillNo: $transferBill->out_bill_no,
- transferSceneId:$event->getTransferSceneId(),
- openid: $transferBill->openid,
- transferAmount: $transferBill->transfer_amount,
- transferRemark: $transferBill->transfer_remark,
- transferScenceReportInfos: $event->getTransferSceneReportInfos(),
- userName: $transferBill->user_name,
- userRecvPerception: $event->getUserRecvPerception(),
- );
- $transferBill->transfer_scene_id = $event->getTransferSceneId();
- $transferBill->user_recv_perception = $event->getUserRecvPerception();
- $transferBill->transfer_bill_no = $result->transfer_bill_no;
- $datetime = new \DateTime($result->create_time);
- $transferBill->accept_time = $datetime->format('Y-m-d H:i:s');
- $transferBill->state = $result->state;
- $transferBill->package_info = $result->package_info;
- $transferBill->save();
- return $transferBill;
- }
- public function rejectTransferBill(int $id, string $failReason): self
- {
- $transferBill = $this->findOrEmpty($id);
- if ($transferBill->isEmpty()) {
- throw new Exception('提现单不存在');
- }
- if ($transferBill->state !== TransferBillStatusEnum::APPLYING) {
- throw_logic_exception('非法操作');
- }
- $transferBill->state = TransferBillStatusEnum::FAIL;
- $transferBill->fail_reason = $failReason;
- Db::transaction(function () use ($transferBill) {
- $transferBill->save();
- Event::trigger(new TransferBillFailedEvent($transferBill->id));
- });
- return $transferBill;
- }
- }
|