浏览代码

财务统计

gorden 9 月之前
父节点
当前提交
1fdb33588b

+ 125 - 0
app/admin/controller/finance/IncomeAndExpendController.php

@@ -0,0 +1,125 @@
+<?php
+
+namespace app\admin\controller\finance;
+
+use app\admin\service\sys_manage\DeptService;
+use app\common\Util;
+use app\model\Member;
+use support\Db;
+use support\Request;
+
+class IncomeAndExpendController
+{
+
+    public function list(Request $request)
+    {        
+        $days = $request->get('days');
+        if (!empty($days)) {
+            $days[0] = strtotime($days[0]);
+            $days[1] = strtotime($days[1]);
+            if (date('m', $days[0]) != date('m', $days[1])) {
+                return json_fail('暂不支持跨月查询');
+            }
+
+            $month = date('Ym', $days[0]);
+            $days[1] = strtotime(date('Y-m-d', $days[1]) . " 23:59:59");
+        } else {
+            $month = date('Ym');
+            $days[0] = strtotime(date('Y-m').'-01');
+            $days[1] = time();
+        }
+        $premises = $request->get('premises', DeptService::getPremisesList());
+        // $premisesKeyValue = [];
+        // foreach($premises as $item){
+        //     $premisesKeyValue[$item['key']] = $item['label'];
+        // }
+        $premisesKey = [];
+        foreach($premises as $item){
+            $premisesKey[] = $item['key'];
+        }
+
+        $dayNum = ($days[1] - $days[0])/(60*60*24);
+        $currentDay = date('Y-m-d',$days[0]);
+        $data =[];
+        $statistics = ['income_amount'=>0,'income_wxpay'=>0,'income_alipay'=>0,'income_qrcode'=>0,'expend_amount'=>0,'expend_wxpay'=>0,'expend_alipay'=>0];
+        for($i=0;$i<=$dayNum;$i++){
+            $dayData = [];
+            $dayData['day'] = $currentDay;
+            // 收入
+            if(Util::schema()->hasTable("data_income_{$month}")){
+                $wxpay = Db::table("data_income_{$month}")
+                ->where('data_income_days',$currentDay)
+                ->where('data_income_pay_type','WXPAY')
+                ->whereIn('join_data_income_dept_id',$premisesKey)
+                ->selectRaw("data_income_pay_type,SUM(data_income_amount) as data_income_amount")
+                ->groupBy('data_income_pay_type')
+                ->first();
+    
+                $alipay = Db::table("data_income_{$month}")
+                    ->where('data_income_days',$currentDay)
+                    ->where('data_income_pay_type','ALIPAY')
+                    ->whereIn('join_data_income_dept_id',$premisesKey)
+                    ->selectRaw("data_income_pay_type,SUM(data_income_amount) as data_income_amount")
+                    ->groupBy('data_income_pay_type')
+                    ->first();
+    
+                $qrcode = Db::table("data_income_{$month}")
+                    ->where('data_income_days',$currentDay)
+                    ->where('data_income_pay_type','QRCODE')
+                    ->whereIn('join_data_income_dept_id',$premisesKey)
+                    ->selectRaw("data_income_pay_type,SUM(data_income_amount) as data_income_amount")
+                    ->groupBy('data_income_pay_type')
+                    ->first();
+            }
+            
+            $dayData['income']['wxpay'] = $wxpay->data_income_amount ?? 0.00;
+            $statistics['income_wxpay'] += $dayData['income']['wxpay'];
+            $dayData['income']['alipay'] = $alipay->data_income_amount ?? 0.00;
+            $statistics['income_alipay'] += $dayData['income']['alipay'];
+            $dayData['income']['qrcode'] = $qrcode->data_income_amount ?? 0.00;
+            $statistics['income_qrcode'] += $dayData['income']['qrcode'];
+
+            $dayData['income']['amount'] = $dayData['income']['wxpay']+$dayData['income']['alipay']+$dayData['income']['qrcode'];
+
+            $statistics['income_amount'] += $dayData['income']['amount'];
+
+            // 支出
+            if(Util::schema()->hasTable("data_income_{$month}")){
+                $extendWxpay = Db::table("data_expend_{$month}")
+                    ->where('data_expend_days',$currentDay)
+                    ->where('data_expend_pay_type','WXPAY')
+                    ->whereIn('join_data_expend_dept_id',$premisesKey)
+                    ->selectRaw("data_expend_pay_type,SUM(data_expend_amount) as data_expend_amount")
+                    ->groupBy('data_expend_pay_type')
+                    ->first();
+
+                $extendAlipay = Db::table("data_expend_{$month}")
+                    ->where('data_expend_days',$currentDay)
+                    ->where('data_expend_pay_type','ALIPAY')
+                    ->whereIn('join_data_expend_dept_id',$premisesKey)
+                    ->selectRaw("data_expend_pay_type,SUM(data_expend_amount) as data_expend_amount")
+                    ->groupBy('data_expend_pay_type')
+                    ->first();
+            }
+            $dayData['expend']['wxpay'] = $extendWxpay->data_expend_amount ?? 0.00;
+            $statistics['expend_wxpay'] += $dayData['expend']['wxpay'];
+            $dayData['expend']['alipay'] = $extendAlipay->data_expend_amount ?? 0.00;
+            $statistics['expend_alipay'] += $dayData['expend']['alipay'];
+            $dayData['expend']['amount'] = $dayData['expend']['wxpay']+$dayData['expend']['alipay'];
+
+            $statistics['expend_amount'] += $dayData['expend']['amount'];
+
+            // 当前日期+1
+            $currentDay = date('Y-m-d',strtotime("+1 days",strtotime($currentDay)));
+
+            // 没有数据,跳过
+            if($dayData['expend']['amount'] == 0 && $dayData['income']['amount'] == 0){
+                continue;
+            }
+
+            $data[] = $dayData;
+        }
+
+        return json_success('',['rows'=>$data,'statistics'=>$statistics]);
+    }
+}

+ 59 - 6
app/admin/controller/finance/PremisesRevenueController.php

@@ -22,17 +22,70 @@ class PremisesRevenueController
         }
 
         $month = date('Ym');
-        
+        $data = [];
+        $statistics = ['income'=>0,'expend'=>0];
         foreach ($premises as $premise) {
+            $premisesData = [];
+            $premisesData['premises'] = $premise['label'];
             $premiseKey = intval($premise['key']);
+            $premisesData['expend'] = $premisesData['income'] = [
+                'card' => 0,
+                'recharge' => 0,
+                'goods' => 0,
+                'service' => 0,
+                'meals' => 0,
+                'package' => 0,
+                'amount' => 0
+            ];
             $income = Db::table("data_income_{$month}")
                 ->where('join_data_income_dept_id',$premiseKey)
-                ->groupBy('data_income_pay_type')
-            ;
+                ->selectRaw("data_income_classify,SUM(data_income_amount) as data_income_amount")
+                ->groupBy('data_income_classify')
+                ->get();
+            
+            foreach($income as $item){
+                if($item->data_income_classify == 'CARD'){
+                    $premisesData['income']['card']+=$item->data_income_amount;
+                }else if($item->data_income_classify == 'RECHARGE'){
+                    $premisesData['income']['recharge']+=$item->data_income_amount;
+                }else if($item->data_income_classify == 'GOODS'){
+                    $premisesData['income']['goods']+=$item->data_income_amount;
+                }else if(in_array($item->data_income_classify,['CHNMED','CHNNCD','SERVICE'])){
+                    $premisesData['income']['service']+=$item->data_income_amount;
+                }else if($item->data_income_classify == 'MEALS'){
+                    $premisesData['income']['meals']+=$item->data_income_amount;
+                }else if($item->data_income_classify == 'PACKAGE'){
+                    $premisesData['income']['package']+=$item->data_income_amount;
+                }
+                $premisesData['income']['amount'] += $item->data_income_amount;
+                $statistics['income'] += $premisesData['income']['amount'];
+            }
+            $expend = Db::table("data_expend_{$month}")
+                ->where('join_data_expend_dept_id',$premiseKey)
+                ->selectRaw("data_expend_classify,SUM(data_expend_amount) as data_expend_amount")
+                ->groupBy('data_expend_classify')
+                ->get();
+            
+            foreach($expend as $item){
+                if($item->data_expend_classify == 'CARD'){
+                    $premisesData['expend']['card']+=$item->data_expend_amount;
+                }else if($item->data_expend_classify == 'RECHARGE'){
+                    $premisesData['expend']['recharge']+=$item->data_expend_amount;
+                }else if($item->data_expend_classify == 'GOODS'){
+                    $premisesData['expend']['goods']+=$item->data_expend_amount;
+                }else if(in_array($item->data_expend_classify,['CHNMED','CHNNCD','SERVICE'])){
+                    $premisesData['expend']['service']+=$item->data_expend_amount;
+                }else if($item->data_expend_classify == 'MEALS'){
+                    $premisesData['expend']['meals']+=$item->data_expend_amount;
+                }else if($item->data_expend_classify == 'PACKAGE'){
+                    $premisesData['expend']['package']+=$item->data_expend_amount;
+                }
+                $premisesData['expend']['amount'] += $item->data_expend_amount;
+                $statistics['expend'] += $premisesData['expend']['amount'];
+            }
+
+            $data[] = $premisesData;
         }
-        
-        $data = Db::table("data_income_{$month}");
-        $statistics = [];
 
         return json_success('', ['rows'=>$data,'statistics'=>$statistics]);
     }

+ 36 - 37
app/admin/controller/order/PayDetailController.php

@@ -153,41 +153,40 @@ class PayDetailController extends Curd
                 Db::beginTransaction();
                 $data['pay_amount'] = $goods->goods_sales_price;
 
-                // $orderId = "OD" . date("YmdHis") . random_string(6, 'up');
-                // $orderGroupId = "OD" . date("YmdHis") . random_string(6, 'up');
-                // $orderData = [
-                //     'order_id' => $orderId,
-                //     'order_groupby' => $orderGroupId,
-                //     'join_order_member_id' => $data['join_pay_member_id'],
-                //     'order_name' => date('Y-m-d H:i:s') . '-订单',
-                //     'order_amount_total' => $data['pay_amount'],
-                //     'order_amount_pay' => $data['pay_amount'],
-                //     'order_amount_json' => '{"tax": 0, "freight": 0}',
-                //     'order_status_payment' => 'SUCCESS',
-                //     'order_category' => 'NORMAL',
-                //     'order_status_system' => 'WAITING',
-                //     'order_status_storage' => 'PENDING',
-                //     'order_addtimes' => time()
-                // ];
-                // $sku = GoodsSku::where('join_sku_goods_id', $params['goods_id'])->first();
-                // dump($sku);
-
-                // Order::insert($orderData);
-                // $orderSheetData = [
-                //     'join_sheet_member_id' => $data['join_pay_member_id'],
-                //     'join_sheet_order_id' => $orderId,
-                //     'join_sheet_goods_id' => $params['goods_id'],
-                //     'join_sheet_goods_sku_id' => $sku ? $sku->goods_sku_id : 0,
-                //     'order_sheet_status' => 'PAYING',
-                //     'order_sheet_category' => 'NORMAL',
-                //     'order_sheet_num' => 1,
-                //     'order_sheet_price' => $data['pay_amount'],
-                //     'order_sheet_amount' => $data['pay_amount'],
-                //     'order_sheet_pay' => $data['pay_amount'],
-                //     'order_sheet_addtimes' => time()
-                // ];
-
-                // OrderSheet::insert($orderSheetData);
+                $orderId = "OD" . date("YmdHis") . random_string(6, 'up');
+                $orderGroupId = "OD" . date("YmdHis") . random_string(6, 'up');
+                $orderData = [
+                    'order_id' => $orderId,
+                    'order_groupby' => $orderGroupId,
+                    'join_order_member_id' => $data['join_pay_member_id'],
+                    'order_name' => date('Y-m-d H:i:s') . '-订单',
+                    'order_amount_total' => $data['pay_amount'],
+                    'order_amount_pay' => $data['pay_amount'],
+                    'order_amount_json' => '{"tax": 0, "freight": 0}',
+                    'order_status_payment' => 'SUCCESS',
+                    'order_category' => 'NORMAL',
+                    'order_status_system' => 'WAITING',
+                    'order_status_storage' => 'PENDING',
+                    'order_addtimes' => time()
+                ];
+                $sku = GoodsSku::where('join_sku_goods_id', $params['goods_id'])->first();
+
+                Order::insert($orderData);
+                $orderSheetData = [
+                    'join_sheet_member_id' => $data['join_pay_member_id'],
+                    'join_sheet_order_id' => $orderId,
+                    'join_sheet_goods_id' => $params['goods_id'],
+                    'join_sheet_goods_sku_id' => $sku ? $sku->goods_sku_id : 0,
+                    'order_sheet_status' => 'PAYING',
+                    'order_sheet_category' => 'NORMAL',
+                    'order_sheet_num' => 1,
+                    'order_sheet_price' => $data['pay_amount'],
+                    'order_sheet_amount' => $data['pay_amount'],
+                    'order_sheet_pay' => $data['pay_amount'],
+                    'order_sheet_addtimes' => time()
+                ];
+
+                OrderSheet::insert($orderSheetData);
 
                 Db::commit();
             } catch (\Exception $e) {
@@ -196,8 +195,8 @@ class PayDetailController extends Curd
 
                 throw new BusinessException("数据错误");
             }
-            // $data['join_pay_order_id'] = $orderGroupId;
-            // $data['join_pay_object_json'] = json_encode(['order_id' => $orderId]);
+            $data['join_pay_order_id'] = $orderGroupId;
+            $data['join_pay_object_json'] = json_encode(['order_id' => $orderId]);
 
             $rate = 0;
             if (!empty($goods->goods_attribute_json)) {

+ 2 - 1
app/admin/controller/order/WholeController.php

@@ -84,7 +84,7 @@ class WholeController extends Curd
     {
         $model = $this->model->with([
             'sheet' => function ($query) {
-                $query->select('join_sheet_order_id', 'order_sheet_id', 'join_sheet_goods_id');
+                $query->select('join_sheet_order_id', 'order_sheet_id', 'join_sheet_goods_id','order_sheet_num');
             },
             'member' => function ($query) {
                 $query->select('member_id', 'member_mobile');
@@ -141,6 +141,7 @@ class WholeController extends Curd
                 $goods = Goods::where('goods_id', $item['sheet']['join_sheet_goods_id'])->first();
                 $item['sheet']['goods_name'] = $goods->goods_name ?? '';
                 $item['sheet']['goods_classify'] = $goods->goods_classify ?? '';
+                $item['sheet']['order_sheet_num'] = intval($item['sheet']['order_sheet_num']);
             }
         }
 

+ 1 - 0
app/admin/service/member/MemberService.php

@@ -306,6 +306,7 @@ class MemberService
             
 
             $categoryName = [];
+            $categoryIds = array_unique($categoryIds);
             foreach ($categoryIds as $id) {
                 $category = SysCategory::where('category_id', $id)->first();
                 if (!empty($category->category_super_path)) {

+ 3 - 0
route/admin.php

@@ -107,6 +107,9 @@ Route::group('/admin', function () {
         Route::group('/premisesMember',function (){
             Route::get('/list',[\app\admin\controller\finance\PremisesMemberController::class,'list']);
         });
+        Route::group('/incomeAndExpend',function (){
+            Route::get('/list',[\app\admin\controller\finance\IncomeAndExpendController::class,'list']);
+        });
     });
     /* 系统管理中心 */
     Route::group('/sys', function () {