getDateTime(); $this->companies = app(CompanyRepository::class)->get()->pluck('id')->toArray(); $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_cycle'] = $basePackages[$item['parent_id']]['reset_cycle']; } $flowPackages = $this->getFlowPackages(); $optionalPackages = $this->getOptionalPackages(); $additionalPackages = $this->getAdditionalPackages(); $packages = array_merge($basePackages, $renewalPackages, $flowPackages, $optionalPackages, $additionalPackages); Package::replace($packages); 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_cycle', 'jxc_package.package_cycle as service_cycle', DB::raw("FROM_UNIXTIME(jxc_package.create_time, '%Y-%m-%d %H:%i:%s') as created_at"), ]; $packages = DB::connection('real')->table('jxc_package')->join('jxc_package_custom_relation', function ($join) { $join->on('jxc_package_custom_relation.package_sn', '=', 'jxc_package.package_sn') ->whereIn('jxc_package_custom_relation.custom_no', $this->companies) ->where('jxc_package_custom_relation.del', 0); })->select($select)->where('jxc_package.del', 0)->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_cycle', 'jxc_package_renewal.create_time as created_at', ]; $packages = DB::connection('real')->table('jxc_package_renewal')->join('jxc_package_value_add_relation', function ($join) { $join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_renewal.bag_number') ->whereIn('jxc_package_value_add_relation.custom_no', $this->companies) ->where('jxc_package_value_add_relation.del', '0') ->where('jxc_package_value_add_relation.type', 1); })->select($select)->where('jxc_package_renewal.del', '0')->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_cycle', 'jxc_package_flows.service_cycle as service_cycle', 'jxc_package_flows.create_time as created_at', ]; $packages = DB::connection('real')->table('jxc_package_flows')->join('jxc_package_value_add_relation', function ($join) { $join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_flows.bag_number') ->whereIn('jxc_package_value_add_relation.custom_no', $this->companies) ->where('jxc_package_value_add_relation.del', '0') ->where('jxc_package_value_add_relation.type', 2); })->select($select)->where('jxc_package_flows.del', '0')->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_cycle', 'jxc_package_optional.service_cycle as service_cycle', 'jxc_package_optional.create_time as created_at', ]; $packages = DB::connection('real')->table('jxc_package_optional')->join('jxc_package_value_add_relation', function ($join) { $join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_optional.bag_number') ->whereIn('jxc_package_value_add_relation.custom_no', $this->companies) ->where('jxc_package_value_add_relation.del', '0') ->where('jxc_package_value_add_relation.type', 3); })->select($select)->where('jxc_package_optional.del', '0')->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('255 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_cycle', 'jxc_package_addoptional.service_cycle as service_cycle', 'jxc_package_addoptional.create_time as created_at', ]; $packages = DB::connection('real')->table('jxc_package_addoptional')->join('jxc_package_value_add_relation', function ($join) { $join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_addoptional.bag_number') ->whereIn('jxc_package_value_add_relation.custom_no', $this->companies) ->where('jxc_package_value_add_relation.del', '0') ->where('jxc_package_value_add_relation.type', 4); })->select($select)->where('jxc_package_addoptional.del', '0')->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'] = $package['carrier_operator'] ?? 255; $package['cost_price'] = $package['cost_price'] ?? 0; $package['guide_price'] = $package['guide_price'] ?? 0; $package['flows'] = $package['flows'] ?? 0; $package['voices'] = $package['voices'] ?? 0; $package['messages'] = $package['messages'] ?? 0; $package['has_message_switch'] = $package['has_message_switch'] ?? 0; $package['has_lbs'] = $package['has_lbs'] ?? 0; $package['reset_cycle'] = $package['reset_cycle'] ?? 0; $package['service_cycle'] = $package['service_cycle'] ?? 0; $package['updated_at'] = date('Y-m-d H:i:s'); } return array_keyBy($packages, 'id'); } }