0, 'yd' => 1, 'dx' => 2, 'qw' => 3, ]; public function handle() { $datetime = $this->getDateTime(); $this->companies = app(CompanyRepository::class)->get()->pluck('id')->toArray(); $this->companies = array_map([CommonService::class, 'stringifyCompanyId'], $this->companies); $basePackages = $this->getBasePackages(); $renewalPackages = $this->getRenewalPackages(); foreach ($renewalPackages as &$item) { $item['carrier_operator'] = $basePackages[$item['parent_id']]['carrier_operator']; $item['flows'] = $basePackages[$item['parent_id']]['flows']; $item['voices'] = $basePackages[$item['parent_id']]['voices']; $item['messages'] = $basePackages[$item['parent_id']]['messages']; $item['has_message_switch'] = $basePackages[$item['parent_id']]['has_message_switch']; $item['has_lbs'] = $basePackages[$item['parent_id']]['has_lbs']; $item['reset_months'] = $basePackages[$item['parent_id']]['reset_months']; } $flowPackages = $this->getFlowPackages(); $optionalPackages = $this->getOptionalPackages(); $additionalPackages = $this->getAdditionalPackages(); $packages = array_merge($basePackages, $renewalPackages, $flowPackages, $optionalPackages, $additionalPackages); Package::upsert($packages, 'id'); app(PackageRepository::class)->forgetCached(); } // 基础包 protected function getBasePackages() { $select = [ DB::raw('0 as type'), 'jxc_package.package_sn as id', 'jxc_package.name as name', 'jxc_package.carrieroperator as carrier_operator', 'jxc_package.price as cost_price', 'jxc_package.guide_price as guide_price', 'jxc_package.flows as flows', 'jxc_package.voices as voices', 'jxc_package.short_msg as messages', 'jxc_package.short_msg_on as has_message_switch', 'jxc_package.lbs as has_lbs', 'jxc_package.flow_cycle as reset_months', 'jxc_package.package_cycle as service_months', 'jxc_package.del as del', 'jxc_package.description as description', DB::raw("FROM_UNIXTIME(jxc_package.create_time, '%Y-%m-%d %H:%i:%s') as created_at"), ]; $packages = DB::connection('real')->table('jxc_package')->select($select)->where('type', 11)->get(); return $this->transform($packages); } // 续费包 protected function getRenewalPackages() { $select = [ DB::raw('1 as type'), 'jxc_package_renewal.bag_number as id', 'jxc_package_renewal.package_sn as parent_id', 'jxc_package_renewal.name as name', 'jxc_package_renewal.price as cost_price', 'jxc_package_renewal.guide_price as guide_price', 'jxc_package_renewal.service_cycle as service_months', 'jxc_package_renewal.create_time as created_at', 'jxc_package_renewal.del', 'jxc_package_renewal.remark as description', ]; $packages = DB::connection('real')->table('jxc_package_renewal')->select($select)->get(); return $this->transform($packages); } // 加油包 protected function getFlowPackages() { $select = [ DB::raw('2 as type'), 'jxc_package_flows.bag_number as id', 'jxc_package_flows.name as name', 'jxc_package_flows.carrieroperator as carrier_operator', 'jxc_package_flows.price as cost_price', 'jxc_package_flows.guide_price as guide_price', 'jxc_package_flows.flows as flows', 'jxc_package_flows.voices as voices', 'jxc_package_flows.short_msg as messages', 'jxc_package_flows.lbs as has_lbs', 'jxc_package_flows.flows_cycle as reset_months', 'jxc_package_flows.service_cycle as service_months', 'jxc_package_flows.create_time as created_at', 'jxc_package_flows.del', 'jxc_package_flows.remark as description', ]; $packages = DB::connection('real')->table('jxc_package_flows')->select($select)->get(); return $this->transform($packages); } // 可选包 protected function getOptionalPackages() { $select = [ DB::raw('3 as type'), 'jxc_package_optional.bag_number as id', 'jxc_package_optional.name as name', 'jxc_package_optional.carrieroperator as carrier_operator', 'jxc_package_optional.price as cost_price', 'jxc_package_optional.guide_price as guide_price', 'jxc_package_optional.flows as flows', 'jxc_package_optional.voices as voices', 'jxc_package_optional.short_msg as messages', 'jxc_package_optional.lbs as has_lbs', 'jxc_package_optional.flows_cycle as reset_months', 'jxc_package_optional.service_cycle as service_months', 'jxc_package_optional.create_time as created_at', 'jxc_package_optional.del', 'jxc_package_optional.remark as description', ]; $packages = DB::connection('real')->table('jxc_package_optional')->select($select)->get(); return $this->transform($packages); } // 可选包 protected function getAdditionalPackages() { $select = [ DB::raw('4 as type'), 'jxc_package_addoptional.bag_number as id', 'jxc_package_addoptional.name as name', DB::raw('"qw" as carrier_operator'), DB::raw('0 as cost_price'), 'jxc_package_addoptional.guide_price as guide_price', DB::raw('0 as flows'), 'jxc_package_addoptional.content_count as messages', 'jxc_package_addoptional.reset_cycle as reset_months', 'jxc_package_addoptional.service_cycle as service_months', 'jxc_package_addoptional.create_time as created_at', 'jxc_package_addoptional.del', 'jxc_package_addoptional.package_remark as description', ]; $packages = DB::connection('real')->table('jxc_package_addoptional')->select($select)->where('jxc_package_addoptional.tid', 1)->get(); return $this->transform($packages); } protected function transform($packages) { $packages = $packages->toArray(); foreach ($packages as &$package) { $package = (array)$package; $package['parent_id'] = $package['parent_id'] ?: ''; $package['carrier_operator'] = self::$carrier_operator[$package['carrier_operator']] ?? 255; $package['cost_price'] = floatval($package['cost_price']) * 100; $package['guide_price'] = floatval($package['guide_price']) * 100; $package['flows'] = intval($package['flows']); $package['voices'] = intval($package['voices']); $package['messages'] = intval($package['messages']); $package['has_message_switch'] = $package['has_message_switch'] ?? 0; $package['has_lbs'] = $package['has_lbs'] ?? 0; $package['reset_months'] = $package['reset_months'] ?? 0; $package['service_months'] = $package['service_months'] ?? 0; $package['updated_at'] = date('Y-m-d H:i:s'); $package['deleted_at'] = $package['del'] ? date('Y-m-d H:i:s') : null; unset($package['del']); ksort($package); } return array_keyBy($packages, 'id'); } }