123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- <?php
- declare(strict_types=1);
- namespace App\Controller\Api\v1;
- use App\Controller\AbstractController;
- use App\Model\Arts\CouponModel;
- use App\Model\Arts\DriverMessageModel;
- use App\Model\Arts\DriverModel;
- use App\Model\Arts\DriverWalletModel;
- use App\Model\Arts\MessageModel;
- use App\Model\Arts\UserAddressModel;
- use App\Model\Arts\UserCouponModel;
- use App\Model\Arts\UserModel;
- use App\Model\Arts\UserMoneyLogModel;
- use App\Model\Arts\UserWalletModel;
- use App\Request\Api\v1\User\AddressAddRequest;
- use App\Request\Api\v1\User\AddressDelRequest;
- use App\Request\Api\v1\User\AddressDetailRequest;
- use App\Request\Api\v1\User\AddressEditRequest;
- use App\Request\Api\v1\User\AddressListRequest;
- use App\Request\Api\v1\User\CouponsRequest;
- use App\Request\Api\v1\User\EditRequest;
- use App\Request\Api\v1\User\InviteRequest;
- use App\Request\Api\v1\User\MoneyLogRequest;
- use App\Request\Api\v1\User\OrderPageCouponsRequest;
- use App\Utils\AppResult;
- use App\Utils\Common;
- use App\Utils\Control\AuthUser;
- use Hyperf\DbConnection\Db;
- /**
- * 用户管理
- * UserController
- */
- class UserController extends AbstractController
- {
- // 日志模块名称
- const LOG_MODULE = 'v1/UserController';
- /**
- * 用户信息
- * @return string
- */
- public function info()
- {
- $user = AuthUser::getInstance()->get();
- unset($user['password'], $user['salt']);
- $user['money'] = UserWalletModel::getOne($user['id'], 'money');
- $model = new UserCouponModel();
- $list = $model->getList(
- params : [
- 'user_id' => $user['id'],
- 'is_use' => 0,
- 'valid' => 0
- ],
- orderBy: ['id' => 'desc']
- );
- $user['coupon'] = count($list);
- $user['avatar'] = cdn_url($user['avatar']);
- $user['credit'] = "{$user['over_order_num']}/{$user['order_num']}";
- return AppResult::success(result: $user);
- }
- // 个人信息编辑
- public function edit(EditRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- if (empty($params['avatar']) && empty($params['email']) && empty($params['nickname'])) {
- return AppResult::success('修改成功');
- }
- $data = [];
- !empty($params['nickname']) && $data['nickname'] = $params['nickname'];
- !empty($params['avatar']) && $data['avatar'] = $params['avatar'];
- !empty($params['email']) && $data['email'] = $params['email'];
- if (!UserModel::query()->where('id', $user['id'])->update($data)) {
- return AppResult::error('修改失败');
- }
- return AppResult::success('修改成功');
- }
- /**
- * 余额变动记录
- * @param MoneyLogRequest $request
- * @return string
- */
- public function money_log(MoneyLogRequest $request)
- {
- $params = $request->validated();// 获取校验通过的参数
- $user = AuthUser::getInstance()->get();
- if ($params['type_in'] == 1) {
- $params['type_in'] = [1, 4];
- } else {
- $params['type_in'] = [2, 3];
- }
- $model = new UserMoneyLogModel();
- $list = $model->getList(
- params: array_merge(['user_id' => $user['id']], $params), orderBy: ['id' => 'desc']
- );
- return AppResult::success('success', $list);
- }
- /**
- * 常用地址列表
- * @param AddressListRequest $request
- * @return string
- */
- public function address_list(AddressListRequest $request)
- {
- $params = $request->validated();// 获取校验通过的参数
- $user = AuthUser::getInstance()->get();
- $model = new UserAddressModel();
- $list = $model->getList(
- params: array_merge($params, ['user_id' => $user['id']])
- );
- return AppResult::success(result: $list);
- }
- public function address_detail(AddressDetailRequest $request)
- {
- $params = $request->validated();// 获取校验通过的参数
- $user = AuthUser::getInstance()->get();
- $model = new UserAddressModel();
- $list = $model->getDetail(
- params: array_merge($params, ['user_id' => $user['id']])
- );
- return AppResult::success(result: $list);
- }
- /**
- * 常用地址添加
- * @param AddressAddRequest $request
- * @return string
- */
- public function address_add(AddressAddRequest $request)
- {
- $params = $request->validated();// 获取校验通过的参数
- $user = AuthUser::getInstance()->get();
- $params = array_merge($params, ['user_id' => $user['id']]);
- if (!UserAddressModel::add($params)) {
- return AppResult::error('添加失败');
- }
- return AppResult::success('创建成功');
- }
- /**
- * 常用地址编辑
- * @param AddressEditRequest $request
- * @return string
- */
- public function address_edit(AddressEditRequest $request)
- {
- $params = $request->validated();// 获取校验通过的参数
- $user = AuthUser::getInstance()->get();
- $params = array_merge($params, ['user_id' => $user['id']]);
- if (!UserAddressModel::edit((int)$params['id'], $params)) {
- return AppResult::error('修改失败');
- }
- return AppResult::success('修改成功');
- }
- /**
- * 常用地址编辑
- * @param AddressDelRequest $request
- * @return string
- */
- public function address_del(AddressDelRequest $request)
- {
- $params = $request->validated();// 获取校验通过的参数
- $user = AuthUser::getInstance()->get();
- if (!UserAddressModel::del((int)$params['id'], (int)$user['id'])) {
- return AppResult::error('删除失败');
- }
- return AppResult::success('删除成功');
- }
- /**
- * 我的优惠券
- * @param CouponsRequest $request
- * @return \Psr\Http\Message\MessageInterface|\Psr\Http\Message\ResponseInterface
- * @throws \Psr\Container\ContainerExceptionInterface
- * @throws \Psr\Container\NotFoundExceptionInterface
- */
- public function coupons(CouponsRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new UserCouponModel();
- $list = $model->getList(
- params: array_merge($params, ['user_id' => $user['id']]), orderBy: ['id' => 'desc']
- );
- foreach ($list as $key => $val) {
- $list[$key]['valid_at'] = date('Y-m-d H:i:s', $val['valid_at']);
- }
- return AppResult::success(result: $list);
- }
- /**
- * 订单使用优惠券
- * @param OrderPageCouponsRequest $request
- * @return \Psr\Http\Message\MessageInterface|\Psr\Http\Message\ResponseInterface
- * @throws \Psr\Container\ContainerExceptionInterface
- * @throws \Psr\Container\NotFoundExceptionInterface
- */
- public function order_page_coupons(OrderPageCouponsRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new UserCouponModel();
- $list = $model->getList(
- params : [
- 'user_id' => $user['id'],
- 'type' => $params['type'],
- 'is_use' => 0,
- 'is_valid' => 0,
- 'min_money_min' => $params['total_amount']
- ],
- orderBy: ['id' => 'desc']
- );
- foreach ($list as $key => $val) {
- $total_amount = (string)round((float)bcsub($params['total_amount'], $val['money'], 2));// 四舍五入
- $rmb_total_amount = (string)round((float)bcmul($total_amount, site('dollar_to_rmb'), 2));// 四舍五入
- $list[$key]['valid_at'] = date('Y-m-d H:i:s', $val['valid_at']);
- $list[$key]['pay_amount'] = $total_amount;
- $list[$key]['rmb_pay_amount'] = $rmb_total_amount;
- }
- return AppResult::success(result: $list);
- }
- /**
- * 邀请用户
- * @param InviteRequest $request
- * @return \Psr\Http\Message\MessageInterface|\Psr\Http\Message\ResponseInterface
- * @throws \Psr\Container\ContainerExceptionInterface
- * @throws \Psr\Container\NotFoundExceptionInterface
- */
- public function invite(InviteRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- if (!empty($user['parent_id']) || !empty($user['driver_id'])) {
- return AppResult::error('已经被邀请过了');
- }
- if ($params['invite_code'] == $user['invite_code']) {
- return AppResult::error('不可以邀请自己');
- }
- $first = substr($params['invite_code'], 0, 1);
- if (!in_array($first, ['U', 'D'])) {
- return AppResult::error('邀请码错误');
- }
- if ($first == 'U') {
- $info = UserModel::query()->where('invite_code', $params['invite_code'])->where('status', 1)->first();
- $up['parent_id'] = $info['id'] ?? 0;
- } else {
- $info = DriverModel::query()->where('invite_code', $params['invite_code'])->where('status', 1)->first();
- $up['driver_id'] = $info['id'] ?? 0;
- }
- if (!$info) {
- return AppResult::error('邀请码异常');
- }
- Db::beginTransaction();
- if (!UserModel::query()->where('id', $user['id'])->update($up)) {
- Db::rollBack();
- return AppResult::error('操作失败');
- }
- $time = time();
- if ($first == 'U'){
- // 发放优惠券
- $coupon = CouponModel::getDetail(['id' => site('invite_user_coupon_id')]);
- if ($coupon){
- $insert = [
- 'user_id' => $up['parent_id'],
- 'coupon_id' => $coupon['id'],
- 'name' => $coupon['name'],
- 'type' => $coupon['type'],
- 'min_money' => $coupon['min_money'],
- 'money' => $coupon['money'],
- 'valid_at' => strtotime(date('Y-m-d 23:59:59', $time + ($coupon['valid_days'] * 24 * 60 * 60))),// 自领取之日起 计算过期时间
- 'remark' => '邀请用户奖励',
- 'status' => 1,
- 'create_time' => $time
- ];
- if (!UserCouponModel::query()->insert($insert)) {
- Db::rollBack();
- return AppResult::error('发放失败');
- }
- }
- // 发送系统消息
- MessageModel::add([
- 'user_id' => $up['parent_id'],
- 'type' => 1,
- 'name' => "邀请用户奖励",
- 'content' => "邀请用户成功,优惠券奖励已发放",
- 'value' => $coupon['id']
- ]);
- } else {
- // 发放奖金
- $invite_driver_amount = site('invite_driver_amount');
- if ($invite_driver_amount){
- $wallet = new DriverWalletModel();
- if (!$wallet->change($up['driver_id'], (float)$invite_driver_amount, "邀请用户奖励", 4)) {
- Db::rollBack();
- return AppResult::error($wallet->getMessage());
- }
- }
- // 发送系统消息
- DriverMessageModel::add([
- 'driver_id' => $up['driver_id'],
- 'type' => 1,
- 'name' => "邀请用户奖励",
- 'content' => "邀请用户成功,奖励金已发放",
- 'value' => ''
- ]);
- }
- Db::commit();
- return AppResult::success('操作成功');
- }
- }
|