Browse Source

Merge branch 'phoenix' of http://120.24.33.109:11081/hyzjshwo/lanzu_api_hyperf into phoenix

master
Lemon 6 years ago
parent
commit
30d0ead80a
  1. 2
      app/Constants/v3/ErrorCode.php
  2. 5
      app/Constants/v3/SmsTemplateCode.php
  3. 10
      app/Constants/v3/SsdbKeys.php
  4. 5
      app/Controller/TestController.php
  5. 29
      app/Controller/v3/HomeController.php
  6. 33
      app/Controller/v3/NotifyController.php
  7. 2
      app/Controller/v3/WithdrawController.php
  8. 40
      app/JsonRpc/OrderService.php
  9. 4
      app/Model/v3/FinancialRecord.php
  10. 171
      app/Service/v3/Implementations/BadgeService.php
  11. 62
      app/Service/v3/Implementations/FinancialRecordService.php
  12. 28
      app/Service/v3/Implementations/OrderListService.php
  13. 2
      app/Service/v3/Implementations/OrderOfflineService.php
  14. 39
      app/Service/v3/Implementations/OrderOnlineService.php
  15. 25
      app/Service/v3/Implementations/PaymentService.php
  16. 21
      app/Service/v3/Implementations/SmsAliSendService.php
  17. 69
      app/Service/v3/Implementations/SmsAliService.php
  18. 64
      app/Service/v3/Interfaces/BadgeServiceInterface.php
  19. 23
      app/Service/v3/Interfaces/FinancialRecordServiceInterface.php
  20. 2
      app/Service/v3/Interfaces/OrderOfflineServiceInterface.php
  21. 4
      app/Service/v3/Interfaces/SmsSendServiceInterface.php
  22. 9
      app/Service/v3/Interfaces/SmsServiceInterface.php
  23. 3
      config/autoload/dependencies.php

2
app/Constants/v3/ErrorCode.php

@ -88,7 +88,7 @@ class ErrorCode extends AbstractConstants
/************************************/ /************************************/
/** /**
* @Message("支付失败")
* @Message("提现支付失败")
*/ */
const PAYMENT_FAIL = 651; const PAYMENT_FAIL = 651;

5
app/Constants/v3/SmsTemplateCode.php

@ -14,4 +14,9 @@ class SmsTemplateCode extends AbstractConstants
* @Message("短信验证码") * @Message("短信验证码")
*/ */
const ALI_VERIFY_CODE = 'SMS_201650612'; const ALI_VERIFY_CODE = 'SMS_201650612';
/**
* @Message("社区服务点奖励流水")
*/
const ALI_COMMUNITY_FINANCIAL = 'SMS_200690862';
} }

10
app/Constants/v3/SsdbKeys.php

@ -25,16 +25,6 @@ class SsdbKeys extends AbstractConstants
*/ */
const STORE_MONTH_SALES = 'store_m_sales_'; const STORE_MONTH_SALES = 'store_m_sales_';
/**
* @Message("用户新订单统计")
*/
const USER_ORDER_BADGE = 'user_order_badge_';
/**
* @Message("店铺新订单统计")
*/
const STORE_ORDER_BADGE = 'store_order_badge_';
/** /**
* @Message("收藏店铺") * @Message("收藏店铺")
*/ */

5
app/Controller/TestController.php

@ -238,11 +238,6 @@ class TestController extends AbstractController
$res = $this->financialService->userByOLOrderRefund($orderMain->user_id, $orderMain->global_order_id, $orderMain->money); $res = $this->financialService->userByOLOrderRefund($orderMain->user_id, $orderMain->global_order_id, $orderMain->money);
var_dump('financialService', $res); var_dump('financialService', $res);
// 记录badge
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$res = $ssdb->exec('hincr', SsdbKeys::USER_ORDER_BADGE.$orderMain->user_id, 'refund', 1);
var_dump('$ssdb', $res);
} }
public function index2(RequestInterface $request) public function index2(RequestInterface $request)

29
app/Controller/v3/HomeController.php

@ -13,6 +13,7 @@ use App\Model\v3\FinancialRecord;
use App\Request\v3\StoreIndexRequest; use App\Request\v3\StoreIndexRequest;
use App\Request\v3\UserIndexRequest; use App\Request\v3\UserIndexRequest;
use App\Service\v3\Interfaces\ActivityServiceInterface; use App\Service\v3\Interfaces\ActivityServiceInterface;
use App\Service\v3\Interfaces\BadgeServiceInterface;
use App\Service\v3\Interfaces\BannerServiceInterface; use App\Service\v3\Interfaces\BannerServiceInterface;
use App\Service\v3\Interfaces\CategoryServiceInterface; use App\Service\v3\Interfaces\CategoryServiceInterface;
use App\Service\v3\Interfaces\CollectStoreServiceInterface; use App\Service\v3\Interfaces\CollectStoreServiceInterface;
@ -26,6 +27,7 @@ use App\Service\v3\Interfaces\UserCenterBlockServiceInterface;
use App\Service\v3\Interfaces\UserInfoServiceInterface; use App\Service\v3\Interfaces\UserInfoServiceInterface;
use App\TaskWorker\SSDBTask; use App\TaskWorker\SSDBTask;
use Hyperf\Di\Annotation\Inject; use Hyperf\Di\Annotation\Inject;
use Hyperf\Redis\Redis;
use Hyperf\Utils\ApplicationContext; use Hyperf\Utils\ApplicationContext;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
@ -102,6 +104,13 @@ class HomeController extends BaseController
* @var RevenueListServiceInterface * @var RevenueListServiceInterface
*/ */
protected $revenueListService; protected $revenueListService;
/**
* @Inject
* @var BadgeServiceInterface
*/
protected $badgeService;
/** /**
* 小程序首页,根据market_id * 小程序首页,根据market_id
* 1.banner数据 * 1.banner数据
@ -109,7 +118,6 @@ class HomeController extends BaseController
* 3.活动数据(秒杀、团购、新品、无) * 3.活动数据(秒杀、团购、新品、无)
* 4.tabs数据 * 4.tabs数据
*/ */
public function appletIndex() public function appletIndex()
{ {
$marketId = $this->request->input('market_id', -1); $marketId = $this->request->input('market_id', -1);
@ -171,17 +179,7 @@ class HomeController extends BaseController
$data['user']['coupon_count'] = $this->couponRecService->countAvailableByUser($params['user_id']); $data['user']['coupon_count'] = $this->couponRecService->countAvailableByUser($params['user_id']);
$data['user']['role'] = $roles; $data['user']['role'] = $roles;
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$data['badge'] = [
'unpaid' => 0,
'receiving' => 0,
'completed' => 0,
'refund' => 0,
];
$badge = $ssdb->exec('hgetall', SsdbKeys::USER_ORDER_BADGE.$params['user_id']);
if (!empty($badge)) {
$data['badge'] = array_merge($data['badge'], $badge);
}
$data['badge'] = $this->badgeService->allByUserOrder($params['user_id']);
$data['block'] = $this->userCenterBlockService->all($roles); $data['block'] = $this->userCenterBlockService->all($roles);
@ -245,12 +243,7 @@ class HomeController extends BaseController
$data['new_user']['all']++; $data['new_user']['all']++;
} }
$data['badge'] = [
'unpaid' => 0,
'receiving' => 0,
'completed' => 0,
'refund' => 0,
];
$data['badge'] = $this->badgeService->allByStoreOrder($params['store_id']);
return $this->success($data); return $this->success($data);
} }

33
app/Controller/v3/NotifyController.php

@ -6,11 +6,11 @@ use App\Constants\v3\LogLabel;
use App\Constants\v3\OrderState; use App\Constants\v3\OrderState;
use App\Constants\v3\OrderType; use App\Constants\v3\OrderType;
use App\Constants\v3\Payment; use App\Constants\v3\Payment;
use App\Constants\v3\SsdbKeys;
use App\Controller\BaseController; use App\Controller\BaseController;
use App\Model\v3\Order; use App\Model\v3\Order;
use App\Model\v3\OrderGoods; use App\Model\v3\OrderGoods;
use App\Model\v3\OrderMain; use App\Model\v3\OrderMain;
use App\Service\v3\Interfaces\BadgeServiceInterface;
use App\Service\v3\Interfaces\CouponRebateServiceInterface; use App\Service\v3\Interfaces\CouponRebateServiceInterface;
use App\Service\v3\Interfaces\CouponServiceInterface; use App\Service\v3\Interfaces\CouponServiceInterface;
use App\Service\v3\Interfaces\DeviceServiceInterface; use App\Service\v3\Interfaces\DeviceServiceInterface;
@ -22,15 +22,12 @@ use App\Service\v3\Interfaces\MqttServiceInterface;
use App\Service\v3\Interfaces\OrderOfflineServiceInterface; use App\Service\v3\Interfaces\OrderOfflineServiceInterface;
use App\Service\v3\Interfaces\OrderOnlineServiceInterface; use App\Service\v3\Interfaces\OrderOnlineServiceInterface;
use App\Service\v3\Interfaces\SeparateAccountsServiceInterface; use App\Service\v3\Interfaces\SeparateAccountsServiceInterface;
use App\Service\v3\Interfaces\UserServiceInterface;
use App\TaskWorker\SSDBTask;
use EasyWeChat\Factory; use EasyWeChat\Factory;
use Hyperf\DbConnection\Db; use Hyperf\DbConnection\Db;
use Hyperf\Guzzle\CoroutineHandler; use Hyperf\Guzzle\CoroutineHandler;
use Exception; use Exception;
use Hyperf\Di\Annotation\Inject; use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpMessage\Stream\SwooleStream; use Hyperf\HttpMessage\Stream\SwooleStream;
use Hyperf\Utils\ApplicationContext;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
class NotifyController extends BaseController class NotifyController extends BaseController
@ -60,12 +57,6 @@ class NotifyController extends BaseController
*/ */
protected $feiePrintService; protected $feiePrintService;
/**
* @Inject
* @var UserServiceInterface
*/
protected $userService;
/** /**
* @Inject * @Inject
* @var CouponRebateServiceInterface * @var CouponRebateServiceInterface
@ -102,6 +93,12 @@ class NotifyController extends BaseController
*/ */
protected $financialService; protected $financialService;
/**
* @Inject
* @var BadgeServiceInterface
*/
protected $badgeService;
/** /**
* @Inject * @Inject
* @var GoodsActivityServiceInterface * @var GoodsActivityServiceInterface
@ -176,6 +173,10 @@ class NotifyController extends BaseController
$res = $this->feiePrintService->feiePrint($orderMain->global_order_id); $res = $this->feiePrintService->feiePrint($orderMain->global_order_id);
Db::commit(); Db::commit();
// 记录badge
$orderChildIds = Order::query()->where(['order_main_id' => $orderMain->global_order_id])->pluck('store_id');
$this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::PAID);
return true; return true;
} catch (Exception $e) { } catch (Exception $e) {
@ -252,7 +253,7 @@ class NotifyController extends BaseController
return true; return true;
} }
$orderPaid = $this->orderOfflineService->doPaid($orderMain->global_order_id);
$orderPaid = $this->orderOfflineService->doByPaid($orderMain->global_order_id);
$separate = $this->separateAccountsService->orderOfflinePaid($orderMain->global_order_id); $separate = $this->separateAccountsService->orderOfflinePaid($orderMain->global_order_id);
// 喇叭通知,兼容旧音响,MQTT+IOT // 喇叭通知,兼容旧音响,MQTT+IOT
@ -308,12 +309,12 @@ class NotifyController extends BaseController
if ( if (
empty($message) empty($message)
|| $message['return_code'] != 'SUCCESS' || $message['return_code'] != 'SUCCESS'
|| !isset($message['result_code'])
|| $message['result_code'] != 'SUCCESS'
|| !isset($reqInfo['refund_status'])
|| $reqInfo['refund_status'] != 'SUCCESS'
) { ) {
$this->log->event( $this->log->event(
LogLabel::ORDER_REFUND_NOTIFY_LOG, LogLabel::ORDER_REFUND_NOTIFY_LOG,
$message
array_merge($message, $reqInfo)
); );
Db::rollBack(); Db::rollBack();
return $fail('Unknown error but FAIL'); return $fail('Unknown error but FAIL');
@ -359,8 +360,8 @@ class NotifyController extends BaseController
Db::commit(); Db::commit();
// 记录badge // 记录badge
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$ssdb->exec('hincr', SsdbKeys::USER_ORDER_BADGE.$orderMain->user_id, 'refund', 1);
$orderChildIds = array_values(array_column($orderChildren, 'store_id'));
$this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::REFUNDED);
return true; return true;
} catch (Exception $e) { } catch (Exception $e) {

2
app/Controller/v3/WithdrawController.php

@ -194,7 +194,7 @@ class WithdrawController extends BaseController
'withdraw' => json_encode($withdraw), 'withdraw' => json_encode($withdraw),
'params' => json_encode(['balance' => $balance->balance, 'user_id' => $userId, 'store_id' => $storeId]), 'params' => json_encode(['balance' => $balance->balance, 'user_id' => $userId, 'store_id' => $storeId]),
]); ]);
throw new ErrorCodeException(ErrorCode::STORE_WITHDRAW_FAIL, $e->getMessage());
throw new ErrorCodeException(ErrorCode::STORE_WITHDRAW_FAIL);
} }
} }

40
app/JsonRpc/OrderService.php

@ -10,6 +10,7 @@ use App\Exception\ErrorCodeException;
use App\Model\v3\Order; use App\Model\v3\Order;
use App\Model\v3\OrderGoods; use App\Model\v3\OrderGoods;
use App\Model\v3\OrderMain; use App\Model\v3\OrderMain;
use App\Service\v3\Interfaces\FinancialRecordServiceInterface;
use App\Service\v3\Interfaces\OrderOnlineServiceInterface; use App\Service\v3\Interfaces\OrderOnlineServiceInterface;
use App\Service\v3\Interfaces\SeparateAccountsServiceInterface; use App\Service\v3\Interfaces\SeparateAccountsServiceInterface;
use EasyWeChat\Factory; use EasyWeChat\Factory;
@ -44,6 +45,12 @@ class OrderService implements OrderServiceInterface
*/ */
protected $separateAccountsService; protected $separateAccountsService;
/**
* @Inject
* @var FinancialRecordServiceInterface
*/
protected $financialRecordService;
/** /**
* 订单完成 * 订单完成
* @param $global_order_id * @param $global_order_id
@ -119,7 +126,7 @@ class OrderService implements OrderServiceInterface
* @param $order_child_id *主订单ID, * @param $order_child_id *主订单ID,
* @param $order_goods_id *订单商品ID * @param $order_goods_id *订单商品ID
* @param $note * @param $note
* @throws InvalidConfigException
* @return array
*/ */
public function onlineSingleRefund($user_id, $note, $global_order_id, $order_child_id=null, $order_goods_id=null) public function onlineSingleRefund($user_id, $note, $global_order_id, $order_child_id=null, $order_goods_id=null)
{ {
@ -160,7 +167,7 @@ class OrderService implements OrderServiceInterface
// 子订单 // 子订单
$orderChild = null; $orderChild = null;
if ($order_child_id) { if ($order_child_id) {
$orderChild = Order::query()->where(['order_main_id' => $orderMain->global_order_id, 'id' => $order_child_id])->first();
$orderChild = Order::query()->with('store:user_id')->where(['order_main_id' => $orderMain->global_order_id, 'id' => $order_child_id])->first();
} }
// 订单商品 // 订单商品
@ -185,8 +192,6 @@ class OrderService implements OrderServiceInterface
} }
} }
var_dump('ordergoods', $orderGoods);
$totalAmount = $orderMain->total_money; // 订单可退款金额,总订单金额不含配送费和服务费 $totalAmount = $orderMain->total_money; // 订单可退款金额,总订单金额不含配送费和服务费
$preRefundAmount = 0; // 预退款金额 $preRefundAmount = 0; // 预退款金额
$refundAmount = 0; // 实际退款金额 $refundAmount = 0; // 实际退款金额
@ -216,9 +221,6 @@ class OrderService implements OrderServiceInterface
]); ]);
throw new ErrorCodeException(ErrorCode::ORDER_REFUND_FAIL); throw new ErrorCodeException(ErrorCode::ORDER_REFUND_FAIL);
} }
var_dump($orderMain->money, $preRefundAmount, $refundAmount);
// 开始退款 // 开始退款
$config = config('wxpay'); $config = config('wxpay');
$app = Factory::payment($config); $app = Factory::payment($config);
@ -278,15 +280,33 @@ class OrderService implements OrderServiceInterface
$orderChild->refund_note = $note; $orderChild->refund_note = $note;
$orderChild->refund_time = $currentTime; $orderChild->refund_time = $currentTime;
$orderChild->save(); $orderChild->save();
}
if ($refundType == 'goods') {
} elseif ($refundType == 'goods') {
$orderGoods->status = 3; $orderGoods->status = 3;
$orderGoods->refund_note = $note; $orderGoods->refund_note = $note;
$orderGoods->refund_time = $currentTime; $orderGoods->refund_time = $currentTime;
$orderGoods->save(); $orderGoods->save();
} }
// 处理用户和商户流水
if ($refundType == 'main') { # 整单退的话还得处理所有子订单的商户
$orderChildren = Order::query()->with('store:user_id')->where(['order_main_id' => $orderMain->global_order_id])->get();
foreach ($orderChildren as $key => &$order) {
// 占订单金额的比例
$rate = bcdiv($order->money, $totalAmount, 6);
// 计算优惠券所占金额
$couponMoney = bcmul($orderMain->coupon_money, $rate, 6);
// 计算本次退款实际退款金额
$refundStoreAmount = bcsub($order->money, $couponMoney, 2);
$this->financialRecordService->storeRefundDirect($order->store->user_id, $order->id, $refundStoreAmount);
}
} elseif ($refundType == 'sub') { # 退子订单或者退单品的话,商户只有一个
$this->financialRecordService->storeRefundDirect($orderChild->store->user_id, $orderChild->id, $refundAmount);
}
$this->financialRecordService->userRefundDirect($orderMain->user_id, $orderMain->global_order_id, $refundAmount);
Db::commit(); Db::commit();
return [ return [
"status" => 200, "status" => 200,

4
app/Model/v3/FinancialRecord.php

@ -66,14 +66,16 @@ class FinancialRecord extends Model
const MONEY_TYPE_MM_PLAT_NEW_STORE = 10; // 市场经理发展新商户 const MONEY_TYPE_MM_PLAT_NEW_STORE = 10; // 市场经理发展新商户
const MONEY_TYPE_MP_PLAT_NEW_USER = 11; // 服务商发展新用户 const MONEY_TYPE_MP_PLAT_NEW_USER = 11; // 服务商发展新用户
const MONEY_TYPE_MP_PLAT_NEW_STORE = 12; // 服务商发展新商户 const MONEY_TYPE_MP_PLAT_NEW_STORE = 12; // 服务商发展新商户
const MONEY_TYPE_MP_OL_ORDER = 13; // 服务商线上订单分账(线上订单完成
const MONEY_TYPE_USER_OL_ORDER_DIRECT_REFUND = 14; // 用户订单退款(直接退
const MONEY_TYPE_MP_OL_ORDER = 13; // 服务商线上订单分账(线上订单完成)
const MONEY_TYPE_USER_OFL_ORDER = 100; // 用户线下支付订单 const MONEY_TYPE_USER_OFL_ORDER = 100; // 用户线下支付订单
const MONEY_TYPE_USER_OL_ORDER = 101; // 用户线上支付订单 const MONEY_TYPE_USER_OL_ORDER = 101; // 用户线上支付订单
const MONEY_TYPE_MP_WITHDRAW = 102; // 服务商提现类型 const MONEY_TYPE_MP_WITHDRAW = 102; // 服务商提现类型
const MONEY_TYPE_MM_WITHDRAW = 103; // 市场经理提现类型 const MONEY_TYPE_MM_WITHDRAW = 103; // 市场经理提现类型
const MONEY_TYPE_CS_WITHDRAW = 104; // 社区提现类型 const MONEY_TYPE_CS_WITHDRAW = 104; // 社区提现类型
const MONEY_TYPE_STORE_WITHDRAW = 105; // 商户提现类型 const MONEY_TYPE_STORE_WITHDRAW = 105; // 商户提现类型
const MONEY_TYPE_STORE_OL_ORDER_DIRECT_REFUND = 106; // 商户订单退款(直接退)
/** /**
* 状态 * 状态

171
app/Service/v3/Implementations/BadgeService.php

@ -0,0 +1,171 @@
<?php
namespace App\Service\v3\Implementations;
use App\Constants\v3\OrderState;
use App\Service\v3\Interfaces\BadgeServiceInterface;
use Hyperf\Redis\Redis;
use Hyperf\Utils\ApplicationContext;
class BadgeService implements BadgeServiceInterface
{
/**
* @inheritDoc
*/
public function doByOrder($userId, $storeIds, $globalOrderId, $orderState)
{
switch ($orderState) {
case OrderState::UNPAID: # 待付款(用户)
$this->sAddUserOrder('unpaid', $userId, $globalOrderId);
break;
case OrderState::CANCELED: # 订单取消(用户)
$this->sAddUserOrder('canceled', $userId, $globalOrderId);
foreach ($storeIds as $key => &$storeId) {
$this->sAddStoreOrder('canceled', $storeId, $globalOrderId);
}
break;
case OrderState::PAID: # 已付款(用户)
$this->sAddUserOrder('receiving', $userId, $globalOrderId);
foreach ($storeIds as $key => &$storeId) {
$this->sAddStoreOrder('paid', $storeId, $globalOrderId);
}
break;
case OrderState::REFUNDING: # 用户申请退款
case OrderState::REFUNDED: # 后台同意退款
case OrderState::REFUND_REFUSE: # 后台拒绝退款
$this->sAddUserOrder('refund', $userId, $globalOrderId);
foreach ($storeIds as $key => &$storeId) {
$this->sAddStoreOrder('refund', $storeId, $globalOrderId);
}
break;
case OrderState::REJECTION: # 后台拒单(后台)
$this->sAddUserOrder('rejection', $userId, $globalOrderId);
foreach ($storeIds as $key => &$storeId) {
$this->sAddStoreOrder('rejection', $storeId, $globalOrderId);
}
break;
case OrderState::DELIVERY: # 后台接单(后台)
$this->sAddUserOrder('receiving', $userId, $globalOrderId);
foreach ($storeIds as $key => &$storeId) {
$this->sAddStoreOrder('delivery', $storeId, $globalOrderId);
}
break;
case OrderState::COMPLETED: # 订单完成(用户或后台操作)
case OrderState::EVALUATED: # 订单评价(用户)
$this->sAddUserOrder('finish', $userId, $globalOrderId);
foreach ($storeIds as $key => &$storeId) {
$this->sAddStoreOrder('finish', $storeId, $globalOrderId);
}
break;
}
}
public function allByUserOrder($userId)
{
$redis = ApplicationContext::getContainer()->get(Redis::class);
return [
'unpaid' => count($redis->sMembers('badge_unpaid_user_'.$userId)),
'receiving' => count($redis->sMembers('badge_receiving_user_'.$userId)),
'finish' => count($redis->sMembers('badge_finish_user_'.$userId)),
'refund' => count($redis->sMembers('badge_refund_user_'.$userId)),
'canceled' => count($redis->sMembers('badge_canceled_user_'.$userId)),
'rejection' => count($redis->sMembers('badge_rejection_store_'.$userId)),
];
}
/**
* @inheritDoc
*/
public function allByStoreOrder($storeId)
{
$redis = ApplicationContext::getContainer()->get(Redis::class);
return [
'paid' => count($redis->sMembers('badge_paid_store_'.$storeId)),
'delivery' => count($redis->sMembers('badge_delivery_store_'.$storeId)),
'finish' => count($redis->sMembers('badge_canceled_store_'.$storeId)),
'refund' => count($redis->sMembers('badge_refund_store_'.$storeId)),
'canceled' => count($redis->sMembers('badge_canceled_store_'.$storeId)),
'rejection' => count($redis->sMembers('badge_rejection_store_'.$storeId)),
];
}
/**
* @inheritDoc
*/
public function sAddUserOrder($badge, $userId, $globalOrderId)
{
$redis = ApplicationContext::getContainer()->get(Redis::class);
$redis->sRem('badge_unpaid_user_'.$userId, $globalOrderId); # 移除用户待付款
$redis->sRem('badge_receiving_user_'.$userId, $globalOrderId); # 移除用户待收货
$redis->sRem('badge_finish_user_'.$userId, $globalOrderId); # 移除用户已完成
$redis->sRem('badge_canceled_user_'.$userId, $globalOrderId); # 移除用户已取消
$redis->sRem('badge_refund_user_'.$userId, $globalOrderId); # 移除用户退款售后
$redis->sRem('badge_rejection_store_', $userId, $globalOrderId); # 移除用户拒单
$redis->sAdd('badge_'.$badge.'_user_'.$userId, $globalOrderId); # 新增用户当前状态的值
}
/**
* @inheritDoc
*/
public function sAddStoreOrder($badge, $storeId, $globalOrderId)
{
$redis = ApplicationContext::getContainer()->get(Redis::class);
$redis->sRem('badge_paid_store_'.$storeId, $globalOrderId); # 移除商户待接单
$redis->sRem('badge_delivery_store_'.$storeId, $globalOrderId); # 移除商户待送达
$redis->sRem('badge_finish_store_'.$storeId, $globalOrderId); # 移除商户已完成
$redis->sRem('badge_canceled_store_'.$storeId, $globalOrderId); # 移除商户已取消
$redis->sRem('badge_refund_store_'.$storeId, $globalOrderId); # 移除商户退款售后
$redis->sRem('badge_rejection_store_', $storeId, $globalOrderId); # 移除商户拒单
$redis->sAdd('badge_'.$badge.'_store_'.$storeId, $globalOrderId); # 新增用户当前状态的值
}
/**
* @inheritDoc
*/
public function clearUserOrder($userId, $badge = 'all')
{
$redis = ApplicationContext::getContainer()->get(Redis::class);
if ($badge == 'all') {
$redis->del('badge_unpaid_user_'.$userId); # 移除用户待付款
$redis->del('badge_receiving_user_'.$userId); # 移除用户待收货
$redis->del('badge_finish_user_'.$userId); # 移除用户已完成
$redis->del('badge_canceled_user_'.$userId); # 移除用户已取消
$redis->del('badge_refund_user_'.$userId); # 移除用户退款售后
$redis->del('badge_rejection_store_', $userId); # 移除用户拒单
} else {
$redis->del('badge_'.$badge.'_user_'.$userId);
}
}
/**
* @inheritDoc
*/
public function clearStoreOrder($storeId, $badge = 'all')
{
$redis = ApplicationContext::getContainer()->get(Redis::class);
if ($badge == 'all') {
$redis->del('badge_paid_user_'.$storeId); # 移除商户待付款
$redis->del('badge_delivery_user_'.$storeId); # 移除商户待收货
$redis->del('badge_finish_user_'.$storeId); # 移除商户已完成
$redis->del('badge_canceled_user_'.$storeId); # 移除商户已取消
$redis->del('badge_refund_user_'.$storeId); # 移除商户退款售后
$redis->del('badge_rejection_store_', $storeId); # 移除商户拒单
} else {
$redis->del('badge_'.$badge.'_user_'.$storeId);
}
}
}

62
app/Service/v3/Implementations/FinancialRecordService.php

@ -4,10 +4,9 @@ namespace App\Service\v3\Implementations;
use App\Constants\v3\UserType; use App\Constants\v3\UserType;
use App\Model\v3\FinancialRecord; use App\Model\v3\FinancialRecord;
use App\Model\v3\Store;
use App\Model\v3\UserBalance; use App\Model\v3\UserBalance;
use App\Service\v3\Interfaces\FinancialRecordServiceInterface; use App\Service\v3\Interfaces\FinancialRecordServiceInterface;
use App\Service\v3\Interfaces\SmsServiceInterface;
use App\Service\v3\Interfaces\SmsSendServiceInterface;
use Hyperf\Di\Annotation\Inject; use Hyperf\Di\Annotation\Inject;
class FinancialRecordService implements FinancialRecordServiceInterface class FinancialRecordService implements FinancialRecordServiceInterface
@ -15,9 +14,9 @@ class FinancialRecordService implements FinancialRecordServiceInterface
/** /**
* @Inject * @Inject
* @var SmsServiceInterface
* @var SmsSendServiceInterface
*/ */
protected $smsAliService;
protected $smsAliSendService;
public function ledgerAccounts($source_id, $money, $source_type, $money_type, $desc, $comment='') public function ledgerAccounts($source_id, $money, $source_type, $money_type, $desc, $comment='')
{ {
@ -80,14 +79,14 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护社区服务点余额 // 维护社区服务点余额
$balance = UserBalance::query()->firstOrNew([ $balance = UserBalance::query()->firstOrNew([
'user_type' => UserType::CS,
'user_type' => $user_type,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money, 2); $balance->balance = bcadd($balance->balance, $money, 2);
$balance->save(); $balance->save();
// 发送短信 // 发送短信
$this->smsAliService->sendForCommunityFinancial($user_id, $money);
$this->smsAliSendService->doCommunityFinancial($user_id, $money);
} }
@ -108,14 +107,14 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护社区服务点余额 // 维护社区服务点余额
$balance = UserBalance::query()->firstOrNew([ $balance = UserBalance::query()->firstOrNew([
'user_type' => UserType::CS,
'user_type' => $user_type,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money, 2); $balance->balance = bcadd($balance->balance, $money, 2);
$balance->save(); $balance->save();
// 发送短信 // 发送短信
$this->smsAliService->sendForCommunityFinancial($user_id, $money);
$this->smsAliSendService->doCommunityFinancial($user_id, $money);
} }
/** /**
@ -135,14 +134,14 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护社区服务点余额 // 维护社区服务点余额
$balance = UserBalance::query()->firstOrNew([ $balance = UserBalance::query()->firstOrNew([
'user_type' => UserType::CS,
'user_type' => $user_type,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money,2); $balance->balance = bcadd($balance->balance, $money,2);
$balance->save(); $balance->save();
// 发送短信 // 发送短信
$this->smsAliService->sendForCommunityFinancial($user_id, $money);
$this->smsAliSendService->doCommunityFinancial($user_id, $money);
} }
@ -163,7 +162,7 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护余额 // 维护余额
$balance = UserBalance::query()->firstOrNew([ $balance = UserBalance::query()->firstOrNew([
'user_type' => UserType::STORE,
'user_type' => $user_type,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money, 2); $balance->balance = bcadd($balance->balance, $money, 2);
@ -187,7 +186,7 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护余额 // 维护余额
$balance = UserBalance::query()->firstOrNew([ $balance = UserBalance::query()->firstOrNew([
'user_type' => UserType::STORE,
'user_type' => $user_type,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money, 2); $balance->balance = bcadd($balance->balance, $money, 2);
@ -264,7 +263,7 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护余额 // 维护余额
$balance = UserBalance::query()->firstOrNew([ $balance = UserBalance::query()->firstOrNew([
'user_type' => UserType::STORE,
'user_type' => $user_type,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money, 2); $balance->balance = bcadd($balance->balance, $money, 2);
@ -288,7 +287,7 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护余额 // 维护余额
$balance = UserBalance::query()->firstOrNew([ $balance = UserBalance::query()->firstOrNew([
'user_type' => UserType::STORE,
'user_type' => $user_type,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money, 2); $balance->balance = bcadd($balance->balance, $money, 2);
@ -351,4 +350,39 @@ class FinancialRecordService implements FinancialRecordServiceInterface
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment); $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
} }
public function storeRefundDirect(
$user_id,
$source_id,
$money,
$user_type = UserType::STORE,
$source_type = FinancialRecord::SOURCE_TYPE_ORDER,
$money_type = FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_DIRECT_REFUND,
$desc = '商户线上订单退款(直接退)',
$comment = '商户线上订单退款(后台直接退)'
)
{
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
// 维护余额
$balance = UserBalance::query()->firstOrNew([
'user_type' => $user_type,
'source_id' => $user_id
]);
$balance->balance = bcadd($balance->balance, $money, 2);
$balance->save();
}
public function userRefundDirect(
$user_id,
$source_id,
$money,
$user_type = UserType::USER,
$source_type = FinancialRecord::SOURCE_TYPE_ORDER,
$money_type = FinancialRecord::MONEY_TYPE_USER_OL_ORDER_DIRECT_REFUND,
$desc = '用户线上订单退款(直接退)',
$comment = '用户线上订单退款(后台直接退到微信)'
)
{
$this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
}
} }

28
app/Service/v3/Implementations/OrderListService.php

@ -4,18 +4,21 @@ namespace App\Service\v3\Implementations;
use App\Constants\v3\OrderState; use App\Constants\v3\OrderState;
use App\Constants\v3\OrderType; use App\Constants\v3\OrderType;
use App\Constants\v3\SsdbKeys;
use App\Model\v3\OrderMain; use App\Model\v3\OrderMain;
use App\Model\v3\Order; use App\Model\v3\Order;
use App\Model\v3\ShoppingCart;
use App\Service\v3\Interfaces\BadgeServiceInterface;
use App\Service\v3\Interfaces\OrderListServiceInterface; use App\Service\v3\Interfaces\OrderListServiceInterface;
use App\TaskWorker\SSDBTask;
use Hyperf\Paginator\Paginator;
use Hyperf\Utils\ApplicationContext;
use Hyperf\Di\Annotation\Inject;
class OrderListService implements OrderListServiceInterface class OrderListService implements OrderListServiceInterface
{ {
/**
* @Inject
* @var BadgeServiceInterface
*/
protected $badgeService;
public function do() public function do()
{ {
// TODO: Implement do() method. // TODO: Implement do() method.
@ -33,34 +36,30 @@ class OrderListService implements OrderListServiceInterface
public function onlineByUser($userId, $tab, $page=1, $pagesize=10) public function onlineByUser($userId, $tab, $page=1, $pagesize=10)
{ {
// 记录badge
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$builder = OrderMain::query() $builder = OrderMain::query()
->with(['orderGoods', 'market']) ->with(['orderGoods', 'market'])
->where(['user_id' => $userId, 'type' => OrderType::ONLINE]); ->where(['user_id' => $userId, 'type' => OrderType::ONLINE]);
switch ($tab) { switch ($tab) {
case 'all': case 'all':
$ssdb->exec('hclear', SsdbKeys::USER_ORDER_BADGE.$userId);
break; break;
case 'completed':
$ssdb->exec('hset', SsdbKeys::USER_ORDER_BADGE.$userId, 'completed', 0);
case 'finish':
$builder->whereIn('state', OrderState::FINISH); $builder->whereIn('state', OrderState::FINISH);
break; break;
case 'unpaid': case 'unpaid':
$ssdb->exec('hset', SsdbKeys::USER_ORDER_BADGE.$userId, 'unpaid', 0);
$builder->where(['state' => OrderState::UNPAID]); $builder->where(['state' => OrderState::UNPAID]);
break; break;
case 'receiving': case 'receiving':
$builder->whereIn('state', OrderState::RECEIVING); $builder->whereIn('state', OrderState::RECEIVING);
$ssdb->exec('hset', SsdbKeys::USER_ORDER_BADGE.$userId, 'receiving', 0);
break; break;
case 'refund': case 'refund':
$builder->whereIn('state', OrderState::REFUND); $builder->whereIn('state', OrderState::REFUND);
$ssdb->exec('hset', SsdbKeys::USER_ORDER_BADGE.$userId, 'refund', 0);
break; break;
} }
// 清除badge
$this->badgeService->clearUserOrder($userId, $tab);
$paginate = $builder->orderBy('created_at', 'desc')->paginate($pagesize); $paginate = $builder->orderBy('created_at', 'desc')->paginate($pagesize);
$orders = $paginate->toArray(); $orders = $paginate->toArray();
return ['has_more_pages' => $paginate->hasMorePages(), 'orders' => $orders['data']]; return ['has_more_pages' => $paginate->hasMorePages(), 'orders' => $orders['data']];
@ -136,6 +135,9 @@ class OrderListService implements OrderListServiceInterface
} }
$v['state_text'] = $stateTxet[$v['state']]; $v['state_text'] = $stateTxet[$v['state']];
} }
$this->badgeService->clearStoreOrder($storeId, $tab);
return $res; return $res;
} }

2
app/Service/v3/Implementations/OrderOfflineService.php

@ -107,7 +107,7 @@ class OrderOfflineService implements OrderOfflineServiceInterface
// TODO: Implement undo() method. // TODO: Implement undo() method.
} }
public function doPaid($globalOrderId)
public function doByPaid($globalOrderId)
{ {
Db::beginTransaction(); Db::beginTransaction();
try { try {

39
app/Service/v3/Implementations/OrderOnlineService.php

@ -11,7 +11,6 @@ use App\Constants\v3\Payment;
use App\Constants\v3\SsdbKeys; use App\Constants\v3\SsdbKeys;
use App\Exception\ErrorCodeException; use App\Exception\ErrorCodeException;
use App\Model\v3\Coupon; use App\Model\v3\Coupon;
use App\Model\v3\CouponRec;
use App\Model\v3\Goods; use App\Model\v3\Goods;
use App\Model\v3\GoodsActivity; use App\Model\v3\GoodsActivity;
use App\Model\v3\Order; use App\Model\v3\Order;
@ -20,7 +19,7 @@ use App\Model\v3\OrderMain;
use App\Model\v3\OrderSalesStatistic; use App\Model\v3\OrderSalesStatistic;
use App\Model\v3\ShoppingCart; use App\Model\v3\ShoppingCart;
use App\Model\v3\Store; use App\Model\v3\Store;
use App\Model\v3\UserAddress;
use App\Service\v3\Interfaces\BadgeServiceInterface;
use App\Service\v3\Interfaces\CouponRecServiceInterface; use App\Service\v3\Interfaces\CouponRecServiceInterface;
use App\Service\v3\Interfaces\CouponServiceInterface; use App\Service\v3\Interfaces\CouponServiceInterface;
use App\Service\v3\Interfaces\GoodsActivityServiceInterface; use App\Service\v3\Interfaces\GoodsActivityServiceInterface;
@ -88,6 +87,12 @@ class OrderOnlineService implements OrderOnlineServiceInterface
*/ */
protected $shopCartUpdateService; protected $shopCartUpdateService;
/**
* @Inject
* @var BadgeServiceInterface
*/
protected $badgeService;
/** /**
* 下单 * 下单
* @param $marketId * @param $marketId
@ -308,9 +313,8 @@ class OrderOnlineService implements OrderOnlineServiceInterface
// 清除购物车 // 清除购物车
$this->shopCartUpdateService->doClear($userId, $marketId); $this->shopCartUpdateService->doClear($userId, $marketId);
// 记录用户中心的badge
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$ssdb->exec('hincr', SsdbKeys::USER_ORDER_BADGE.$userId, 'unpaid', 1);
// 记录badge
$this->badgeService->doByOrder($userId, array_values(array_column($dataChildren, 'store_id')), $orderMain->global_order_id, OrderState::UNPAID);
// 支付 // 支付
return $this->paymentService->do($globalOrderId, $totalAmount, $userId, config('wechat.notify_url.online')); return $this->paymentService->do($globalOrderId, $totalAmount, $userId, config('wechat.notify_url.online'));
@ -367,6 +371,11 @@ class OrderOnlineService implements OrderOnlineServiceInterface
} }
Db::commit(); Db::commit();
// 记录badge
$orderChildIds = array_values(array_column($orders, 'store_id'));
$this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::CANCELED);
return true; return true;
} catch (Exception $e) { } catch (Exception $e) {
Db::rollBack(); Db::rollBack();
@ -469,15 +478,6 @@ class OrderOnlineService implements OrderOnlineServiceInterface
Db::commit(); Db::commit();
// 记录用户中心的badge
$ssdb->exec('hincr', SsdbKeys::USER_ORDER_BADGE.$orderMain->user_id, 'receiving', 1);
//记录商家中心的badge
$storeIds = array_values(array_column($orders, 'store_id'));
foreach ($storeIds as $storeId){
$ssdb->exec('hincr', SsdbKeys::STORE_ORDER_BADGE . $storeId, 'paid', 1);
}
return true; return true;
} catch (Exception $e) { } catch (Exception $e) {
@ -527,9 +527,10 @@ class OrderOnlineService implements OrderOnlineServiceInterface
if (!$orderMain->save()) { if (!$orderMain->save()) {
throw new ErrorCodeException(ErrorCode::ORDER_APPLY_REFUND_FAIL); throw new ErrorCodeException(ErrorCode::ORDER_APPLY_REFUND_FAIL);
} }
// 记录badge // 记录badge
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$ssdb->exec('hincr', SsdbKeys::USER_ORDER_BADGE.$orderMain->user_id, 'refund', 1);
$orderChildIds = Order::query()->where(['order_main_id' => $orderMain->global_order_id])->pluck('store_id');
$this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::REFUNDING);
return true; return true;
} }
@ -544,9 +545,11 @@ class OrderOnlineService implements OrderOnlineServiceInterface
if (!$orderMain->save()) { if (!$orderMain->save()) {
throw new ErrorCodeException(ErrorCode::ORDER_COMPLETE_FAIL); throw new ErrorCodeException(ErrorCode::ORDER_COMPLETE_FAIL);
} }
// 记录badge // 记录badge
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$ssdb->exec('hincr', SsdbKeys::USER_ORDER_BADGE.$orderMain->user_id, 'completed', 1);
$orderChildIds = Order::query()->where(['order_main_id' => $orderMain->global_order_id])->pluck('store_id');
$this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::COMPLETED);
return true; return true;
} }

25
app/Service/v3/Implementations/PaymentService.php

@ -13,13 +13,17 @@ use App\Model\v3\OrderMain;
use App\Model\v3\User; use App\Model\v3\User;
use App\Service\v3\Interfaces\GoodsActivityServiceInterface; use App\Service\v3\Interfaces\GoodsActivityServiceInterface;
use App\Service\v3\Interfaces\PaymentServiceInterface; use App\Service\v3\Interfaces\PaymentServiceInterface;
use App\Service\v3\Interfaces\SmsSendServiceInterface;
use EasyWeChat\Factory; use EasyWeChat\Factory;
use EasyWeChat\Kernel\Exceptions\InvalidArgumentException;
use EasyWeChat\Kernel\Exceptions\InvalidConfigException; use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
use EasyWeChat\Kernel\Support\Collection; use EasyWeChat\Kernel\Support\Collection;
use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\GuzzleException;
use Hyperf\DbConnection\Db; use Hyperf\DbConnection\Db;
use Hyperf\Guzzle\CoroutineHandler; use Hyperf\Guzzle\CoroutineHandler;
use Hyperf\Di\Annotation\Inject; use Hyperf\Di\Annotation\Inject;
use Hyperf\Redis\Redis;
use Hyperf\Utils\ApplicationContext;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use function AlibabaCloud\Client\json; use function AlibabaCloud\Client\json;
@ -31,6 +35,11 @@ class PaymentService implements PaymentServiceInterface
*/ */
protected $log; protected $log;
/**
* @var SmsSendServiceInterface
*/
protected $smsAliSendService;
public function do($globalOrderId, $money, $userId, $notifyUrl) public function do($globalOrderId, $money, $userId, $notifyUrl)
{ {
@ -94,7 +103,7 @@ class PaymentService implements PaymentServiceInterface
} }
/** /**
* 退款的整单,允许后台操作退款
* 退款的整单,用户申请的退款
* @param $globalOrderId * @param $globalOrderId
* @param $userId * @param $userId
* @return array|bool|Collection|object|ResponseInterface|string * @return array|bool|Collection|object|ResponseInterface|string
@ -147,7 +156,10 @@ class PaymentService implements PaymentServiceInterface
* @param $userName * @param $userName
* @param string $desc * @param string $desc
* @param string $checkName * @param string $checkName
* @return bool
* @throws GuzzleException * @throws GuzzleException
* @throws InvalidConfigException
* @throws InvalidArgumentException
*/ */
public function payToWx($money, $tradeNo, $openId, $userName, $desc = '', $checkName = 'NO_CHECK') public function payToWx($money, $tradeNo, $openId, $userName, $desc = '', $checkName = 'NO_CHECK')
{ {
@ -179,7 +191,16 @@ class PaymentService implements PaymentServiceInterface
'result' => json_encode($result), 'result' => json_encode($result),
'desc' => $desc 'desc' => $desc
]); ]);
throw new ErrorCodeException(ErrorCode::PAYMENT_FAIL, $result['err_code_des']);
throw new ErrorCodeException(ErrorCode::PAYMENT_FAIL);
// 如果是商户余额不足等原因,要发送短信给老总
$arr = ['NOTENOUGH','AMOUNT_LIMIT'];
if (in_array($result['error_code'], $arr)) {
$redis = ApplicationContext::getContainer()->get(Redis::class);
if (!$redis->exists('send_withdraw_refuse_reson_'.date('Ymd'))) {
$this->smsAliSendService->doWithdrawFail($result['error_code'], $result['error_code_des']);
}
}
} }
return true; return true;

21
app/Service/v3/Implementations/SmsAliSendService.php

@ -7,6 +7,8 @@ use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException; use AlibabaCloud\Client\Exception\ServerException;
use App\Constants\v3\ErrorCode; use App\Constants\v3\ErrorCode;
use App\Exception\ErrorCodeException; use App\Exception\ErrorCodeException;
use App\Model\v3\CsInfo;
use App\Model\v3\Market;
use Exception; use Exception;
use App\Commons\Log; use App\Commons\Log;
use App\Constants\v3\SmsTemplateCode; use App\Constants\v3\SmsTemplateCode;
@ -22,7 +24,7 @@ class SmsAliSendService implements SmsSendServiceInterface
*/ */
protected $log; protected $log;
public function do($tel, $template, $templateParams)
public function do($tel, $template, $templateParams, $signName = '')
{ {
try { try {
@ -41,7 +43,7 @@ class SmsAliSendService implements SmsSendServiceInterface
'query' => [ 'query' => [
'RegionId' => $aliSms['regionid'], 'RegionId' => $aliSms['regionid'],
'PhoneNumbers' => $tel, 'PhoneNumbers' => $tel,
'SignName' => $aliSms['sign_name'],
'SignName' => $signName ?: $aliSms['sign_name'],
'TemplateCode' => $template, 'TemplateCode' => $template,
'TemplateParam' => $templateParams, 'TemplateParam' => $templateParams,
], ],
@ -86,4 +88,19 @@ class SmsAliSendService implements SmsSendServiceInterface
// TODO: Implement removeVerifyCode() method. // TODO: Implement removeVerifyCode() method.
} }
public function doCommunityFinancial($userId, $money)
{
$csInfo = CsInfo::query()->where(['admin_user_id' => $userId])->first();
$market = Market::query()->where(['id' => $csInfo->market_id])->first();
$params = ['user_name' => $csInfo->name, 'market_name' => $market->name, 'money' => $money];
return $this->do($csInfo->phone, SmsTemplateCode::ALI_COMMUNITY_FINANCIAL, json_encode($params));
}
public function doWithdrawFail($errorCode, $errorCodeDes)
{
$params = ['code' => $errorCode];
return $this->do(18611745705, SmsTemplateCode::ALI_VERIFY_CODE, json_encode($params));
}
} }

69
app/Service/v3/Implementations/SmsAliService.php

@ -1,69 +0,0 @@
<?php
namespace App\Service\v3\Implementations;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use App\Commons\Log;
use App\Model\v3\CsInfo;
use App\Model\v3\Market;
use App\Service\v3\Interfaces\SmsServiceInterface;
use Hyperf\Di\Annotation\Inject;
class SmsAliService implements SmsServiceInterface
{
const TEMPLATE_COMMUNITY_FINANCIAL = 'SMS_200690862';
/**
* @Inject
* @var Log
*/
protected $log;
public function send($phone, $template, $templateParams, $signName='懒族生活')
{
$alisms = config('alisms');
AlibabaCloud::accessKeyClient($alisms['app_key'], $alisms['app_secret'])
->regionId($alisms['regionid'])
->asDefaultClient();
try {
$result = AlibabaCloud::rpc()
->product($alisms['product'])
// ->scheme('https') // https | http
->version('2017-05-25')
->action('SendSms')
->method('POST')
->host($alisms['host'])
->options([
'query' => [
'RegionId' => $alisms['regionid'],
'PhoneNumbers' => $phone,
'SignName' => $signName,
'TemplateCode' => $template,
'TemplateParam' => $templateParams,
],
])
->request();
return $result->toArray();
} catch (ClientException $e) {
$this->log->event('alisms', ['alisms_error_ClientException' => $e->getErrorMessage()]);
return false;
} catch (ServerException $e) {
$this->log->event('alisms', ['alisms_error_ServerException' => $e->getErrorMessage()]);
return false;
}
}
public function sendForCommunityFinancial($userId, $money)
{
$csInfo = CsInfo::query()->where(['admin_user_id' => $userId])->first();
$market = Market::query()->where(['id' => $csInfo->market_id])->first();
$params = ['user_name' => $csInfo->name, 'market_name' => $market->name, 'money' => $money];
return $this->send($csInfo->phone, self::TEMPLATE_COMMUNITY_FINANCIAL, json_encode($params));
}
}

64
app/Service/v3/Interfaces/BadgeServiceInterface.php

@ -0,0 +1,64 @@
<?php
namespace App\Service\v3\Interfaces;
interface BadgeServiceInterface
{
/**
* 用户和商户首页订单角标
* @param $userId
* @param $storeIds
* @param $globalOrderId
* @param $orderState
* @return mixed
*/
public function doByOrder($userId, $storeIds, $globalOrderId, $orderState);
/**
* 用户订单角标
* @param $userId
* @return mixed
*/
public function allByUserOrder($userId);
/**
* 商户订单角标
* @param $storeId
* @return mixed
*/
public function allByStoreOrder($storeId);
/**
* 添加用户订单角标
* @param $badge
* @param $userId
* @param $globalOrderId
* @return mixed
*/
public function sAddUserOrder($badge, $userId, $globalOrderId);
/**
* 添加商户订单角标
* @param $badge
* @param $storeId
* @param $globalOrderId
* @return mixed
*/
public function sAddStoreOrder($badge, $storeId, $globalOrderId);
/**
* 清除用户角标
* @param $userId
* @param string $badge
* @return mixed
*/
public function clearUserOrder($userId, $badge = 'all');
/**
* 清除商户角标
* @param $storeId
* @param string $badge
* @return mixed
*/
public function clearStoreOrder($storeId, $badge = 'all');
}

23
app/Service/v3/Interfaces/FinancialRecordServiceInterface.php

@ -280,10 +280,31 @@ interface FinancialRecordServiceInterface
$source_id, $source_id,
$money, $money,
$user_type = UserType::STORE, $user_type = UserType::STORE,
$source_type = FinancialRecord::SOURCE_TYPE_NONE,
$source_type = FinancialRecord::SOURCE_TYPE_STORE_WITHDRAW,
$money_type = FinancialRecord::MONEY_TYPE_STORE_WITHDRAW, $money_type = FinancialRecord::MONEY_TYPE_STORE_WITHDRAW,
$desc='商户提现', $desc='商户提现',
$comment='' $comment=''
); );
public function storeRefundDirect(
$user_id,
$source_id,
$money,
$user_type = UserType::STORE,
$source_type = FinancialRecord::SOURCE_TYPE_ORDER,
$money_type = FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_DIRECT_REFUND,
$desc='商户线上订单退款(直接退)',
$comment=''
);
public function userRefundDirect(
$user_id,
$source_id,
$money,
$user_type = UserType::USER,
$source_type = FinancialRecord::SOURCE_TYPE_ORDER,
$money_type = FinancialRecord::MONEY_TYPE_USER_OL_ORDER_DIRECT_REFUND,
$desc='用户线上订单退款(直接退)',
$comment=''
);
} }

2
app/Service/v3/Interfaces/OrderOfflineServiceInterface.php

@ -7,5 +7,5 @@ interface OrderOfflineServiceInterface
public function do($storeId, $userId, $money, $plat=''); public function do($storeId, $userId, $money, $plat='');
public function check(); public function check();
public function undo(); public function undo();
public function doPaid($globalOrderId);
public function doByPaid($globalOrderId);
} }

4
app/Service/v3/Interfaces/SmsSendServiceInterface.php

@ -4,10 +4,12 @@ namespace App\Service\v3\Interfaces;
interface SmsSendServiceInterface interface SmsSendServiceInterface
{ {
public function do($tel, $template, $templateParams);
public function do($tel, $template, $templateParams, $signName = '');
public function check(); public function check();
public function undo(); public function undo();
public function doVerifyCode($tel, $code); public function doVerifyCode($tel, $code);
public function checkVerifyCode($tel, $code); public function checkVerifyCode($tel, $code);
public function undoVerifyCode($tel, $code); public function undoVerifyCode($tel, $code);
public function doCommunityFinancial($userId, $money);
public function doWithdrawFail($errorCode, $errorCodeDes);
} }

9
app/Service/v3/Interfaces/SmsServiceInterface.php

@ -1,9 +0,0 @@
<?php
namespace App\Service\v3\Interfaces;
interface SmsServiceInterface
{
public function send($phone, $template, $templateParams);
public function sendForCommunityFinancial($userId, $money);
}

3
config/autoload/dependencies.php

@ -77,10 +77,11 @@ return [
\App\Service\v3\Interfaces\SeparateAccountsServiceInterface::class => \App\Service\v3\Implementations\SeparateAccountsService::class, \App\Service\v3\Interfaces\SeparateAccountsServiceInterface::class => \App\Service\v3\Implementations\SeparateAccountsService::class,
\App\Service\v3\Interfaces\UserServiceInterface::class => \App\Service\v3\Implementations\UserService::class, \App\Service\v3\Interfaces\UserServiceInterface::class => \App\Service\v3\Implementations\UserService::class,
\App\Service\v3\Interfaces\CouponRebateServiceInterface::class => \App\Service\v3\Implementations\CouponRebateService::class, \App\Service\v3\Interfaces\CouponRebateServiceInterface::class => \App\Service\v3\Implementations\CouponRebateService::class,
\App\Service\v3\Interfaces\SmsServiceInterface::class => \App\Service\v3\Implementations\SmsAliService::class,
\App\Service\v3\Interfaces\SmsSendServiceInterface::class => \App\Service\v3\Implementations\SmsAliSendService::class,
\App\Service\v3\Interfaces\AttachmentServiceInterface::class => \App\Service\v3\Implementations\AttachmentService::class, \App\Service\v3\Interfaces\AttachmentServiceInterface::class => \App\Service\v3\Implementations\AttachmentService::class,
\App\JsonRpc\PrintServiceInterface::class => \App\JsonRpc\FeieService::class, \App\JsonRpc\PrintServiceInterface::class => \App\JsonRpc\FeieService::class,
\App\JsonRpc\LocationServiceInterface::class => \App\JsonRpc\LocationService::class, \App\JsonRpc\LocationServiceInterface::class => \App\JsonRpc\LocationService::class,
\App\Service\v3\Interfaces\OrderStatisticsServiceInterface::class => \App\Service\v3\Implementations\OrderStatisticsService::class, \App\Service\v3\Interfaces\OrderStatisticsServiceInterface::class => \App\Service\v3\Implementations\OrderStatisticsService::class,
\App\Service\v3\Interfaces\UserRelationBindServiceInterface::class => \App\Service\v3\Implementations\UserCommunityBindService::class, \App\Service\v3\Interfaces\UserRelationBindServiceInterface::class => \App\Service\v3\Implementations\UserCommunityBindService::class,
\App\Service\v3\Interfaces\BadgeServiceInterface::class => \App\Service\v3\Implementations\BadgeService::class,
]; ];
Loading…
Cancel
Save