You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

425 lines
15 KiB

<?php
namespace App\Http\Controllers\System;
use App\Class\LogWriter;
use App\Models\IntervalEquipment;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\AssetOwnership;
use App\Models\CustodyUnit;
use App\Models\Intervaldis;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class IntervalEquipmentController extends Controller
{
public function __construct()
{
$this->middleware('permission:itl-device-setting');
}
public function page()
{
// ['custodyunit' => $custodyunit, 'assetownership' => $assetownership]
$custodyunit = CustodyUnit::all();
$assetownership = AssetOwnership::all();
return view('system.interval.equipment')
->with('custodyunit', $custodyunit)
->with('assetownership', $assetownership);
}
public function road()
{
// ['custodyunit' => $custodyunit, 'assetownership' => $assetownership]
$custodyunit = CustodyUnit::all();
$assetownership = AssetOwnership::all();
$location = IntervalEquipment::select('id', 'serialnumber', 'location')->distinct()->get();
// dd($location);
return view('system.interval.equ_dis')
->with('location', $location)
->with('custodyunit', $custodyunit)
->with('assetownership', $assetownership);
}
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
#region DataTable 搜尋屬性
$draw = $request->get('draw');
$start = $request->get("start");
$rowperpage = $request->get("length"); // Rows display per page
$columnIndex_arr = $request->get('order');
$columnName_arr = $request->get('columns');
$order_arr = $request->get('order');
$search_arr = $request->get('search');
$columnIndex = $columnIndex_arr[0]['column']; // Column index
$columnName = $columnName_arr[$columnIndex]['data']; // Column name
$columnSortOrder = $order_arr[0]['dir']; // asc or desc
$searchValue = $search_arr['value']; // Search value
#endregion
// Role with permissions
$records = IntervalEquipment::query();
if (isset($request->dis)) {
$records = Intervaldis::query();
}
$totalRecords = $records->count();
if (isset($columnName))
$records->orderBy($columnName, $columnSortOrder);
if (isset($searchValue)) {
$records->where(function ($query) use ($searchValue) {
// $query->where('outlet_id', 'like', '%' . $searchValue . '%')
// ->orwhere('name', 'like', '%' . $searchValue . '%')
// ->orwhere('serialnumber', 'like', '%' . $searchValue . '%')
// ->orwhere('creator_id', 'like', '%' . $searchValue . '%');
});
}
$totalRecordswithFilter = $records->count();
if (isset($start))
$records->skip($start);
if (isset($rowperpage))
$records->take($rowperpage);
$data_arr = $records->get();
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordswithFilter,
"aaData" => $data_arr
);
return response()->json($response);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$device = new IntervalEquipment();
// 如果缺少必要欄位
DB::beginTransaction();
try {
$device->serialnumber = $request->serialnumber;
$device->videonumber = $request->videonumber;
$device->brand = $request->brand;
$device->model = $request->model;
$device->custodyunit_id = $request->custodyunit_id;
$device->assetownership_id = $request->assetownership_id;
$device->buydate = $request->buydate;
$device->activatedate = $request->activatedate;
$device->locationid = $request->locationid;
$device->location = $request->location;
$device->comment = $request->comment;
$device->precinct = $request->precinct;
$device->station = $request->station;
$device->save();
$logData = [
'action' => 'create',
'action_detail' => '新增設備',
'ip' => request()->ip(),
'remark' => "新增設備:{$device->serialnumber}",
];
logWriter::writeLog($logData, 'api');
DB::commit();
return response()->json(['success' => true, 'message' => '新增成功']);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
DB::rollBack();
return response()->json(['success' => false, 'message' => '新增失敗']);
}
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$device = IntervalEquipment::find($id);
return response()->json(['success' => true, 'data' => $device]);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$device = IntervalEquipment::find($id);
if (!$request->serialnumber || !$request->location || !$request->precinct || !$request->station) {
return response()->json(['success' => false, 'message' => '缺少必要欄位']);
}
DB::beginTransaction();
try {
$device->serialnumber = $request->serialnumber;
$device->videonumber = $request->videonumber;
$device->brand = $request->brand;
$device->model = $request->model;
$device->custodyunit_id = $request->custodyunit_id ?? null;
$device->assetownership_id = $request->assetownership_id ?? null;
$device->buydate = $request->buydate;
$device->activatedate = $request->activatedate;
$device->locationid = $request->locationid;
$device->location = $request->location;
$device->comment = $request->comment;
$device->precinct = $request->precinct;
$device->station = $request->station;
$device->save();
$logData = [
'action' => 'update',
'action_detail' => '更新設備',
'ip' => request()->ip(),
'remark' => "更新設備:{$device->serialnumber}",
];
logWriter::writeLog($logData, 'api');
DB::commit();
return response()->json(['success' => true, 'message' => '更新成功']);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
DB::rollBack();
return response()->json(['success' => false, 'message' => '更新失敗']);
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
$device = IntervalEquipment::find($id);
try {
$device->delete();
return response()->json(['success' => true, 'message' => '刪除成功']);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
return response()->json(['success' => false, 'message' => '刪除失敗']);
}
}
/**
* 取得保管單位資料
*/
public function indexUnit(Request $request)
{
if ($request->type == "custodyunit") {
$unit = CustodyUnit::all();
return response()->json(['success' => true, 'data' => $unit]);
} else if ($request->type == "assetownership") {
$unit = AssetOwnership::all();
return response()->json(['success' => true, 'data' => $unit]);
}
return response()->json(['success' => false, 'message' => '取得失敗']);
}
/**
* 新增單位資料
*/
public function storeUnit(Request $request)
{
// custodyunit_id
//assetownership_id)
DB::beginTransaction();
try {
if ($request->type == "custodyunit") {
$unit = new CustodyUnit();
$unit->name = $request->name;
$unit->save();
$logData = [
'action' => 'create',
'action_detail' => '新增保管單位',
'ip' => request()->ip(),
'remark' => "新增保管單位:{$request->name}",
];
LogWriter::writeLog($logData, 'api');
DB::commit();
return response()->json(['success' => true, 'message' => '保管單位-新增成功']);
} else if ($request->type == "assetownership") {
$unit = new AssetOwnership();
$unit->name = $request->name;
$unit->save();
$logData = [
'action' => 'create',
'action_detail' => '新增財產所屬單位',
'ip' => request()->ip(),
'remark' => "新增財產所屬單位:{$request->name}",
];
LogWriter::writeLog($logData, 'api');
DB::commit();
return response()->json(['success' => true, 'message' => '財產所屬單位-新增成功']);
}
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
DB::rollBack();
}
return response()->json(['success' => false, 'message' => '新增失敗']);
}
/**
* Store a newly created resource in storage.
*/
public function storeRoad(Request $request)
{
$road = new Intervaldis();
// 如果缺少必要欄位
if (
!$request->start_num || !$request->end_num || !$request->outlaw_speed || !$request->location
|| !$request->distance || !$request->limit_speed || !$request->location_id
|| !$request->start_cert || !$request->end_cert
) {
return response()->json(['error' => false, 'message' => '缺少必要欄位']);
}
// 起始機號與結束機號不可相同
if ($request->start_num == $request->end_num) {
return response()->json(['error' => false, 'message' => '起始機號與結束機號不可相同']);
}
// 起始日期不可大於結束日期
if ($request->start_cert > $request->end_cert) {
return response()->json(['error' => false, 'message' => '起始日期不可大於結束日期']);
}
DB::beginTransaction();
try {
$road->start_serialnumber = $request->start_num;
$road->end_serialnumber = $request->end_num;
$road->distance = $request->distance;
$road->limit_speed = $request->limit_speed;
$road->outlaw_speed = $request->outlaw_speed;
$road->limit_time = round(3600 * $request->distance / $request->limit_speed / 1000, 2);
$road->speed_alert = $request->speed_alert;
$road->count_alert = $request->count_alert;
$road->location = $request->location;
$road->location_id = $request->location_id;
$road->certificatenumber = $request->certificatenumber;
$road->start_cert = $request->start_cert;
$road->end_cert = $request->end_cert;
// dd($road);
$road->save();
$logData = [
'action' => 'create',
'action_detail' => '新增路段',
'ip' => request()->ip(),
'remark' => "新增路段:{$road->serialnumber}",
];
logWriter::writeLog($logData, 'api');
DB::commit();
return response()->json(['success' => true, 'message' => '新增成功']);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
DB::rollBack();
return response()->json(['error' => false, 'message' => '新增失敗']);
}
}
/**
* Display the specified resource.
*/
public function showRoad(string $id)
{
$device = Intervaldis::find($id);
return response()->json(['success' => true, 'data' => $device]);
}
/**
* Update the specified resource in storage.
*/
public function updateRoad(Request $request, string $id)
{
$road = Intervaldis::find($id);
if (
!$request->start_num || !$request->end_num || !$request->outlaw_speed || !$request->location
|| !$request->distance || !$request->limit_speed || !$request->location_id
|| !$request->start_cert || !$request->end_cert
) {
return response()->json(['error' => false, 'message' => '缺少必要欄位']);
}
// 起始機號與結束機號不可相同
if ($request->start_num == $request->end_num) {
return response()->json(['error' => false, 'message' => '起始機號與結束機號不可相同']);
}
// 起始日期不可大於結束日期
if ($request->start_cert > $request->end_cert) {
return response()->json(['error' => false, 'message' => '起始日期不可大於結束日期']);
}
DB::beginTransaction();
try {
$road->start_serialnumber = $request->start_num;
$road->end_serialnumber = $request->end_num;
$road->distance = $request->distance;
$road->limit_speed = $request->limit_speed;
$road->outlaw_speed = $request->outlaw_speed;
$road->limit_time = round(3600 * $request->distance / $request->limit_speed / 1000, 2);
$road->speed_alert = $request->speed_alert;
$road->count_alert = $request->count_alert;
$road->location = $request->location;
$road->location_id = $request->location_id;
$road->certificatenumber = $request->certificatenumber;
$road->start_cert = $request->start_cert;
$road->end_cert = $request->end_cert;
$road->save();
$logData = [
'action' => 'update',
'action_detail' => '更新路段',
'ip' => request()->ip(),
'remark' => "更新路段:{$road->location}",
];
logWriter::writeLog($logData, 'api');
DB::commit();
return response()->json(['success' => true, 'message' => '更新成功']);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
DB::rollBack();
return response()->json(['error' => false, 'message' => '更新失敗']);
}
}
/**
* Remove the specified resource from storage.
*/
public function destroyRoad(string $id)
{
$device = Intervaldis::find($id);
try {
$device->delete();
return response()->json(['success' => true, 'message' => '刪除成功']);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
return response()->json(['error' => false, 'message' => '刪除失敗']);
}
}
}