|
@@ -3,15 +3,24 @@ declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace SixShop\Lakala\Service;
|
|
namespace SixShop\Lakala\Service;
|
|
|
|
|
|
|
|
|
|
+use app\model\Order;
|
|
|
use app\model\OrderGoods;
|
|
use app\model\OrderGoods;
|
|
|
|
|
+use SixShop\Core\Exception\LogicException;
|
|
|
use SixShop\Lakala\Enum\WechatOrderStateEnum;
|
|
use SixShop\Lakala\Enum\WechatOrderStateEnum;
|
|
|
use SixShop\Lakala\Model\LakalaWechatPaymentModel;
|
|
use SixShop\Lakala\Model\LakalaWechatPaymentModel;
|
|
|
use SixShop\Payment\Model\ExtensionPaymentModel;
|
|
use SixShop\Payment\Model\ExtensionPaymentModel;
|
|
|
|
|
+use SixShop\Wechat\Entity\WechatDeliveryEntity;
|
|
|
|
|
+use SixShop\Wechat\Service\ExpressService;
|
|
|
use think\db\Query;
|
|
use think\db\Query;
|
|
|
|
|
+use think\facade\Log;
|
|
|
use think\Paginator;
|
|
use think\Paginator;
|
|
|
|
|
|
|
|
class PaymentRecordService
|
|
class PaymentRecordService
|
|
|
{
|
|
{
|
|
|
|
|
+ public function __construct(private ExpressService $expressService)
|
|
|
|
|
+ {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function getTradeOrderList(array $params, array $pageAndLimit): Paginator
|
|
public function getTradeOrderList(array $params, array $pageAndLimit): Paginator
|
|
|
{
|
|
{
|
|
|
$paginator = ExtensionPaymentModel::alias('p')
|
|
$paginator = ExtensionPaymentModel::alias('p')
|
|
@@ -51,20 +60,20 @@ class PaymentRecordService
|
|
|
->order('p.id', 'DESC')
|
|
->order('p.id', 'DESC')
|
|
|
->paginate($pageAndLimit);
|
|
->paginate($pageAndLimit);
|
|
|
$paginator->each(function (ExtensionPaymentModel $item) {
|
|
$paginator->each(function (ExtensionPaymentModel $item) {
|
|
|
- if ($item['order_state'] == null) {
|
|
|
|
|
- $wechatOrder = $this->createWechatOrder($item->id);
|
|
|
|
|
- $item->setAttrs([
|
|
|
|
|
- 'wechat_transaction_id' => $wechatOrder['wechat_transaction_id'],
|
|
|
|
|
- 'order_state' => $wechatOrder['order_state'],
|
|
|
|
|
- 'goods_desc' => $wechatOrder['goods_desc'],
|
|
|
|
|
- ]);
|
|
|
|
|
- }
|
|
|
|
|
- $item->setAttr('order_state_text', WechatOrderStateEnum::from($item['order_state'])->toString());
|
|
|
|
|
|
|
+ if ($item['order_state'] == null) {
|
|
|
|
|
+ $wechatOrder = $this->createWechatOrder($item->id);
|
|
|
|
|
+ $item->setAttrs([
|
|
|
|
|
+ 'wechat_transaction_id' => $wechatOrder['wechat_transaction_id'],
|
|
|
|
|
+ 'order_state' => $wechatOrder['order_state'],
|
|
|
|
|
+ 'goods_desc' => $wechatOrder['goods_desc'],
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+ $item->setAttr('order_state_text', WechatOrderStateEnum::from($item['order_state'])->toString());
|
|
|
});
|
|
});
|
|
|
return $paginator;
|
|
return $paginator;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public function createWechatOrder(int $paymentID):LakalaWechatPaymentModel
|
|
|
|
|
|
|
+ public function createWechatOrder(int $paymentID): LakalaWechatPaymentModel
|
|
|
{
|
|
{
|
|
|
$payment = ExtensionPaymentModel::find($paymentID);
|
|
$payment = ExtensionPaymentModel::find($paymentID);
|
|
|
$goods = OrderGoods::where(['order_id' => $payment['order_id']])->find();
|
|
$goods = OrderGoods::where(['order_id' => $payment['order_id']])->find();
|
|
@@ -79,8 +88,50 @@ class PaymentRecordService
|
|
|
/**
|
|
/**
|
|
|
* 更新微信发货状态
|
|
* 更新微信发货状态
|
|
|
*/
|
|
*/
|
|
|
- public function updateWechatOrder(int $paymentID)
|
|
|
|
|
|
|
+ public function updateWechatOrder(int $paymentID): void
|
|
|
{
|
|
{
|
|
|
|
|
+ $wechatPayment = LakalaWechatPaymentModel::where(['payment_id' => $paymentID])->find();
|
|
|
|
|
+ try {
|
|
|
|
|
+ $result = $this->expressService->queryOrder($wechatPayment->wechat_transaction_id);
|
|
|
|
|
+ } catch (LogicException $e) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ $wechatState = WechatOrderStateEnum::from($result['order_state']);
|
|
|
|
|
+ if ($wechatState != $wechatPayment->order_state) {
|
|
|
|
|
+ $wechatPayment->order_state = $wechatState;
|
|
|
|
|
+ $wechatPayment->save();
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($wechatState === WechatOrderStateEnum::PENDING_SHIPMENT) {
|
|
|
|
|
+ $payment = ExtensionPaymentModel::find($paymentID);
|
|
|
|
|
+ $goods = OrderGoods::where(['order_id' => $payment['order_id']])->find();
|
|
|
|
|
+ $order = Order::find($payment['order_id']);
|
|
|
|
|
+ if ($wechatPayment->express_company == null) {
|
|
|
|
|
+ $delivery = WechatDeliveryEntity::where(['delivery_name' => $order['express_name']])->findOrEmpty();
|
|
|
|
|
+ if ($delivery->isEmpty()) {
|
|
|
|
|
+ Log::warning('未找到物流公司{transaction_id}', ['transaction_id' => $wechatPayment->wechat_transaction_id]);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ $wechatPayment->express_company = $delivery['delivery_id'];
|
|
|
|
|
+ $wechatPayment->express_company_name = $delivery['delivery_name'];
|
|
|
|
|
+ $wechatPayment->save();
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ $this->expressService->uploadShippingInfo(
|
|
|
|
|
+ transactionID: $wechatPayment->wechat_transaction_id,
|
|
|
|
|
+ openid: $payment['payment_result']['acc_resp_fields']['user_id'],
|
|
|
|
|
+ shippingList: [
|
|
|
|
|
+ 'tracking_no' => $order['express_number'],
|
|
|
|
|
+ 'express_company' => $wechatPayment->express_company,
|
|
|
|
|
+ 'item_desc' => $goods['goods_name'],
|
|
|
|
|
+ 'contact' => [
|
|
|
|
|
+ 'receiver_contact' => substr_replace($order['mobile'], '****', -8, 4),
|
|
|
|
|
+ ]
|
|
|
|
|
+ ]
|
|
|
|
|
+ );
|
|
|
|
|
+ } catch (LogicException $e) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|