['<', $today]]; $where2 = ['UpdateTime' => ['>', $yesterday]]; $yesterday_data = $finance->getNewOne(); $buyis = $finance_operation->field('product,sum(money) money')->where(['finance_id' => ['IS', NULL]])->group(['product'])->fetchAll(); $buyi_data = []; foreach ($buyis as $buyi) { $buyi_data[$buyi['product']] = $buyi['money']; } $fields = " ProductId, PackageName, sum( CASE OrderType WHEN 1 THEN ConnectCount*AccountCount WHEN 2 THEN ConnectCount*AccountCount ELSE 0 END) 'NewBuyCount', sum( CASE OrderType WHEN 3 THEN ConnectCount*AccountCount WHEN 4 THEN ConnectCount*AccountCount ELSE 0 END) 'AgainBuyCount' "; $data = $product_order_model->field($fields)->where(array_merge($where2, ['OrderState' => ['in', $product_order_enum::$PayComplete]]))->where($where1)->group(['ProductId', 'PackageName'])->fetchAll(); $qiangzi = $xunlian = $jinqiao = $jinrui = $laoying = $xianfeng = $wujin = $xingxing = $wanmei = $wuxian = $jike = $tiantian = $gongxiang = $shihui = []; foreach ($data as $product) { switch ($product['ProductId']) { case $product_enum::$qiangzi: $qiangzi[] = $product; break; case $product_enum::$xunlian: $xunlian[] = $product; break; case $product_enum::$jinqiao: $jinqiao[] = $product; break; case $product_enum::$jinrui: $jinrui[] = $product; break; case $product_enum::$laoying: $laoying[] = $product; break; case $product_enum::$xianfengpptp: $xianfeng[] = $product; break; case $product_enum::$wujin: $wujin[] = $product; break; case $product_enum::$xingxing: $xingxing[] = $product; break; case $product_enum::$wanmei: $wanmei[] = $product; break; case $product_enum::$wuxian: $wuxian[] = $product; break; case $product_enum::$jike: $jike[] = $product; break; case $product_enum::$tiantian: $tiantian[] = $product; break; case $product_enum::$gongxiang: $gongxiang[] = $product; break; case $product_enum::$shihui: $shihui[] = $product; break; } } //强子讯连专门处理退款 $qx_where = array_merge($where2, ['ProductId' => ['in', $product_enum::$qx], 'OrderState' => ['in', $product_order_enum::$Refunds], 'ConnectCount' => 1, 'OrderType' => $product_order_enum::$Refund]); $refund_qx_info = $product_order_model->field('ProductId,PackageName,RefundRestTime')->where($qx_where)->where($where1)->fetchAll(); $qiangzi_refund = []; $xunlian_refund = []; foreach ($refund_qx_info as $info) { switch ($info['ProductId']) { case $product_enum::$qiangzi: $qiangzi_refund[] = $info; break; case $product_enum::$xunlian: $xunlian_refund[] = $info; break; } } //天天老鹰先锋的退款 $tlx_where = array_merge($where2, ['ProductId' => ['in', $product_enum::$tlxj], 'OrderState' => ['in', $product_order_enum::$Refunds]]); $refund_tlx_info = $product_order_model->field('ProductId,PackageName,RefundRestTime,ConnectCount')->where($tlx_where)->where($where1)->fetchAll(); $tiantian_refund = []; $laoying_refund = []; $xianfeng_refund = []; $jinrui_refund = []; foreach ($refund_tlx_info as $info) { switch ($info['ProductId']) { case $product_enum::$tiantian: $tiantian_refund[] = $info; break; case $product_enum::$laoying: $laoying_refund[] = $info; break; case $product_enum::$xianfengpptp: $xianfeng_refund[] = $info; break; case $product_enum::$jinrui: $jinrui_refund[] = $info; break; } } $list = []; $list['xingxing'] = $yesterday_data['xingxing'] - no_jike($xingxing) + ($buyi_data['xingxing'] ?? 0); $list['jike'] = $yesterday_data['jike'] - jike($jike) + ($buyi_data['jike'] ?? 0); $list['wujin'] = $yesterday_data['wujin'] - no_jike($wujin) + ($buyi_data['wujin'] ?? 0); $list['wanmei'] = $yesterday_data['wanmei'] - no_jike($wanmei) + ($buyi_data['wanmei'] ?? 0); $list['jinqiao'] = $yesterday_data['jinqiao'] - no_jike($jinqiao) + ($buyi_data['jinqiao'] ?? 0); $list['wuxian'] = $yesterday_data['wuxian'] - no_jike($wuxian) + ($buyi_data['wuxian'] ?? 0); $list['shihui'] = $yesterday_data['shihui'] - no_jike($shihui) + ($buyi_data['shihui'] ?? 0); $list['gongxiang'] = $yesterday_data['gongxiang'] - no_jike($gongxiang) + ($buyi_data['gongxiang'] ?? 0); $qiangzi_rule_result = qx_rule($qiangzi, $qiangzi_refund, false); $xunlian_rule_result = qx_rule($xunlian, $xunlian_refund); $list['qiangzi'] = $yesterday_data['qiangzi'] - $qiangzi_rule_result['cost'] + $qiangzi_rule_result['refund'] + ($buyi_data['qiangzi'] ?? 0); $list['xunlian'] = $yesterday_data['xunlian'] - $xunlian_rule_result['cost'] + $xunlian_rule_result['refund'] + ($buyi_data['xunlian'] ?? 0); $tiantian_rule_result = tl_rule($tiantian, $tiantian_refund); $laoying_rule_result = tl_rule($laoying, $laoying_refund); $list['tiantian'] = $yesterday_data['tiantian'] - $tiantian_rule_result['cost'] + $tiantian_rule_result['refund'] + ($buyi_data['tiantian'] ?? 0); $list['laoying'] = $yesterday_data['laoying'] - $laoying_rule_result['cost'] + $laoying_rule_result['refund'] + ($buyi_data['laoying'] ?? 0); $xianfeng_rule_result = xianfeng($xianfeng, $xianfeng_refund); $list['xianfeng'] = $yesterday_data['xianfeng'] - $xianfeng_rule_result['cost'] + $xianfeng_rule_result['refund'] + ($buyi_data['xianfeng'] ?? 0); $jinrui_rule_result = jinrui($jinrui, $jinrui_refund); $list['jinrui'] = $yesterday_data['jinrui'] - $jinrui_rule_result['cost'] + $xianfeng_rule_result['refund'] + ($buyi_data['jinrui'] ?? 0); $list['riqi'] = date('Y-m-d H:i:s'); $finance->add($list); $finance_operation->where('finance_id IS NULL')->update(['finance_id' => ($yesterday_data['id'] + 1)]); //极客每日消费规则 function jike($product) { $count = 0; foreach ($product as $package) { switch ($package['PackageName']) { case '天卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 5; break; case '周卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 20; break; case '月卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 50; break; case '季卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 150; break; case '年卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 600; break; } } return $count; } //星星,无尽,完美,金桥,无限,实惠,共享通用规则 function no_jike($product) { $count = 0; foreach ($product as $package) { switch ($package['PackageName']) { case '天卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 4; break; case '周卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 28; break; case '月卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 100; break; case '季卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 300; break; case '年卡': $count += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 1200; break; } } return $count; } //强子,讯连规则 function qx_rule($product, $refunds, $product_type = true) { $tian = $product_type ? 10 : 12; $cost = 0; foreach ($product as $package) { switch ($package['PackageName']) { case '天卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * $tian; break; case '周卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 60; break; case '月卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 200; break; case '季卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 600; break; case '年卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 2400; break; } } $refund = 0; foreach ($refunds as $info) { switch ($info['PackageName']) { case '天卡': if ((86400 - handle_time($info['RefundRestTime'])) < 7200) { $refund += $tian; } break; case '周卡': if ((86400 - handle_time($info['RefundRestTime'])) < 7200) { $refund += 60; } break; case '月卡': if ((86400 - handle_time($info['RefundRestTime'])) < 7200) { $refund += 200; } break; case '季卡': if ((86400 - handle_time($info['RefundRestTime'])) < 7200) { $refund += 600; } break; case '年卡': if ((86400 - handle_time($info['RefundRestTime'])) < 7200) { $refund += 2400; } break; } } $count['cost'] = $cost; $count['refund'] = $refund; return $count; } //天天,老鹰退款规则 function tl_rule($product, $refunds) { $cost = 0; foreach ($product as $package) { switch ($package['PackageName']) { case '天卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 4; break; case '周卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 20; break; case '月卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 60; break; case '季卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 180; break; case '年卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 720; break; case '双月卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 120; break; } } $refund = 0; foreach ($refunds as $info) { switch ($info['PackageName']) { case '天卡': if ((86400 - handle_time($info['RefundRestTime'])) < 1800) { $refund += $info['ConnectCount'] * 4; } else { $refund += $info['ConnectCount'] * 4 - ceil((86400 - handle_time($info['RefundRestTime']))/86400) * $info['ConnectCount'] * 4; } break; case '周卡': if ((86400 * 7 - handle_time($info['RefundRestTime'])) < 1800) { $refund += $info['ConnectCount'] * 20; } else { $refund += $info['ConnectCount'] * 20 - ceil((86400 * 7 - handle_time($info['RefundRestTime']))/86400) * $info['ConnectCount'] * 4; } break; case '月卡': if ((86400 * 30 - handle_time($info['RefundRestTime'])) < 1800) { $refund += $info['ConnectCount'] * 60; } else { $refund += $info['ConnectCount'] * 60 - ceil((86400 * 30 - handle_time($info['RefundRestTime']))/86400) * $info['ConnectCount'] * 4; } break; case '季卡': if ((86400 * 90 - handle_time($info['RefundRestTime'])) < 1800) { $refund += $info['ConnectCount'] * 180; } else { $refund += $info['ConnectCount'] * 180 - ceil((86400 * 90 - handle_time($info['RefundRestTime']))/86400) * $info['ConnectCount'] * 4; } break; case '年卡': if ((86400 * 365 - handle_time($info['RefundRestTime'])) < 1800) { $refund += $info['ConnectCount'] * 7200; } else { $refund += $info['ConnectCount'] * 720 - ceil((86400 * 365 - handle_time($info['RefundRestTime']))/86400) * $info['ConnectCount'] * 4; } break; case '双月卡': if ((86400 * 90 - handle_time($info['RefundRestTime'])) < 1800) { $refund += $info['ConnectCount'] * 120; } else { $refund += $info['ConnectCount'] * 120 - ceil((86400 * 60 - handle_time($info['RefundRestTime']))/86400) * $info['ConnectCount'] * 4; } break; } } $count['cost'] = $cost; $count['refund'] = $refund; return $count; } //先锋规则 function xianfeng($product, $refunds) { $cost = 0; foreach ($product as $package) { switch ($package['PackageName']) { case '天卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 3; break; case '周卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 18; break; case '月卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 60; break; case '季卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 168; break; case '年卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 636; break; } } $refund = 0; foreach ($refunds as $info) { switch ($info['PackageName']) { case '天卡': if ((86400 - handle_time($info['RefundRestTime'])) < 10800) { $refund += $info['ConnectCount'] * 3; } break; case '周卡': if ((86400 * 7 - handle_time($info['RefundRestTime'])) < 10800) { $refund += $info['ConnectCount'] * 18; } break; case '月卡': if ((86400 * 30 - handle_time($info['RefundRestTime'])) < 10800) { $refund += $info['ConnectCount'] * 60; } break; case '季卡': if ((86400 * 90 - handle_time($info['RefundRestTime'])) < 10800) { $refund += $info['ConnectCount'] * 168; } break; case '年卡': if ((86400 * 365 - handle_time($info['RefundRestTime'])) < 10800) { $refund += $info['ConnectCount'] * 636; } break; } } $count['cost'] = $cost; $count['refund'] = $refund; return $count; } //金瑞规则 function jinrui($product, $refunds) { $cost = 0; foreach ($product as $package) { switch ($package['PackageName']) { case '天卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 3; break; case '周卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 20; break; case '月卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 60; break; case '季卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 180; break; case '年卡': $cost += ($package['NewBuyCount'] + $package['AgainBuyCount']) * 720; break; } } $refund = 0; foreach ($refunds as $info) { $refund += handle_time($info['RefundRestTime']) / 86400 * 2 * $info['ConnectCount']; } $count['cost'] = $cost; $count['refund'] = $refund; return $count; } //将剩余时间进行处理切割转换为秒 function handle_time($rest_time) { $time1 = explode('天', $rest_time); $time2 = explode('时', $time1[1]); $time3 = explode('分', $time2[1]); $time = $time1[0] * 86400 + $time2[0] * 3600 + $time3[0] * 60; return $time; }