diff --git a/app/Dicts.php b/app/Dicts.php index 705d9426..7af6f0cd 100644 --- a/app/Dicts.php +++ b/app/Dicts.php @@ -21,7 +21,7 @@ class Dicts extends Repository 'pay_channel' => ['银行转账' => ['bank'], '余额支付' => ['account'], '微信支付' => ['wx', 'wx_pub', 'wx_pub_qr', 'wx_pub_scan', 'wx_wap', 'wx_lite'], '支付宝' => ['alipay', 'alipay_wap', 'alipay_qr', 'alipay_scan', 'alipay_pc_direct'], '天猫续费' => ['tmall']], 'carrier_operator' => ['联通', '移动', '电信', '全网'], 'service_type' => ['套餐开通', '套餐续费', '套餐更换', '套餐销售'], - 'card_status' => ['测试期', '沉默期', '服务期', '已注销'], + 'card_status' => ['测试期', '沉默期', '服务期', '服务到期', '已注销'], 'package_type' => ['基础套餐', '续费包', '加油包', '可选包', '附加包'], 'tables' => ['real' => 'RD', 'virtual' => 'VD'], 'order_status' => ['已下单', '已取消', '已排单', '已出库', '已发货', '已签收'], diff --git a/app/Domains/Virtual/Exports/CardExport.php b/app/Domains/Virtual/Exports/CardExport.php index b5649f0c..fddfc3ba 100644 --- a/app/Domains/Virtual/Exports/CardExport.php +++ b/app/Domains/Virtual/Exports/CardExport.php @@ -45,9 +45,9 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With foreach ($rows as $item) { $array[] = [ $item['id'], - $item['sim'], - $item['imsi'], - $item['iccid'], + $item['sim']."\t", + $item['imsi']."\t", + $item['iccid']."\t", $item['carrier_operator'], $item['company_name'], $item['package_name'], @@ -86,9 +86,6 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With public function columnFormats(): array { return [ - 'B' => NumberFormat::FORMAT_NUMBER, - 'C' => NumberFormat::FORMAT_NUMBER, - 'D' => NumberFormat::FORMAT_NUMBER, 'H' => NumberFormat::FORMAT_DATE_YYYYMMDD2, 'J' => NumberFormat::FORMAT_DATE_YYYYMMDD2, ]; diff --git a/app/Domains/Virtual/Exports/PropertyExport.php b/app/Domains/Virtual/Exports/PropertyExport.php index 401f01ac..294daa52 100644 --- a/app/Domains/Virtual/Exports/PropertyExport.php +++ b/app/Domains/Virtual/Exports/PropertyExport.php @@ -30,7 +30,7 @@ class PropertyExport extends AbstractExport implements FromCollection, WithHeadi public function headings(): array { - $provinces = $this->settings['province']; + $provinces = $this->settings['province'] ?? []; $headings = [ '*企业ID', @@ -62,7 +62,7 @@ class PropertyExport extends AbstractExport implements FromCollection, WithHeadi */ public function rows($rows) { - $provinces = $this->settings['province']; + $provinces = $this->settings['province'] ?? []; $array = []; diff --git a/app/Domains/Virtual/Http/Controllers/OrderController.php b/app/Domains/Virtual/Http/Controllers/OrderController.php index 5edb33f2..f36644cf 100644 --- a/app/Domains/Virtual/Http/Controllers/OrderController.php +++ b/app/Domains/Virtual/Http/Controllers/OrderController.php @@ -305,6 +305,16 @@ class OrderController extends Controller } foreach ($segments as $segment) { + $interval = intval($segment['end_no']) - intval($segment['start_no']); + + if ($interval < 0) { + throw new InvalidArgumentException('结束号段比较大于开始号段'); + } + + if ($interval > 10000) { + throw new InvalidArgumentException('一次排号限制10000张'); + } + for ($i = intval($segment['start_no']); $i <= intval($segment['end_no']); $i++) { array_push($simArray, $i); } diff --git a/app/Domains/Virtual/Http/Controllers/PropertyController.php b/app/Domains/Virtual/Http/Controllers/PropertyController.php index 68e56c83..c8841485 100644 --- a/app/Domains/Virtual/Http/Controllers/PropertyController.php +++ b/app/Domains/Virtual/Http/Controllers/PropertyController.php @@ -95,7 +95,7 @@ class PropertyController extends Controller $file = $this->request->file('file'); $settings = app(PropertySettingRepository::class)->getAll(); - $provinces = $settings['province']; + $provinces = $settings['province'] ?? []; $data = ImportService::load($file); diff --git a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php index f8df42b4..8bb66246 100644 --- a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php +++ b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php @@ -118,10 +118,16 @@ trait OrderCardConcern case 0: $query->whereNull('service_start_at')->whereHas('card', function ($relation) { $relation->whereNull('cancelled_at'); - }); + })->where('created_at', '<', Carbon::now()->subMonths(6)); break; case 1: + $query->whereNull('service_start_at')->whereHas('card', function ($relation) { + $relation->whereNull('cancelled_at'); + })->where('created_at', '>=', Carbon::now()->subMonths(6)); + break; + + case 2: $query->whereExists(function ($subQuery) { $table = with(new OrderCardPartition)->getTable(); $subQuery->from($table)->select('sim') @@ -133,7 +139,7 @@ trait OrderCardConcern }); break; - case 2: + case 3: $query->whereNotNull('service_start_at')->whereNotIn('sim', function ($subQuery) { $table = with(new OrderCardPartition)->getTable(); $subQuery->from($table)->select('sim') @@ -144,7 +150,7 @@ trait OrderCardConcern }); break; - case 3: + case 4: $query->whereHas('card', function ($relation) { $relation->whereNotNull('cancelled_at'); }); diff --git a/app/Domains/Virtual/Services/CardService.php b/app/Domains/Virtual/Services/CardService.php index 5bb273a8..eb84b14b 100644 --- a/app/Domains/Virtual/Services/CardService.php +++ b/app/Domains/Virtual/Services/CardService.php @@ -65,8 +65,6 @@ class CardService extends Service $cardStatus = app(Dicts::class)->get('card_status'); $cards->transform(function ($item) use ($carrierOperators, $cardStatus, $timelines) { - $status = static::getStatus($item->card); - $_timelines = $timelines[$item->sim] ?? []; try { @@ -74,8 +72,8 @@ class CardService extends Service $package = PackageService::load($timeline['package_id']); $timeline['type_name'] = self::$typeNames[$timeline['type']]; $timeline['name'] = $package['name']; - $timeline['service_start_at'] = Carbon::parse($timeline['service_start_at'])->format('Y-m'); - $timeline['service_end_at'] = Carbon::parse($timeline['service_end_at'])->format('Y-m'); + $timeline['service_start_at'] = $timeline['service_start_at'] ? Carbon::parse($timeline['service_start_at'])->format('Y-m') : ''; + $timeline['service_end_at'] = $timeline['service_end_at'] ? Carbon::parse($timeline['service_end_at'])->format('Y-m') : ''; } } catch (\Exception $e) { throw $e; @@ -86,7 +84,7 @@ class CardService extends Service $service_start_at = empty($_timelines) ? '' : min(array_pluck($_timelines, 'service_start_at')); $service_end_at = empty($_timelines) ? '' : max(array_pluck($_timelines, 'service_end_at')); - return collect([ + $data = [ 'id' => sprintf('No%011d', $item->id), 'sim' => $item->sim, 'imsi' => $item->card['imsi'], @@ -95,14 +93,20 @@ class CardService extends Service 'company_name' => $company['name'], 'package_name' => $package['name'], 'virtual_activated_at' => (string)$item->card['virtual_activated_at'], - 'status' => $status, - 'status_name' => $cardStatus[$status], + 'cancelled_at' => (string)$item->card['cancelled_at'], 'created_at' => (string)$item->created_at, 'updated_at' => (string)$item->updated_at, 'service_start_at' => $service_start_at, 'service_end_at' => $service_end_at, 'timelines' => $_timelines, - ]); + ]; + + $status = static::getStatus($data); + + $data['status'] = $status; + $data['status_name'] = $cardStatus[$status]; + + return collect($data); }); return collect($cards->toArray()); @@ -116,6 +120,22 @@ class CardService extends Service */ public static function getStatus($card) { - return $card['virtual_activated_at'] ? ($card['cancelled_at'] ? 3 : 2) : 1; + if ($card['cancelled_at']) { + return 4; + } + + if (strtotime($card['service_end_at']) < time()) { + return 3; + } + + if ($card['virtual_activated_at']) { + return 2; + } + + if (Carbon::parse($card['created_at'])->diffInMonths(Carbon::now())<= 6) { + return 1; + } + + return 0; } } diff --git a/app/Domains/Virtual/Services/tempCodeRunnerFile.php b/app/Domains/Virtual/Services/tempCodeRunnerFile.php new file mode 100644 index 00000000..a4dfb516 --- /dev/null +++ b/app/Domains/Virtual/Services/tempCodeRunnerFile.php @@ -0,0 +1,2 @@ +call(PermissionSeeder::class); $this->call(CompanyAccountSeeder::class); $this->call(ConfigSeeder::class); + $this->call(PropertySettingSeeder::class); } } diff --git a/database/seeds/PropertySettingSeeder.php b/database/seeds/PropertySettingSeeder.php new file mode 100644 index 00000000..460c1947 --- /dev/null +++ b/database/seeds/PropertySettingSeeder.php @@ -0,0 +1,43 @@ + ['货车','两客一危','其他','其他商用车'], + 'company' => ['北斗/GPS运营公司','物联网运营公司','汽车电子后市场','公交集团','企业客户','北斗/GPS/物联网运营公司','北斗/GPS工厂','车厂','汽车电子方案公司'], + 'customer' => ['行业客户','车后市场客户'], + 'package' => ['A类套餐'=>['行车记录仪','电子狗'],'B类套餐'=>['智能后视镜'],'C类套餐'=>['物联网终端','北斗/GPS定位器','北斗超长待机终端','车载WIFI'],'D类套餐'=>['北斗/4G部标机']], + 'package_type' => ['A类套餐','B类套餐','C类套餐','D类套餐'], + 'platform' => ['TSP平台','API接口','车控宝平台'], + 'product' => ['物联网终端','北斗/GPS定位器','电子狗','行车记录仪','后视镜','大屏机','北斗/4G部标机','智能后视镜','北斗超长待机终端','车载WIFI'], + 'province' => ['福建省','广东省','山东省','江西省','安徽省','湖北省','江苏省','浙江省','上海市','四川省','河北省','湖南省','广西壮族自治区','山西省','辽宁省','河南省','贵州省','云南省','北京市','青海省','新疆维吾尔自治区','重庆市','天津市','吉林省','黑龙江省','海南省','陕西省','甘肃省','内蒙古自治区','西藏自治区','宁夏回族自治区','台湾省','香港特别行政区','澳门特别行政区'], + 'vehicle' => ['乘用车','商用车','其他'], + ]; + + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + app(PropertySettingRepository::class)->truncate(); + + $data = []; + + foreach (self::PROPERTY_SETTING as $key => $value) { + $data[] = [ + 'name' => $key, + 'value' => json_encode($value, 256), + ]; + } + + app(PropertySettingRepository::class)->upsert($data, 'name'); + + app(PropertySettingRepository::class)->forgetCached(); + } +} diff --git a/frontend/public/config.js b/frontend/public/config.js index 7e6710ba..4e5ce2ca 100644 --- a/frontend/public/config.js +++ b/frontend/public/config.js @@ -3,7 +3,7 @@ var CONFIG = { login_background: '/assets/login_background.jpg', logo_big: '/assets/logo_big.png', logo_small: '/assets/logo_small.png', - url: (window.location.hostname === 'localhost') ? 'http://v.denghaoyuan.cn' : '/' + url: (window.location.hostname === 'localhost') ? 'http://v.denghaoyuan.cn' : '' }; window.CONFIG = CONFIG; diff --git a/frontend/src/views/stats/sold-activated/index.vue b/frontend/src/views/stats/sold-activated/index.vue index ce9bd096..b05a2fcc 100644 --- a/frontend/src/views/stats/sold-activated/index.vue +++ b/frontend/src/views/stats/sold-activated/index.vue @@ -4,7 +4,7 @@