Browse Source

0804-0142-h01

Zory 1 day ago
parent
commit
dea24a6fb0

+ 87 - 0
app/command/BillsDay.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace app\command;
+
+use app\model\saas\SaasBillsDay;
+use app\model\saas\SaasOrder;
+use app\model\saas\SaasStore;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+
+class BillsDay extends Command
+{
+
+
+    protected static string $defaultName = 'bills:day';
+    protected static string $defaultDescription = '每日账单';
+
+
+    /**
+     * @return void
+     */
+    protected function configure()
+    {
+        $this->addArgument('day', InputArgument::OPTIONAL, 'Name description');
+    }
+
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+        try {
+            $output->writeln("开始统计每日账单====>" . getDateFull());
+            $nextPage = 1;
+            $day = $input->getArgument("day");
+            $day = $day ?: date("Y-m-d",strtotime("-1 day"));
+            $betweenTime = [date('Y-m-d 00:00:00',strtotime($day)), date('Y-m-d 23:59:59',strtotime($day))];
+            while (is_numeric($nextPage)) {
+                $store = (new SaasStore)->where("status",1)->page($nextPage,10)->select();
+                if ($store->isEmpty()) {
+                    $output->writeln("没有任务啦==".getDateFull());
+                    $nextPage = null;
+                    return true;
+                }
+                $orderModel = (new SaasOrder);
+                foreach ($store as $key=>$item) {
+                    $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();
+                    $dayData = (new SaasBillsDay)->where(['poi_id'=>$item['poi_id'],'day'=>$day])->findOrEmpty();
+                    if ($dayData->isEmpty()) {
+                        echo getDateFull()."==【新增】{$item['poi_id']}=={$day}==\n";
+                        $dayData->insertGetId([
+                            "poi_id"    => $item['poi_id'],
+                            "title"     => date('m月d日',strtotime($day))."收入",
+                            "day"       => $day,
+                            "end_day"   => date("Y-m-d",strtotime("+5 day",strtotime($day))),
+                            "order_money"       => $orderDay['total']??'0',
+                            "life_fee_total"    => $orderDay['life_fee_total']??'0',
+                            "star_fee_total"    => $orderDay['star_fee_total']??'0',
+                            "sys_fee_total"     => $orderDay['sys_fee_total']??'0',
+                            "store_money"       => $orderDay['total'] - ($orderDay['life_fee_total']+$orderDay['star_fee_total']+$orderDay['sys_fee_total']),
+                            "order_num"         => $orderDay['num'],
+                        ]);
+                    } else {
+                        echo getDateFull()."==【更新】{$item['poi_id']}=={$day}==\n";
+                        $dayData->save([
+                            "order_money"       => $orderDay['total']??'0',
+                            "life_fee_total"    => $orderDay['life_fee_total']??'0',
+                            "star_fee_total"    => $orderDay['star_fee_total']??'0',
+                            "sys_fee_total"     => $orderDay['sys_fee_total']??'0',
+                            "store_money"       => $orderDay['total'] - ($orderDay['life_fee_total']+$orderDay['star_fee_total']+$orderDay['sys_fee_total']),
+                            "order_num"         => $orderDay['num'],
+                        ]);
+                    }
+                }
+                $nextPage = $nextPage+1;
+                $output->writeln("进入下一页=={$nextPage}==".getDateFull());
+            }
+        } catch (\Throwable $throwable) {
+            echo getDateFull()."===每日账单错误\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            echo $throwable->getMessage()."\n";
+        }
+        return self::SUCCESS;
+    }
+
+}

+ 21 - 0
app/command/BillsMon.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace app\command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class BillsMon extends Command
+{
+
+
+    protected static string $defaultName = 'bills:mon';
+    protected static string $defaultDescription = '月度账单-每日更新';
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+
+    }
+
+}

+ 37 - 0
app/controller/admin/Bills.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\controller\admin;
+
+
+use app\extra\basic\Base;
+use app\middleware\AuthMiddleware;
+use app\service\saas\BillDayService;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Attributes\Route\Controller;
+use LinFly\Annotation\Attributes\Route\GetMapping;
+use LinFly\Annotation\Attributes\Route\Middleware;
+use support\Request;
+use support\Response;
+
+#[Controller("/api/bills"),Middleware(AuthMiddleware::class)]
+class Bills extends Base
+{
+
+    #[Inject]
+    protected BillDayService $serviceDay;
+
+    #[GetMapping('list')]
+    public function getDataList(Request $request): Response
+    {
+        try {
+            $param = $request->all();
+            $data = $this->serviceDay->setModel()->getList($param,['store' => function($query){
+                $query->field("poi_id,poi_name,poi_address,nick_name,poi_city");
+            }]);
+            return successTrans("success.data",pageFormat($data),200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+}

+ 1 - 1
app/controller/merchant/Order.php

@@ -53,7 +53,7 @@ class Order extends Base
             },'user' => function($query){
                 $query->field("openid,nickname,avatar");
             },"star" => function($query){
-                $query->field("uid,nick_name,avatar_url");
+                $query->field("uid,nick_name,avatar_url,unique_id");
             }],true,['end_time','refund_num'],["end_time" => function ($resp,$next) {
                 return timeDiff(strtotime("+30 minutes",strtotime($next['create_at'])),time());
             },'refund_num' => function($resp,$next){

+ 10 - 0
app/controller/notify/Life.php

@@ -5,6 +5,7 @@ namespace app\controller\notify;
 use app\extra\basic\Base;
 use app\extra\dyMini\PlanLive;
 use app\model\saas\SaasGoods;
+use app\model\saas\SaasOrder;
 use LinFly\Annotation\Attributes\Route\Controller;
 use LinFly\Annotation\Attributes\Route\GetMapping;
 use LinFly\Annotation\Attributes\Route\PostMapping;
@@ -74,6 +75,15 @@ class Life extends Base
                         (new SaasGoods)->where("goods_id",$content['product_id'])->update(['status' => 3]);
                     }
                     break;
+                case "verify": // 核销
+                    $order = (new SaasOrder)->where("order_sn",$content['certificate']['order_id'])->findOrEmpty();
+                    if (!$order->isEmpty()) {
+                        $order->save([
+                            "express_status"    => 3,
+                            "done_at"           => getDateFull(),
+                        ]);
+                    }
+                    break;
                 default:
                     break;
             }

+ 13 - 7
app/model/saas/SaasBillsDay.php

@@ -3,16 +3,17 @@
 namespace app\model\saas;
 
 use app\extra\basic\Model;
+use think\model\relation\HasOne;
 
 
 /**
- * @property integer $id (主键)
- * @property mixed $poi_id 
- * @property string $title 
- * @property mixed $day 
- * @property integer $status 0待结算1已结算
- * @property mixed $end_day 结算时间
- * @property integer $order_money 核销金额
+ * @property integer $id (主键)
+ * @property mixed $poi_id 
+ * @property string $title 
+ * @property mixed $day 
+ * @property integer $status 0待结算1已结算
+ * @property mixed $end_day 结算时间
+ * @property integer $order_money 核销金额
  * @property integer $store_money 结算金额
  */
 class SaasBillsDay extends Model
@@ -46,4 +47,9 @@ class SaasBillsDay extends Model
     public bool $timestamps = false;
 
 
+    public function store(): HasOne
+    {
+        return $this->hasOne(SaasStore::class,"poi_id","poi_id");
+    }
+
 }

+ 13 - 7
app/model/saas/SaasBillsMon.php

@@ -3,16 +3,17 @@
 namespace app\model\saas;
 
 use app\extra\basic\Model;
+use think\model\relation\HasOne;
 
 
 /**
- * @property integer $id (主键)
- * @property mixed $poi_id 
- * @property string $title 
- * @property mixed $mon 月份
- * @property integer $status 0待结算1已结算
- * @property mixed $end_day 结算时间
- * @property integer $order_money 核销金额
+ * @property integer $id (主键)
+ * @property mixed $poi_id 
+ * @property string $title 
+ * @property mixed $mon 月份
+ * @property integer $status 0待结算1已结算
+ * @property mixed $end_day 结算时间
+ * @property integer $order_money 核销金额
  * @property integer $store_money 结算金额
  */
 class SaasBillsMon extends Model
@@ -46,4 +47,9 @@ class SaasBillsMon extends Model
     public bool $timestamps = false;
 
 
+    public function store(): HasOne
+    {
+        return $this->hasOne(SaasStore::class,"poi_id","poi_id");
+    }
+
 }

+ 45 - 0
app/service/saas/BillDayService.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace app\service\saas;
+
+use app\extra\basic\Service;
+use app\model\saas\SaasBillsDay;
+
+class BillDayService extends Service
+{
+
+    /**
+     *
+     * @return $this
+     */
+    public function setModel()
+    {
+        $this->mode = (new SaasBillsDay);
+        return $this;
+    }
+
+
+    /**
+     *
+     * @param array $param
+     * @return array
+     */
+    public function searchFilter(array $param = []): array
+    {
+        $filter = [];
+        // 起止时间
+        if (!empty($param['day'])) {
+            $times = between_time($param['day']);
+            $start = date('Y-m-d',$times['start_time']);
+            $end = date('Y-m-d',($times['end_time'] + 86400));
+            $filter[] = ['day', '>=', $start ];
+            $filter[] = ['day', '<', $end ];
+        }
+        !empty($param['poi_id']) && $filter[] = ["poi_id", '=', $param['poi_id']];
+        !empty($param['poi']) && $filter[] = ["poi_id", '=', $param['poi']];
+        !empty($param['status']) && $filter[] = ["status", '=', $param['status']];
+        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        return $filter;
+    }
+
+}