feat : chef statement
This commit is contained in:
@@ -4,15 +4,24 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace App\Amqp\Consumer\Statement;
|
namespace App\Amqp\Consumer\Statement;
|
||||||
|
|
||||||
|
use App\Lib\Log;
|
||||||
|
use App\Service\Amqp\Statement\ChefService;
|
||||||
|
use Exception;
|
||||||
use Hyperf\Amqp\Message\Type;
|
use Hyperf\Amqp\Message\Type;
|
||||||
use Hyperf\Amqp\Result;
|
use Hyperf\Amqp\Result;
|
||||||
use Hyperf\Amqp\Annotation\Consumer;
|
use Hyperf\Amqp\Annotation\Consumer;
|
||||||
use Hyperf\Amqp\Message\ConsumerMessage;
|
use Hyperf\Amqp\Message\ConsumerMessage;
|
||||||
|
use Hyperf\Di\Annotation\Inject;
|
||||||
use PhpAmqpLib\Message\AMQPMessage;
|
use PhpAmqpLib\Message\AMQPMessage;
|
||||||
|
|
||||||
#[Consumer(exchange: 'hyperf', routingKey: 'hyperf', queue: 'hyperf', name: "ChefConsumer", nums: 1)]
|
#[Consumer(exchange: 'chef', routingKey: 'chef', queue: 'chef.statement', name: "ChefConsumer", nums: 1)]
|
||||||
class ChefConsumer extends ConsumerMessage
|
class ChefConsumer extends ConsumerMessage
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var Log
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected Log $log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Type|string 消息类型
|
* @var Type|string 消息类型
|
||||||
@@ -20,6 +29,22 @@ class ChefConsumer extends ConsumerMessage
|
|||||||
protected Type|string $type = Type::DIRECT;
|
protected Type|string $type = Type::DIRECT;
|
||||||
public function consumeMessage($data, AMQPMessage $message): Result
|
public function consumeMessage($data, AMQPMessage $message): Result
|
||||||
{
|
{
|
||||||
|
if (!$data['kitchen_id'] || !$data['cycle_id']) {
|
||||||
|
$this->log->error('ChefConsumer:error:NoData:'.json_encode($data));
|
||||||
|
return Result::ACK;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$service = new ChefService();
|
||||||
|
|
||||||
|
$service->cycleId = (int)$data['cycle_id'];
|
||||||
|
$service->kitchenId = (int)$data['kitchen_id'];
|
||||||
|
|
||||||
|
$service->handle();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->log->error('ChefConsumer:error:'.$e->getMessage().':data:'.json_encode($data));
|
||||||
|
}
|
||||||
|
|
||||||
return Result::ACK;
|
return Result::ACK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use Hyperf\Amqp\Annotation\Producer;
|
|||||||
use Hyperf\Amqp\Message\ProducerMessage;
|
use Hyperf\Amqp\Message\ProducerMessage;
|
||||||
use Hyperf\Amqp\Message\Type;
|
use Hyperf\Amqp\Message\Type;
|
||||||
|
|
||||||
#[Producer(exchange: 'hyperf', routingKey: 'hyperf')]
|
#[Producer(exchange: 'chef', routingKey: 'chef')]
|
||||||
class ChefProducer extends ProducerMessage
|
class ChefProducer extends ProducerMessage
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
38
app/Model/ChefStatement.php
Normal file
38
app/Model/ChefStatement.php
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Model;
|
||||||
|
|
||||||
|
use Hyperf\DbConnection\Model\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @property int $id
|
||||||
|
* @property string $date
|
||||||
|
* @property int $cycle_id
|
||||||
|
* @property int $kitchen_id
|
||||||
|
* @property int $chef_id
|
||||||
|
* @property int $sku_id
|
||||||
|
* @property int $sale
|
||||||
|
* @property int $refund
|
||||||
|
* @property int $cancel
|
||||||
|
* @property string $create_time
|
||||||
|
* @property string $update_time
|
||||||
|
*/
|
||||||
|
class ChefStatement extends Model
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The table associated with the model.
|
||||||
|
*/
|
||||||
|
protected ?string $table = 'chef_statement';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that are mass assignable.
|
||||||
|
*/
|
||||||
|
protected array $fillable = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that should be cast to native types.
|
||||||
|
*/
|
||||||
|
protected array $casts = ['id' => 'integer', 'cycle_id' => 'integer', 'kitchen_id' => 'integer', 'chef_id' => 'integer', 'sku_id' => 'integer', 'sale' => 'integer', 'refund' => 'integer', 'cancel' => 'integer'];
|
||||||
|
}
|
||||||
@@ -10,7 +10,8 @@ use Hyperf\DbConnection\Model\Model;
|
|||||||
/**
|
/**
|
||||||
* @property int $id
|
* @property int $id
|
||||||
* @property int $order_id
|
* @property int $order_id
|
||||||
* @property int $cycle_id
|
* @property int $cycle_id
|
||||||
|
* @property int $kitchen_id
|
||||||
* @property int $sku_id
|
* @property int $sku_id
|
||||||
* @property int $spu_id
|
* @property int $spu_id
|
||||||
* @property int $user_id
|
* @property int $user_id
|
||||||
@@ -38,7 +39,19 @@ class OrderGood extends Model
|
|||||||
/**
|
/**
|
||||||
* The attributes that should be cast to native types.
|
* The attributes that should be cast to native types.
|
||||||
*/
|
*/
|
||||||
protected array $casts = ['id' => 'integer', 'order_id' => 'integer', 'cycle_id' => 'integer', 'sku_id' => 'integer', 'spu_id' => 'integer', 'user_id' => 'integer', 'quantity' => 'integer', 'is_comment' => 'integer', 'copies' => 'integer', 'type' => 'integer'];
|
protected array $casts = [
|
||||||
|
'id' => 'integer',
|
||||||
|
'order_id' => 'integer',
|
||||||
|
'cycle_id' => 'integer',
|
||||||
|
'kitchen_id' => 'integer',
|
||||||
|
'sku_id' => 'integer',
|
||||||
|
'spu_id' => 'integer',
|
||||||
|
'user_id' => 'integer',
|
||||||
|
'quantity' => 'integer',
|
||||||
|
'is_comment' => 'integer',
|
||||||
|
'copies' => 'integer',
|
||||||
|
'type' => 'integer'
|
||||||
|
];
|
||||||
|
|
||||||
const string CREATED_AT = 'create_time';
|
const string CREATED_AT = 'create_time';
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,6 @@ class DispenseAddService extends BaseService
|
|||||||
'coupon_dispense_id' => $this->dispenseId,
|
'coupon_dispense_id' => $this->dispenseId,
|
||||||
'user_id' => $userId,
|
'user_id' => $userId,
|
||||||
]);
|
]);
|
||||||
// $producer = ApplicationContext::getContainer()->get(Producer::class);
|
|
||||||
$this->producer->produce($message);
|
$this->producer->produce($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,13 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace App\Service\Admin\Order;
|
namespace App\Service\Admin\Order;
|
||||||
|
|
||||||
|
use App\Amqp\Producer\Statement\FinancesProducer;
|
||||||
use App\Constants\Common\OrderCode;
|
use App\Constants\Common\OrderCode;
|
||||||
use App\Exception\ErrException;
|
use App\Exception\ErrException;
|
||||||
use App\Model\Order;
|
use App\Model\Order;
|
||||||
use App\Model\OrderGood;
|
use App\Model\OrderGood;
|
||||||
use App\Service\Admin\BaseService;
|
use App\Service\Admin\BaseService;
|
||||||
|
use Hyperf\Amqp\Producer;
|
||||||
use Hyperf\DbConnection\Db;
|
use Hyperf\DbConnection\Db;
|
||||||
use Hyperf\Di\Annotation\Inject;
|
use Hyperf\Di\Annotation\Inject;
|
||||||
|
|
||||||
@@ -32,7 +34,16 @@ class FinishService extends BaseService
|
|||||||
#[Inject]
|
#[Inject]
|
||||||
protected OrderGood $orderGoodModel;
|
protected OrderGood $orderGoodModel;
|
||||||
|
|
||||||
public function handle()
|
/**
|
||||||
|
* @var Producer
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected Producer $producer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function handle(): array
|
||||||
{
|
{
|
||||||
$kitchenId = (int)$this->request->input('kitchenId');
|
$kitchenId = (int)$this->request->input('kitchenId');
|
||||||
$cycleId = (int)$this->request->input('cycleId');
|
$cycleId = (int)$this->request->input('cycleId');
|
||||||
@@ -58,7 +69,14 @@ class FinishService extends BaseService
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 财务结算节点 消息队列 - 生成财务结算数据 完成订单数据
|
||||||
|
$financesMessage = new FinancesProducer([
|
||||||
|
'cycle_id' => $cycleId,
|
||||||
|
'kitchen_id' => $kitchenId,
|
||||||
|
]);
|
||||||
|
$this->producer->produce($financesMessage);
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
return $this->return->success();
|
return $this->return->success();
|
||||||
}
|
}
|
||||||
|
|||||||
146
app/Service/Amqp/Statement/ChefService.php
Normal file
146
app/Service/Amqp/Statement/ChefService.php
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Amqp\Statement;
|
||||||
|
|
||||||
|
use App\Constants\Common\OrderCode;
|
||||||
|
use App\Model\ChefStatement;
|
||||||
|
use App\Model\Cycle;
|
||||||
|
use App\Model\Kitchen;
|
||||||
|
use App\Model\OrderGood;
|
||||||
|
use App\Model\Sku;
|
||||||
|
use App\Model\Spu;
|
||||||
|
use Exception;
|
||||||
|
use Hyperf\DbConnection\Db;
|
||||||
|
use Hyperf\Di\Annotation\Inject;
|
||||||
|
|
||||||
|
class ChefService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public int $kitchenId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public int $cycleId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Cycle
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected Cycle $cycleModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Kitchen
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected Kitchen $kitchenModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var OrderGood
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected OrderGood $orderGoodModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Sku
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected Sku $skuModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Spu
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected Spu $spuModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ChefStatement
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected ChefStatement $chefStatementModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
$kitchen = $this->kitchenModel->where('id',$this->kitchenId)->first();
|
||||||
|
$cycle = $this->cycleModel->where('id',$this->cycleId)->first();
|
||||||
|
if (empty($kitchen) || empty($cycle)) {
|
||||||
|
throw new Exception('kitchenOrCycleError:'.json_encode([
|
||||||
|
'kitchen_id' => $this->kitchenId,
|
||||||
|
'cycle_id' => $this->cycleId,
|
||||||
|
'cycle' => $cycle,
|
||||||
|
'kitchen' => $kitchen,
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderGoods = $this->orderGoodModel
|
||||||
|
->where('cycle_id',$cycle->id)
|
||||||
|
->where('kitchen_id',$this->kitchenId)
|
||||||
|
->whereIn('status',[
|
||||||
|
OrderCode::FINISH,OrderCode::CANCEL,OrderCode::FINISH_REFUND
|
||||||
|
])
|
||||||
|
->get();
|
||||||
|
if ($orderGoods->isEmpty()) throw new Exception('orderGoodError:dataNull');
|
||||||
|
$orderGoods = $orderGoods->toArray();
|
||||||
|
|
||||||
|
$skuIds = array_unique(array_column($orderGoods, 'sku_id'));
|
||||||
|
$skuInfo = $this->skuModel->whereIn('id',$skuIds)->pluck('spu_id','id')->toArray();
|
||||||
|
if (empty($skuInfo)) throw new Exception('skuInfoError:dataNull');
|
||||||
|
$spuInfo = $this->spuModel->whereIn('id',array_unique(array_values($skuInfo)))->pluck('chef_id','id')->toArray();
|
||||||
|
|
||||||
|
$currentDate = date('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
$insertData = [];
|
||||||
|
foreach ($orderGoods as $orderGood) {
|
||||||
|
if (empty($insertData[$orderGood['sku_id']])) {
|
||||||
|
$insertData[$orderGood['sku_id']] = [
|
||||||
|
'date' => $cycle->dates,
|
||||||
|
'chef_id' => $spuInfo[$skuInfo[$orderGood['sku_id']]]['chef_id'] ?? 0,
|
||||||
|
'sku_id' => $orderGood['sku_id'],
|
||||||
|
'cycle_id' => $this->cycleId,
|
||||||
|
'kitchen_id' => $this->kitchenId,
|
||||||
|
'sale' => 0,
|
||||||
|
'refund' => 0,
|
||||||
|
'cancel' => 0,
|
||||||
|
'create_time' => $currentDate,
|
||||||
|
'update_time' => $currentDate
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
match ($orderGoods['status']) {
|
||||||
|
OrderCode::FINISH => $insertData[$orderGood['sku_id']]['sale'] += $orderGood['quantity'],
|
||||||
|
OrderCode::FINISH_REFUND => $insertData[$orderGood['sku_id']]['refund'] += $orderGood['quantity'],
|
||||||
|
OrderCode::CANCEL => $insertData[$orderGood['sku_id']]['cancel'] += $orderGood['quantity'],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($insertData)) throw new Exception('insertDataError:dataNull');
|
||||||
|
|
||||||
|
Db::transaction(function () use ($insertData) {
|
||||||
|
$delFlag = $this->chefStatementModel->where('cycle_id',$this->cycleId)->where('kitchen_id',$this->kitchenId)->delete();
|
||||||
|
|
||||||
|
$insertFlag = (new ChefStatement)->insert($insertData);
|
||||||
|
|
||||||
|
if (!$delFlag || !$insertFlag) {
|
||||||
|
throw new Exception('insertDataError:'.json_encode([
|
||||||
|
'data' => $insertData,
|
||||||
|
'cycle_id' => $this->cycleId,
|
||||||
|
'kitchen_id' => $this->kitchenId,
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -162,6 +162,7 @@ class PlaceOrderService extends BaseOrderService
|
|||||||
$orderGoodInsertArr[] = [
|
$orderGoodInsertArr[] = [
|
||||||
'order_id' => $this->orderId,
|
'order_id' => $this->orderId,
|
||||||
'cycle_id' => $this->cycleId,
|
'cycle_id' => $this->cycleId,
|
||||||
|
'kitchen_id' => $this->orderRes['site_info']['kitchen_id'],
|
||||||
'sku_id' => $one['id'],
|
'sku_id' => $one['id'],
|
||||||
'spu_id' => $one['spu_id'],
|
'spu_id' => $one['spu_id'],
|
||||||
'user_id' => $this->userId,
|
'user_id' => $this->userId,
|
||||||
|
|||||||
Reference in New Issue
Block a user