diff --git a/app/Admin/Forms/CheckIncome.php b/app/Admin/Forms/CheckIncome.php new file mode 100644 index 0000000..2cc7465 --- /dev/null +++ b/app/Admin/Forms/CheckIncome.php @@ -0,0 +1,144 @@ +<?php + +namespace App\Admin\Forms; + + +use App\Command\Log; + +use App\Models\Company; +use App\Models\Employee; +use App\Models\Income; +use App\Models\Pay; +use Dcat\Admin\Widgets\Form; +use Dcat\Admin\Contracts\LazyRenderable; +use Dcat\Admin\Traits\LazyWidget; +use Illuminate\Support\Facades\DB; + + +class CheckIncome extends Form implements LazyRenderable +{ + use LazyWidget; + + /** + * Handle the form request. + * + * @param array $input + * + * @return mixed + */ + public function handle(array $input) + { + DB::beginTransaction(); + $income = Income::find($this->payload['id']); + if ($income->batch_id) { + return $this->response()->error('提现已受理,请等待。。。')->refresh(); + } + try { + $status = (int)$input['status']; //审核状态 0:审核中 1:通过 2:拒绝 + $income->remark = $input['remark'] ?? ''; + if ($status == 1) { + $pay_res = Pay::toBalance($income->openid, $income->amount, '用户提现'); + if (!empty($pay_res)) { + $income->partner_trade_no = $pay_res[0]; + $income->out_batch_no = $pay_res[1]; + $income->batch_id = $pay_res[2]; + $income->batch_status = $pay_res[3]; + } + } elseif ($status == 2) { + $income->status = 2; + //恢复陪诊员余额 + if ($income->user_type == 1) { + $em = Employee::find($income->ec_id); + $em->balance += $income->amount; + $em->freeze_balance -= $income->amount; + $em->save(); + } else if ($income->user_type == 2) { + $cm = Company::find($income->ec_id); + $cm->balance += $income->amount; + $cm->freeze_balance -= $income->amount; + $cm->save(); + } + } + + $income->save(); + + DB::commit(); + Log::add('提现已受理', $income->toArray()); + } catch (\Exception $exception) { + DB::rollBack(); + + Log::add('用户提现失败', $exception->getMessage()); + return $this->response()->error('用户提现失败')->refresh(); + } + return $this->response()->success('用户提现已受理')->refresh(); + } + + public function handle_202312(array $input) + { + DB::beginTransaction(); + try { + $income = Income::find($this->payload['id']); + $income->status = $input['status']; + $income->remark = $input['remark'] ?? ''; + if ($income->status == 1) { + // $income->partner_trade_no = Pay::toBalance($income->openid,$income->amount,'用户提现'); + $pay_res = Pay::toBalance($income->openid, $income->amount, '用户提现'); + Log::add('用户提现-微信结果', $pay_res); + if (!empty($pay_res)) { + $income->partner_trade_no = $pay_res[0]; + $income->out_batch_no = $pay_res[1]; + $income->batch_id = $pay_res[2]; + } else { //提现失败 + $income->status = 2; + } + } + + $income->save(); + if ($income->user_type == 1) { + $em = Employee::find($income->ec_id); + if ($income->status == 2) { + $em->balance += $income->amount; + } + $em->freeze_balance -= $income->amount;; + $em->save(); + } else if ($income->user_type == 2) { + $cm = Company::find($income->ec_id); + if ($income->status == 2) { + $cm->balance += $income->amount; + } + $cm->freeze_balance -= $income->amount; + $cm->save(); + } + DB::commit(); + Log::add('用户提现成功', $income->toArray()); + } catch (\Exception $exception) { + DB::rollBack(); + Log::add('用户提现失败', $exception); + return $this->response()->error('用户提现失败')->refresh(); + } + return $this->response()->success('用户提现成功')->refresh(); + } + + /** + * Build a form here. + */ + public function form() + { + $this->radio('status', '提现审核')->options([1 => '同意提现', 2 => '拒绝提现']) + ->when(2, function (Form $form) { + $form->textarea('remark', '拒绝理由'); + }) + ->required(); + } + + /** + * The data of the form. + * + * @return array + */ + public function default() + { + // 获取外部传递参数 + return []; + } +} diff --git a/app/Http/Controllers/Api/IncomeController.php b/app/Http/Controllers/Api/IncomeController.php new file mode 100644 index 0000000..120c474 --- /dev/null +++ b/app/Http/Controllers/Api/IncomeController.php @@ -0,0 +1,79 @@ +<?php + +namespace App\Http\Controllers\Api; + +use App\Command\Log; +use App\Models\Carousel; +use App\Models\User; +use App\Models\Income; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; + +class IncomeController extends BaseController +{ + public function getList(Request $request) + { + $type = $request->type ?? 0; + $page = $request->page ?? 1; + $limit = $request->limit ?? 10; + $txtArr = ['提现中', '提现成功', '提现失败']; + if (!in_array($type, [1, 2,])) { + return $this->JsonResponse('', '参数错误', 201); + } + $sql = Income::where(['um_id' => $request->user()->id, 'user_type' => $type, 'deleted_at' => null]); + + $total = $sql->count(); + $data = [ + 'total' => $total, + 'total_page' => ceil($total / $limit), + 'list' => [] + ]; + $listData = $sql->offset(($page - 1) * $limit)->limit($limit)->orderBy('created_at', 'DESC')->get(); + if ($listData->toArray()) { + foreach ($listData as $kk => $vv) { + $data['list'][] = [ + 'title' => $txtArr[$vv->status], + 'status' => $vv->status, + 'created_at' => date("Y-m-d H:i:s", strtotime($vv->created_at)), + 'amount' => $vv->amount + ]; + } + } + + return $this->JsonResponse($data); + } + + public function add(Request $request) + { + $useObj = $request->user(); + $type = $request->type ?? 0; + $money = $request->money ? (float)$request->money : 0; + + if (!in_array($type, [1, 2,])) { + return $this->JsonResponse('', '参数错误', 201); + } + if ($money < 1) { + return $this->JsonResponse('', '提现金额1元起', 500); + } + if ($useObj->balance < $money) { + return $this->JsonResponse('', '余额不足', 500); + } + + DB::beginTransaction(); + try { + $comObj = new Income(); + + $comObj->user_type = $type; + $comObj->um_id = $useObj->id; + $comObj->amount = $money; + $comObj->status = 0; + $comObj->save(); + DB::commit(); + return $this->JsonResponse(''); + } catch (\Exception $exception) { + Log::add('添加提现失败', $exception->getMessage()); + DB::rollBack(); + return $this->JsonResponse('', '添加提现失败', 201); + } + } +} diff --git a/app/Http/Controllers/Api/OrderDivideRecordController.php b/app/Http/Controllers/Api/OrderDivideRecordController.php new file mode 100644 index 0000000..e008310 --- /dev/null +++ b/app/Http/Controllers/Api/OrderDivideRecordController.php @@ -0,0 +1,42 @@ +<?php + +namespace App\Http\Controllers\Api; + +use App\Command\Log; +use App\Models\Carousel; +use App\Models\User; +use App\Models\OrderDivideRecord; +use Illuminate\Http\Request; + +class OrderDivideRecordController extends BaseController +{ + public function getList(Request $request) + { + $type = $request->type ?? 0; + $page = $request->page ?? 1; + $limit = $request->limit ?? 10; + if (!in_array($type, [1, 2, 3])) { + return $this->JsonResponse('', '参数错误', 201); + } + $sql = OrderDivideRecord::where(['um_id' => $request->user()->id, 'sh_type' => $type, 'deleted_at' => null]); + + $total = $sql->count(); + $data = [ + 'total' => $total, + 'total_page' => ceil($total / $limit), + 'list' => [] + ]; + $listData = $sql->offset(($page - 1) * $limit)->limit($limit)->orderBy('created_at', 'DESC')->get(); + if ($listData->toArray()) { + foreach ($listData as $kk => $vv) { + $data['list'][] = [ + 'title' => $vv->title, + 'created_at' => date("Y-m-d H:i:s", strtotime($vv->created_at)), + 'divide_price' => $vv->divide_price + ]; + } + } + + return $this->JsonResponse($data); + } +} diff --git a/app/Http/Controllers/Api/StoreAdminUsersController.php b/app/Http/Controllers/Api/StoreAdminUsersController.php new file mode 100644 index 0000000..efdae9f --- /dev/null +++ b/app/Http/Controllers/Api/StoreAdminUsersController.php @@ -0,0 +1,84 @@ +<?php + +namespace App\Http\Controllers\Api; + +use App\Command\Log; +use App\Handlers\FileUploadHandler; +use App\Models\Merchant; +use App\Models\StoreAdminUsers; +use App\Models\UserPermission; +use App\Models\PersonalAccessToken; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; + +class StoreAdminUsersController extends BaseController +{ + public function login(Request $request) + { + // $user = User::find(1); + // $accessToken = 'Bearer '.$user->createToken('Access-token')->plainTextToken; + // return $this->JsonResponse([ 'Authorization'=>$accessToken,]); + + // $encryptedData = $request->encryptedData ?? ''; + // $iv = $request->iv ?? ''; + // $session_key = $request->session_key ?? ''; + // $openId = $request->openid ??''; + // $res = $this->decryptData($session_key,$encryptedData,$iv,$data); + // if($res != 0 ){ + // return $this->JsonResponse('','参数异常',201); + // } + + $username = $request->username ?? ''; + $password = $request->password ?? ''; + + $user = StoreAdminUsers::where(['username' => $username])->first(); + + if (!$user) { + return $this->JsonResponse('', '用户不存在', 201); + } + + if (!Hash::check($password, $user->password)) { + return $this->JsonResponse('', '账号或密码错误', 500); + } + //生成token + $accessToken = 'Bearer ' . $user->createToken('Access-token')->plainTextToken; + Log::add('商家端用户--' . $user->id . '登录', ['token' => $accessToken]); + + return $this->JsonResponse([ + 'Authorization' => $accessToken, + ]); + } + + public function logout(Request $request) + { + $request->user()->tokens()->delete(); + PersonalAccessToken::where(['tokenable_id' => $request->user()->id])->delete(); + return $this->JsonResponse(''); + } + + public function info(Request $request) + { + $muser = $request->user(); + $buycode = ''; + $merchant_id = $muser->merchant_id; + $total_revenue = $balance = $cashout = 0; + if ($merchant_id) { + $merObj = Merchant::where('id', $merchant_id)->first(); + $buycode = $merObj->buycode; + $total_revenue = $merObj->total_revenue ?? 0; + $balance = $merObj->balance ?? 0; + $cashout = $total_revenue - $balance; + } + return $this->JsonResponse([ + 'user_id' => $muser->id, + 'username' => $muser->username, + 'avatar' => $muser->avatar ? env('IMAGE_URL') . $muser->avatar : '', + 'merchant_id' => $muser->merchant_id, + 'buycode' => $buycode, + 'total_revenue' => $total_revenue, + 'balance' => $balance, + 'cashout' => $cashout, + 'role_id' => $muser->role_id, + ]); + } +} diff --git a/app/Models/OrderDivideRecord.php b/app/Models/OrderDivideRecord.php new file mode 100644 index 0000000..eb5ef1e --- /dev/null +++ b/app/Models/OrderDivideRecord.php @@ -0,0 +1,14 @@ +<?php + +namespace App\Models; + +use Dcat\Admin\Traits\HasDateTimeFormatter; +use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Database\Eloquent\Model; + +class OrderDivideRecord extends Model +{ + use HasDateTimeFormatter; + use SoftDeletes; + protected $table = 'order_divide_record'; +}