sunxbiao 1 год назад
Родитель
Сommit
e9b98988a6
1 измененных файлов с 418 добавлено и 1 удалено
  1. 418 1
      app/controller/api/cron/CommissionCron.php

+ 418 - 1
app/controller/api/cron/CommissionCron.php

@@ -787,11 +787,14 @@ where o.paid=1 and o.is_settlement=1 and settlement_time between '$this->startMo
787 787
                             'hf_clear_time' => $close_time
788 788
                         ]);
789 789
                     }
790
-                    //
790
+                    // 如果 当前时间 > 汇付分账成功时间
791 791
                     if (isset($res['status']) && time() > strtotime($close_time)) {
792
+                        // 计算 平台收支明细 金额
792 793
                         if ($store_order['mer_id'] == 496) {
794
+                            // 实际支付金额 - 发放的养老金 - 手续费
793 795
                             $ru_money = $store_order['pay_price'] - $yanglao - $res['fee_amt'];
794 796
                         } else {
797
+                            // 实际支付金额 - 发放的养老金 - 手续费  有问题,??
795 798
                             $ru_money = $store_order['pay_price'] * (1 - $shop_bonus_setting['shop_bonus_rate'] / 100) - $res['fee_amt'] + +$store_order['pay_postage'];
796 799
                         }
797 800
                         $store_order['pay_time'] = '';//线上支付的
@@ -1151,6 +1154,420 @@ where o.paid=1 and o.is_settlement=1 and settlement_time between '$this->startMo
1151 1154
         return app('json')->success('获取平台收支明细成功');
1152 1155
     }
1153 1156
 
1157
+    public function platform_income_detail_get1()
1158
+    {
1159
+
1160
+        // 1、获取所有 商户 商户名称非空, 状态为正常、商户状态为开启
1161
+        $merchant_list = Db::name('merchant')
1162
+            ->where('status', 1)
1163
+            ->where('mer_state', 1)
1164
+            ->where("mer_name  != ''")
1165
+            ->column('mer_id');
1166
+
1167
+        // 2、获取 已有的 平台收支明细,并创建 唯一的 key
1168
+        $unique_list = [];
1169
+        $enterprise_platform_income_detail_list = Db::name('enterprise_platform_income_detail')
1170
+            ->select()
1171
+            ->toArray();
1172
+        foreach ($enterprise_platform_income_detail_list as $item) {
1173
+            // deal_type : '交易类型 1自营订单入账(商户) 2佣金提现到账(商户) 3订单支付 4商户佣金提现 5用户佣金提现 6订单入账 7 创客自营订单让利 '
1174
+            // user_extra_id : 提现表id
1175
+            $unique_list[] = $item['deal_type'] . $item['uid'] . $item['order_sn'] . $item['order_id'] . $item['user_extra_id'] . $item['mer_id'];
1176
+        }
1177
+
1178
+        // 3、获取订单信息
1179
+        // 1自营订单入账金额=已结算订单金额-运费-养老金-汇付通道服务费; 订单结算的时候才统计
1180
+        // 查询 该商户 所有的 平台订单(已支付、平台订单、已结算)
1181
+        $store_order_list = Db::name('store_order')
1182
+            ->whereIn('mer_id', $merchant_list)
1183
+            ->where('paid', 1)
1184
+            ->where('douhuomall', 0)
1185
+            ->where('is_settlement', 1)
1186
+            ->order('order_id', 'desc')
1187
+            ->select()
1188
+            ->toArray();
1189
+        $store_order_map = array_reduce($store_order_list, function($result, $order) {
1190
+            // 根据 mer_id 进行分组
1191
+            $result[$order['mer_id']][] = $order;
1192
+            return $result;
1193
+        }, []);
1194
+        // 用户订单表
1195
+        $group_order = Db::name('store_group_order')
1196
+            ->whereIn('group_order_id', array_column($store_order_list,'group_order_id'))
1197
+            ->select()
1198
+            ->toArray();
1199
+        $group_order_map = array_column($group_order, null, 'group_order_id');
1200
+        // // 查询分账信息
1201
+        // $store_split_order = Db::name('store_split_order')
1202
+        //     ->whereIn('group_order_id', array_column($group_order,'group_order_sn'))
1203
+        //     ->where('status', 1)
1204
+        //     ->select()
1205
+        //     ->toArray();
1206
+        // $store_split_order_map = array_column($store_split_order, null, 'group_order_id');
1207
+
1208
+        // 4、循环所有商户ID
1209
+        /** @var OrderMerchantRepository $OrderMerchantRepository */
1210
+        $OrderMerchantRepository = app()->make(OrderMerchantRepository::class);
1211
+        foreach ($merchant_list as $mer_id) {
1212
+            foreach ($store_order_map[$mer_id] as $store_order) {
1213
+                // 判断该笔订单是否已 存在 平台收支明细表 的记录中
1214
+                if (!in_array('1' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) {
1215
+                    if (empty($group_order_map[$store_order['group_order_id']])) continue;
1216
+                    // 经过和领导确认,入账 金额为 订单金额 - 让利金额 - 手续费
1217
+
1218
+                    if ($store_order['mer_id'] == 496 || $store_order['mer_id'] == 496 || $store_order['mer_id'] == 496) {
1219
+                        $ru_money = $store_order['pay_price'] - $yanglao;
1220
+                    } else {
1221
+                        $ru_money = $store_order['pay_price'] * (1 - $shop_bonus_setting['shop_bonus_rate'] / 100) + $store_order['pay_postage'];
1222
+                    }
1223
+
1224
+                    Db::name('enterprise_platform_income_detail')
1225
+                        ->insert([
1226
+                            'mer_id' => $mer_id,
1227
+                            'uid' => $store_order['uid'],
1228
+                            'title' => '自营订单入账',
1229
+                            'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'),
1230
+                            'deal_time' => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')),
1231
+                            'money' => $ru_money,
1232
+                            'deal_type' => 1,
1233
+                            'order_id' => $store_order['order_id'],
1234
+                            'order_sn' => $store_order['order_sn'],
1235
+                            'user_extra_id' => '',
1236
+                            'pm' => 1,
1237
+                            'create_time' => date('Y-m-d H:i:s'),
1238
+                        ]);
1239
+                    unset($close_time);
1240
+                }
1241
+
1242
+            }
1243
+            //2佣金提现到账 提现成功统计
1244
+            //            $user_extract_list = Db::name('user_extract')
1245
+            //                ->field('extract_id,uid,extract_type,extract_price,service_money,order_sn,status_time')
1246
+            //                ->where('status', 1)
1247
+            //                ->where('withdrawal_type', 3)
1248
+            //                ->where('extract_type', '<>', 4)
1249
+            //                ->when($uids, function ($query) use ($uids) {
1250
+            //                    $query->whereIn('uid', $uids);
1251
+            //                })
1252
+            //                ->order('extract_id', 'desc')
1253
+            ////                ->limit(100)
1254
+            //                ->select()
1255
+            //                ->toArray();
1256
+            //            foreach ($user_extract_list as $user_extract) {
1257
+            //                if (in_array('2' . $user_extract['uid'] . $user_extract['order_sn'] . '0' . $user_extract['extract_id'], $unique_list)) continue;
1258
+            //                $enterprise_platform_income_detail = Db::name('enterprise_platform_income_detail')
1259
+            //                    ->where('deal_type', 2)
1260
+            //                    ->where('user_extra_id', $user_extract['extract_id'])
1261
+            //                    ->find();
1262
+            //                if (!$enterprise_platform_income_detail) {
1263
+            //                    Db::name('enterprise_platform_income_detail')
1264
+            //                        ->insert([
1265
+            //                            'mer_id'        => $mer_id,
1266
+            //                            'uid'           => $user_extract['uid'],
1267
+            //                            'title'         => '佣金提现支出',
1268
+            //                            'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'),
1269
+            //                            'deal_time'     => $user_extract['status_time'],
1270
+            //                            'money'         => bcsub($user_extract['extract_price'], $user_extract['service_money'], 2),
1271
+            //                            'deal_type'     => 2,
1272
+            //                            'order_id'      => '',
1273
+            //                            'order_sn'      => $user_extract['order_sn'],
1274
+            //                            'user_extra_id' => $user_extract['extract_id'],
1275
+            //                            'pm'            => 1,
1276
+            //                            'create_time'   => date('Y-m-d H:i:s'),
1277
+            //                        ]);
1278
+            //                }
1279
+            //            }
1280
+            $start_time = '2024-04-01';
1281
+            for ($i = 0; $i < 1000; $i++) {
1282
+                $day = date('Y-m-d', strtotime("+{$i} days", strtotime($start_time)));
1283
+                if (strtotime($day) > time()) {
1284
+                    break;
1285
+                }
1286
+                $this->cron($day, $mer_id);
1287
+            }
1288
+        }
1289
+
1290
+        // 计算平台
1291
+        //交易类型 1自营订单入账(商户) 2佣金提现到账(商户) 3订单支付 4商户佣金提现 5用户佣金提现 6订单入账 7 创客自营订单让利
1292
+
1293
+        $mer_id = 0;
1294
+        // 3 订单支付 供应链订单结算后入账到平台的金额
1295
+        $store_order_list = Db::name('store_order')
1296
+            ->where('paid', 1)
1297
+            ->order('order_id', 'desc')
1298
+            //                    ->limit(500)
1299
+            ->select()
1300
+            ->toArray();
1301
+        foreach ($store_order_list as $store_order) {
1302
+            if (in_array('3' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) continue;
1303
+
1304
+            $group_order = Db::name('store_group_order')
1305
+                ->alias('sgo')
1306
+                ->where('sgo.group_order_id', $store_order['group_order_id'])
1307
+                ->find();
1308
+            if (empty($group_order)) continue;
1309
+
1310
+            $store_split_order = Db::name('store_split_order')
1311
+                ->where('group_order_id', $group_order['group_order_sn'])
1312
+                ->where('status', 1)
1313
+                ->find();
1314
+            if (empty($store_split_order)) continue;
1315
+
1316
+            $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time']))));
1317
+
1318
+            Db::name('enterprise_platform_income_detail')
1319
+                ->insert([
1320
+                    'mer_id'        => $mer_id,
1321
+                    'uid'           => $store_order['uid'],
1322
+                    'title'         => '订单支付',
1323
+                    'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy4'),
1324
+                    'deal_time'     => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')),
1325
+                    'money'         => $store_order['pay_price'] + $store_order['pay_postage'],
1326
+                    'deal_type'     => 3,
1327
+                    'order_id'      => $store_order['order_id'],
1328
+                    'order_sn'      => $store_order['order_sn'],
1329
+                    'user_extra_id' => '',
1330
+                    'pm'            => 1,
1331
+                    'create_time'   => date('Y-m-d H:i:s'),
1332
+                ]);
1333
+        }
1334
+        //5用户佣金提现
1335
+        $user_extract_list = Db::name('user_extract')
1336
+            ->field('extract_id,uid,extract_type,extract_price,service_money,order_sn,status_time')
1337
+            ->where('status', 1)
1338
+            ->order('extract_id', 'desc')
1339
+            //                ->limit(100)
1340
+            ->select()
1341
+            ->toArray();
1342
+        foreach ($user_extract_list as $user_extract) {
1343
+            if (in_array('5' . $user_extract['uid'] . $user_extract['order_sn'] . '0' . $user_extract['extract_id'] . $mer_id, $unique_list)) continue;
1344
+            Db::name('enterprise_platform_income_detail')
1345
+                ->insert([
1346
+                    'mer_id'        => $mer_id,
1347
+                    'uid'           => $user_extract['uid'],
1348
+                    'title'         => '用户佣金提现',
1349
+                    'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'),
1350
+                    'deal_time'     => $user_extract['status_time'],
1351
+                    'money'         => bcsub($user_extract['extract_price'], $user_extract['service_money'], 2),
1352
+                    'deal_type'     => 5,
1353
+                    'order_id'      => '',
1354
+                    'order_sn'      => $user_extract['order_sn'],
1355
+                    'user_extra_id' => $user_extract['extract_id'],
1356
+                    'pm'            => 0,
1357
+                    'create_time'   => date('Y-m-d H:i:s'),
1358
+                ]);
1359
+        }
1360
+        // 6订单入账:支付成功的订单数据 供应链订单
1361
+        $store_order_list = Db::name('store_order')
1362
+            ->where('paid', 1)
1363
+            ->where('douhuomall', 1)
1364
+            ->where('is_settlement', 1)
1365
+            ->order('order_id', 'desc')
1366
+            //                ->limit(500)
1367
+            ->select()
1368
+            ->toArray();
1369
+
1370
+        foreach ($store_order_list as $store_order) {
1371
+            if (in_array('6' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) continue;
1372
+            $pay_type = $store_order['pay_type'];
1373
+            if (!in_array($pay_type, [0, 1])) continue;
1374
+
1375
+            $group_order = Db::name('store_group_order')
1376
+                ->alias('sgo')
1377
+                ->where('sgo.group_order_id', $store_order['group_order_id'])
1378
+                ->find();
1379
+            if (empty($group_order)) continue;
1380
+
1381
+            $yanglao = Db::name('user_bill')
1382
+                ->where('order_sn', $store_order['order_sn'])
1383
+                ->where('commission_type', 5)
1384
+                ->value('number');
1385
+            $ru_money = 0;
1386
+            $shop_bonus_setting = merchantConfig($store_order['mer_id'], 'shop_bonus_setting') ?: [
1387
+                'shop_bonus_rate' => 30,
1388
+                'yanglao_rate'    => 5,
1389
+            ];
1390
+            if ($pay_type != 0) {
1391
+                $store_split_order = Db::name('store_split_order')
1392
+                    ->where('group_order_id', $group_order['group_order_sn'])
1393
+                    ->find();
1394
+                if (empty($store_split_order)) continue;
1395
+                if (!$store_order['hf_fee_amt']) {
1396
+                    if ($pay_type == 1) {
1397
+                        //微信
1398
+                        if ($group_order['pay_wx'] == 3) {
1399
+                            $api_key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871';
1400
+                        } else {
1401
+                            $api_key = 'api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
1402
+                        }
1403
+                    } else {
1404
+                        //支付宝
1405
+                        $api_key = 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9';
1406
+                    }
1407
+                    $params['payment_confirm_id'] = $store_split_order['hf_pay_id'];
1408
+                    $params['api_key'] = $api_key;
1409
+                    //查询支付确认对象
1410
+                    Db::name("log")->insert(array('data' => '汇付查询支付确认对象参数-----' . json_encode($params)));//日志记录
1411
+                    $res = $this->payment_confirm_query_traits($params);
1412
+                    Db::name("log")->insert(array('data' => '汇付查询支付确认对象返回-----' . json_encode($res)));//日志记录
1413
+                    if (isset($res['status'])) {
1414
+                        Db::name('store_order')->where('order_id', $store_order['order_id'])->update([
1415
+                            'hf_fee_amt'    => $res['fee_amt'],
1416
+                            'hf_clear_time' => $close_time
1417
+                        ]);
1418
+                        $store_order['hf_fee_amt'] = $res['fee_amt'];
1419
+                    }
1420
+                }
1421
+                // 获取分账后一个工作日时间
1422
+                $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time']))));
1423
+
1424
+                if (isset($res['status']) && time() > strtotime($close_time)) {
1425
+
1426
+                    if ($store_order['mer_id'] == 496) {
1427
+                        $ru_money = $store_order['pay_price'] - $yanglao - $store_order['hf_fee_amt'];
1428
+                    } else {
1429
+                        $ru_money = $store_order['pay_price'] - $yanglao;
1430
+                    }
1431
+                    $store_order['pay_time'] = '';//线上支付的
1432
+                } else {
1433
+                    continue;
1434
+                }
1435
+            } else {
1436
+                // 订单金额+运费
1437
+                if ($store_order['mer_id'] == 496) {
1438
+                    $ru_money = $store_order['pay_price'] - $yanglao;
1439
+                } else {
1440
+                    $ru_money = $store_order['pay_price'] - $yanglao;
1441
+                }
1442
+            }
1443
+            Db::name('enterprise_platform_income_detail')
1444
+                ->insert([
1445
+                    'mer_id'        => $mer_id,
1446
+                    'uid'           => $store_order['uid'],
1447
+                    'title'         => '订单入账',
1448
+                    'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'),
1449
+                    'deal_time'     => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')),
1450
+                    'money'         => $ru_money,
1451
+                    'deal_type'     => 6,
1452
+                    'order_id'      => $store_order['order_id'],
1453
+                    'order_sn'      => $store_order['order_sn'],
1454
+                    'user_extra_id' => '',
1455
+                    'pm'            => 1,
1456
+                    'create_time'   => date('Y-m-d H:i:s'),
1457
+                ]);
1458
+            unset($close_time);
1459
+        }
1460
+        //7 创客自营订单让利=创客自营订单金额*分润比例-(创客自营订单金额-运费)*养老金比例
1461
+        $store_order_list = Db::name('store_order')
1462
+            ->where('paid', 1)
1463
+            ->where('is_settlement', 1)
1464
+            ->where('douhuomall', 0)
1465
+            ->order('order_id', 'desc')
1466
+            //                    ->limit(500)
1467
+            ->select()
1468
+            ->toArray();
1469
+        foreach ($store_order_list as $store_order) {
1470
+            if (in_array('7' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) continue;
1471
+            $shop_bonus_setting = merchantConfig($store_order['mer_id'], 'shop_bonus_setting') ?: [
1472
+                'shop_bonus_rate' => 30,
1473
+                'yanglao_rate'    => 5,
1474
+            ];
1475
+            $pay_type = $store_order['pay_type'];
1476
+            if ($pay_type != 0) {
1477
+                $group_order = Db::name('store_group_order')
1478
+                    ->alias('sgo')
1479
+                    ->where('sgo.group_order_id', $store_order['group_order_id'])
1480
+                    ->find();
1481
+                if (empty($group_order)) continue;
1482
+                $store_split_order = Db::name('store_split_order')
1483
+                    ->where('group_order_id', $group_order['group_order_sn'])
1484
+                    ->find();
1485
+                if (empty($store_split_order)) continue;
1486
+                $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time']))));
1487
+
1488
+                if (!$store_order['hf_fee_amt']) {
1489
+                    $store_split_order = Db::name('store_split_order')
1490
+                        ->where('group_order_id', $group_order['group_order_sn'])
1491
+                        ->where('status', 1)
1492
+                        ->find();
1493
+                    if (empty($store_split_order)) continue;
1494
+                    if ($pay_type == 1) {
1495
+                        //微信
1496
+                        if ($group_order['pay_wx'] == 3) {
1497
+                            $api_key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871';
1498
+                        } else {
1499
+                            $api_key = 'api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
1500
+                        }
1501
+                    } else {
1502
+                        //支付宝
1503
+                        $api_key = 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9';
1504
+                    }
1505
+                    $params['payment_confirm_id'] = $store_split_order['hf_pay_id'];
1506
+                    $params['api_key'] = $api_key;
1507
+                    //查询支付确认对象
1508
+                    Db::name("log")->insert(array('data' => '汇付查询支付确认对象参数-----' . json_encode($params)));//日志记录
1509
+                    $res = $this->payment_confirm_query_traits($params);
1510
+                    Db::name("log")->insert(array('data' => '汇付查询支付确认对象返回-----' . json_encode($res)));//日志记录
1511
+                    // 获取分账后一个工作日时间
1512
+                    $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time']))));
1513
+                    if (isset($res['status'])) {
1514
+                        Db::name('store_order')->where('order_id', $store_order['order_id'])->update([
1515
+                            'hf_fee_amt'    => $res['fee_amt'],
1516
+                            'hf_clear_time' => $close_time
1517
+                        ]);
1518
+                        $store_order['hf_fee_amt'] = $res['fee_amt'];
1519
+                    }
1520
+                }
1521
+                $yanglao = Db::name('user_bill')
1522
+                    ->where('order_sn', $store_order['order_sn'])
1523
+                    ->where('commission_type', 5)
1524
+                    ->value('number');
1525
+                if (isset($res['status']) && time() > strtotime($close_time)) {
1526
+                    if ($store_order['mer_id'] == 496) {
1527
+                        $ru_money = $store_order['pay_price'] - $yanglao - $store_order['hf_fee_amt'];
1528
+                    } else {
1529
+                        $ru_money = ($store_order['pay_price'] * $shop_bonus_setting['shop_bonus_rate'] / 100) - $yanglao;
1530
+                    }
1531
+                    $store_order['pay_time'] = '';//线上支付的
1532
+                } else {
1533
+                    continue;
1534
+                }
1535
+            }else{
1536
+                if ($store_order['mer_id'] == 496) {
1537
+                    $ru_money = $store_order['pay_price'] - $yanglao;
1538
+                } else {
1539
+                    $ru_money = ($store_order['pay_price'] * $shop_bonus_setting['shop_bonus_rate'] / 100) - $yanglao;
1540
+                }
1541
+            }
1542
+            Db::name('enterprise_platform_income_detail')
1543
+                ->insert([
1544
+                    'mer_id'        => $mer_id,
1545
+                    'uid'           => $store_order['uid'],
1546
+                    'title'         => '创客自营订单让利',
1547
+                    'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy4'),
1548
+                    'deal_time'     => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')),
1549
+                    'money'         => $ru_money,
1550
+                    'deal_type'     => 7,
1551
+                    'order_id'      => $store_order['order_id'],
1552
+                    'order_sn'      => $store_order['order_sn'],
1553
+                    'user_extra_id' => '',
1554
+                    'pm'            => 1,
1555
+                    'create_time'   => date('Y-m-d H:i:s'),
1556
+                ]);
1557
+            unset($close_time);
1558
+
1559
+        }
1560
+        $start_time = '2024-04-01';
1561
+        for ($i = 0; $i < 1000; $i++) {
1562
+            $day = date('Y-m-d', strtotime("+{$i} days", strtotime($start_time)));
1563
+            if (strtotime($day) > time()) {
1564
+                break;
1565
+            }
1566
+            $Reconciliation->cron($day, 0);
1567
+        }
1568
+        return app('json')->success('获取平台收支明细成功');
1569
+    }
1570
+
1154 1571
     public function clear_platform_income_detail()
1155 1572
     {
1156 1573