sellerId()); $seller->has_pay_password = $seller->password_pay ? true : false; unset($seller->password_pay); unset($seller->password); $shop = Shop::with('shopExtra:id,shop_id,state')->find($seller->shop_id); $shopId = $this->shopId(); $draftNum = Order::where(function($query) use ($shopId) { $query->where(function($query) use ($shopId) { $query->where('cooperate_show', BoolEnum::NO) ->where('shop_id', $shopId); })->orWhere(function($query) use ($shopId) { $query->where('cooperate_show', BoolEnum::YES) ->where('cooperate_id', $shopId); }); }) ->where('lottery_state', LottState::DRAFT) ->where(function ($query) { $query->whereIn('type', [OrderType::NORMAL, OrderType::FADAN, OrderType::GENDAN]) ->orWhere(function ($query) { $query->where('type', OrderType::UNION) ->whereRaw('id = pid'); }); })->count(); $winNum = Order::where('draft_shop_id', $this->shopId()) ->where('lottery_state', LottState::WIN) ->where(function ($query) { $query->whereIn('type', [OrderType::NORMAL, OrderType::FADAN, OrderType::GENDAN]) ->orWhere(function ($query) { $query->where('type', OrderType::UNION) ->whereRaw('id = pid'); }); })->count(); $pendingNum = Order::where('lottery_state', LottState::PENDING) ->where('pay_state', PayState::SUCCESS) ->where(function ($query) { $query->whereIn('type', [OrderType::NORMAL, OrderType::FADAN, OrderType::GENDAN]) ->orWhere(function ($query) { $query->where('type', OrderType::UNION) ->whereRaw('id = pid'); }); }) ->where(function($query) use ($shopId) { $query->where(function($query) use ($shopId) { $query->where('cooperate_show', BoolEnum::NO) ->where('shop_id', $shopId); })->orWhere(function($query) use ($shopId) { $query->where('cooperate_show', BoolEnum::YES) ->where('cooperate_id', $shopId); }); }) ->count(); $withdrawNum = CustomerWithdraw::where('shop_id', $this->shopId()) ->where('state', WithdrawState::PENDING)->count(); $allCustomerBalance = Customer::where('shop_id', $this->shopId())->sum('balance'); $shopAuditingNum = ShopCooperate::where('cooperate_id', $this->shopId()) ->where('audit_state', CooperateState::PENDING)->count(); $lotteryAuditingNum = ShopCooperateLottery::where('cooperate_id', $this->shopId()) ->where('audit_state', CooperateState::PENDING)->count(); return $this->jsonSuccess([ 'seller' => $seller, 'shop' => $shop, 'cooperate' => [ 'shop_auditing_num' => $shopAuditingNum, 'lottery_auditing_num' => $lotteryAuditingNum, ], 'orders' => [ 'draft_num' => $draftNum, 'win_num' => $winNum, 'withdraw_num' => $withdrawNum, 'pending_num' => $pendingNum, ], 'customers' => [ 'balance' => $allCustomerBalance ], 'buyer' => [ 'domain' => config('buyer.domain') ], 'release' => Helps::release($shopId) ]); } /** * @api {POST} /api/seller/seller/change_password 我的-修改密码 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {String} password_old 旧密码 * @apiParam {String} password 新密码 * @apiParam {String} password_confirmation 新密码确认 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } * */ public function changePassword(Request $request) { $old = $request->input('password_old'); $password = $request->input('password'); $err = AuthValidator::changePasswordErrors($request); ThrowException::isTrue($err, $err); $seller = Seller::find($this->sellerId()); ThrowException::isTrue(!Seller::checkPassword($old, $seller->password), '密码错误'); $seller->password = Seller::encryPassword($password); $seller->save(); return $this->jsonSuccess(); } /** * @api {POST} /api/seller/seller/change_info 我的-修改信息 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {Int} [notice_order_pay_success] 订单支付成功提醒 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } * */ public function changeInfo(Request $request) { $seller = Seller::find($this->sellerId()); $notice_order_pay_success = $request->input('notice_order_pay_success'); $notice_order_receive = $request->input('notice_order_receive'); if ($notice_order_receive !== null) { $seller->notice_order_receive = $notice_order_receive == BoolEnum::YES ? BoolEnum::YES : BoolEnum::NO; } if ($notice_order_pay_success !== null) { $seller->notice_order_pay_success = $notice_order_pay_success == BoolEnum::YES ? BoolEnum::YES : BoolEnum::NO; } $seller->save(); return $this->jsonSuccess(); } /** * @api {POST} /api/seller/seller/change_pay_password 我的-设置支付密码 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {String} [password_old] 旧密码,第一次设置时,可以不传 * @apiParam {String} password 新密码 * @apiParam {String} password_confirmation 新密码确认 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } * */ public function changePayPassword(Request $request) { $old = $request->input('password_old'); $password = $request->input('password'); $err = AuthValidator::changePasswordErrors($request, true); ThrowException::isTrue($err, $err); /** @var Seller $seller */ $seller = Seller::find($this->sellerId()); if ($seller->password_pay) { ThrowException::isTrue(!Seller::checkPassword($old, $seller->password_pay), '密码错误'); } $seller->password_pay = Seller::encryPassword($password); $seller->save(); return $this->jsonSuccess(); } /** * @api {POST} /api/seller/seller/reset_pay_password 我的-忘记支付密码 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {String} real_name 姓名 * @apiParam {String} real_identity 身份证号 * @apiParam {String} password_pay 新密码 * @apiParam {String} password_pay_confirmation 新密码确认 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } * */ public function resetPayPassword(Request $request) { $real_name = $request->input('real_name'); $real_identity = $request->input('real_identity'); $password = $request->input('password_pay'); $passwordConfirm = $request->input('password_pay_confirmation'); ThrowException::isTrue(!$password, '密码不能为空'); ThrowException::isTrue(strlen($password) < 6 || strlen($password) > 20, '密码长度为6-20位'); ThrowException::isTrue($password != $passwordConfirm, '两次密码不一致'); /** @var Seller $seller */ $seller = Seller::find($this->sellerId()); if (!$seller->real_name || !$seller->real_identify) { ThrowException::run('尚未实名认证'); } if ($seller->real_name != $real_name || $seller->real_identify != $real_identity) { ThrowException::run('身份证或姓名不对'); } $seller->password_pay = Seller::encryPassword($password); $seller->save(); return $this->jsonSuccess(); } /** * @api {POST} /api/seller/seller/real_verify 我的-实名认证 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {String} real_identity 身份证 * @apiParam {String} real_name 真实姓名 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } */ public function realVerify(Request $request) { $real_identity = $request->input('real_identity'); $real_name = $request->input('real_name'); ThrowException::isTrue(!$real_name, '姓名不能为空'); ThrowException::isTrue(!Helps::validIdCard($real_identity), '身份证格式有误'); ThrowException::isTrue(!Helps::validIdCardIsAdult($real_identity), '您尚未未成年'); $seller = $this->seller(); ThrowException::isTrue($seller->real_identity, '不可重复认证'); $seller->real_identity = $real_identity; $seller->real_name = $real_name; $seller->save(); return $this->jsonSuccess(); } /** * @api {POST} /api/seller/seller/upload 我的-上传头像 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {String} file avatar // filename * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": { * "path": "xxxxx", // 头像地址 * } * } * */ public function upload(Request $request, MaterialService $materialService) { $file = $request->file('avatar'); $material = $materialService->upload($file, $this->sellerId(), MaterialScene::AVATAR); $seller = $this->seller(); $seller->avatar = $material->path; $seller->save(); return $this->jsonSuccess([ 'avatar' => $seller->avatar ]); } /** * @api {POST} /api/seller/seller/store 员工管理-创建账号 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {String} name 姓名 * @apiParam {String} phone 手机号 * @apiParam {String} password 密码 * @apiParam {String} password_confirmation 确认密码 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } * */ public function store(Request $request) { $this->checkMasterNext(); $name = $request->input('name'); $phone = $request->input('phone'); $password = $request->input('password'); $passwordConfirm = $request->input('password_confirmation'); ThrowException::isTrue(!$name, '员工姓名不能为空'); ThrowException::isTrue(!Helps::validPhone($phone), '手机号格式有误'); ThrowException::isTrue(strlen($password) < 6, '密码长度不能小于6位'); ThrowException::isTrue($password != $passwordConfirm, '密码输入不一致,请重新输入'); $exist = Seller::where('shop_id', $this->shopId()) ->where('phone', $phone) ->first(); ThrowException::isTrue($exist, '手机号为' . $phone . '的用户已经存在'); $sel = new Seller(); $sel->shop_id = $this->shopId(); $sel->name = $name; $sel->phone = $phone; $sel->password = Seller::encryPassword($password); $sel->level = SellerLevel::STAFF; $sel->save(); return $this->jsonSuccess(); } /** * @api {POST} /api/seller/seller/delete 员工管理-删除 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {Int} id 员工id * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } * */ public function delete(Request $request) { $this->checkMasterNext(); $id = $request->input('id'); $seller = Seller::find($id); ThrowException::isTrue(!$seller, '员工不存在'); ThrowException::isTrue($seller->shop_id != $this->shopId(), '无权操作'); $seller->delete(); return $this->jsonSuccess(); } /** * @api {POST} /api/seller/seller/list 员工管理-列表 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [ * { * "id": 3, * "shop_id": 1, * "level": 2, // 1店主;2店员 * "phone": "13411111111", // 手机号 * "name": "xxxx", // 姓名 * "nickname": null, // 昵称 * "email": "", * "avatar": "", // 头像 * "email_verified_at": null, * "enable_send_prize": 1, // 是否允许派奖:1是;0否 * "enable_ie": 1,// 是否允许加扣款:1是;0否 * "enable_work": 1, // 是否允许接单:1是;0否 * "created_at": "2023-05-17 21:23:54", * "updated_at": "2023-05-17 21:23:54", * "deleted_at": null * } * ] * } */ public function list() { $this->checkMasterNext(); $data = Seller::where('shop_id', $this->shopId()) ->where('level', SellerLevel::STAFF) ->get(); return $this->jsonSuccess($data); } /** * @api {POST} /api/seller/seller/update 员工管理-更新 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {Int} id 员工id * @apiParam {String} [name] 姓名 * @apiParam {String} [phone] 手机号 * @apiParam {String} [password] 密码 * @apiParam {Int} [enable_send_prize] 开启派奖:1开启;0关闭 * @apiParam {Int} [enable_ie] 开启加扣款:1开启;0关闭 * @apiParam {Int} [enable_work] 开启接单:1开启;0关闭 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } * */ public function update(Request $request) { $this->checkMasterNext(); $id = $request->input('id'); $seller = Seller::find($id); ThrowException::isTrue(!$seller, '员工不存在'); ThrowException::isTrue($seller->shop_id != $this->shopId(), '无权操作'); $name = $request->input('name'); $phone = $request->input('phone'); $password = $request->input('password'); $enable_send_prize = $request->input('enable_send_prize'); $enable_ie = $request->input('enable_ie'); $enable_work = $request->input('enable_work'); if ($name !== null) { $seller->name = $name; } if ($phone !== null) { ThrowException::isTrue(!Helps::validPhone($phone), '手机号格式有误'); $exist = Seller::where('shop_id', $this->shopId()) ->where('id', '<>', $id) ->where('phone', $phone) ->first(); ThrowException::isTrue($exist, '手机号为' . $phone . '的用户已经存在'); $seller->phone = $phone; } if ($password !== null) { ThrowException::isTrue(strlen($password) < 6, '密码长度不能小于6位'); $seller->password = Seller::encryPassword($password); } if ($enable_ie !== null && BoolEnum::hasValue($enable_ie, false)) { $seller->enable_ie = $enable_ie; } if ($enable_send_prize !== null && BoolEnum::hasValue($enable_send_prize, false)) { $seller->enable_send_prize = $enable_send_prize; } if ($enable_work !== null && BoolEnum::hasValue($enable_work, false)) { $seller->enable_work = $enable_work; } $seller->save(); return $this->jsonSuccess(); } /** * @api {POST} /api/customer/seller/feedback 我的-反馈 * @apiVersion 0.1.0 * @apiGroup 店主 * * @apiParam {String} content 内容 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": [] * } */ public function feedback(Request $request) { $content = $request->input('content'); ThrowException::isTrue(!$content, '内容不能为空'); $feedback = new SellerFeedback(); $feedback->seller_id = $this->sellerId(); $feedback->shop_id = $this->shopId(); $feedback->content = $content; $feedback->save(); return $this->jsonSuccess(); } }