Merge branch 'master' of /mnt/git/v2.tiantianxinye.365care

master
songweizong 3 years ago
commit 5f32ff45c2

@ -42,7 +42,7 @@ class SyncAlipayRechargeState extends Command
{
$threshold = 5;
$offset_seconds = 40; //支付发起后多少秒开始轮询
$due_minutes = 10; //支付发起后第一次开始轮询的时间往后延迟5分钟后不再轮询
$due_minutes = 10; //支付发起后第一次开始轮询的时间往后延迟若干分钟后不再轮询
$last_id = cache("last_sync_alipay_recharge_id", 0);
DB::enableQueryLog();

@ -39,6 +39,16 @@ class StatisticsController extends CommonController
return $projects;
}
public function getYears()
{
$start_year = config("start_year");
$years = [];
for ($i = date("Y"); $i >= $start_year; $i--) {
$years[] = $i;
}
view()->share(compact("years"));
}
public function _getMonths()
{
$months = [];

@ -0,0 +1,138 @@
<?php
namespace App\Http\Controllers\Worker;
use App\Models\Paramedic;
use App\Worker;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class AuthController extends Controller
{
public $guardName = "worker";
public $authModel;
public function __construct()
{
$this->authModel = new Worker();
}
/**
* Create a new AuthController instance.
*
* @return void
*/
public function guard()
{
return auth()->guard($this->guardName);
}
public function guardName()
{
return $this->guardName;
}
/**
* @OA\Post(
* path="/worker/login-by-username",
* tags={"护工端用户相关"},
* summary="V2-通过用户名密码登录",
* description="",
* @OA\Parameter(name="username", in="query", @OA\Schema(type="string"), required=true, description="用户名(身份证号)"),
* @OA\Parameter(name="password", in="query", @OA\Schema(type="string"), required=true, description="密码"),
* @OA\Response(
* response="200",
* description="护工通过用户名(身份证号)密码登录"
* )
* )
*/
public function loginByUsername()
{
$credentials = [
"id_card_number" => request()->username,
"password" => request()->password
];
if (!$token = $this->guard()->attempt($credentials)) {
return response()->json([
'errorcode' => '401',
'errormsg' => '登录失败'
], 401);
}
return $this->respondWithToken($token);
}
/**
* @OA\Get(
* path="/worker/me",
* tags={"护工端用户相关"},
* summary="V2-获取登录者信息",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* description="",
* @OA\Response(
* response="200",
* description="获取登录者信息"
* )
* )
*/
public function me()
{
$id = $this->guard()->id();
$paramedic = (new Paramedic())->find($id);
return response()->json($paramedic->toArray());
}
/**
* @OA\Post(
* path="/worker/logout",
* tags={"护工端用户相关"},
* summary="V2 退出登录",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* description="",
* @OA\Response(
* response="200",
* description="退出登录"
* )
* )
*/
public function logout()
{
DB::beginTransaction();
try {
$this->guard()->logout();
DB::commit();
return response()->json([
'errormsg' => "退出登录成功!"
]);
} catch (\Exception $exception) {
DB::rollBack();
return response()->json([
'errorcode' => '402',
'errormsg' => $exception->getMessage()
]);
}
}
/**
* Get the token array structure.
*
* @param string $token
*
* @return \Illuminate\Http\JsonResponse
*/
protected function respondWithToken($token)
{
$user = $this->guard()->user();
$user = $user->toArray();
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => $this->guard()->factory()->getTTL() * 60,
'user_info' => $user
]);
}
}

@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers\Worker;
use App\Http\Controllers\Controller;
class CommonController extends Controller
{
public $guardName = "worker";
public $worker;
public function __construct()
{
$worker = $this->guard()->user();
$this->worker = $worker;
}
public function guard()
{
return auth()->guard($this->guardName);
}
public function guardName()
{
return $this->guardName;
}
}

@ -0,0 +1,183 @@
<?php
namespace App\Http\Controllers\Worker;
use AlicFeng\IdentityCard\InfoHelper;
use App\Actions\AttachAffectedOrders;
use App\Actions\ChangeOrderStatus;
use App\Customer;
use App\Events\OrderAssigned;
use App\Libs\AlipayF2F;
use App\Libs\WxMicroPay;
use App\Models\Area;
use App\Models\Balance;
use App\Models\Bed;
use App\Models\OrderItems;
use App\Models\Orders;
use App\Models\Paramedic;
use App\Models\ParamedicLevel;
use App\Models\Patient;
use App\Models\Product;
use App\Models\ProductItems;
use App\Models\ProductParamedicLevel;
use App\Models\Project;
use App\Models\Recharge;
use App\Models\Refund;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Intervention\Image\Facades\Image;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
use function GuzzleHttp\Psr7\str;
class OrdersController extends CommonController
{
/**
* @OA\Get(
* path="/worker/get-orders",
* tags={"护工端订单处理"},
* summary="V2-获取订单列表",
* description="获取订单列表",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="keyword", in="query", @OA\Schema(type="string"), required=false, description="查询关键词"),
* @OA\Parameter(name="page", in="query", @OA\Schema(type="integer"), required=false, description="当前页码默认为1"),
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="integer"), required=false, description="每页数量默认为5"),
* @OA\Parameter(name="status", in="query", @OA\Schema(type="string"), required=false, description="订单状态:[pending=>待处理,ongoing=>进行中,finished=>已完成]"),
* @OA\Response(
* response="200",
* description="获取订单列表"
* )
* )
*/
public function list()
{
$worker = $this->guard()->user();
$model = $this->_getOrderModel();
$ids = OrderItems::where("paramedic_id", $worker->id)->where("total", ">", 0)->pluck("order_id")->toArray();
$model = $model->whereIn("id", $ids);
if (request()->keyword) {
$keyword = request()->keyword;
$model = $model->where(function ($query) use ($keyword) {
$query
->where("serial", "like", "%{$keyword}%")
->orWhereHas("patient", function ($query) use ($keyword) {
$query->where("name", "like", "%{$keyword}%");
})->orWhereHas("customer", function ($query) use ($keyword) {
$query->where("mobile", "like", "%{$keyword}%");
})->orWhereHas("paramedic", function ($query) use ($keyword) {
$query->where("name", "like", "%{$keyword}%");
});
});
}
if (request()->start_date_from && request()->start_date_to) {
$model = $model->whereRaw(DB::raw("UNIX_TIMESTAMP(`from_date`) between " . strtotime(request()->start_date_from) . " and " . strtotime(request()->start_date_to)));
}
switch (request()->status) {
case "pending":
$model = $model->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED]);
break;
case "ongoing":
case "finished":
$model = $model->where("status", constant(Orders::class . "::STATUS_" . strtoupper(request()->status)));
break;
default:
//do nothing
}
$page_size = request()->page_size ?? 5;
$data = $model->orderBy("id", "desc")->paginate($page_size);
return response()->json($data->toArray());
}
/**
* @OA\Get(
* path="/worker/get-order/{id}",
* tags={"护工端订单处理"},
* summary="V2-获取订单详情",
* description="获取订单详情",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="id"),
* @OA\Response(
* response="200",
* description="获取订单详情"
* )
* )
*/
public function getOrder($id)
{
$worker = $this->guard()->user();
$model = $this->_getOrderModel();
$ids = OrderItems::where("order_id", $id)->where("paramedic_id", $worker->id)->where("total", ">", 0)->pluck("order_id")->toArray();
if (!$ids) {
return response()->json([
"errorcode" => "40004",
"errormsg" => "没找到订单"
]);
}
$order = $model->with([
"orderItems" => function ($query) use ($worker) {
$query->where("paramedic_id", $worker->id)->where("total", ">", 0)->orderBy("service_date", "desc");
}
])->find($id);
return response()->json($order->toArray());
}
public function _getOrderModel()
{
$model = $order = (new Orders())
->select(
"orders.id",
"orders.serial",
"orders.customer_id",
"orders.manager_id",
"orders.bed_id",
"orders.patient_id",
"orders.project_id",
"orders.product_id",
"orders.product_item_id",
"orders.product_paramedic_level_id",
"orders.from_date",
"orders.to_date",
"orders.status",
"orders.total",
"orders.paid_total",
"orders.contact",
"orders.mobile",
"orders.paramedic_id",
"orders.price",
"orders.factors",
"orders.patient_quantity",
"orders.created_at"
)
->with([
"project" => function ($query) {
$query->select("id", "name");
},
"bed" => function ($query) {
$query->select("bed.id", "bed.name", "bed.building_id", "bed.area_id")
->leftJoin("building", "building.id", "=", "bed.building_id")
->leftJoin("area", "area.id", "=", "bed.area_id")
->leftJoin("room", "room.id", "=", "bed.room_id")
->addSelect("room.name as room_name", "area.name as area_name", "building.name as building_name");
},
"customer" => function ($query) {
$query->select("id", "name", "balance");
},
"patient" => function ($query) {
$query->select("id", "name", "sex", "age", "mobile");
}
]);
return $model;
}
}

@ -13,6 +13,7 @@ class VerifyCsrfToken extends Middleware
*/
protected $except = [
'customer/*',
'manager/*'
'manager/*',
'worker/*',
];
}

@ -0,0 +1,88 @@
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;
/**
* App\Manager
*
*/
class Worker extends Authenticatable implements JWTSubject
{
use Notifiable;
protected $table = "paramedic";
const GUARD_NAME = "worker";
public function getAvatarUrlAttribute()
{
$protocol = request()->secure() ? "https" : "http";
if (!$this->avatar) {
switch ($this->sex) {
case "男":
$this->avatar = "/images/male.png";
break;
case "女":
$this->avatar = "/images/female.png";
break;
}
}
return $this->avatar ? $protocol . "://" . request()->getHost() . $this->avatar : $this->avatar;
}
public function guardName()
{
return self::GUARD_NAME;
}
// Rest omitted for brevity
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'verified_at' => 'datetime',
];
}

@ -39,7 +39,7 @@ return [
|
*/
'debug' => (bool) env('APP_DEBUG', false),
'debug' => (bool)env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
@ -56,6 +56,8 @@ return [
'asset_url' => env('ASSET_URL', null),
'start_year' => env('START_YEAR', 2017),
/*
|--------------------------------------------------------------------------
| Application Timezone

@ -50,6 +50,11 @@ return [
'provider' => 'manager',
],
'worker' => [
'driver' => 'jwt',
'provider' => 'worker',
],
// 'api' => [
// 'driver' => 'token',
// 'provider' => 'users',
@ -90,6 +95,11 @@ return [
'model' => App\Manager::class,
],
'worker' => [
'driver' => 'eloquent',
'model' => App\Worker::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdateParamedicAddAuthFields extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table("paramedic", function (Blueprint $table) {
$table->string("remember_token")->nullable();
$table->string("password")->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

@ -33,6 +33,16 @@
<option value="{{$mm}}" @if($mm == $month) {{ "selected" }}@endif>{{$mm}}</option>
@endforeach
</select>
{{-- <select class="form-control" name="year" onchange="$(this).closest('form').submit()">--}}
{{-- @foreach($years as $year)--}}
{{-- <option value="{{$year}}" @if($year == reqeust()->year) {{ "selected" }}@endif>{{$year}}</option>--}}
{{-- @endforeach--}}
{{-- </select>--}}
{{-- <select class="form-control" name="month_duration" onchange="$(this).closest('form').submit()">--}}
{{-- @foreach($years as $year)--}}
{{-- <option value="{{$year}}" @if($year == reqeust()->month) {{ "selected" }}@endif>{{$year}}</option>--}}
{{-- @endforeach--}}
{{-- </select>--}}
</form>
</div>
<h5>收款明细</h5>

@ -188,3 +188,14 @@ Route::group(["namespace" => "Manager", "prefix" => "manager"], function () {
});
});
Route::group(["namespace" => "Worker", "prefix" => "worker"], function () {
Route::post('logout', 'AuthController@logout');
Route::post('login-by-username', 'AuthController@loginByUsername');
Route::group(['middleware' => ['authorize.jwt:worker']], function () {
Route::get('me', 'AuthController@me');
Route::get('get-orders', 'OrdersController@list');
Route::get('get-order/{id}', 'OrdersController@getOrder');
});
});

Loading…
Cancel
Save