diff --git a/app/Domains/Company/Http/Controllers/CardController.php b/app/Domains/Company/Http/Controllers/CardController.php
index c0c4dea7..1f4e8cbd 100644
--- a/app/Domains/Company/Http/Controllers/CardController.php
+++ b/app/Domains/Company/Http/Controllers/CardController.php
@@ -64,8 +64,8 @@ class CardController extends Controller
$product = ProductService::load($package['type'], $this->account->company_id, $item->package_id);
- $item->price = $product['price'] ?? 9999;
- $item->renew_price = $product['renew_price'] ?? 9999;
+ $item->price = $product['price'] ? sprintf('%.02f', $product['price']/100) : 9999;
+ $item->renew_price = $product['renew_price'] ? sprintf('%.02f', $product['renew_price']/100) : 9999;
});
return res($cards, '卡列表', 201);
diff --git a/app/Domains/Company/Http/Controllers/OrderController.php b/app/Domains/Company/Http/Controllers/OrderController.php
index 6224e333..690faa56 100644
--- a/app/Domains/Company/Http/Controllers/OrderController.php
+++ b/app/Domains/Company/Http/Controllers/OrderController.php
@@ -33,7 +33,6 @@ class OrderController extends Controller
{
$conditions = $this->request->all();
$conditions['company_id'] = $this->account->company_id;
- $conditions['source'] = 0;
$conditions['type'] = $conditions['type'] ?? 0;
$res = $this->orderService->paginate($conditions);
@@ -48,7 +47,7 @@ class OrderController extends Controller
'sn' => $item->sn,
'package_name' => $item->package['name'],
'pay_channel' => CommonService::namePayChannel($item->pay_channel),
- 'carrier_operator' => $carrierOperators[$item->package->carrier_operator],
+ 'carrier_operator' => $carrierOperators[$item->package['carrier_operator']],
'unit_price' => $item->unit_price,
'counts' => $item->counts,
'total_price' => $item->total_price,
diff --git a/app/Domains/Virtual/Http/Controllers/FlowPoolController.php b/app/Domains/Virtual/Http/Controllers/FlowPoolController.php
index d828ef64..66320d63 100644
--- a/app/Domains/Virtual/Http/Controllers/FlowPoolController.php
+++ b/app/Domains/Virtual/Http/Controllers/FlowPoolController.php
@@ -193,9 +193,7 @@ class FlowPoolController extends Controller
if ($flowPool->setting_status) {
$repository = app(OrderCardPartitionRepository::class);
- $minimum_settings = $flowPool['settings'][0]['minimum_settings'] ?? [];
-
- $package_ids = array_pluck($minimum_settings, 'package_id');
+ $package_ids = $flowPool->package_ids;
$conditions = [
'type' => [0, 1, 2],
@@ -208,11 +206,7 @@ class FlowPoolController extends Controller
$cards = $repository->select([
'package_id',
DB::raw('count(distinct sim) as total'),
- ])->withConditions($conditions)->groupBy('package_id')->get();
-
- $cards->map(function ($item) {
- $item->package_name = PackageService::load($item->package_id)['name'];
- });
+ ])->withConditions($conditions)->groupBy('package_id')->get()->pluck('total', 'package_id');
} else {
$cards = collect();
}
@@ -230,31 +224,39 @@ class FlowPoolController extends Controller
$settings = array_keyBy($flowPoolData['settings'], 'package_id');
- foreach ($cards as $card) {
- if (!isset($settings[$card['package_id']])) {
- $settings[$card['package_id']] = [
- 'package_id' => $card['package_id'],
- 'package_name' => $card['package_name'],
- 'total' => $card['total'],
- 'news' => $card['total'],
+ $newSettings = [];
+
+ foreach ($package_ids as $package_id) {
+ if (!isset($settings[$package_id])) {
+ $newSettings[] = [
+ 'package_id' => $package_id,
+ 'package_name' => PackageService::load($package_id)['name'],
+ 'total' => $cards[$package_id] ?? 0,
+ 'news' => $cards[$package_id] ?? 0,
];
} else {
- $chunk = $settings[$card['package_id']]['cards'];
+ $setting = $settings[$package_id];
+
+ $chunk = $setting['cards'];
foreach ($chunk as &$value) {
$value['flow_range'][0] = sprintf('%.02f', $value['flow_range'][0]/1024);
$value['flow_range'][1] = sprintf('%.02f', $value['flow_range'][1]/1024);
}
- $settings[$card['package_id']]['cards'] = $chunk;
+ $setting['cards'] = $chunk;
- $settings[$card['package_id']]['news'] = $card['total'] - array_sum(array_pluck($settings[$card['package_id']]['cards'], 'counts'));
+ $news = $cards[$package_id] ?? 0 - array_sum(array_pluck($setting['cards'], 'counts'));
+
+ $setting['news'] = $news < 0 ? 0 : $news;
+
+ $newSettings[] = $setting;
}
}
$flowPoolData['total_flows'] = sprintf('%.02f', $flowPoolData['total_flows']/1024);
- return res(['flowPool' => $flowPool, 'settings' => array_values($settings), 'total' => array_sum(array_pluck($cards, 'total')), 'total_flows' => $flowPoolData['total_flows']], '数据设置');
+ return res(['flowPool' => $flowPool, 'settings' => $newSettings, 'total' => $cards->values()->sum(), 'total_flows' => $flowPoolData['total_flows']], '数据设置');
}
$conditions = $this->request->all();
diff --git a/app/Domains/Virtual/Repositories/ProductRepository.php b/app/Domains/Virtual/Repositories/ProductRepository.php
index e2d7a888..ff30ad1f 100644
--- a/app/Domains/Virtual/Repositories/ProductRepository.php
+++ b/app/Domains/Virtual/Repositories/ProductRepository.php
@@ -60,7 +60,8 @@ class ProductRepository extends Repository
}
if (isset($conditions['type'])) {
- $query->where('type', $conditions['type']);
+ $conditions['type'] = array_wrap($conditions['type']);
+ $query->whereIn('type', $conditions['type']);
}
if (isset($conditions['company_id'])) {
diff --git a/app/Domains/Virtual/Services/FlowPoolService.php b/app/Domains/Virtual/Services/FlowPoolService.php
index dd9ac482..583d9f32 100644
--- a/app/Domains/Virtual/Services/FlowPoolService.php
+++ b/app/Domains/Virtual/Services/FlowPoolService.php
@@ -633,10 +633,13 @@ class FlowPoolService extends Service
$packages = [];
foreach ($item->package_ids as $value) {
+ $package = PackageService::load($value);
+
$packages[] = [
+ 'type' => $package['type'],
'package_id' => $value,
- 'type' => PackageService::load($value)['type'],
- 'package_name' => PackageService::load($value)['name'],
+ 'package_name' => $package['name'],
+ 'carrier_operator' => $package['carrier_operator'],
];
}
diff --git a/app/Domains/Virtual/Services/OrderService.php b/app/Domains/Virtual/Services/OrderService.php
index 6e303b3d..6d506fd4 100644
--- a/app/Domains/Virtual/Services/OrderService.php
+++ b/app/Domains/Virtual/Services/OrderService.php
@@ -6,24 +6,25 @@ use App\Core\Service;
use App\Models\Card\Card;
use App\Models\Virtual\Order;
use Illuminate\Validation\Rule;
+use App\Models\Virtual\OrderCard;
use Illuminate\Support\Facades\DB;
+use App\Exceptions\ExistedException;
use App\Exceptions\NotExistException;
use App\Exceptions\NotAllowedException;
use Illuminate\Support\Facades\Validator;
use App\Domains\Card\Services\CardService;
+use App\Models\Virtual\OrderCardPartition;
use App\Exceptions\InvalidArgumentException;
use Dipper\Foundation\Exceptions\HttpException;
use App\Domains\Virtual\Services\CompanyService;
use App\Domains\Virtual\Services\PackageService;
+use App\Domains\Virtual\Services\ProductService;
use App\Domains\Virtual\Repositories\OrderRepository;
use App\Domains\Virtual\Repositories\ProductRepository;
use App\Models\Real\OrderCardPartition as RealOrderCardPartition;
use App\Domains\Virtual\Repositories\OrderCardPartitionRepository;
use App\Domains\Real\Repositories\OrderRepository as RealOrderRepository;
use App\Domains\Real\Repositories\OrderCardPartitionRepository as RealOrderCardPartitionRepository;
-use App\Exceptions\ExistedException;
-use App\Models\Virtual\OrderCardPartition;
-use App\Models\Virtual\OrderCard;
class OrderService extends Service
{
@@ -231,7 +232,7 @@ class OrderService extends Service
}
$attributes['order_status'] = (isset($attributes['selected']) && count($attributes['selected']) === $node->counts) ? 5 : ($attributes['order_status'] ?? 0);
- $attributes['transaction_status'] = isset($attributes['selected']) ? 1 : ($attributes['transaction_status'] ?? 1);
+ $attributes['transaction_status'] = isset($attributes['selected']) ? 1 : ($attributes['transaction_status'] ?? 0);
if ($attributes['order_status'] === 1) {
$count = $this->orderCardPartitionRepository->where('type', $node['type'])->where('order_id', $node['id'])->count();
@@ -241,8 +242,8 @@ class OrderService extends Service
}
// 改企业
- if ($attributes['company_id'] != $node->company_id) {
- if ($attributes['type'] !== 0) {
+ if (isset($attributes['company_id']) && $attributes['company_id'] != $node->company_id) {
+ if ($node->type !== 0) {
throw new NotAllowedException('只允许修改销售订单');
}
@@ -409,6 +410,8 @@ class OrderService extends Service
return !in_array($item->sim, array_pluck($value, 'sim'));
});
+ $product = ProductService::load(0, $attributes['company_id'], $value[0]['package_id']);
+
$counts = array_sum(array_pluck($realCards, 'counts'));
$orders[$key] = [
@@ -420,10 +423,10 @@ class OrderService extends Service
'package_id' => $value[0]['package_id'],
'transaction_no' => $this->generateTransactionNo($attributes['pay_channel']),
'pay_channel' => $attributes['pay_channel'],
- 'unit_price' => $value[0]['unit_price'],
+ 'unit_price' => $product['renew_price'],
'counts' => $counts,
- 'total_price' => $value[0]['unit_price'] * $counts,
- 'custom_price' => $value[0]['unit_price'] * $counts,
+ 'total_price' => $product['renew_price'] * $counts,
+ 'custom_price' => $product['renew_price'] * $counts,
'order_at' => $order_at,
'created_at' => $order_at,
'updated_at' => $order_at,
diff --git a/app/Domains/Virtual/Services/PackageService.php b/app/Domains/Virtual/Services/PackageService.php
index 4bf43151..d429fb0a 100644
--- a/app/Domains/Virtual/Services/PackageService.php
+++ b/app/Domains/Virtual/Services/PackageService.php
@@ -153,7 +153,7 @@ class PackageService extends Service
{
if (!self::$packages) {
self::$packages = app(PackageRepository::class)
- ->select(['id', 'type', 'sn', 'name', 'carrier_operator', 'flows', 'service_months', 'status'])
+ ->select(['id', 'type', 'sn', 'name', 'carrier_operator', 'flows', 'flowed', 'service_months', 'status'])
->withTrashed()->get()->keyBy('id')->toArray();
}
diff --git a/app/Domains/Virtual/Services/ProductService.php b/app/Domains/Virtual/Services/ProductService.php
index 7e56ba91..3d2c9600 100644
--- a/app/Domains/Virtual/Services/ProductService.php
+++ b/app/Domains/Virtual/Services/ProductService.php
@@ -155,7 +155,7 @@ class ProductService extends Service
} else {
$attributes['sn'] = self::sn($package['sn'], $attributes['company_id']);
- $node = $this->productRepository->create($attributes);
+ $node = $this->productRepository->upsert($attributes, ['sn', 'deleted_at']);
}
DB::commit();
} catch (\Exception $e) {
diff --git a/frontend/src/mixins/complete.js b/frontend/src/mixins/complete.js
index 74fb1964..52fcf761 100644
--- a/frontend/src/mixins/complete.js
+++ b/frontend/src/mixins/complete.js
@@ -1,5 +1,5 @@
-import * as FETCH from 'api/virtual/fetch';
-import PinyinEngine from 'pinyin-engine';
+import * as FETCH from "api/virtual/fetch";
+import PinyinEngine from "pinyin-engine";
export default {
data() {
@@ -15,8 +15,8 @@ export default {
};
},
methods: {
- handleComplete(array, value = '', key = 'name', indexKey = 'id') {
- if (value === '' || value === null) {
+ handleComplete(array, value = "", key = "name", indexKey = "id") {
+ if (value === "" || value === null) {
return array;
}
@@ -27,9 +27,12 @@ export default {
res = pinyinEngine.query(value);
res = array.filter(item => {
- return (item.name.toLowerCase().indexOf(value.toLowerCase()) !== -1) || (res.find(element => {
- return element[indexKey] === item[indexKey];
- }));
+ return (
+ item.name.toLowerCase().indexOf(value.toLowerCase()) !== -1 ||
+ res.find(element => {
+ return element[indexKey] === item[indexKey];
+ })
+ );
});
return res;
@@ -54,7 +57,10 @@ export default {
handleCompleteCompanies(value) {
return new Promise((resolve, reject) => {
this.initCompleteCompanies().then(() => {
- this.completeHandledCompanies = this.handleComplete(this.completeCompanies, value);
+ this.completeHandledCompanies = this.handleComplete(
+ this.completeCompanies,
+ value
+ );
resolve(this.completeHandledCompanies);
});
});
@@ -65,8 +71,10 @@ export default {
FETCH.packages().then(res => {
if (res.code === 0) {
this.completePackageInitialized = true;
+
+ type = type instanceof Array ? type : [type];
this.completePackages = res.data.filter(el => {
- if (type !== null && el.type !== type) {
+ if (type !== null && type.indexOf(el.type) === -1) {
return false;
}
return true;
@@ -84,7 +92,10 @@ export default {
handleCompletePackages(type = 0, value) {
return new Promise((resolve, reject) => {
this.initCompletePackages(type).then(() => {
- this.completeHandledPackages = this.handleComplete(this.completePackages, value);
+ this.completeHandledPackages = this.handleComplete(
+ this.completePackages,
+ value
+ );
resolve(this.completeHandledPackages);
});
});
diff --git a/frontend/src/service/util.js b/frontend/src/service/util.js
index a87059bf..cd9d8f00 100644
--- a/frontend/src/service/util.js
+++ b/frontend/src/service/util.js
@@ -143,9 +143,20 @@ export function objectDot(object, prepend = '') {
* @param {String} key
*/
export function sumBy(array, key) {
- return array.map((item) => {
- return Number(item[key]);
- }).reduce((acc, cur) => {
- return acc + cur;
- });
+ return array.reduce((acc, cur) => {
+ return add(acc, Number(cur[key]));
+ }, 0);
+};
+
+/**
+ * 精确加法
+ * @param {Number} num1
+ * @param {Number} num2
+ */
+export function add(num1, num2) {
+ var r1, r2, m;
+ try { r1 = num1.toString().split(".")[1].length; } catch (e) { r1 = 0; }
+ try { r2 = num2.toString().split(".")[1].length; } catch (e) { r2 = 0; }
+ m = Math.pow(10, Math.max(r1, r2));
+ return (num1 * m + num2 * m) / m;
};
diff --git a/frontend/src/views/stats/company-count/index.vue b/frontend/src/views/stats/company-count/index.vue
index 78af0fd5..22aa0fb6 100644
--- a/frontend/src/views/stats/company-count/index.vue
+++ b/frontend/src/views/stats/company-count/index.vue
@@ -73,31 +73,7 @@
:height="page.limit > 12 ? 610 : ''"
ref="table"
stripe
- >
-
-
-
-
-
-
+ >
-
-
-
-
-
-
-
-
-
-
-
-
- 总计
- |
- - - | -- - | -- - | -- - | -
- {{stats.members}}
- |
-
- {{stats.counts}}
- |
-
- {{Number(stats.total_price).toFixed(2)}}
- |
- - - | -- - | -- |
---|