wang hou sheng 1 year ago
parent 8a35cbe224
commit 99646970b0
  1. 128
      app/api/controller/Wholesaler.php
  2. 27
      app/api/model/wholesaler/Apply.php
  3. 48
      app/api/model/wholesaler/Order.php
  4. 13
      app/api/model/wholesaler/Set.php
  5. 9
      app/api/service/Notify.php
  6. 349
      app/api/service/wholesaler/PaySuccess.php
  7. 299
      app/api/service/wholesaler/Payment.php
  8. 104
      app/api/service/wholesaler/Wholesaler.php
  9. 7
      app/common/enum/OrderType.php
  10. 9
      app/common/enum/user/balanceLog/Scene.php
  11. 19
      app/common/model/wholesaler/Apply.php
  12. 19
      app/common/model/wholesaler/Order.php
  13. 25
      app/common/model/wholesaler/Set.php
  14. 5
      app/store/controller/User.php
  15. 39
      app/store/controller/wholesaler/Set.php
  16. 31
      app/store/model/wholesaler/Set.php

@ -0,0 +1,128 @@
<?php
namespace app\api\controller;
use app\api\model\wholesaler\Set;
use cores\exception\BaseException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\response\Json;
class Wholesaler extends Controller
{
/**
* @notes:
* @return Json
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author: wanghousheng
*/
public function price(): Json
{
$client = $this->request->post('client');
if (!$client) {
return $this->renderError('客户端不能为空');
}
$model = new \app\api\service\wholesaler\Wholesaler();
$list = $model->setClient($client)->center();
return $this->renderSuccess($list);
}
/**
* @notes:创建订单并支付
* @return Json
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author: wanghousheng
*/
public function submit(): Json
{
$method = $this->request->post('method');
if (!$method) {
return $this->renderError('支付方式不能为空');
}
$client = $this->request->post('client');
if (!$client) {
return $this->renderError('客户端不能为空');
}
$priceInfo = Set::detail();
if ($priceInfo->isEmpty()) {
return $this->renderError('后台价格未设置');
}
$priceInfo = $priceInfo->toArray();
$username = $this->request->post('username');
if (!$username) {
return $this->renderError('姓名不能为空');
}
$mobile = $this->request->post('mobile');
if (!$mobile) {
return $this->renderError('手机号不能为空');
}
$mobile_code = $this->request->post('mobile_code');
if (!$mobile_code) {
return $this->renderError('手机号验证码不能为空');
}
// 验证短信验证码是否匹配
// try {
// CaptchaApi::checkSms($mobile_code, $mobile);
// } catch (Exception $e) {
// return $this->renderError($e->getMessage() ?: '短信验证码不正确');
// }
$card_front_img_id = intval($this->request->post('card_front_img_id'));
if (!$card_front_img_id) {
return $this->renderError('身份证正面不能为空');
}
$card_back_img_id = intval($this->request->post('card_back_img_id'));
if (!$card_back_img_id) {
return $this->renderError('身份证反面不能为空');
}
$license_img_id = intval($this->request->post('license_img_id'));
if (!$license_img_id) {
return $this->renderError('营业执照不能为空');
}
$card_no = $this->request->post('card_no');
if (!$card_no) {
return $this->renderError('身份证号不能为空');
}
$door_img_id = intval($this->request->post('door_img_id'));
if (!$door_img_id) {
return $this->renderError('门口照片不能为空');
}
$province_id = intval($this->request->post('province_id'));
if (!$province_id) {
return $this->renderError('省份不能为空');
}
$city_id = intval($this->request->post('city_id'));
if (!$city_id) {
return $this->renderError('城市不能为空');
}
$company_name = $this->request->post('company_name');
if (!$company_name) {
return $this->renderError('公司名称不能为空');
}
$credit_code = $this->request->post('credit_code');
if (!$credit_code) {
return $this->renderError('社会信用代码不能为空');
}
$business = $this->request->post('business');
if (!$business) {
return $this->renderError('经营类目不能为空');
}
$data = compact('company_name', 'credit_code', 'city_id', 'province_id', 'door_img_id', 'business', 'card_no');
$data = array_merge($data, compact('username', 'mobile', 'card_back_img_id', 'card_front_img_id', 'license_img_id'));
$data['total_price'] = $priceInfo['price'];
$data['pay_price'] = $priceInfo['price'];
$data['year'] = $priceInfo['year'];
$service = new \app\api\service\wholesaler\Wholesaler();
$data = $service->setMethod($method)
->setClient($client)
->orderPay($data);
return $this->renderSuccess($data, $service->getMessage() ?: '申请成功');
}
}

@ -0,0 +1,27 @@
<?php
namespace app\api\model\wholesaler;
class Apply extends \app\common\model\wholesaler\Apply
{
/**
* 隐藏字段
* @var array
*/
protected $hidden = [
'create_time',
'update_time',
'store_id',
];
/**
* @notes:创建订单
* @param array $data
* @return bool
* @author: wanghousheng
*/
public function add(array $data): bool
{
return $this->save($data);
}
}

@ -0,0 +1,48 @@
<?php
namespace app\api\model\wholesaler;
use app\api\service\User as UserService;
use app\common\service\Order as OrderService;
use cores\exception\BaseException;
class Order extends \app\common\model\wholesaler\Order
{
/**
* 隐藏字段
* @var array
*/
protected $hidden = [
'create_time',
'update_time',
'store_id',
];
/**
* @notes:创建订单
* @param array $data
* @return bool
* @throws BaseException
* @author: wanghousheng
*/
public function createOrder(array $data): bool
{
$arr = [
'user_id' => UserService::getCurrentLoginUserId(),
'order_no' => OrderService::createOrderNo(),
'store_id' => self::$storeId,
];
$data = array_merge($arr, $data);
return $this->save($data);
}
/**
* 获取订单详情 (待付款状态)
* @param string $orderNo 订单号
* @return \app\common\model\wholesaler\Order|array|null
*/
public static function getPayDetail(string $orderNo)
{
return self::detail(['order_no' => $orderNo]);
}
}

@ -0,0 +1,13 @@
<?php
namespace app\api\model\wholesaler;
class Set extends \app\common\model\wholesaler\Set
{
protected $hidden = [
'create_time',
'update_time',
'store_id',
'id',
];
}

@ -173,6 +173,15 @@ class Notify
->setPaymentData($paymentData)
->handle();
}
// 订单支付成功业务处理 (开通采购商)
if ($tradeInfo['order_type'] == OrderTypeEnum::WHOLESALER) {
$service = new wholesaler\PaySuccess();
$service->setOrderNo($tradeInfo['order_no'])
->setMethod($tradeInfo['pay_method'])
->setTradeId($tradeInfo['trade_id'])
->setPaymentData($paymentData)
->handle();
}
Log::append('Notify-orderPaySucces', ['message' => '订单支付成功']);
} catch (\Throwable $e) {
// 记录错误日志

@ -0,0 +1,349 @@
<?php
namespace app\api\service\wholesaler;
use app\api\model\PaymentTrade as PaymentTradeModel;
use app\api\model\User as UserModel;
use app\api\model\user\BalanceLog as BalanceLogModel;
use app\api\model\wholesaler\Apply;
use app\api\model\wholesaler\Order;
use app\common\enum\order\PayStatus;
use app\common\enum\payment\Method as PaymentMethodEnum;
use app\common\enum\recharge\order\PayStatus as PayStatusEnum;
use app\common\enum\user\balanceLog\Scene as SceneEnum;
use app\common\library\Lock;
use app\common\library\Log;
use app\common\service\BaseService;
use cores\exception\BaseException;
class PaySuccess extends BaseService
{
// 当前订单信息
public Order $orderInfo;
// 当前用户信息
private UserModel $userInfo;
// 当前订单号
private string $orderNo;
// 当前订单ID
private int $orderId;
// 订单支付方式
private string $method;
// 第三方交易记录ID
private ?int $tradeId = null;
// 第三方支付成功返回的数据
private array $paymentData = [];
/**
* 设置支付的订单ID
* @param int $orderId 订单ID
*/
public function setOrderId(int $orderId): PaySuccess
{
$this->orderId = $orderId;
return $this;
}
/**
* 设置当前的订单号
* @param string $orderNo
* @return $this
*/
public function setOrderNo(string $orderNo): PaySuccess
{
$this->orderNo = $orderNo;
return $this;
}
/**
* 设置订单支付方式
* @param string $method
* @return $this
*/
public function setMethod(string $method): PaySuccess
{
$this->method = $method;
return $this;
}
/**
* 第三方支付交易记录ID
* @param int|null $tradeId
* @return $this
*/
public function setTradeId(?int $tradeId = null): PaySuccess
{
$this->tradeId = $tradeId;
return $this;
}
/**
* 第三方支付成功返回的数据
* @param array $paymentData
* @return $this
*/
public function setPaymentData(array $paymentData): PaySuccess
{
$this->paymentData = $paymentData;
return $this;
}
/**
* 订单支付成功业务处理
* @return bool
* @throws BaseException
*/
public function handle(): bool
{
// 验证当前参数是否合法
$this->verifyParameters();
// 当前订单开启并发锁
$this->lockUp();
// 验证当前订单是否允许支付
if ($this->checkOrderStatusOnPay()) {
// 更新订单状态为已付款
$this->updatePayStatus();
}
// 当前订单解除并发锁
$this->unLock();
return true;
}
/**
* 订单模型
* @return Order|null
* @throws BaseException
*/
private function orderModel(): ?Order
{
return $this->getOrderInfo();
}
/**
* 订单已付款事件
* @return void
* @throws BaseException
*/
private function updatePayStatus(): void
{
// 记录日志
Log::append('PaySuccess --updatePayStatus', ['title' => '订单已付款事件']);
// 当前订单信息
$orderInfo = $this->getOrderInfo();
// 事务处理
$this->orderModel()->transaction(function () use ($orderInfo) {
// 更新订单状态
$this->updateOrderStatus();
// 累积用户总消费金额
UserModel::setIncPayMoney($orderInfo['user_id'], (float)$orderInfo['pay_price']);
// 记录订单支付信息
$this->updatePayInfo();
//添加申请记录
$this->apply();
});
}
/**
* 记录订单支付的信息
* @throws BaseException
*/
private function updatePayInfo()
{
// 当前订单信息
$orderInfo = $this->getOrderInfo();
// 余额支付
if ($this->method == PaymentMethodEnum::BALANCE) {
// 更新用户余额
UserModel::setDecBalance((int)$orderInfo['user_id'], (float)$orderInfo['pay_price']);
// 新增余额变动记录
BalanceLogModel::add(SceneEnum::WHOLESALER, [
'user_id' => (int)$orderInfo['user_id'],
'money' => -$orderInfo['pay_price'],
], ['order_no' => $orderInfo['order_no']]);
}
// 将第三方交易记录更新为已支付状态
if (in_array($this->method, [PaymentMethodEnum::WECHAT, PaymentMethodEnum::ALIPAY])) {
$this->updateTradeRecord();
}
}
/**
* 将第三方交易记录更新为已支付状态
*/
private function updateTradeRecord()
{
if ($this->tradeId && !empty($this->paymentData)) {
PaymentTradeModel::updateToPaySuccess($this->tradeId, $this->paymentData['tradeNo']);
}
}
/**
* 更新订单状态
* @throws BaseException
*/
private function updateOrderStatus(): void
{
// 更新订单状态
$this->orderModel()->save([
'pay_method' => $this->method,
'pay_status' => PayStatus::SUCCESS,
'pay_time' => time(),
'trade_id' => $this->tradeId ?: 0,
]);
}
/**
* 获取买家用户信息
* @return UserModel|array|null
* @throws BaseException
*/
private function getUserInfo()
{
if (empty($this->userInfo)) {
$this->userInfo = UserModel::detail($this->getOrderInfo()['user_id']);
}
if (empty($this->userInfo)) {
throwError('未找到买家用户信息');
}
return $this->userInfo;
}
/**
* 验证当前参数是否合法
* @throws BaseException
*/
private function verifyParameters()
{
if (empty($this->orderNo)) {
throwError('orderNo not found');
}
if (empty($this->method)) {
throwError('method not found');
}
if ($this->tradeId) {
empty($this->paymentData) && throwError('PaymentData not found');
!isset($this->paymentData['tradeNo']) && throwError('PaymentData not found');
}
// 记录日志
Log::append('PaySuccess', [
'orderNo' => $this->orderNo, 'method' => $this->method,
'tradeId' => $this->tradeId, 'paymentData' => $this->paymentData
]);
}
/**
* 验证当前订单是否允许支付
* @return bool
* @throws BaseException
*/
private function checkOrderStatusOnPay(): bool
{
// 当前订单信息
$orderInfo = $this->getOrderInfo();
// 验证余额支付时用户余额是否满足
if ($this->method == PaymentMethodEnum::BALANCE) {
if ($this->getUserInfo()['balance'] < $orderInfo['pay_price']) {
throwError('账户余额不足,无法使用余额支付');
}
}
// 检查订单状态是否为已支付
if ($orderInfo['pay_status'] == PayStatusEnum::SUCCESS) {
$this->onOrderPaid();
return false;
}
return true;
}
/**
* 处理订单已支付的情况
* @throws BaseException
*/
private function onOrderPaid()
{
// 记录日志
Log::append('PaySuccess --onOrderPaid', ['title' => '处理订单已支付的情况']);
// 当前订单信息
$orderInfo = $this->getOrderInfo();
// 余额支付直接返回错误信息
if ($this->method == PaymentMethodEnum::BALANCE) {
throwError('当前订单已支付,无需重复支付');
}
// 第三方支付判断是否为重复下单 (因异步回调可能存在网络延迟的原因,在并发的情况下会出现同时付款两次,这里需要容错)
// 如果订单记录中已存在tradeId并且和当前支付的tradeId不一致, 那么判断为重复的订单, 需进行退款处理
if ($this->tradeId > 0 && $orderInfo['trade_id'] != $this->tradeId) {
// 执行原路退款
throwError('当前订单异常');
}
}
/**
* 获取当前订单的详情信息
* @return Order|null
* @throws BaseException
*/
private function getOrderInfo(): ?Order
{
// 获取订单详情 (待支付状态)
if (empty($this->orderInfo)) {
$this->orderInfo = Order::getPayDetail($this->orderNo);
}
// 判断订单是否存在
if (empty($this->orderInfo)) {
throwError('未找到该订单信息');
}
return $this->orderInfo;
}
/**
* 订单锁:防止并发导致重复支付
* @throws BaseException
*/
private function lockUp()
{
$orderInfo = $this->getOrderInfo();
Lock::lockUp("OrderPaySuccess_{$orderInfo['order_id']}");
}
/**
* 订单锁:防止并发导致重复支付
* @throws BaseException
*/
private function unLock()
{
$orderInfo = $this->getOrderInfo();
Lock::unLock("OrderPaySuccess_{$orderInfo['order_id']}");
}
private function apply(): void
{
$orderInfo = $this->orderInfo;
$add['order_id'] = $orderInfo['order_id'];
$add['year'] = $orderInfo['year'];
$add['store_id'] = $orderInfo['store_id'];
$add['username'] = $orderInfo['username'];
$add['mobile'] = $orderInfo['mobile'];
$add['card_front_img_id'] = $orderInfo['card_front_img_id'];
$add['card_back_img_id'] = $orderInfo['card_back_img_id'];
$add['license_img_id'] = $orderInfo['license_img_id'];
$add['card_no'] = $orderInfo['card_no'];
$add['province_id'] = $orderInfo['province_id'];
$add['door_img_id'] = $orderInfo['door_img_id'];
$add['city_id'] = $orderInfo['city_id'];
$add['company_name'] = $orderInfo['company_name'];
$add['credit_code'] = $orderInfo['credit_code'];
$add['business'] = $orderInfo['business'];
$add['user_id'] = $orderInfo['user_id'];
$info = Apply::detail(['user_id' => $orderInfo['user_id']]);
if (empty($info->id)) {
(new Apply())->add($add);
} else {
$add['status'] = 10;
(new Apply())->where(['user_id' => $orderInfo['user_id']])->update($add);
}
}
}

@ -0,0 +1,299 @@
<?php
namespace app\api\service\wholesaler;
use app\api\model\Payment as PaymentModel;
use app\api\model\PaymentTrade as PaymentTradeModel;
use app\api\model\wholesaler\Order;
use app\api\service\Order as OrderService;
use app\api\service\User as UserService;
use app\common\enum\Client as ClientEnum;
use app\common\enum\OrderType as OrderTypeEnum;
use app\common\enum\payment\Method as PaymentMethodEnum;
use app\common\library\payment\Facade as PaymentFacade;
use app\common\service\BaseService;
use cores\exception\BaseException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
class Payment extends BaseService
{
// 提示信息
private string $message = '';
// 订单信息
private Order $orderInfo;
// 支付方式 (微信支付、支付宝,余额)
private string $method = '';
// 下单的客户端
private string $client = '';
/**
* 设置当前支付方式
* @param string $method 支付方式
* @return $this
*/
public function setMethod(string $method): Payment
{
$this->method = $method;
return $this;
}
/**
* 设置下单的客户端
* @param string $client 客户端
* @return $this
*/
public function setClient(string $client): Payment
{
$this->client = $client;
return $this;
}
/**
* 确认订单支付事件
* @param array $extra 附加数据
* @return array[]
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function orderPay(array $data, array $extra = []): array
{
// 创建订单信息
$this->orderInfo = $this->createOrder($data);
// 订单支付事件
$this->orderPayEvent();
// 构建第三方支付请求的参数
$payment = $this->unifiedorder($extra);
$this->recordPaymentTrade($payment);
// 返回结果
return compact('payment');
}
/**
* 记录第三方交易信息
* @param array $payment 第三方支付数据
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
private function recordPaymentTrade(array $payment): void
{
if ($this->method != PaymentMethodEnum::BALANCE) {
PaymentTradeModel::record(
$this->orderInfo,
$this->method,
$this->client,
OrderTypeEnum::WHOLESALER,
$payment
);
}
}
/**
* 返回消息提示
* @return string
*/
public function getMessage(): string
{
return $this->message;
}
/**
* 获取支付方式的配置信息
* @return mixed
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
private function getPaymentConfig()
{
$PaymentModel = new PaymentModel;
$templateInfo = $PaymentModel->getPaymentInfo($this->method, $this->client, $this->getStoreId());
return $templateInfo['template']['config'][$this->method];
}
/**
* 构建第三方支付请求的参数
* @param array $extra 附加数据
* @return array
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
private function unifiedorder(array $extra = []): array
{
// 判断支付方式是否合法
if (!in_array($this->method, [PaymentMethodEnum::WECHAT, PaymentMethodEnum::ALIPAY])) {
return [];
}
// 生成第三方交易订单号 (并非主订单号)
$outTradeNo = OrderService::createOrderNo();
// 获取支付方式的配置信息
$options = $this->getPaymentConfig();
// 整理下单接口所需的附加数据
$extra = $this->extraAsUnify($extra);
// 构建支付模块
$Payment = PaymentFacade::store($this->method)->setOptions($options, $this->client);
// 执行第三方支付下单API
if (!$Payment->unify($outTradeNo, (string)$this->orderInfo['pay_price'], $extra)) {
throwError('第三方支付下单API调用失败');
}
// 返回客户端需要的支付参数
return $Payment->getUnifyResult();
}
/**
* 整理下单接口所需的附加数据
* @param array $extra
* @return array
* @throws BaseException
*/
private function extraAsUnify(array $extra = []): array
{
// 微信支付时需要的附加数据
if ($this->method === PaymentMethodEnum::WECHAT) {
// 微信小程序端和微信公众号端需要openid
if (in_array($this->client, [ClientEnum::WXOFFICIAL, ClientEnum::MP_WEIXIN])) {
$extra['openid'] = $this->getWechatOpenid();
}
}
// 支付宝支付时需要的附加数据
if ($this->method === PaymentMethodEnum::ALIPAY) {
// 支付宝小程序端需要buyerId
if ($this->client == ClientEnum::MP_ALIPAY) {
$extra['buyerId'] = $this->getAlipayBuyerId();
}
}
return $extra;
}
/**
* 获取微信端的用户openid(仅微信小程序和微信公众号)
* @return null
* @throws BaseException
*/
private function getWechatOpenid()
{
if (in_array($this->client, [ClientEnum::MP_WEIXIN, ClientEnum::WXOFFICIAL])) {
// 当前登录用户信息
$useInfo = UserService::getCurrentLoginUser(true);
if (!$useInfo['currentOauth'] || empty($useInfo['currentOauth']['oauth_id'])) {
throwError('很抱歉,您当前不存在openid 无法发起微信支付');
}
// 当前第三方用户标识
return $useInfo['currentOauth']['oauth_id'];
}
return null;
}
/**
* 订单支付事件
* @return void
* @throws BaseException
* @author: wanghousheng
*/
private function orderPayEvent(): void
{
// 余额支付
if ($this->method == PaymentMethodEnum::BALANCE) {
$this->orderPaySuccess($this->orderInfo['order_no']);
}
}
/**
* 订单支付成功事件
* @param string $orderNo 当前订单号
* @param int|null $tradeId
* @param array $paymentData
* @return void
* @throws BaseException
* @author: wanghousheng
*/
private function orderPaySuccess(string $orderNo, ?int $tradeId = null, array $paymentData = []): void
{
$service = new PaySuccess();
// 订单支付成功业务处理
$service->setOrderNo($orderNo)
->setMethod($this->method)
->setTradeId($tradeId)
->setPaymentData($paymentData);
if (!$service->handle()) {
throwError($service->getError() ?: '申请失败');
}
$this->message = '恭喜您,申请成功';
}
/**
* 查询订单是否支付成功 (仅限第三方支付订单)
* @param string $outTradeNo 商户订单号
* @return bool
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function tradeQuery(string $outTradeNo): bool
{
// 获取支付方式的配置信息
$options = $this->getPaymentConfig();
// 构建支付模块
$Payment = PaymentFacade::store($this->method)->setOptions($options, $this->client);
// 执行第三方支付查询API
$result = $Payment->tradeQuery($outTradeNo);
// 订单支付成功事件
if (!empty($result) && $result['paySuccess']) {
// 获取第三方交易记录信息
$tradeInfo = PaymentTradeModel::detailByOutTradeNo($outTradeNo);
// 订单支付成功事件
$this->orderPaySuccess($tradeInfo['order_no'], $tradeInfo['trade_id'], $result);
}
// 返回订单状态
return $result ? $result['paySuccess'] : false;
}
/**
* 获取支付宝端的用户buyerId(仅支付宝小程序端)
* @return null
* @throws BaseException
*/
private function getAlipayBuyerId()
{
if ($this->client == ClientEnum::MP_ALIPAY) {
// 当前登录用户信息
$useInfo = UserService::getCurrentLoginUser(true);
if (!$useInfo['currentOauth'] || empty($useInfo['currentOauth']['oauth_id'])) {
throwError('很抱歉,您当前不存在buyerId 无法发起支付宝支付');
}
// 当前第三方用户标识
return $useInfo['currentOauth']['oauth_id'];
}
return null;
}
/**
* 创建订单
* @param array $data
* @return Order
* @throws BaseException
*/
private function createOrder(array $data): Order
{
$model = new Order();
if (!$model->createOrder($data)) {
throwError($model->getError() ?: '创建订单失败');
}
$model['order_id'] = (int)$model['order_id'];
return $model;
}
}

@ -0,0 +1,104 @@
<?php
namespace app\api\service\wholesaler;
use app\api\model\Payment as PaymentModel;
use app\api\model\wholesaler\Set;
use app\api\service\User as UserService;
use app\common\service\BaseService;
use cores\exception\BaseException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
class Wholesaler extends BaseService
{
// 提示信息
private string $message = '';
// 支付方式 (微信支付、支付宝、余额)
private string $method;
// 下单的客户端
private string $client;
/**
* 设置当前支付方式
* @param string $method 支付方式
* @return $this
*/
public function setMethod(string $method): Wholesaler
{
$this->method = $method;
return $this;
}
/**
* 设置下单的客户端
* @param string $client 客户端
* @return $this
*/
public function setClient(string $client): Wholesaler
{
$this->client = $client;
return $this;
}
/**
* 开通批发商页面数据
* @return array
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function center(): array
{
// 当期用户信息
$userInfo = UserService::getCurrentLoginUser(true);
// 获取充值方案列表
$info = Set::detail();
if (!$info->isEmpty()) {
$info = $info->toArray();
}
//计算优惠价格
// 根据指定客户端获取可用的支付方式
$PaymentModel = new PaymentModel;
$methods = $PaymentModel->getMethodsByClient($this->client);
// 返回数据
return [
'personal' => $userInfo,
'info' => $info,
'paymentMethods' => $methods
];
}
/**
* 确认订单支付事件
* @param array $data
* @param array $extra 附加数据
* @return array[]
* @throws BaseException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function orderPay(array $data, array $extra = []): array
{
$PaymentService = new Payment();
$result = $PaymentService->setMethod($this->method)
->setClient($this->client)
->orderPay($data, $extra);
$this->message = $PaymentService->getMessage();
return $result;
}
/**
* 返回消息提示
* @return string
*/
public function getMessage(): string
{
return $this->message;
}
}

@ -34,6 +34,9 @@ class OrderType extends EnumBasics
// 回收订单
const RECOVERY = 50;
// 回收订单
const WHOLESALER = 60;
// 余额充值订单
const RECHARGE = 100;
@ -68,6 +71,10 @@ class OrderType extends EnumBasics
self::DEALER => [
'name' => '开通分销订单',
'value' => self::DEALER,
],
self::WHOLESALER => [
'name' => '开通采购商订单',
'value' => self::WHOLESALER,
]
];
}

@ -39,6 +39,9 @@ class Scene extends EnumBasics
//开通会员
const MEMBER = 80;
//开通采购商
const WHOLESALER = 90;
/**
* 获取订单类型值
* @return array
@ -75,8 +78,12 @@ class Scene extends EnumBasics
'name' => '开通会员',
'value' => self::MEMBER,
'describe' => '开通会员:%s',
],
self::WHOLESALER => [
'name' => '开通采购商',
'value' => self::WHOLESALER,
'describe' => '开通采购商:%s',
]
];
}
}

@ -0,0 +1,19 @@
<?php
namespace app\common\model\wholesaler;
use cores\BaseModel;
class Apply extends BaseModel
{
// 定义表名
protected $name = 'wholesaler_apply';
// 定义主键
protected $pk = 'id';
public static function detail($where)
{
return self::get($where);
}
}

@ -0,0 +1,19 @@
<?php
namespace app\common\model\wholesaler;
use cores\BaseModel;
class Order extends BaseModel
{
// 定义表名
protected $name = 'wholesaler_order';
// 定义主键
protected $pk = 'order_id';
public static function detail($where)
{
return self::get($where);
}
}

@ -0,0 +1,25 @@
<?php
namespace app\common\model\wholesaler;
use cores\BaseModel;
class Set extends BaseModel
{
// 定义表名
protected $name = 'wholesaler_set';
// 定义主键
protected $pk = 'id';
/**
* @notes:详情
* @return static|array|null
* @author: wanghousheng
*/
public static function detail()
{
return static::get([]);
}
}

@ -13,6 +13,7 @@ declare (strict_types=1);
namespace app\store\controller;
use app\store\model\User as UserModel;
use think\db\exception\DbException;
use think\response\Json;
/**
@ -25,7 +26,7 @@ class User extends Controller
/**
* 用户列表
* @return Json
* @throws \think\db\exception\DbException
* @throws DbException
*/
public function list(): Json
{
@ -60,7 +61,7 @@ class User extends Controller
{
// 用户详情
$model = UserModel::detail($userId);
if ((new UserModel())->recharge($target, $this->postForm())) {
if ($model->recharge($target, $this->postForm())) {
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');

@ -0,0 +1,39 @@
<?php
namespace app\store\controller\wholesaler;
use app\common\library\helper;
use app\store\controller\Controller;
use think\response\Json;
class Set extends Controller
{
public function info(): Json
{
$info = \app\store\model\wholesaler\Set::detail();
return $this->renderSuccess(compact('info'));
}
public function setData(): Json
{
$price = helper::number2($this->request->post('price'));
if ($price <= 0) {
return $this->renderError('价格不能为空');
}
$year = intval($this->request->post('year'));
if ($year <= 0) {
return $this->renderError('年限不能为空');
}
$info = \app\store\model\wholesaler\Set::detail();
$model = new \app\store\model\wholesaler\Set();
if (!empty($info->id)) {
$res = $model->edit(compact('price', 'year'));
} else {
$res = $model->add(compact('price', 'year'));
}
if ($res) {
return $this->renderSuccess('操作成功');
}
return $this->renderError('操作失败');
}
}

@ -0,0 +1,31 @@
<?php
namespace app\store\model\wholesaler;
class Set extends \app\common\model\wholesaler\Set
{
/**
* @notes:新增
* @param $data
* @return bool
* @author: wanghousheng
*/
public function add($data): bool
{
$data['store_id'] = self::$storeId;
return $this->save($data);
}
/**
* @notes:编辑
* @param $data
* @return bool
* @author: wanghousheng
*/
public function edit($data): bool
{
return $this->update($data) != false;
}
}
Loading…
Cancel
Save