diff --git a/app/Domains/Real/Commands/Sync/AddedOrderSync.php b/app/Domains/Real/Commands/Sync/AddedOrderSync.php index 47a9328d..8c500716 100644 --- a/app/Domains/Real/Commands/Sync/AddedOrderSync.php +++ b/app/Domains/Real/Commands/Sync/AddedOrderSync.php @@ -43,7 +43,7 @@ class AddedOrderSync extends Command $cards = $this->getOrderItems($orders); $orders = $this->transformer($orders, $cards); - $this->line('插入订单数据,条数:'.count($orders)); + $this->line('插入订单数据,条数:' . count($orders)); foreach (array_chunk($orders, $this->chunks) as $data) { $this->getOutput()->write('.'); Order::upsert($orders, ['sn', 'deleted_at']); @@ -76,7 +76,7 @@ class AddedOrderSync extends Command ]; } - $this->line('插入订单关联数据,条数:'.count(array_collapse($dataOrderCards))); + $this->line('插入订单关联数据,条数:' . count(array_collapse($dataOrderCards))); $simArray = []; @@ -128,7 +128,7 @@ class AddedOrderSync extends Command $only = ['company_id', 'package_id', 'counts', 'unit_price']; - DB::table($table)->upsert($data, ['sim', 'order_id', 'refunded_at', 'deleted_at'], $only); + DB::table($table)->upsert($data, ['sim', 'order_id'], $only); } } @@ -157,11 +157,11 @@ class AddedOrderSync extends Command ]; $orders = DB::connection('real')->table('jxc_custom_order')->select($select)->whereIn('status', [3, 7, 8]) - ->whereIn('custom_no', $this->companies->keys()) - ->whereIn('account_no', array_keys($this->business_type)) - ->where('create_time', '>=', $starttime->timestamp) - ->where('create_time', '<=', $endtime->timestamp) - ->orderBy('create_time')->get()->collect()->toArray(); + ->whereIn('custom_no', $this->companies->keys()) + ->whereIn('account_no', array_keys($this->business_type)) + ->where('create_time', '>=', $starttime->timestamp) + ->where('create_time', '<=', $endtime->timestamp) + ->orderBy('create_time')->get()->collect()->toArray(); $array = []; @@ -206,7 +206,7 @@ class AddedOrderSync extends Command $order = $orders[$item['sn']]; $item['company_id'] = $order['company_id'] ?? 0; $item['package_id'] = $this->packages[$item['package_sn']]['id'] ?? 0; - $item['unit_price'] = intval($item['unit_price'] * 100) ; + $item['unit_price'] = intval($item['unit_price'] * 100); $item['created_at'] = $order['created_at']; $item['updated_at'] = $order['updated_at']; $item['deleted_at'] = $order['deleted_at']; @@ -236,6 +236,7 @@ class AddedOrderSync extends Command } $orderPackages[$sn][$package_id] = [ + 'type' => $values[0]['type'], 'unit_price' => $values[0]['unit_price'], 'counts' => array_sum(array_pluck($values, 'counts')), 'total_price' => $values[0]['unit_price'] * array_sum(array_pluck($values, 'counts')), @@ -254,6 +255,7 @@ class AddedOrderSync extends Command foreach ($packages as $package_id => $array) { $order = $item; + $order['type'] = $array['type']; $order['package_id'] = $package_id; $order['sn'] = $item['sn'] . $package_id; $order['counts'] = $array['counts']; diff --git a/app/Domains/Real/Services/OrderService.php b/app/Domains/Real/Services/OrderService.php index 720ed322..e1828257 100644 --- a/app/Domains/Real/Services/OrderService.php +++ b/app/Domains/Real/Services/OrderService.php @@ -1,4 +1,5 @@ package_name = $item->package['name']; $item->carrier_operator = $item->package['carrier_operator']; $item->carrier_operator_name = $carrierOperators[$item->carrier_operator]; - $item->unit_price = sprintf('%.02f', $item->unit_price/100); - $item->total_price = sprintf('%.02f', $item->total_price/100); + $item->unit_price = sprintf('%.02f', $item->unit_price / 100); + $item->total_price = sprintf('%.02f', $item->total_price / 100); $item->shipments = $cards[$item->id]['shipments'] ?? 0; $item->counts = $cards[$item->id]['counts'] ?? 0; $item->refunds = $cards[$item->id]['refunds'] ?? 0; @@ -109,7 +110,7 @@ class OrderService extends Service $packageService = app(PackageService::class); foreach ($cards as &$item) { - $item['sim'] = (string)$item['sim']; + $item['sim'] = (string) $item['sim']; $item['company_id'] = $item['company_id'] ?? 0; $item['package_id'] = $item['package_id'] ?? 0; diff --git a/app/Domains/Stats/Exports/OrderDetailExport.php b/app/Domains/Stats/Exports/OrderDetailExport.php index 27597226..aac34e6c 100644 --- a/app/Domains/Stats/Exports/OrderDetailExport.php +++ b/app/Domains/Stats/Exports/OrderDetailExport.php @@ -12,6 +12,7 @@ use App\Domains\Stats\Services\OrderService; use Dipper\Excel\Concerns\WithColumnFormatting; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; use App\Domains\Virtual\Repositories\OrderCardPartitionRepository; +use App\Domains\Virtual\Services\PackageService; class OrderDetailExport extends AbstractExport implements FromQuery, WithHeadings, WithRows, WithColumnFormatting { @@ -41,7 +42,7 @@ class OrderDetailExport extends AbstractExport implements FromQuery, WithHeading public function headings(): array { - return [ + $headings = [ 'SIM', '企业名称', '套餐名称', @@ -51,6 +52,12 @@ class OrderDetailExport extends AbstractExport implements FromQuery, WithHeading '数量', '订单时间', ]; + + if (in_array($this->conditions['type'], [2, 3])) { + array_splice($headings, 2, 0, '基础套餐'); + } + + return $headings; } @@ -65,8 +72,12 @@ class OrderDetailExport extends AbstractExport implements FromQuery, WithHeading $array = []; + if (in_array($this->conditions['type'], [2, 3])) { + $basePackages = app(OrderCardPartitionRepository::class)->getCardBasePackages(collect($rows)->pluck('sim')->toArray())->keyBy('sim')->toArray(); + } + foreach ($rows as $item) { - $array[] = [ + $data = [ $item['sim'], $item['company_name'], $item['package_name'], @@ -76,6 +87,12 @@ class OrderDetailExport extends AbstractExport implements FromQuery, WithHeading $item['counts'], $item['order_at'], ]; + + if (in_array($this->conditions['type'], [2, 3])) { + array_splice($data, 2, 0, PackageService::load($basePackages[$item['sim']]['package_id'])['name']); + } + + $array[] = $data; } return $array; diff --git a/app/Domains/Stats/Exports/OrderExport.php b/app/Domains/Stats/Exports/OrderExport.php index a2446f08..53b6638f 100644 --- a/app/Domains/Stats/Exports/OrderExport.php +++ b/app/Domains/Stats/Exports/OrderExport.php @@ -49,7 +49,7 @@ class OrderExport extends AbstractExport implements FromCollection, WithHeadings public function headings(): array { - return [ + $headings = [ '企业名称', '套餐名称', '支付方式', @@ -58,6 +58,8 @@ class OrderExport extends AbstractExport implements FromCollection, WithHeadings '数量', '总金额', ]; + + return $headings; } /** diff --git a/app/Domains/Stats/Services/OrderService.php b/app/Domains/Stats/Services/OrderService.php index d04d9434..8e392175 100644 --- a/app/Domains/Stats/Services/OrderService.php +++ b/app/Domains/Stats/Services/OrderService.php @@ -1,6 +1,8 @@ custom_price = sprintf('%.02f', $item->unit_price * $item->counts/100); - $item->unit_price = sprintf('%.02f', $item->unit_price/100); + $item->custom_price = sprintf('%.02f', $item->unit_price * $item->counts / 100); + $item->unit_price = sprintf('%.02f', $item->unit_price / 100); $item->pay_channel_name = CommonService::namePayChannel($item->pay_channel); }); @@ -124,16 +126,16 @@ class OrderService extends Service $orders = app(OrderRepository::class)->withTrashed() ->select(['id', 'unit_price', 'pay_channel', 'order_at']) ->withConditions(['id' => array_unique(array_pluck($cards, 'order_id'))])->get()->keyBy('id')->toArray(); + $carrierOperators = app(Dicts::class)->get('carrier_operator'); $cards->map(function ($item) use ($companies, $packages, $carrierOperators, $orders) { $package = $packages[$item->package_id]; $order = $orders[$item->order_id]; - $item->company_name = $companies[$item->company_id]; $item->package_name = $package['name']; $item->carrier_operator_name = $carrierOperators[$package['carrier_operator']]; $item->service_months = $package['service_months']; - $item->unit_price = sprintf('%.02f', $order['unit_price']/100); + $item->unit_price = sprintf('%.02f', $order['unit_price'] / 100); $item->pay_channel_name = CommonService::namePayChannel($order['pay_channel']); $item->order_at = $order['order_at']; }); diff --git a/app/Domains/Virtual/Exports/FlowPoolExport.php b/app/Domains/Virtual/Exports/FlowPoolExport.php index e57c2b5e..8ee04aeb 100644 --- a/app/Domains/Virtual/Exports/FlowPoolExport.php +++ b/app/Domains/Virtual/Exports/FlowPoolExport.php @@ -28,6 +28,7 @@ class FlowPoolExport extends AbstractExport implements FromCollection, WithHeadi 'name' => $item->name, 'carrier_operator_name' => $item->carrier_operator_name, 'company_name' => $item->company_name, + 'total_cards' => $item->total_cards, 'minimum_flows' => $item->minimum_flows, 'excess_flows' => $item->excess_flows, 'minimum_price' => $item->minimum_price, @@ -42,6 +43,7 @@ class FlowPoolExport extends AbstractExport implements FromCollection, WithHeadi '', '', '', + array_sum($list->pluck('total_cards')->toArray()) ?: 0, '', '', '', @@ -60,6 +62,7 @@ class FlowPoolExport extends AbstractExport implements FromCollection, WithHeadi '名称', '运营商', '客户名称', + '流量卡数', '保底流量', '超出流量', '保底收入(元)', diff --git a/app/Domains/Virtual/Http/Controllers/FlowPoolController.php b/app/Domains/Virtual/Http/Controllers/FlowPoolController.php index de995d33..616a17f9 100644 --- a/app/Domains/Virtual/Http/Controllers/FlowPoolController.php +++ b/app/Domains/Virtual/Http/Controllers/FlowPoolController.php @@ -1,4 +1,5 @@ model->selectRaw('DISTINCT ON (sim) sim, package_id') + ->whereIn('type', [0, 1]) + ->whereIn('sim', $simArray) + ->orderBy('sim') + ->orderBy('created_at', 'desc')->get(); + } + /** * 查询条件 * diff --git a/app/Domains/Virtual/Services/FlowPoolService.php b/app/Domains/Virtual/Services/FlowPoolService.php index cf57ab3e..82f1e4ec 100644 --- a/app/Domains/Virtual/Services/FlowPoolService.php +++ b/app/Domains/Virtual/Services/FlowPoolService.php @@ -1,4 +1,5 @@ realFlowPoolRepository = $realFlowPoolRepository; $this->flowPoolRepository = $flowPoolRepository; $this->flowPoolSettingRepository = $flowPoolSettingRepository; @@ -94,7 +95,7 @@ class FlowPoolService extends Service if (isset($array[$value])) { array_push($array[$value], $item['company_id']); } else { - $array[$value] =[$item['company_id']]; + $array[$value] = [$item['company_id']]; } } } @@ -130,6 +131,33 @@ class FlowPoolService extends Service $flows = collect($flows)->collect()->keyBy('pool_id')->toArray(); + // 查询卡量 + $company_ids = $flowPools->pluck('company_id')->toArray(); + $package_ids = $flowPools->pluck('package_ids')->collapse()->unique()->toArray(); + + $conditions = [ + 'type' => [0, 1, 2], + 'month' => $month, + 'company_id' => $company_ids, + 'package_id' => $package_ids, + 'unit_price' => 0 + ]; + + $cards = app(OrderCardPartitionRepository::class)->select([ + DB::raw("concat(company_id, '_', package_id) as index"), + DB::raw('count(distinct sim) as total'), + ])->withConditions($conditions)->groupBy(['company_id', 'package_id'])->get()->pluck('total', 'index'); + + $flowPools->map(function ($flowPool) use ($cards) { + $total_cards = 0; + foreach ($flowPool->package_ids as $package_id) { + $index = $flowPool->company_id . '_' . $package_id; + $total_cards += $cards[$index] ?? 0; + } + $flowPool->total_cards = $total_cards; + }); + + // 流量统计 $flowPools->map(function ($flowPool) use ($flows) { $flowArry = $flows[$flowPool->id]; @@ -335,7 +363,7 @@ class FlowPoolService extends Service if ($key) { $this->flowPoolSettingRepository->create($create); } else { - $node =$this->flowPoolSettingRepository->create($create); + $node = $this->flowPoolSettingRepository->create($create); } } }); @@ -480,7 +508,7 @@ class FlowPoolService extends Service $itemMebibyte = array_sum(array_pluck($dataItems, 'mebibyte')); if ($itemMebibyte) { - $k = $flows/$itemMebibyte; + $k = $flows / $itemMebibyte; foreach ($dataItems as &$value) { $value['mebibyte'] = round($value['mebibyte'] * $k, 2); @@ -594,7 +622,7 @@ class FlowPoolService extends Service 'package_id' => $value, 'package_name' => $package['name'], 'carrier_operator' => $package['carrier_operator'], - ]; + ]; } $item->packages = $packages; @@ -656,12 +684,12 @@ class FlowPoolService extends Service $settings = $item->settings; foreach ($settings as &$setting) { - $setting['gradient_price'] = sprintf('%.02f', $setting['gradient_price']/100); + $setting['gradient_price'] = sprintf('%.02f', $setting['gradient_price'] / 100); $setting['gradient'] = sprintf('%.02f', $setting['gradient']); $minimum_settings = $setting['minimum_settings'] ?? []; foreach ($minimum_settings as &$minimum_setting) { - $minimum_setting['price'] = sprintf('%.02f', $minimum_setting['price']/100); + $minimum_setting['price'] = sprintf('%.02f', $minimum_setting['price'] / 100); $minimum_setting['flows'] = floatval($minimum_setting['flows']); } diff --git a/frontend/src/views/virtual/flow_pools/js/index.js b/frontend/src/views/virtual/flow_pools/js/index.js index 87a88be7..091f320d 100644 --- a/frontend/src/views/virtual/flow_pools/js/index.js +++ b/frontend/src/views/virtual/flow_pools/js/index.js @@ -101,6 +101,11 @@ export default { key: "company_name", width: 300 }, + { + title: "流量卡数", + key: "total_cards", + width: 150 + }, { title: "保底流量", key: "minimum_flows", @@ -346,7 +351,7 @@ export default { let array = list_data.data; array.push({ - id: '总计', + id: "总计", members: sumBy(list_data.data, "members"), total_price: sumBy(list_data.data, "total_price") }); diff --git a/frontend/src/views/virtual/orders/cards.vue b/frontend/src/views/virtual/orders/cards.vue index 9eeb425a..589e4b78 100644 --- a/frontend/src/views/virtual/orders/cards.vue +++ b/frontend/src/views/virtual/orders/cards.vue @@ -5,7 +5,7 @@ :title="'选择流量卡'" @on-visible-change="visibleChange" v-model="my_show" - width="1440" + fullscreen :z-index="source === 0 ? 400 : 300" >