inital commit
This commit is contained in:
633
app/Console/Commands/ReportSummary.php
Normal file
633
app/Console/Commands/ReportSummary.php
Normal file
@@ -0,0 +1,633 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\Province;
|
||||
use App\Models\User;
|
||||
use App\Models\InfoItem;
|
||||
use App\Models\ContractSubItems;
|
||||
use App\Models\SafetyAndPrivacy;
|
||||
use App\Models\Accident;
|
||||
use App\Models\RoadObserved;
|
||||
use App\Models\ReportSummary as ReportSummaryModel;
|
||||
|
||||
class ReportSummary extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'reports:rms-summary';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Prepares and Inserts data from specific reports into `rms_reports_summary` table.';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
|
||||
// initializing
|
||||
$from_date_array = explode('-', verta()->startYear()->format('Y-m-d'));
|
||||
$from_date = implode('-', verta()->getGregorian($from_date_array[0], $from_date_array[1], $from_date_array[2])) . ' 00:00:00';
|
||||
$to_date_array = explode('-', verta()->endYear()->format('Y-m-d'));
|
||||
$to_date = implode('-', verta()->getGregorian($to_date_array[0], $to_date_array[1], $to_date_array[2])) . ' 23:59:59';
|
||||
|
||||
|
||||
// (BEGIN) receipt
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'receipt'],
|
||||
[
|
||||
'report_name' => 'receipt',
|
||||
'data' => [
|
||||
'chart' => Accident::select(DB::raw('sum(sum) as sum'), 'province_fa')->where('status', '5')->groupby('province_id')->orderby('sum', 'desc')->get()->take(5)->toArray(),
|
||||
'sum' => Accident::select(DB::raw('sum(sum) - sum(ojrate_nasb) as sum'))->first('sum'),
|
||||
]
|
||||
|
||||
|
||||
]
|
||||
);
|
||||
// (END) receipt
|
||||
|
||||
|
||||
// (BEGIN) safety_and_privacy
|
||||
foreach (InfoItem::where('type', "privacy")->get() as $key => $value) {
|
||||
$finalArray['label'][] = $value['sub_item_str'];
|
||||
}
|
||||
|
||||
for ($step = 1; $step < 4; $step++) {
|
||||
$finalArray['data'][] = SafetyAndPrivacy::select(DB::raw('count(*) as count'))->where('step', $step)->groupby('info_id')->get()->map(function ($item) {
|
||||
return $item->count;
|
||||
})->toArray();
|
||||
}
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'safety_and_privacy'],
|
||||
[
|
||||
'report_name' => 'safety_and_privacy',
|
||||
'data' => $finalArray
|
||||
]
|
||||
);
|
||||
|
||||
// (END) safety_and_privacy
|
||||
|
||||
// (BEGIN) road_item
|
||||
$finalArray = [];
|
||||
|
||||
foreach (InfoItem::where('type', "item")->groupby('item')->get() as $key => $value) {
|
||||
$finalArray['label'][$value['item']] = $value['item_str'];
|
||||
$finalArray['data'][$value['item']] = 0;
|
||||
}
|
||||
$data = DB::table('road_items_projects')
|
||||
->select('item_fa as label', 'item')
|
||||
->whereBetween('created_at', [$from_date, $to_date])
|
||||
->get();
|
||||
|
||||
$dataAfter = array();
|
||||
foreach ($data as $key => $value) {
|
||||
$dataAfter[$value->item]['label'] = $value->label;
|
||||
if(!isset($dataAfter[$value->item]['count'])) {
|
||||
$dataAfter[$value->item]['count'] = 0;
|
||||
}
|
||||
$dataAfter[$value->item]['count']++;
|
||||
|
||||
}
|
||||
|
||||
foreach ($dataAfter as $key => $value) {
|
||||
$finalArray['label'][$key] = $value['label'];
|
||||
$finalArray['data'][$key] = $value['count'];
|
||||
}
|
||||
|
||||
$temporary = [];
|
||||
foreach ($finalArray['label'] as $value) {
|
||||
$temporary['label'][] = $value;
|
||||
}
|
||||
|
||||
foreach ($finalArray['data'] as $value) {
|
||||
$temporary['data'][] = $value;
|
||||
}
|
||||
array_multisort($temporary['data'], SORT_DESC, $temporary['label']);
|
||||
|
||||
$myArray = [];
|
||||
|
||||
$myArray['labels'] = $temporary['label'];
|
||||
$myArray['datasets'][] = [
|
||||
'label' => 'به تفکیک نوع پروژه های راهداری',
|
||||
'data' => $temporary['data']
|
||||
];
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'road_item'],
|
||||
[
|
||||
'report_name' => 'road_item',
|
||||
'data' => $myArray
|
||||
]
|
||||
);
|
||||
// (END) road_item
|
||||
|
||||
|
||||
|
||||
|
||||
// (BEGIN) gashte roozaneh
|
||||
$gasht_rozane = DB::table('road_patrols')
|
||||
->select(
|
||||
DB::raw('count(road_patrols.id) as count_number'),
|
||||
DB::raw('sum(distance) as distance'),
|
||||
'road_patrols.province_fa'
|
||||
)
|
||||
->groupBy('road_patrols.province_id')
|
||||
->orderBy('distance', 'desc')
|
||||
->limit(5)
|
||||
->get()->toArray();
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'gasht_rozane'],
|
||||
[
|
||||
'report_name' => 'gasht_rozane',
|
||||
'data' => $gasht_rozane
|
||||
]
|
||||
);
|
||||
|
||||
// (END) gashte roozaneh
|
||||
|
||||
// (BEGIN) [POSTERS CONTROLLER => progressInfo] user activity
|
||||
|
||||
// for ($i = 3; $i >= 0; $i--) {
|
||||
|
||||
// $from_date_array = explode('-', verta()->startYear()->subYear($i)->format('Y-m-d'));
|
||||
// $from_date = implode('-', verta()->getGregorian($from_date_array[0], $from_date_array[1], $from_date_array[2])) . ' 00:00:00';
|
||||
// $to_date_array = explode('-', verta()->subYear($i)->endYear()->format('Y-m-d'));
|
||||
// $to_date = implode('-', verta()->getGregorian($to_date_array[0], $to_date_array[1], $to_date_array[2])) . ' 23:59:59';
|
||||
|
||||
// $user_activity_sql = "
|
||||
// SELECT SUM(majmoe) AS activity
|
||||
// FROM (
|
||||
// SELECT *, COUNT(quantity) AS majmoe
|
||||
// FROM (
|
||||
// SELECT *,
|
||||
// COUNT(*) AS quantity
|
||||
// FROM (
|
||||
// SELECT YEAR (created_at) AS yy,
|
||||
// MONTH (created_at) AS mm,
|
||||
// DAY (created_at) AS dd,
|
||||
// HOUR (created_at) AS hh,
|
||||
// user_id
|
||||
// FROM user_activity_logs
|
||||
// WHERE created_at BETWEEN '{$from_date}' AND '{$to_date}'
|
||||
// ) user_activity_distinct
|
||||
// GROUP BY yy,
|
||||
// mm,
|
||||
// dd,
|
||||
// hh,
|
||||
// user_id
|
||||
// ) user_activity_by_hour_and_
|
||||
// GROUP BY user_id
|
||||
// ) AS calculated_table;";
|
||||
|
||||
// $user_activity = (int) DB::select(DB::raw($user_activity_sql))[0]->activity;
|
||||
// $user_activity_count_sql = "SELECT count(*) as cnt
|
||||
// FROM user_activity_logs WHERE created_at between '{$from_date}' and '{$to_date}'";
|
||||
// $user_activity_count = (int) DB::select(DB::raw($user_activity_count_sql))[0]->cnt;
|
||||
|
||||
// $array[] = [
|
||||
// 'user_activity' => $user_activity,
|
||||
// 'user_activity_count' => $user_activity_count,
|
||||
// 'year' => ($from_date_array[0] == '1400') ? 'نیمه دوم 1400' : $from_date_array[0]
|
||||
// ];
|
||||
|
||||
// }
|
||||
|
||||
|
||||
$number_of_past_days = verta()->startYear()->diffDays();
|
||||
|
||||
|
||||
$user_activity_sql = "
|
||||
SELECT SUM(majmoe) AS activity
|
||||
FROM (
|
||||
SELECT *, COUNT(quantity) AS majmoe
|
||||
FROM (
|
||||
SELECT *,
|
||||
COUNT(*) AS quantity
|
||||
FROM (
|
||||
SELECT YEAR (created_at) AS yy,
|
||||
MONTH (created_at) AS mm,
|
||||
DAY (created_at) AS dd,
|
||||
HOUR (created_at) AS hh,
|
||||
user_id
|
||||
FROM user_activity_logs
|
||||
WHERE created_at BETWEEN '{$from_date}' AND '{$to_date}'
|
||||
) user_activity_distinct
|
||||
GROUP BY yy,
|
||||
mm,
|
||||
dd,
|
||||
hh,
|
||||
user_id
|
||||
) user_activity_by_hour_and_
|
||||
GROUP BY user_id
|
||||
) AS calculated_table;";
|
||||
|
||||
$user_activity = (int) DB::select(DB::raw($user_activity_sql))[0]->activity;
|
||||
// $user_activity_count_sql = "SELECT COUNT(DISTINCT user_id) AS cnt FROM user_activity_logs ;";
|
||||
$user_activity_number = (int) DB::select(DB::raw("SELECT COUNT(DISTINCT user_id) AS cnt FROM user_activity_logs ;"))[0]->cnt;
|
||||
$array[] = [
|
||||
'user_count' => User::count(),
|
||||
'user_activity_avarage' => round(($user_activity / 143) / $user_activity_number),
|
||||
'year' => $from_date_array[0]
|
||||
];
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'user_activity'],
|
||||
[
|
||||
'report_name' => 'user_activity',
|
||||
'data' => $array,
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
// (END) [POSTERS CONTROLLER => progressInfo] user activity
|
||||
|
||||
// (BEGIN) [BAMA CONTROLLER => homepage_report] tedad proje be tafkik noe va akharin vaziat
|
||||
$collection = ContractSubItems::groupBy('project_type_id')
|
||||
->select('project_type_id as id', 'project_type_fa as label')
|
||||
->where('progress_project', '<', 100)
|
||||
->get();
|
||||
$array = [];
|
||||
foreach ($collection as $key => $value) {
|
||||
$array['label'][$value->id] = $value->label;
|
||||
$array['data'][$value->id] = 0;
|
||||
}
|
||||
|
||||
$data = DB::table('contract_subitems')
|
||||
->groupBy('project_type_id')
|
||||
->select('project_type_id as id', 'project_type_fa as label', DB::raw('count(*) as count'))
|
||||
->where('progress_project', '<', 100)
|
||||
->get();
|
||||
|
||||
foreach ($data as $key => $item) {
|
||||
$array['data'][$item->id] = $item->count;
|
||||
}
|
||||
|
||||
|
||||
$finalArray = [];
|
||||
foreach ($array['label'] as $index => $value) {
|
||||
$finalArray['label'][] = $value;
|
||||
$finalArray['data'][] = $array['data'][$index];
|
||||
}
|
||||
|
||||
$type_sperate = $finalArray;
|
||||
|
||||
$collection = ContractSubItems::groupBy('last_status_id')
|
||||
->where('last_status_id', '!=', '0')
|
||||
->where('progress_project', '<', 100)
|
||||
->select('last_status_id as id', 'last_status_fa as label')
|
||||
->get();
|
||||
$array = [];
|
||||
foreach ($collection as $key => $value) {
|
||||
$array['label'][$value->id] = $value->label;
|
||||
$array['data'][$value->id] = 0;
|
||||
}
|
||||
|
||||
|
||||
$data = DB::table('contract_subitems')
|
||||
->where('last_status_id', '!=', '0')
|
||||
->where('progress_project', '<', 100)
|
||||
->groupBy('last_status_id')
|
||||
->select('last_status_id as id', 'last_status_fa as label', DB::raw('count(*) as count'))
|
||||
->get();
|
||||
|
||||
foreach ($data as $key => $item) {
|
||||
$array['data'][$item->id] = $item->count;
|
||||
}
|
||||
|
||||
$finalArray = [];
|
||||
foreach ($array['label'] as $index => $value) {
|
||||
$finalArray['label'][] = $value;
|
||||
$finalArray['data'][] = $array['data'][$index];
|
||||
}
|
||||
|
||||
$status_sperate = $finalArray;
|
||||
|
||||
$total_projects_count = ContractSubItems::count();
|
||||
|
||||
$point_data = ContractSubItems::select('id', 'start_lat', 'start_lng', 'project_type_id')
|
||||
->where('progress_project', '<', 100)
|
||||
->whereBetween('contract_date_from_parent_contract', [$from_date , $to_date])
|
||||
->get();
|
||||
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'contract_subitem_projects'],
|
||||
[
|
||||
'report_name' => 'contract_subitem_projects',
|
||||
'data' => [
|
||||
'type_sperate' => $type_sperate,
|
||||
'status_sperate' => $status_sperate,
|
||||
'count' => $total_projects_count,
|
||||
'points' => $point_data,
|
||||
],
|
||||
]
|
||||
);
|
||||
// (END) [BAMA CONTROLLER => homepage_report] tedad proje be tafkik noe va akharin vaziat
|
||||
|
||||
// (BEGIN) [BI CONTROLLER => percentComplaintsHandled] total percent complaints handled
|
||||
$countHandled = RoadObserved::where('rms_status', "<>", 0)
|
||||
->count();
|
||||
|
||||
$countAll = RoadObserved::count();
|
||||
|
||||
$total_percent_complaints_handled = $countAll ? round(($countHandled / $countAll) * 100) : 0;
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'total_percent_complaints_handled'],
|
||||
[
|
||||
'report_name' => 'total_percent_complaints_handled',
|
||||
'data' => $total_percent_complaints_handled
|
||||
]
|
||||
);
|
||||
|
||||
// (END) [BI CONTROLLER => percentComplaintsHandled] total percent complaints handled
|
||||
|
||||
|
||||
// (BEGIN) [BI CONTROLLER => separationComplainTypeRahdariComplains]
|
||||
$dataLabel = RoadObserved::select('fk_FeatureType as id', 'FeatureTypeTitle as label', DB::raw('count(*) as count'))
|
||||
->groupBy('fk_FeatureType')
|
||||
->get();
|
||||
|
||||
$array = [];
|
||||
foreach ($dataLabel as $value) {
|
||||
$array['label'][$value->id] = $value->label;
|
||||
$array['dataVasel'][$value->id] = 0;
|
||||
$array['dataResidegiShode'][$value->id] = 0;
|
||||
}
|
||||
$dataResidegiShode = RoadObserved::where('rms_status', '!=', 0)
|
||||
->select('fk_FeatureType as id', DB::raw('count(*) as count'))
|
||||
->groupBy('fk_FeatureType')
|
||||
->get();
|
||||
|
||||
foreach ($dataResidegiShode as $key => $item) {
|
||||
$array['dataResidegiShode'][$item->id] = $item->count;
|
||||
}
|
||||
|
||||
$dataVasel = RoadObserved::select('fk_FeatureType as id', DB::raw('count(*) as count'))
|
||||
->groupBy('fk_FeatureType')
|
||||
->get();
|
||||
|
||||
foreach ($dataVasel as $key => $item) {
|
||||
$array['dataVasel'][$item->id] = $item->count;
|
||||
}
|
||||
|
||||
$finalArray = [];
|
||||
foreach ($array['label'] as $value) {
|
||||
$finalArray['label'][] = $value;
|
||||
}
|
||||
foreach ($array['dataResidegiShode'] as $value) {
|
||||
$finalArray['dataResidegiShode'][] = $value;
|
||||
}
|
||||
foreach ($array['dataVasel'] as $value) {
|
||||
$finalArray['dataVasel'][] = $value;
|
||||
}
|
||||
|
||||
$number_of_complaints_per_type = [];
|
||||
|
||||
$number_of_complaints_per_type['labels'] = $finalArray['label'];
|
||||
$number_of_complaints_per_type['datasets'][] = [
|
||||
'label' => 'رسیدگی شده',
|
||||
'data' => $finalArray['dataResidegiShode']
|
||||
];
|
||||
$number_of_complaints_per_type['datasets'][] = [
|
||||
'label' => 'واصل شده',
|
||||
'data' => $finalArray['dataVasel']
|
||||
];
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'number_of_complaints_per_type'],
|
||||
[
|
||||
'report_name' => 'number_of_complaints_per_type',
|
||||
'data' => $number_of_complaints_per_type,
|
||||
]
|
||||
);
|
||||
// (END) [BI CONTROLLER => separationComplainTypeRahdariComplains]
|
||||
|
||||
// (BEGIN) [CampController => statics] tool mehvarhaye asib dide
|
||||
$sql = "SELECT blockage_cause,blockage_cause_fa,COUNT(*) AS cnt,SUM(blockage_length)
|
||||
AS lenght FROM camps WHERE is_open = 2 GROUP BY blockage_cause";
|
||||
$pies = DB::select(DB::raw($sql));
|
||||
|
||||
$data = \App\Models\Camp::where('is_open', 2)
|
||||
->groupBy('blockage_cause', 'axis_type')
|
||||
->selectRaw('axis_type, axis_type_fa, blockage_cause, blockage_cause_fa, COUNT(*) AS cnt, SUM(blockage_length) as length')
|
||||
->get()->toArray();
|
||||
|
||||
$stack_result = [
|
||||
['axis_type_fa' => 'آزادراه', 'data' => [['blockage_cause_fa' => 'برف', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سیل', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'رانش و ریزش', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سایر', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'طوفان شن', 'cnt' => 0, 'length' => 0]]],
|
||||
['axis_type_fa' => 'اصلی', 'data' => [['blockage_cause_fa' => 'برف', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سیل', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'رانش و ریزش', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سایر', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'طوفان شن', 'cnt' => 0, 'length' => 0]]],
|
||||
['axis_type_fa' => 'فرعی', 'data' => [['blockage_cause_fa' => 'برف', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سیل', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'رانش و ریزش', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سایر', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'طوفان شن', 'cnt' => 0, 'length' => 0]]],
|
||||
['axis_type_fa' => 'روستایی', 'data' => [['blockage_cause_fa' => 'برف', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سیل', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'رانش و ریزش', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سایر', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'طوفان شن', 'cnt' => 0, 'length' => 0]]],
|
||||
['axis_type_fa' => 'بزرگراه', 'data' => [['blockage_cause_fa' => 'برف', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سیل', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'رانش و ریزش', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'سایر', 'cnt' => 0, 'length' => 0], ['blockage_cause_fa' => 'طوفان شن', 'cnt' => 0, 'length' => 0]]],
|
||||
];
|
||||
|
||||
foreach ($data as $item) {
|
||||
$key = $item['axis_type'] - 1;
|
||||
|
||||
foreach ($stack_result[$key]['data'] as $k => $axis_data) {
|
||||
if ($axis_data['blockage_cause_fa'] == $item['blockage_cause_fa']) {
|
||||
$stack_result[$key]['data'][$k]['cnt'] = $item['cnt'];
|
||||
$stack_result[$key]['data'][$k]['length'] = $item['length'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$sql = "SELECT money,car,rahdar,polbig+polsmall+other AS dmg, bl_len FROM(
|
||||
SELECT
|
||||
-- COUNT(*) AS cnt,
|
||||
SUM(blockage_damage_money) AS money,
|
||||
SUM(blockage_damage_higher_6_count) AS polbig,
|
||||
SUM(blockage_damage_lower_6_count) AS polsmall,
|
||||
SUM(blockage_damage_count) AS other,
|
||||
SUM(active_cars_count) AS car,
|
||||
SUM(active_rahdar_count) AS rahdar,
|
||||
SUM(blockage_length) AS bl_len
|
||||
FROM
|
||||
camps
|
||||
WHERE is_open = 2
|
||||
)q";
|
||||
$statics = DB::select(DB::raw($sql));
|
||||
|
||||
$mehvar_statistics = [
|
||||
'charts' => [
|
||||
'pies' => $pies,
|
||||
'stack' => $stack_result,
|
||||
'staticks' => $statics
|
||||
]
|
||||
];
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'mehvar_statistics'],
|
||||
[
|
||||
'report_name' => 'mehvar_statistics',
|
||||
'data' => $mehvar_statistics,
|
||||
]
|
||||
);
|
||||
// (END) [CampController => statics] tool mehvarhaye asib dide
|
||||
|
||||
// (BEGIN) [Posters Controller => progressinfo]
|
||||
$top_5_province_at_road_observation_according_to_progress_percent = DB::table('road_observeds')
|
||||
->select(DB::raw('count(road_observeds.id) as count_number'), 'road_observeds.ProvinceName', DB::raw("(count(road_observeds.id) / (SELECT count(ro2.id) FROM road_observeds ro2 WHERE road_observeds.rms_province_id = ro2.rms_province_id) * 100) as progress_percent"))
|
||||
->where('road_observeds.rms_status', '<>', 0)
|
||||
->groupBy('road_observeds.rms_province_id')
|
||||
->orderBy('progress_percent', 'desc')
|
||||
->limit(5)
|
||||
->get();
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'top_provinces_according_to_number_of_complaints_handled'],
|
||||
[
|
||||
'report_name' => 'top_provinces_according_to_number_of_complaints_handled',
|
||||
'data' => $top_5_province_at_road_observation_according_to_progress_percent,
|
||||
]
|
||||
);
|
||||
|
||||
// (END) [Posters Controller => progressinfo]
|
||||
|
||||
// (BEGIN) [Posters Controller => progressinfo] top_provinces_according_to_number_of_complaints_handled
|
||||
$top_5_province_at_road_observation_according_to_progress_percent = DB::table('road_observeds')
|
||||
->select(DB::raw('count(road_observeds.id) as count_number'), 'road_observeds.ProvinceName', DB::raw("(count(road_observeds.id) / (SELECT count(ro2.id) FROM road_observeds ro2 WHERE road_observeds.rms_province_id = ro2.rms_province_id) * 100) as progress_percent"))
|
||||
->where('road_observeds.rms_status', '<>', 0)
|
||||
->groupBy('road_observeds.rms_province_id')
|
||||
->orderBy('progress_percent', 'desc')
|
||||
->limit(5)
|
||||
->get();
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'top_provinces_according_to_percent_of_complaints_handled'],
|
||||
[
|
||||
'report_name' => 'top_provinces_according_to_percent_of_complaints_handled',
|
||||
'data' => $top_5_province_at_road_observation_according_to_progress_percent,
|
||||
]
|
||||
);
|
||||
|
||||
// (END) [Posters Controller => progressinfo]
|
||||
|
||||
// (BEGIN) [Posters Controller => progressinfo] top_provinces_according_to_number_of_complaints_handled
|
||||
$top_5_province_at_road_observation_according_to_quantity = DB::table('road_observeds')
|
||||
->select('ProvinceName', DB::raw('count(id) as count_number'))
|
||||
->where('rms_status', '<>', 0)
|
||||
->groupBy('rms_province_id')
|
||||
->orderBy('count_number', 'desc')
|
||||
->limit(5)
|
||||
->get();
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'top_provinces_according_to_number_of_complaints_handled'],
|
||||
[
|
||||
'report_name' => 'top_provinces_according_to_number_of_complaints_handled',
|
||||
'data' => $top_5_province_at_road_observation_according_to_quantity,
|
||||
]
|
||||
);
|
||||
|
||||
// (END) [Posters Controller => progressinfo]
|
||||
|
||||
|
||||
// (BEGIN) [Posters Controller => progressinfo] naqshe_faaliat_haye_rozaneh
|
||||
|
||||
$provinces = Province::select('id', 'name_fa')->get();
|
||||
$array = [];
|
||||
|
||||
$array = $this->createArrayFromProvincesOrCities($provinces, $array);
|
||||
|
||||
$data = DB::table('road_items_projects')
|
||||
->select('province_id', 'province_fa')
|
||||
->whereBetween('created_at', [$from_date . ' 00:00:00', $to_date . ' 23:59:59'])
|
||||
->get();
|
||||
|
||||
$dataAfter = [];
|
||||
foreach ($data as $key => $value) {
|
||||
$dataAfter[$value->province_id - 1]['province_fa'] = $value->province_fa;
|
||||
$dataAfter[$value->province_id - 1]['province_id'] = $value->province_id;
|
||||
if(!isset($dataAfter[$value->province_id - 1]['count'])) {
|
||||
$dataAfter[$value->province_id - 1]['count'] = 0;
|
||||
}
|
||||
$dataAfter[$value->province_id - 1]['count']++;
|
||||
}
|
||||
|
||||
$array = $this->createDataArray($dataAfter, $array);
|
||||
|
||||
$finalArray = [];
|
||||
foreach ($array['label'] as $index => $value) {
|
||||
$finalArray['label'][] = $value;
|
||||
$finalArray['data'][] = $array['data'][$index];
|
||||
}
|
||||
|
||||
$geoJsonArray = $finalArray['data'];
|
||||
|
||||
array_multisort($finalArray['data'], SORT_DESC, $finalArray['label']);
|
||||
|
||||
$myArray = [];
|
||||
|
||||
$myArray['labels'] = $finalArray['label'];
|
||||
$myArray['datasets'][] = [
|
||||
'label' => 'نمودار وضعیت',
|
||||
'data' => $finalArray['data']
|
||||
];
|
||||
|
||||
ReportSummaryModel::updateOrCreate(
|
||||
['report_name' => 'naqshe_faaliat_haye_rozaneh'],
|
||||
[
|
||||
'report_name' => 'naqshe_faaliat_haye_rozaneh',
|
||||
'data' => [
|
||||
'data' => $myArray,
|
||||
'geojson' => $geoJsonArray
|
||||
],
|
||||
]
|
||||
);
|
||||
// (END) [Posters Controller => progressinfo]
|
||||
}
|
||||
|
||||
public function createArrayFromProvincesOrCities($collection, $array, $default = null)
|
||||
{
|
||||
$newArray = [];
|
||||
foreach ($collection as $key => $value) {
|
||||
$array['label'][$value->id] = $value->name_fa;
|
||||
$array['data'][$value->id] = $default;
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
public function createDataArray($data, $array)
|
||||
{
|
||||
if(gettype($data) == 'array') {
|
||||
foreach ($data as $key => $item) {
|
||||
$array['data'][($item['province_id'] ?? $item['city_id'])] = $item['count'];
|
||||
}
|
||||
} else {
|
||||
foreach ($data as $key => $item) {
|
||||
$array['data'][($item->province_id ?? $item->city_id)] = $item->count;
|
||||
}
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
2805
app/Console/Commands/RoadObservationProblems.php
Executable file
2805
app/Console/Commands/RoadObservationProblems.php
Executable file
File diff suppressed because it is too large
Load Diff
71
app/Console/Commands/SendContractSmsNotification.php
Normal file
71
app/Console/Commands/SendContractSmsNotification.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use SoapFault;
|
||||
use SoapClient;
|
||||
use App\Models\ContractSubItems;
|
||||
use Illuminate\Console\Command;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class SendContractSmsNotification extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'command:sendcontractsmsnotification';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Command description';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$contractSubItems = ContractSubItems::where('last_date_update', '<' , Carbon::now()->subMonths(2))->where('last_status_id', '<>', 3)->get();
|
||||
|
||||
foreach ($contractSubItems as $key => $value) {
|
||||
$message = "سلام،\n پروژه راهداری با کد یکتای {$value->unique_code} با مسئولیت شما، به مدت بیشتر از یک ماه به روزرسانی نشده است. لطفا نسبت به روز رسانی دقیق پیشرفت پروژه در سامانه اقدام نمایید.\n rms.rmto.ir";
|
||||
|
||||
self::sms_sender($value->operator_phone, $message);
|
||||
}
|
||||
}
|
||||
|
||||
public function sms_sender($mobile, $msg)
|
||||
{
|
||||
$client=new SoapClient("http://sms1000.ir/webservice/smspro.asmx?WSDL");
|
||||
$result=$client->doSendSMS(
|
||||
array(
|
||||
'uUsername' => 'rmto',
|
||||
'uPassword' => 'Rahdari89',
|
||||
'uNumber' => '1000141',
|
||||
'uCellphones' => $mobile,
|
||||
'uMessage' => $msg,
|
||||
'uFarsi' => true,
|
||||
'uTopic' => false,
|
||||
'uFlash' => false
|
||||
)
|
||||
);
|
||||
$x = $result->doSendSMSResult;
|
||||
return $x;
|
||||
}
|
||||
}
|
||||
59
app/Console/Commands/UpdateRoadObserved.php
Normal file
59
app/Console/Commands/UpdateRoadObserved.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use App\Models\RoadObserved;
|
||||
|
||||
class UpdateRoadObserved extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'webservice:update-roadobserved';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Update road observed table (province_fa, city_fa)';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$ids = RoadObserved::whereNotNull('province_id')
|
||||
->whereNotNull('city_id')
|
||||
->whereNull('province_fa')
|
||||
->whereNull('city_fa')
|
||||
->select('id')
|
||||
->get()
|
||||
->pluck('id');
|
||||
|
||||
|
||||
foreach ($ids as $id) {
|
||||
|
||||
\DB::update("UPDATE road_observeds set province_fa = (select name_fa from provinces where id = (select province_id from road_observeds where id = ?)),
|
||||
city_fa = (select name_fa from cities where id = (select city_id from road_observeds where id = ?)) where id = ?", [$id, $id, $id]);
|
||||
}
|
||||
|
||||
echo 'done at: '.date("Y-m-d H:i:s")."\n";
|
||||
|
||||
}
|
||||
}
|
||||
52
app/Console/Kernel.php
Executable file
52
app/Console/Kernel.php
Executable file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
/**
|
||||
* The Artisan commands provided by your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [
|
||||
'App\Console\Commands\RoadObservationProblems', //// road observed webservice from 141 sawaneh
|
||||
'App\Console\Commands\SendContractSmsNotification', //// road observed webservice from 141 sawaneh
|
||||
];
|
||||
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
$schedule->command('webservice:roadobserved')
|
||||
->everyFiveMinutes()->appendOutputTo(storage_path('logs/roadobser.log'));
|
||||
|
||||
$schedule->command('command:sendcontractsmsnotification')
|
||||
// ->everyMinute()->appendOutputTo(storage_path('logs/contractSms.log'));
|
||||
->dailyAt('10:00')->appendOutputTo(storage_path('logs/contractSms.log'));
|
||||
|
||||
$schedule->command('reports:rms-summary')
|
||||
->dailyAt('00:00')->appendOutputTo(storage_path('logs/report_summary.log'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user