Compare commits
16 Commits
a81c6e0e64
...
aef3502938
| Author | SHA1 | Date |
|---|---|---|
|
|
aef3502938 | |
|
|
2da65f5608 | |
|
|
7b8c02c1b4 | |
|
|
be80b4bf0c | |
|
|
a3cd26602f | |
|
|
00c7ef9de8 | |
|
|
c857350b52 | |
|
|
adaddba5ce | |
|
|
1cfa3715c4 | |
|
|
342c5f7c3d | |
|
|
e13ca5cf4b | |
|
|
baf96dd997 | |
|
|
dde34bfbce | |
|
|
fd9cbd8c7d | |
|
|
83dd2ec7d1 | |
|
|
91962e4b52 |
|
|
@ -10,7 +10,6 @@ use App\Models\DeviceLog;
|
|||
use App\Models\WormPhoto;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use RuntimeException;
|
||||
use Throwable;
|
||||
|
|
@ -65,6 +64,7 @@ class DeviceLogSyncCommand extends Command
|
|||
/** @var \App\Models\Device */
|
||||
foreach ($devices as $device) {
|
||||
if (! in_array($device->type, [
|
||||
DeviceType::Monitor,
|
||||
DeviceType::Soil,
|
||||
DeviceType::Meteorological,
|
||||
DeviceType::Worm,
|
||||
|
|
@ -78,6 +78,7 @@ class DeviceLogSyncCommand extends Command
|
|||
$this->info('设备编号: ' . $device->sn);
|
||||
$this->info('设备名称: ' . $device->name);
|
||||
$this->info('设备类型: ' . match ($device->type) {
|
||||
DeviceType::Monitor => '苗情设备',
|
||||
DeviceType::Soil => '土壤设备',
|
||||
DeviceType::Meteorological => '气象设备',
|
||||
DeviceType::Worm => '虫情设备',
|
||||
|
|
@ -89,6 +90,14 @@ class DeviceLogSyncCommand extends Command
|
|||
$httpClient = $this->buildHttpClient($device);
|
||||
|
||||
switch ($device->type) {
|
||||
case DeviceType::Monitor:
|
||||
$data = $httpClient->getMonitorPalyAddress($device->sn);
|
||||
|
||||
$device->update([
|
||||
'status' => $data ? DeviceStatus::Online : DeviceStatus::Offline,
|
||||
]);
|
||||
|
||||
break;
|
||||
case DeviceType::Soil:
|
||||
$data = $httpClient->getLatestSoilReport($device->sn);
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\ModelNotFoundException;
|
|||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Illuminate\Http\Exceptions\ThrottleRequestsException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Throwable;
|
||||
|
|
@ -111,10 +112,16 @@ class Handler extends ExceptionHandler
|
|||
*/
|
||||
protected function invalidJson($request, ValidationException $exception)
|
||||
{
|
||||
$errors = $exception->errors();
|
||||
|
||||
if (is_array($firstMessage = Arr::first($errors))) {
|
||||
$firstMessage = Arr::first($firstMessage);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'code' => 422,
|
||||
'message' => $exception->getMessage(),
|
||||
'errors' => $exception->errors(),
|
||||
'message' => $firstMessage ?: '参数错误',
|
||||
'errors' => $errors,
|
||||
], 200);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Enums\OperationType;
|
||||
use App\Helpers\Paginator;
|
||||
use App\Http\Requestes\AdminUserRequest;
|
||||
use App\Http\Requestes\AdminUserUpdateRequest;
|
||||
use App\Http\Requestes\RestPasswordRequest;
|
||||
use App\Http\Resources\AdminUserResource;
|
||||
use App\Models\AdminUser;
|
||||
use App\Services\OperationLogService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Services\OperationLogService;
|
||||
use App\Enums\OperationType;
|
||||
|
||||
class AdminUserController extends Controller
|
||||
{
|
||||
|
|
@ -33,10 +33,20 @@ class AdminUserController extends Controller
|
|||
DB::beginTransaction();
|
||||
//添加管理员信息
|
||||
$input = $request->input();
|
||||
|
||||
// 是否可查看所有基地
|
||||
if ($viewAllBases = (bool) $request->input('view_all_bases', false)) {
|
||||
$input['view_all_bases'] = $viewAllBases;
|
||||
}
|
||||
$input['password'] = bcrypt($request->input('password'));
|
||||
|
||||
$user = AdminUser::create($input);
|
||||
//添加管理员查看基地的数据权限;
|
||||
$user->bases()->sync($baseIds);
|
||||
|
||||
if (! $user->view_all_bases) {
|
||||
// 添加管理员查看基地的数据权限;
|
||||
$user->bases()->sync($baseIds);
|
||||
}
|
||||
|
||||
//添加管理员角色关联;
|
||||
$user->roles()->sync($request->input('role_id'));
|
||||
DB::commit();
|
||||
|
|
@ -66,10 +76,21 @@ class AdminUserController extends Controller
|
|||
}
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$input = $request->input();
|
||||
|
||||
if ($viewAllBases = (bool) $request->input('view_all_bases', false)) {
|
||||
$input['view_all_bases'] = $viewAllBases;
|
||||
}
|
||||
|
||||
//添加管理员信息
|
||||
$adminUser->update($request->input());
|
||||
//添加管理员查看基地的数据权限;
|
||||
$adminUser->bases()->sync($baseIds);
|
||||
$adminUser->update($input);
|
||||
|
||||
if (! $adminUser->view_all_bases) {
|
||||
// 添加管理员查看基地的数据权限;
|
||||
$adminUser->bases()->sync($baseIds);
|
||||
}
|
||||
|
||||
//添加管理员角色关联;
|
||||
$adminUser->roles()->sync($request->input('role_id'));
|
||||
DB::commit();
|
||||
|
|
|
|||
|
|
@ -125,17 +125,18 @@ class AgriculturalBaseController extends Controller
|
|||
*/
|
||||
public function deviceBase(Request $request)
|
||||
{
|
||||
$deviceType = $request->input('device_type', DeviceType::Monitor);
|
||||
// $status = $request->input('status');
|
||||
/** @var \App\Models\AdminUser */
|
||||
$user = $request->user();
|
||||
$deviceType = $request->input('device_type', DeviceType::Monitor->value);
|
||||
$isRecommend = $request->input('is_recommended', 0) ?? 0;
|
||||
$all = $request->input('all', 0);
|
||||
|
||||
$list = AgriculturalBase::filter($request->all())->whereHas('devices', function ($q) use ($deviceType, $isRecommend) {
|
||||
if($deviceType == DeviceType::Monitor || $deviceType == 1){
|
||||
if($isRecommend){
|
||||
$q->where('is_recommend', 1);
|
||||
}
|
||||
$q->where('status', 1);
|
||||
}
|
||||
return $q->where('type', $deviceType);
|
||||
$q->when($deviceType == DeviceType::Monitor->value, function ($q) use ($isRecommend) {
|
||||
$q->when($isRecommend, fn ($q) => $q->where('is_recommend', 1))->where('status', 1);
|
||||
})->where('type', $deviceType);
|
||||
})->when(! $all && ! $user->isAdministrator() && ! $user->view_all_bases, function ($q) use ($user) {
|
||||
$q->whereRaw("id in (select base_id from admin_user_bases where user_id = {$user->id})");
|
||||
})->sort()->get();
|
||||
|
||||
return $this->json(AgriculturalBaseResource::collection($list));
|
||||
|
|
|
|||
|
|
@ -17,46 +17,62 @@ class AgriculturalBaseRequest extends FormRequest
|
|||
*/
|
||||
public function rules()
|
||||
{
|
||||
if ($this->input('type') == 2) {
|
||||
return [
|
||||
'type' => ['bail', 'required', new Enum(BaseType::class)],
|
||||
'name' => ['bail', 'required', 'string', 'max:100'],
|
||||
'address' => ['bail', 'required', 'string', 'max:190'],
|
||||
'areas' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'cultivated' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'workforce' => ['bail', 'required', 'int', 'min:0', 'max:2147483647'],
|
||||
'description' => ['bail', 'nullable', 'string'],
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'type' => ['required', new Enum(BaseType::class)],
|
||||
'name' => 'required|string|max:100',
|
||||
'description' => 'nullable|string',
|
||||
'person' => 'required_if:type,1|string|max:100',
|
||||
'crops_ids' => 'nullable|array|min:1',
|
||||
'areas' => 'required|regex:/^\d+(\.\d{1,2})?$/',
|
||||
'workforce' => 'required|integer|min:0',
|
||||
'address' => 'nullable|string',
|
||||
'address_lat' => 'nullable|regex:/^\d+(\.\d{1,10})?$/',
|
||||
'address_lng' => 'nullable|regex:/^\d+(\.\d{1,10})?$/',
|
||||
'parent_id' => 'required_if:type,1|integer|min:0',
|
||||
'sort' => 'nullable|integer|min:0',
|
||||
'type' => ['bail', 'required', new Enum(BaseType::class)],
|
||||
'parent_id' => ['bail', 'required', 'int'],
|
||||
'name' => ['bail', 'required', 'string', 'max:100'],
|
||||
'person' => ['bail', 'required', 'string', 'max:100'],
|
||||
'crops_ids' => ['bail', 'required', 'array'],
|
||||
'areas' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'cultivated' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'workforce' => ['bail', 'required', 'int', 'min:0', 'max:2147483647'],
|
||||
'description' => ['bail', 'nullable', 'string'],
|
||||
'address' => ['bail', 'required', 'string', 'max:190'],
|
||||
'address_lat' => ['bail', 'nullable', 'regex:/^\d+(\.\d{1,10})?$/'],
|
||||
'address_lng' => ['bail', 'nullable', 'regex:/^\d+(\.\d{1,10})?$/'],
|
||||
'sort' => ['bail', 'nullable', 'int', 'min:0', 'max:2147483647'],
|
||||
];
|
||||
}
|
||||
|
||||
public function messages()
|
||||
public function attributes()
|
||||
{
|
||||
$messages = [
|
||||
'type' => '请选择区域类别',
|
||||
'name.required' => '请填写名称',
|
||||
'name.max' => '名称不能超过100字',
|
||||
'description.string' => '请正确填写介绍',
|
||||
'person.required_if' => '请填写负责人名称',
|
||||
'person.max' => '负责人名称不能超过100字',
|
||||
'crops_ids.min' => '至少选择一种农作物',
|
||||
'areas.required' => '请填写面积',
|
||||
'areas.regex' => '请正确填写面积',
|
||||
'workforce.required' => '请填写人数',
|
||||
'workforce.min' => '人数最小为0',
|
||||
'address.string' => '请正确填写地址',
|
||||
'parent_id.required_if' => '请选择城镇',
|
||||
if ($this->input('type') == 2) {
|
||||
return [
|
||||
'name' => '街镇名称',
|
||||
'address' => '街镇地址',
|
||||
'areas' => '街镇面积',
|
||||
'cultivated' => '耕地面积',
|
||||
'workforce' => '街镇人数',
|
||||
'description' => '街镇介绍',
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'industry_key' => '农业类型',
|
||||
'name' => '基地名称',
|
||||
'person' => '基地负责人',
|
||||
'areas' => '基地面积',
|
||||
'cultivated' => '种养植面积',
|
||||
'workforce' => '基地人数',
|
||||
'parent_id' => '城镇',
|
||||
'crops_ids' => '基地农作物',
|
||||
'description' => '基地介绍',
|
||||
'address' => '基地地址',
|
||||
'address_lng' => '基地经度',
|
||||
'address_lat' => '基地纬度',
|
||||
'sort' => '排序',
|
||||
];
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
protected function failedValidation(Validator $validator)
|
||||
{
|
||||
$error = $validator->errors()->all();
|
||||
throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]]));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
namespace App\Http\Requestes;
|
||||
|
||||
use Illuminate\Contracts\Validation\Validator;
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||
|
||||
class CropYieldRequest extends FormRequest
|
||||
{
|
||||
|
|
@ -16,34 +16,26 @@ class CropYieldRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'time_year' => 'required|date_format:Y',
|
||||
'quarter' => 'required|integer|min:1|max:4',
|
||||
'time_year' => ['bail', 'required', new Year()],
|
||||
'quarter' => ['bail', 'required', new Quarter()],
|
||||
'crop_id' => 'required|integer|min:0',
|
||||
'base_id' => 'required|integer|min:0',
|
||||
'yield' => 'required|regex:/^\d+(\.\d{1,2})?$/',
|
||||
'cultivated' => 'required|regex:/^\d+(\.\d{1,2})?$/',
|
||||
'output' => 'required|regex:/^\d+(\.\d{1,2})?$/',
|
||||
'yield' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'cultivated' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'output' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
];
|
||||
}
|
||||
|
||||
public function messages()
|
||||
public function attributes()
|
||||
{
|
||||
$messages = [
|
||||
'time_year' => '请选择正确年份',
|
||||
'quarter' => '请选择正确季度',
|
||||
'crop_id' => '请选择农作物',
|
||||
'base_id' => '请选择地区',
|
||||
'yield' => '请填写产量',
|
||||
'cultivated' => '请填写种养殖面积',
|
||||
'output' => '请填写产值',
|
||||
return [
|
||||
'time_year' => '年份',
|
||||
'quarter' => '季度',
|
||||
'crop_id' => '农作物',
|
||||
'base_id' => '地区',
|
||||
'yield' => '产量',
|
||||
'cultivated' => '耕种面积',
|
||||
'output' => '产值',
|
||||
];
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
protected function failedValidation(Validator $validator)
|
||||
{
|
||||
$error = $validator->errors()->all();
|
||||
throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]]));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
namespace App\Http\Requestes;
|
||||
|
||||
use Illuminate\Contracts\Validation\Validator;
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||
|
||||
class CropYieldUpdateRequest extends FormRequest
|
||||
{
|
||||
|
|
@ -16,32 +16,26 @@ class CropYieldUpdateRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'time_year' => 'required|date_format:Y',
|
||||
'time_year' => ['bail', 'required', new Year()],
|
||||
'quarter' => ['bail', 'required', new Quarter()],
|
||||
'crop_id' => 'required|integer|min:0',
|
||||
'base_id' => 'required|integer|min:0',
|
||||
'yield' => 'required|regex:/^\d+(\.\d{1,2})?$/',
|
||||
'cultivated' => 'required|regex:/^\d+(\.\d{1,2})?$/',
|
||||
'output' => 'required|regex:/^\d+(\.\d{1,2})?$/',
|
||||
'yield' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'cultivated' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'output' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
];
|
||||
}
|
||||
|
||||
public function messages()
|
||||
public function attributes()
|
||||
{
|
||||
$messages = [
|
||||
'time_year' => '请选择年份',
|
||||
'crop_id' => '请选择农作物',
|
||||
'base_id' => '请选择基地',
|
||||
'yield' => '请填写产量',
|
||||
'cultivated' => '请填写耕地面积',
|
||||
'output' => '请填写产值',
|
||||
return [
|
||||
'time_year' => '年份',
|
||||
'quarter' => '季度',
|
||||
'crop_id' => '农作物',
|
||||
'base_id' => '地区',
|
||||
'yield' => '产量',
|
||||
'cultivated' => '耕种面积',
|
||||
'output' => '产值',
|
||||
];
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
protected function failedValidation(Validator $validator)
|
||||
{
|
||||
$error = $validator->errors()->all();
|
||||
throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]]));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,12 +24,12 @@ class DeviceRequest extends FormRequest
|
|||
'monitoring_point' => 'required|string|max:100',
|
||||
'supplier_key' => 'required',
|
||||
'extends' => 'required_if:type,1',
|
||||
'extends.ip' => 'required_if:type,1|string',
|
||||
'extends.port' => 'required_if:type,1|string',
|
||||
'extends.rtsp_url' => 'required_if:type,1|string',
|
||||
'extends.username' => 'required_if:type,1|string',
|
||||
'extends.password' => 'required_if:type,1|string',
|
||||
'extends.passage' => 'required_if:type,1|string',
|
||||
// 'extends.ip' => 'required_if:type,1|string',
|
||||
// 'extends.port' => 'required_if:type,1|string',
|
||||
// 'extends.rtsp_url' => 'required_if:type,1|string',
|
||||
// 'extends.username' => 'required_if:type,1|string',
|
||||
// 'extends.password' => 'required_if:type,1|string',
|
||||
// 'extends.passage' => 'required_if:type,1|string',
|
||||
'is_recommend' => 'filled|boolean',
|
||||
'sort' => 'nullable|integer|min:0',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace App\Http\Requestes;
|
|||
|
||||
use App\Enums\MaterielType;
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rules\Enum;
|
||||
|
||||
|
|
@ -17,12 +18,12 @@ class MaterielStoreRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['bail', 'required', 'int'],
|
||||
'year' => ['bail', 'required', 'int', new Year()],
|
||||
'quarter' => ['bail', 'required', new Quarter()],
|
||||
'name' => ['bail', 'required', 'string', 'max:255'],
|
||||
'type' => ['bail', 'required', new Enum(MaterielType::class)],
|
||||
'lowest_price' => ['bail', 'required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'highest_price' => ['bail', 'required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/', 'gte:lowest_price'],
|
||||
'lowest_price' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'highest_price' => ['bail', 'required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/', 'gte:lowest_price'],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace App\Http\Requestes;
|
|||
|
||||
use App\Enums\MaterielType;
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rules\Enum;
|
||||
|
||||
|
|
@ -17,12 +18,12 @@ class MaterielUpdateRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['filled', 'int'],
|
||||
'year' => ['filled', 'int', new Year()],
|
||||
'quarter' => ['filled', new Quarter()],
|
||||
'name' => ['filled', 'string', 'max:255'],
|
||||
'type' => ['filled', new Enum(MaterielType::class)],
|
||||
'lowest_price' => ['filled', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'highest_price' => ['filled', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/', 'gte:lowest_price'],
|
||||
'lowest_price' => ['filled', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'highest_price' => ['filled', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/', 'gte:lowest_price'],
|
||||
'unit' => ['filled', 'string'],
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class RiceShrimpFlowStoreRequest extends FormRequest
|
||||
|
|
@ -15,10 +16,10 @@ class RiceShrimpFlowStoreRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['required', 'int'],
|
||||
'year' => ['required', 'int', new Year()],
|
||||
'quarter' => ['required', new Quarter()],
|
||||
'area' => ['required', 'string'],
|
||||
'sales' => ['required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'sales' => ['required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'unit' => ['required', 'string'],
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class RiceShrimpFlowUpdateRequest extends FormRequest
|
||||
|
|
@ -15,10 +16,10 @@ class RiceShrimpFlowUpdateRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['filled', 'int'],
|
||||
'year' => ['filled', 'int', new Year()],
|
||||
'quarter' => ['filled', new Quarter()],
|
||||
'area' => ['filled', 'string'],
|
||||
'sales' => ['filled', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'sales' => ['filled', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'unit' => ['filled', 'string'],
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class RiceShrimpIndustryStoreRequest extends FormRequest
|
||||
|
|
@ -15,13 +16,13 @@ class RiceShrimpIndustryStoreRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['required', 'int'],
|
||||
'year' => ['required', 'int', new Year()],
|
||||
'quarter' => ['required', new Quarter()],
|
||||
'area' => ['required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'area' => ['required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'area_unit' => ['required', 'string'],
|
||||
'product_output' => ['required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_output' => ['required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_output_unit' => ['required', 'string'],
|
||||
'product_value' => ['required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_value' => ['required', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_value_unit' => ['required', 'string'],
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class RiceShrimpIndustryUpdateRequest extends FormRequest
|
||||
|
|
@ -15,13 +16,13 @@ class RiceShrimpIndustryUpdateRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['filled', 'int'],
|
||||
'year' => ['filled', 'int', new Year()],
|
||||
'quarter' => ['filled', new Quarter()],
|
||||
'area' => ['filled', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'area' => ['filled', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'area_unit' => ['filled', 'string'],
|
||||
'product_output' => ['filled', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_output' => ['filled', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_output_unit' => ['filled', 'string'],
|
||||
'product_value' => ['filled', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_value' => ['filled', 'numeric', 'min:0', 'max:9999999999.99', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'],
|
||||
'product_value_unit' => ['filled', 'string'],
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class RiceShrimpPriceStoreRequest extends FormRequest
|
||||
|
|
@ -15,9 +16,9 @@ class RiceShrimpPriceStoreRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['required', 'int'],
|
||||
'year' => ['required', 'int', new Year()],
|
||||
'quarter' => ['required', new Quarter()],
|
||||
'price' => ['required', 'int'],
|
||||
'price' => ['required', 'int', 'min:0', 'max:2147483647'],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class RiceShrimpPriceUpdateRequest extends FormRequest
|
||||
|
|
@ -15,9 +16,9 @@ class RiceShrimpPriceUpdateRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['filled', 'int'],
|
||||
'year' => ['filled', 'int', new Year()],
|
||||
'quarter' => ['filled', new Quarter()],
|
||||
'price' => ['filled', 'int'],
|
||||
'price' => ['filled', 'int', 'min:0', 'max:2147483647'],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@
|
|||
|
||||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Models\RiceShrimpWeeklyPrice;
|
||||
use App\Rules\Quarter;
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Peidikeji\Keywords\Models\Keywords;
|
||||
|
|
@ -18,7 +17,7 @@ class RiceShrimpWeeklyPriceStoreRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['required', 'int'],
|
||||
'year' => ['required', 'int', new Year()],
|
||||
'week' => [
|
||||
'required',
|
||||
'int',
|
||||
|
|
@ -26,7 +25,7 @@ class RiceShrimpWeeklyPriceStoreRequest extends FormRequest
|
|||
return $query->where('type_key', 'weeks-per-year');
|
||||
}),
|
||||
],
|
||||
'price' => ['required', 'int'],
|
||||
'price' => ['required', 'int', 'min:0', 'max:2147483647'],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Http\Requestes;
|
||||
|
||||
use App\Rules\Year;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Peidikeji\Keywords\Models\Keywords;
|
||||
|
|
@ -16,7 +17,7 @@ class RiceShrimpWeeklyPriceUpdateRequest extends FormRequest
|
|||
public function rules()
|
||||
{
|
||||
return [
|
||||
'year' => ['filled', 'int'],
|
||||
'year' => ['filled', 'int', new Year()],
|
||||
'week' => [
|
||||
'filled',
|
||||
'int',
|
||||
|
|
@ -24,7 +25,7 @@ class RiceShrimpWeeklyPriceUpdateRequest extends FormRequest
|
|||
return $query->where('type_key', 'weeks-per-year');
|
||||
}),
|
||||
],
|
||||
'price' => ['filled', 'int'],
|
||||
'price' => ['filled', 'int', 'min:0', 'max:2147483647'],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ class AdminUserResource extends JsonResource
|
|||
'phone' => $this->phone,
|
||||
'status' => $this->status,
|
||||
'is_enable' => $this->is_enable,
|
||||
'view_all_bases' => (int) $this->view_all_bases,
|
||||
'bases' => AgriculturalBaseResource::collection($this->whenloaded('bases')),
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,21 @@ class HttpClient
|
|||
return $result['data'] ?? [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 苗情设备 - 直播地址
|
||||
*/
|
||||
public function getMonitorPalyAddress(string $deviceId)
|
||||
{
|
||||
$result = $this->get(
|
||||
$this->apiUrl('/api/open-api/open/getSeedingLive'),
|
||||
[
|
||||
'equipmentCode' => $deviceId,
|
||||
]
|
||||
);
|
||||
|
||||
return $result['data'] ?? "";
|
||||
}
|
||||
|
||||
public function get(string $url, array $query = []): array
|
||||
{
|
||||
return $this->request('GET', $url, [
|
||||
|
|
|
|||
|
|
@ -15,7 +15,11 @@ class AdminUser extends BaseAdminModel
|
|||
'username',
|
||||
'password',
|
||||
'avatar',
|
||||
'department', 'phone', 'status', 'is_enable',
|
||||
'department',
|
||||
'phone',
|
||||
'status',
|
||||
'is_enable',
|
||||
'view_all_bases',
|
||||
];
|
||||
|
||||
protected $hidden = [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace App\Rules;
|
||||
|
||||
use Illuminate\Contracts\Validation\Rule;
|
||||
|
||||
class Year implements Rule
|
||||
{
|
||||
/**
|
||||
* Determine if the validation rule passes.
|
||||
*
|
||||
* @param string $attribute
|
||||
* @param mixed $value
|
||||
* @return bool
|
||||
*/
|
||||
public function passes($attribute, $value)
|
||||
{
|
||||
return $value <= now()->year;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation error message.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function message()
|
||||
{
|
||||
return ':attribute 不能超过现在';
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('admin_users', function (Blueprint $table) {
|
||||
$table->boolean('view_all_bases')->default(false)->comment('是否可查看所有基地');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('admin_users', function (Blueprint $table) {
|
||||
$table->dropColumn(['view_all_bases']);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -100,9 +100,15 @@ class EndpointPermissionSeeder extends Seeder
|
|||
'curd' => false,
|
||||
'children' => [
|
||||
'device' => ['name' => '设备管理', 'curd' => true],
|
||||
'warnings' => ['name' => '警报明细', 'curd' => false,'children'=>['mark'=>'标记'],
|
||||
'warnings' => [
|
||||
'name' => '警报明细',
|
||||
'curd' => ['index'],
|
||||
'children' => [
|
||||
'mark'=>'标记',
|
||||
],
|
||||
],
|
||||
],
|
||||
]],
|
||||
],
|
||||
'manage' => [
|
||||
'name' => '系统管理',
|
||||
'curd' => false,
|
||||
|
|
|
|||
Loading…
Reference in New Issue