multi-store/app/api/controller/user/UserController.php

355 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\controller\user;
use app\api\controller\BaseApiController;
use app\api\lists\user_sign\UserSignLists;
use app\api\lists\user_sign_log\UserSignLogLists;
use app\api\logic\user\UserLogic;
use app\api\service\UserTokenService;
use app\api\validate\UserValidate;
use app\common\enum\PayEnum;
use app\common\logic\CapitalFlowLogic;
use app\common\logic\PaymentLogic;
use app\common\model\store_extract\StoreExtract;
use app\common\model\user\User;
use app\common\model\user\UserAddress;
use app\common\model\user_ship\UserShip;
use app\common\model\user_sign\UserSign;
use support\Cache;
use think\Exception;
use think\facade\Db;
/**
* 用户控制器
* Class UserController
* @package app\api\controller
*/
class UserController extends BaseApiController
{
public $notNeedLogin = ['login_sms'];
// #[
// ApiDoc\Title('获取小程序手机号'),
// ApiDoc\url('/api/user/user/getMobileByMnp'),
// ApiDoc\Method('POST'),
// ApiDoc\Param(name: "code", type: "string", require: true, desc: "换取手机的code"),
// ApiDoc\NotHeaders(),
// ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"),
// ApiDoc\ResponseSuccess("data", type: "array"),
// ]
public function getMobileByMnp()
{
$params = (new UserValidate())->post()->goCheck('getMobileByMnp');
$params['user_id'] = $this->userId;
$result = UserLogic::getMobileByMnp($params);
if ($result === false) {
return $this->fail(UserLogic::getError());
}
if ($result && is_numeric($result)) {
$data = UserLogic::info($result);
$userInfo = UserTokenService::setToken($result, 1);
$data['token'] = $userInfo['token'];
} else {
$data = UserLogic::info($this->userId);
}
return $this->success('绑定成功', $data, 1, 1);
}
// #[
// ApiDoc\Title('用户个人信息'),
// ApiDoc\url('/api/user/user/info'),
// ApiDoc\Method('POST'),
// ApiDoc\Param(),
// ApiDoc\NotHeaders(),
// ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"),
// ApiDoc\ResponseSuccess("data", type: "array"),
// ]
public function info()
{
return $this->success('success', UserLogic::info($this->userId));
}
// #[
// ApiDoc\Title('充值金额'),
// ApiDoc\url('/api/user/user/rechange_amount'),
// ApiDoc\Method('Get'),
// ApiDoc\Param(),
// ApiDoc\NotHeaders(),
// ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"),
// ApiDoc\ResponseSuccess("data", type: "array"),
// ]
public function rechange_amount()
{
$res = UserLogic::rechange_level();
return $this->success('ok', $res);
}
// #[
// ApiDoc\Title('小程序充值'),
// ApiDoc\url('/api/user/user/recharge'),
// ApiDoc\Method('POST'),
// ApiDoc\Param(name: "price", type: "string", require: true, desc: "金额"),
// ApiDoc\NotHeaders(),
// ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"),
// ApiDoc\ResponseSuccess("data", type: "array"),
// ]
public function recharge()
{
$params = (new UserValidate())->post()->goCheck('rechargeMoney');
$params['uid'] = $this->userId;
$params['channel_type'] = $this->userInfo['terminal'];
$order = UserLogic::recharge($params);
$redirectUrl = $params['redirect'] ?? '/pages/payment/payment';
$result = PaymentLogic::pay(PayEnum::WECHAT_PAY_MINI, 'recharge', $order, $this->userInfo['terminal'], $redirectUrl);
if (PaymentLogic::hasError()) {
return $this->fail(PaymentLogic::getError(), $params);
}
return $this->success('', $result);
}
// #[
// ApiDoc\Title('会员账户详情'),
// ApiDoc\url('/api/user/user/capital_flow'),
// ApiDoc\Method('POST'),
// ApiDoc\Param(name: "page_no", type: "int", require: true, desc: "默认1页数"),
// ApiDoc\Param(name: "page_size", type: "int", require: false, desc: "条数默认15"),
// ApiDoc\NotHeaders(),
// ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"),
// ApiDoc\ResponseSuccess("data", type: "array"),
// ]
public function capital_flow()
{
$page_no = (int)$this->request->post('page_no', 1);
$page_size = (int)$this->request->post('page_size', 15);
$params['page_no'] = $page_no;
$params['page_size'] = $page_size;
if (empty($page_no) || empty($page_size)) {
$params['page_no'] = 1;
$params['page_size'] = 15;
}
$res = UserLogic::capital_list($this->userId, $params);
$res['page_no'] = $params['page_no'];
$res['page_size'] = $params['page_size'];
return $this->success('ok', $res);
}
// #[
// ApiDoc\Title('会员账户统计'),
// ApiDoc\url('/api/user/user/capital_count'),
// ApiDoc\Method('POST'),
// ApiDoc\Param(),
// ApiDoc\NotHeaders(),
// ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"),
// ApiDoc\ResponseSuccess("data", type: "array"),
// ]
public function capital_count()
{
$res = UserLogic::capital_count($this->userId);
return $this->success('ok', $res);
}
public function send_sms()
{
$res = (new UserLogic())->dealSendSms($this->userId);
if ($res) {
return $this->success('发送成功');
}
return $this->fail('发送失败');
}
//登录
public function login_sms()
{
$params = (new UserValidate())->post()->goCheck('login');
$res = (new UserLogic())->dealLoginSms($params['account']);
if ($res) {
return $this->success('发送成功');
}
return $this->fail('发送失败');
}
//报备
public function reporting_sms()
{
$params = (new UserValidate())->post()->goCheck('login');
$res = (new UserLogic())->dealReportingSms($params['account']);
if ($res) {
return $this->success('发送成功', [], 1, 1);
}
return $this->fail('发送失败');
}
public function set_payPassword()
{
$params = (new UserValidate())->post()->goCheck('setPayPassword');
$remark = $this->userId . '_payPassword';
$code = Cache::get($remark);
if ($code && isset($params['code']) && $code !== $params['code']) {
return $this->fail('验证码错误');
}
if ($params['rePassword'] !== $params['password'])
return $this->fail('两次密码不一致');
$result = UserLogic::dealPayPassword($params, $this->userId);
if (!$result) {
return $this->fail('设置失败');
}
return $this->success('设置成功');
}
//修改
// public function withdrawalPassword()
// {
// $data = $this->request->params(['repassword', 'password', 'sms_code']);
// $sms_code = app()->make(SmsService::class)->checkSmsCode($this->user->phone, $data['sms_code'], 'change_pwd');
// if (!$data['sms_code'] || !$sms_code) {
// return app('json')->fail('验证码不正确');
// }
// if (!$this->user->phone)
// return app('json')->fail('请先绑定手机号');
// if (empty($data['repassword']) || empty($data['password']))
// return app('json')->fail('请输入提现密码');
// if ($data['repassword'] !== $data['password'])
// return app('json')->fail('两次密码不一致');
// $password = $this->repository->encodePassword($data['password']);
// $this->repository->update($this->request->uid(), ['withdrawal_pwd' => $password]);
// return app('json')->success('绑定成功');
//
// }
//采购款明细、余额明细、礼品券明细、返还金明细
public function fundList()
{
(new UserValidate())->get()->goCheck('fund');
$page_no = (int)$this->request->get('page_no', 1);
$page_size = (int)$this->request->get('page_size', 15);
$params = $this->request->get();
$params['page_no'] = $page_no > 0 ? $page_no : 1;
$params['page_size'] = $page_size > 0 ? $page_size : 15;
$res = UserLogic::dealDetails($params, $this->userId);
$integral = User::where('id', $this->userId)->value('integral');
$number = UserSign::where('id', $this->userId)->where('status', 0)->sum('number');
$GetNumber = UserSign::where('id', $this->userId)->where('status', 1)->sum('number');
$res['page_no'] = $params['page_no'];
$res['page_size'] = $params['page_size'];
$res['extend'] = [
'integral' => $integral,
'number' => $number,
'get_number' => $GetNumber
];
return $this->success('ok', $res);
}
/**
* 礼品券/冻结券
*/
public function userSing()
{
(new UserValidate())->get()->goCheck('fund');
$type = (int)$this->request->get('type', 1);
if ($type == 1) {
return $this->dataLists(new UserSignLists());
} else {
return $this->dataLists(new UserSignLogLists());
}
}
/**
* 用户信息
*/
public function other_user_info()
{
$mobile = $this->request->get('mobile');
if ($mobile) {
$user = User::where('mobile', $mobile)->field('id,avatar,real_name,nickname,mobile,user_ship,purchase_funds,label_id')->find();
if ($user) {
$address = UserAddress::where('uid', $user['id'])->where('is_default', 1)->find();
if ($address) {
$city_name = Db::name('geo_city')->where('city_code', $address['city'])->value('city_name');
$area_name = Db::name('geo_area')->where('area_code', $address['area'])->value('area_name');
$street_name = Db::name('geo_street')->where('street_code', $address['street'])->value('street_name');
$village_name = Db::name('geo_village')->where('village_code', $address['village'])->value('village_name');
$brigade_name = Db::name('geo_brigade')->where('id', $address['brigade'])->value('brigade_name');
$address['address_like'] = $city_name . $area_name . $street_name . $village_name . $brigade_name;
}
$user['ship_name'] = $user['user_ship'] > 0 ? UserShip::where('id', $user['user_ship'])->value('title') : '';
$user['address_info'] = $address;
return $this->success('ok', $user->toArray());
} else {
return $this->fail('用户不存在', [], 0, 0);
}
}
return $this->success('ok', []);
}
/**
* 提现信息
*/
public function cash_info()
{
$info = User::where('id', $this->userId)->field('id,now_money')->find();
$info['notes'] = '提现金额需大于1元提现到微信零钱并财务审核审核通过后提现金额将自动到账';
return $this->data($info);
}
/**
* 提交提现申请
*/
public function cash_application()
{
$money = $this->request->post('money');
$find = User::where('id', $this->userId)->find();
if ($find && $money > $find['now_money']) {
return $this->fail('提现金额不能大于余额');
}
if ($money < 1) {
return $this->fail('提现金额不能小于1元');
}
$data['uid'] = $this->userId;
$data['create_time'] = time();
$data['status'] = 0;
$data['extract_price'] = $money;
$data['balance'] = bcsub($find['now_money'], $money, 2);
$data['before_balance'] = $find['now_money'];
$data['extract_type'] = 'wx';
Db::startTrans();
try {
$res = StoreExtract::create($data);
$capitalFlowDao = new CapitalFlowLogic($find);
$capitalFlowDao->userExpense('user_withdrawal', 'withdrawal', $res['id'], $money);
User::where('id', $this->userId)->dec('now_money', $money)->update();
return $this->success('申请成功,等待审核');
} catch (\Exception $e) {
Db::rollback();
return $this->success('申请失败');
}
}
/**
* 提现申请记录
*/
public function cash_record()
{
$list = StoreExtract::where('uid', $this->userId)->order('id desc')
->field('id,extract_price price,status,pay_status,create_time')
->select()->each(function ($item) {
if ($item->status == -1) {
$item->status_name = '未通过';
} elseif ($item->status == 0) {
$item->status_name = '审核中';
} elseif ($item->status == 1) {
$item->status_name = '已通过';
}
$item->title = '申请提现' . $item->price . '元';
$item->pay_status_name = $item->status == 1 ? '已打款' : '未打款';
})->toArray();
return $this->data($list);
}
}