BillsDay.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace app\command;
  3. use app\model\saas\SaasBillsDay;
  4. use app\model\saas\SaasOrder;
  5. use app\model\saas\SaasStore;
  6. use Symfony\Component\Console\Command\Command;
  7. use Symfony\Component\Console\Input\InputInterface;
  8. use Symfony\Component\Console\Output\OutputInterface;
  9. use Symfony\Component\Console\Input\InputArgument;
  10. class BillsDay extends Command
  11. {
  12. protected static string $defaultName = 'bills:day';
  13. protected static string $defaultDescription = '每日账单';
  14. /**
  15. * @return void
  16. */
  17. protected function configure()
  18. {
  19. $this->addArgument('day', InputArgument::OPTIONAL, 'Name description');
  20. }
  21. protected function execute(InputInterface $input, OutputInterface $output): int
  22. {
  23. try {
  24. $output->writeln("开始统计每日账单====>" . getDateFull());
  25. $nextPage = 1;
  26. $day = $input->getArgument("day");
  27. $day = $day ?: date("Y-m-d",strtotime("-1 day"));
  28. $betweenTime = [date('Y-m-d 00:00:00',strtotime($day)), date('Y-m-d 23:59:59',strtotime($day))];
  29. while (is_numeric($nextPage)) {
  30. $store = (new SaasStore)->where("status",1)->page($nextPage,10)->select();
  31. if ($store->isEmpty()) {
  32. $output->writeln("没有任务啦==".getDateFull());
  33. $nextPage = null;
  34. return true;
  35. }
  36. $orderModel = (new SaasOrder);
  37. foreach ($store as $key=>$item) {
  38. $orderDay = $orderModel->where(['poi_id' => $item['poi_id'],"status" => 2,'express_status' => 3])->whereBetween("done_at",$betweenTime)->field("sum(price * number) as total,sum(life_fee) as life_fee_total,sum(star_fee) as star_fee_total,sum(sys_fee) as sys_fee_total,count(1) as num")->findOrEmpty();
  39. $dayData = (new SaasBillsDay)->where(['poi_id'=>$item['poi_id'],'day'=>$day])->findOrEmpty();
  40. if ($dayData->isEmpty()) {
  41. echo getDateFull()."==【新增】{$item['poi_id']}=={$day}==\n";
  42. $dayData->insertGetId([
  43. "poi_id" => $item['poi_id'],
  44. "title" => date('m月d日',strtotime($day))."收入",
  45. "day" => $day,
  46. "end_day" => date("Y-m-d",strtotime("+5 day",strtotime($day))),
  47. "order_money" => $orderDay['total']??'0',
  48. "life_fee_total" => $orderDay['life_fee_total']??'0',
  49. "star_fee_total" => $orderDay['star_fee_total']??'0',
  50. "sys_fee_total" => $orderDay['sys_fee_total']??'0',
  51. "store_money" => $orderDay['total'] - ($orderDay['life_fee_total']+$orderDay['star_fee_total']+$orderDay['sys_fee_total']),
  52. "order_num" => $orderDay['num'],
  53. ]);
  54. } else {
  55. echo getDateFull()."==【更新】{$item['poi_id']}=={$day}==\n";
  56. $dayData->save([
  57. "order_money" => $orderDay['total']??'0',
  58. "life_fee_total" => $orderDay['life_fee_total']??'0',
  59. "star_fee_total" => $orderDay['star_fee_total']??'0',
  60. "sys_fee_total" => $orderDay['sys_fee_total']??'0',
  61. "store_money" => $orderDay['total'] - ($orderDay['life_fee_total']+$orderDay['star_fee_total']+$orderDay['sys_fee_total']),
  62. "order_num" => $orderDay['num'],
  63. ]);
  64. }
  65. }
  66. $nextPage = $nextPage+1;
  67. $output->writeln("进入下一页=={$nextPage}==".getDateFull());
  68. }
  69. } catch (\Throwable $throwable) {
  70. echo getDateFull()."===每日账单错误\n";
  71. echo $throwable->getFile()."\n";
  72. echo $throwable->getLine()."\n";
  73. echo $throwable->getMessage()."\n";
  74. }
  75. return self::SUCCESS;
  76. }
  77. }