diff --git a/app/Amqp/Consumer/Statement/FinancesConsumer.php b/app/Amqp/Consumer/Statement/FinancesConsumer.php index 427639d..df29d05 100644 --- a/app/Amqp/Consumer/Statement/FinancesConsumer.php +++ b/app/Amqp/Consumer/Statement/FinancesConsumer.php @@ -11,6 +11,7 @@ use App\Model\Cycle; use App\Model\FinancesStatement; use App\Model\Kitchen; use App\Model\Order; +use Exception; use Hyperf\Amqp\Message\Type; use Hyperf\Amqp\Producer; use Hyperf\Amqp\Result; @@ -75,54 +76,55 @@ class FinancesConsumer extends ConsumerMessage */ public function consumeMessage($data, AMQPMessage $message): Result { - if (!$data['kitchen_id'] || !$data['cycle_id']) { - $this->log->error('FinancesConsumer:error:NoData:'.json_encode($data)); + try { + if (!$data['kitchen_id'] || !$data['cycle_id']) throw new Exception('FinancesConsumer:error:NoData:'.json_encode($data)); + + $kitchen = $this->kitchenModel->where('id',$data['kitchen_id'])->first(); + $cycle = $this->cycleModel->where('id',$data['cycle_id'])->first(); + if (empty($kitchen) || empty($cycle)) { + throw new Exception('FinancesConsumer:error:kitchenOrCycleError:'.json_encode([ + 'kitchen_id' => $data['kitchen_id'], + 'cycle_id' => $data['cycle_id'], + 'cycle' => $cycle, + 'kitchen' => $kitchen, + 'data' => $data, + ])); + } + + $statementInfo = $this->financesStatementModel->getStatementByCycleIdAndKitchenId((int)$data['cycle_id'],(int)$data['kitchen_id']); + if (!empty($statement)) $statementInfo->delete(); + + $statement = new FinancesStatement(); + + $statement->date = $cycle->dates; + $statement->cycle_id = $cycle->id; + $statement->kitchen_id = $kitchen->id; + $statement->discounts = $this->orderModel->getDiscountsByCycleIdAndKitchenId($cycle->id, $kitchen->id); + $statement->net_sales = $this->orderModel->getNetSalesByCycleIdAndKitchenId($cycle->id, $kitchen->id); + $statement->gross_sales = $statement->net_sales + $statement->discounts; + $statement->option_order_number = $this->orderModel->getOrderNumberByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_OPTIONAL); + $statement->option_copies = $this->orderModel->getCopiesByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_OPTIONAL); + $statement->meal_order_number = $this->orderModel->getOrderNumberByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_MEAL); + $statement->meal_copies = $this->orderModel->getCopiesByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_MEAL); + + if (!$statement->save()) { + throw new Exception('FinancesConsumer:error:FinancesStatement:'.json_encode([ + 'statement' => $statement, + 'data' => $data, + ])); + } + + // 厨师商品结算节点 消息队列 - 生成结算数据 + $chefMessage = new ChefProducer([ + 'cycle_id' => $data['cycle_id'], + 'kitchen_id' => $data['kitchen_id'], + ]); + $this->producer->produce($chefMessage); + + return Result::ACK; + } catch (Exception $e) { + $this->log->error($e->getMessage()); return Result::ACK; } - - $kitchen = $this->kitchenModel->where('id',$data['kitchen_id'])->first(); - $cycle = $this->cycleModel->where('id',$data['cycle_id'])->first(); - if (empty($kitchen) || empty($cycle)) { - $this->log->error('FinancesConsumer:error:kitchenOrCycleError:'.json_encode([ - 'kitchen_id' => $data['kitchen_id'], - 'cycle_id' => $data['cycle_id'], - 'cycle' => $cycle, - 'kitchen' => $kitchen, - 'data' => $data, - ])); - return Result::ACK; - } - - $statement = $this->financesStatementModel->getStatementByCycleIdAndKitchenId($data['cycle_id'],$data['kitchen_id']); - if (!empty($statement)) $statement->delete(); - - $statement = new FinancesStatement(); - - $statement->date = $cycle->dates; - $statement->cycle_id = $cycle->id; - $statement->kitchen_id = $kitchen->id; - $statement->discounts = $this->orderModel->getDiscountsByCycleIdAndKitchenId($cycle->id, $kitchen->id); - $statement->net_sales = $this->orderModel->getNetSalesByCycleIdAndKitchenId($cycle->id, $kitchen->id); - $statement->gross_sales = $statement->net_sales + $statement->discounts; - $statement->option_order_number = $this->orderModel->getOrderNumberByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_OPTIONAL); - $statement->option_copies = $this->orderModel->getCopiesByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_OPTIONAL); - $statement->meal_order_number = $this->orderModel->getOrderNumberByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_MEAL); - $statement->meal_copies = $this->orderModel->getCopiesByCycleIdAndKitchenId($cycle->id, $kitchen->id, OrderCode::ORDER_TYPE_MEAL); - - if (!$statement->save()) { - $this->log->error('FinancesConsumer:error:FinancesStatement:'.json_encode([ - 'statement' => $statement, - 'data' => $data, - ])); - } - - // 厨师商品结算节点 消息队列 - 生成结算数据 - $chefMessage = new ChefProducer([ - 'cycle_id' => $data['cycle_id'], - 'kitchen_id' => $data['kitchen_id'], - ]); - $this->producer->produce($chefMessage); - - return Result::ACK; } }