hzd 3 months ago
parent
commit
22b936bed2
2 changed files with 151 additions and 0 deletions
  1. 150 0
      application/cron/MateReport.php
  2. 1 0
      config/cron.php

+ 150 - 0
application/cron/MateReport.php

@@ -0,0 +1,150 @@
+<?php
+namespace app\cron;
+
+use app\common\util\AppMsg;
+use think\Db;
+use yunwuxin\cron\Task;
+
+class MateReport extends Task
+{
+    public function configure()
+    {
+        $this->monthlyOn(25); // 每月25号0:00执行一次
+    }
+
+    /**
+     * 执行任务
+     * @return mixed
+     */
+    protected function execute()
+    {
+        try {
+            $this->remind();
+        } catch (\Exception $e) {
+            trace($e->getMessage());
+        }
+    }
+
+
+    public function remind(){
+        $sday = date('Y-m', strtotime('last month')).'-25 ';
+        $starttime = $sday." 00:00:00";
+        $eday = date('Y-m').'-25 ';
+        $endtime = $eday."00:00:00";
+        $orgs = Db::name("org")->where('type',2)->where('enable',1)->where('del',0)->select();
+        foreach($orgs as $k=>$v){
+            $goods = Db::name('mate_goods')
+                ->where('org_id',$v['id'])
+                ->where('del',0)
+                ->where('enable',1)
+                ->field('id,nums')
+                ->select();
+            if(!$goods){ // 无商品不生成记录
+                continue;
+            }
+            $innums = 0;
+            $outnums = 0;
+            $usenums = 0;
+            $cznums = 0;
+            $nums = 0;
+
+            $reportGoods = [];
+            foreach ($goods as $kk=>$vv){
+                $innums1 = Db::name('mate_apply_goods')
+                    ->alias('a')
+                    ->join('mate_apply b','a.apply_id = b.id')
+                    ->where('b.del',0)
+                    ->where('b.type',1)
+                    ->where('b.org_id',$v['id'])
+                    ->where('a.goods_id',$vv['id'])
+                    ->where('b.create_time','>=',$starttime)
+                    ->where('b.create_time','<',$endtime)
+                    ->sum('a.nums');
+                $innums += $innums1;
+                $outnums1 = Db::name('mate_apply_goods')
+                    ->alias('a')
+                    ->join('mate_apply b','a.apply_id = b.id')
+                    ->where('b.del',0)
+                    ->where('b.type',2)
+                    ->where('b.org_id',$v['id'])
+                    ->where('a.goods_id',$vv['id'])
+                    ->where('b.create_time','>=',$starttime)
+                    ->where('b.create_time','<',$endtime)
+                    ->sum('a.nums');
+                $outnums += $outnums1;
+
+                $usenums1 = Db::name('todo_mate_item')
+                    ->alias('a')
+                    ->join('todo_mate b','a.todo_mate_id = b.id')
+                    ->where('b.org_id',$v['id'])
+                    ->where('a.items_id',$vv['id'])
+                    ->where('b.create_time','>=',$starttime)
+                    ->where('b.create_time','<',$endtime)
+                    ->sum('a.total');
+                $usenums += $usenums1;
+
+                $cznums1 = Db::name('mate_goods_log')
+                    ->where('type',1)
+                    ->where('org_id',$v['id'])
+                    ->where('goods_id',$vv['id'])
+                    ->where('create_time','>=',$starttime)
+                    ->where('create_time','<',$endtime)
+                    ->sum('nums');
+                $cznums += $cznums1;
+
+                $nums += $vv['nums'];
+
+                $reportGoods[] = [
+                    'org_id' => $v['id'],
+                    'goods_id' => $vv['id'],
+                    'in_nums' => $innums1,
+                    'out_nums' => $outnums1,
+                    'use_nums' => $usenums1,
+                    'cz_nums' => $cznums1,
+                    'nums' => $vv['nums'],
+                ];
+            }
+
+            Db::startTrans();
+            try{
+                $reportId = Db::name("mate_report")->insertGetId([
+                    'org_id' => $v['id'],
+                    'start_time' => $sday,
+                    'end_time' => $eday,
+                    'in_nums' => $innums,
+                    'out_nums' => $outnums,
+                    'use_nums' => $usenums,
+                    'cz_nums' => $cznums,
+                    'nums' => $nums,
+                    'create_time' => date("Y-m-d H:i:s")
+                ]);
+
+                $arr = [];
+                foreach ($reportGoods as $kk=>$vv){
+                    $vv['report_id'] = $reportId;
+                    $arr[] = $vv;
+                    if(count($arr) == 200){
+                        $res = Db::name("mate_report_goods")->insertAll($arr);
+                        if($res != count($arr)){
+                            exception("操作失败");
+                        }
+                        $arr = [];
+                    }
+                }
+                if(count($arr) > 0){
+                    $res = Db::name("mate_report_goods")->insertAll($arr);
+                    if($res != count($arr)){
+                        exception("操作失败");
+                    }
+                }
+
+                Db::commit();
+            }catch (\Exception $e){
+                Db::rollback();
+            }
+        }
+    }
+
+
+
+}

+ 1 - 0
config/cron.php

@@ -21,5 +21,6 @@ return [
         \app\cron\Orders::class,
         \app\cron\ConveyCron::class,
         \app\cron\Wlps::class,
+        \app\cron\MateReport::class,
     ]
 ];