添加:文创豆转赠和提现功能
This commit is contained in:
parent
70b5c72ff8
commit
feb50ab76d
|
|
@ -236,6 +236,8 @@ class ConstService
|
|||
|
||||
const BALANCE_THAW = 133;//解冻余额
|
||||
|
||||
const CULTURAL_SPACE_LEGUMES = 140;//文创豆提现到余额
|
||||
|
||||
protected static $title = '余额';
|
||||
|
||||
|
||||
|
|
@ -367,6 +369,7 @@ class ConstService
|
|||
self::PERFORMANCE => '业绩奖励',
|
||||
self::BALANCE_FREEZE => '后台冻结',
|
||||
self::BALANCE_THAW => '后台解冻',
|
||||
self::CULTURAL_SPACE_LEGUMES => '文创豆提现',
|
||||
];
|
||||
$plugin_data = app('ShopAsset')->getData('balance');
|
||||
foreach ($plugin_data as $key => $value) {
|
||||
|
|
|
|||
|
|
@ -3,10 +3,16 @@
|
|||
namespace Yunshop\CulturalSpace\Api;
|
||||
|
||||
use app\common\components\ApiController;
|
||||
use app\common\exceptions\ShopException;
|
||||
use app\common\facades\Setting;
|
||||
use app\common\models\Income;
|
||||
use app\common\models\Member;
|
||||
use app\common\models\member\MemberChildren;
|
||||
use app\common\models\Order;
|
||||
use app\common\services\credit\ConstService;
|
||||
use app\common\services\finance\BalanceChange;
|
||||
use app\common\services\password\PasswordService;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Yunshop\CulturalSpace\models\ContributionBonusLog;
|
||||
use Yunshop\CulturalSpace\models\ContributionLog;
|
||||
use Yunshop\CulturalSpace\models\CulturalOrderFundLog;
|
||||
|
|
@ -40,7 +46,7 @@ class IndexController extends ApiController{
|
|||
return $this->successJson('success',$data);
|
||||
}
|
||||
/**
|
||||
* Common: 统计明细及变更记录获取
|
||||
* Common: 统计明细变更记录获取
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/22 16:05
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
|
|
@ -87,7 +93,7 @@ class IndexController extends ApiController{
|
|||
// 文创豆明细
|
||||
case 'legumes':
|
||||
$result = CulturalOrderFundLog::uniacid()
|
||||
->select(['good_name','voucher_number','created_at'])
|
||||
->select(['good_name','voucher_number','created_at','change_type'])
|
||||
->where('member_id',$uid)
|
||||
->orderBy('created_at','DESC')
|
||||
->paginate(20)
|
||||
|
|
@ -164,5 +170,169 @@ class IndexController extends ApiController{
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Common: 获取用户当前持有的文创豆
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/22 17:26
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function legumesHold(){
|
||||
$uid = \YunShop::app()->getMemberId();
|
||||
$voucher_number = sprintf("%.6f",CulturalSpace::uniacid()->where('uid',$uid)->value('voucher_number'));
|
||||
$withdrawalCommissionRate = 20;//提现手续费比例
|
||||
|
||||
|
||||
return $this->successJson('success',[
|
||||
'voucher_number'=>$voucher_number,
|
||||
'commission_rate'=>$withdrawalCommissionRate
|
||||
]);
|
||||
}
|
||||
/**
|
||||
* Common: 转赠 - 获取转赠信息
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/22 17:38
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function transferInfo(){
|
||||
// 基本参数
|
||||
$uid = \YunShop::app()->getMemberId();
|
||||
$set = Setting::get('plugin.cultural_space_set');
|
||||
// 信息获取
|
||||
if ($memberInfo = Member::where('uid', $uid)->first()) {
|
||||
$data = [
|
||||
'voucher_number' => sprintf("%.6f",CulturalSpace::uniacid()->where('uid',$uid)->value('voucher_number')),
|
||||
'has_password' => $memberInfo->yzMember->hasPayPassword(),// 是否存在密码
|
||||
'need_password' => (int)$set['is_password'],// 是否需要密码
|
||||
'is_open_commission' => 0,//(int)$set['is_open_commission'],// 是否需要手续费
|
||||
'commission' => 0//(float)$set['commission'],// 手续费比例
|
||||
];
|
||||
|
||||
return $this->successJson('获取数据成功', $data);
|
||||
}
|
||||
|
||||
return $this->errorJson('未获取到会员数据');
|
||||
}
|
||||
/**
|
||||
* Common: 转赠 - 转赠处理
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/22 18:09
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function transfer(){
|
||||
// 参数获取
|
||||
$uid = \YunShop::app()->getMemberId();
|
||||
$transferId = (int)request()->input('transfer_id');
|
||||
$transferMoney = abs((float)request()->input('transfer_money'));
|
||||
$password = request()->input('password');
|
||||
if($transferId <= 0 || $transferMoney <= 0) return $this->errorJson('无受让人或者转赠数量为0!');
|
||||
// 判断:受让人是否存在账号
|
||||
$isHas = (int)CulturalSpace::uniacid()->where('uid',$transferId)->value('id');
|
||||
if($isHas <= 0) return $this->errorJson('转增失败,受让人不存在账号!');
|
||||
// 开始处理
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
$set = Setting::get('plugin.cultural_space_set');
|
||||
// 判断:受让人不能是本人
|
||||
if($uid == $transferId) throw new \Exception("身份非法,受让人不能是自己!");
|
||||
// 判断:密码是否正确
|
||||
if((int)$set['is_password'] == 1) (new PasswordService())->checkPayPassword($uid, $password);
|
||||
// 计算手续费和减少金额
|
||||
$reduceMoney = $transferMoney;// 减少数量 默认为转赠数量
|
||||
$commission = (int)0;// 默认手续费
|
||||
// if((int)$set['is_open_commission'] == 1 && (float)$set['commission'] > 0){
|
||||
// $commission = (float)sprintf("%.2f", $transferMoney * (float)$set['commission'] / 100);// 手续费
|
||||
// $reduceMoney = (float)sprintf("%.2f",$transferMoney + $commission);// 添加手续费后的减少数量
|
||||
// }
|
||||
// 获取用户信息
|
||||
$currentMemberName = Member::uniacid()->where('uid',$uid)->value('nickname');
|
||||
$transferMemberName = Member::uniacid()->where('uid',$transferId)->value('nickname');
|
||||
// 减少当前用户持有文创豆
|
||||
(new CulturalOrderFundLog())->transferHandle((int)$uid,(float)$reduceMoney,1,"赠送给【{$transferMemberName}】");
|
||||
// 增加受让人持有文创豆
|
||||
(new CulturalOrderFundLog())->transferHandle((int)$transferId,(float)$transferMoney,0,"来自【{$currentMemberName}】的赠送");
|
||||
|
||||
DB::commit();
|
||||
|
||||
return $this->successJson('操作成功');
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
return $this->errorJson($e->getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Common: 提现处理
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/23 10:04
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function withdrawal(){
|
||||
// 参数获取
|
||||
$uid = \YunShop::app()->getMemberId();
|
||||
$withdrawalNumber = abs((float)request()->input('withdrawal_number'));
|
||||
if($withdrawalNumber <= 0) return $this->errorJson('提现数量不能为0!');
|
||||
// 判断:是否超出持有数量
|
||||
$voucher_number = sprintf("%.6f",CulturalSpace::uniacid()->where('uid',$uid)->value('voucher_number'));
|
||||
if($withdrawalNumber > $voucher_number) return $this->errorJson('提现数量不能超出持有数量!');
|
||||
// 开始处理
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
// 计算手续费和减少金额
|
||||
$realityMoney = $withdrawalNumber;// 实际到账余额数量 默认为提现数量
|
||||
$commission = (int)0;// 默认手续费
|
||||
$commissionRate = (int)20;// 手续费比例
|
||||
if($commissionRate > 0){
|
||||
$commission = (float)sprintf("%.2f", $withdrawalNumber * (float)$commissionRate / 100);// 手续费
|
||||
$realityMoney = (float)sprintf("%.2f",$realityMoney - $commission);// 实际到账余额数量
|
||||
}
|
||||
// 减少当前用户持有文创豆
|
||||
$recordId = (new CulturalOrderFundLog())->transferHandle((int)$uid,(float)$withdrawalNumber,1,"提现到余额,手续费{$commission}",2);
|
||||
// 增加用户余额
|
||||
$data = [
|
||||
'member_id' => $uid,
|
||||
'remark' => "文创豆提现{$withdrawalNumber},手续费{$commission},实际到账{$realityMoney}",
|
||||
'source' => ConstService::CULTURAL_SPACE_LEGUMES,
|
||||
'relation' => '',
|
||||
'operator' => ConstService::OPERATOR_MEMBER,
|
||||
'operator_id' => $recordId,
|
||||
'change_value' => $realityMoney
|
||||
];
|
||||
$result = (new BalanceChange())->income($data);
|
||||
if ($result !== true) throw new ShopException("提现失败:{$result}");
|
||||
|
||||
|
||||
DB::commit();
|
||||
|
||||
return $this->successJson('操作成功');
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
return $this->errorJson($e->getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Common: 文创豆变更记录
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/23 10:06
|
||||
*/
|
||||
public function legumesChangeRecord(){
|
||||
// 参数获取
|
||||
$uid = \YunShop::app()->getMemberId();
|
||||
$changeSource = request()->input('change_source');
|
||||
// 记录获取
|
||||
$result = CulturalOrderFundLog::uniacid()
|
||||
->select(['good_name','voucher_number','created_at','change_type'])
|
||||
->where('member_id',$uid)
|
||||
->where('change_source',$changeSource == 'transfer' ? 1 : 2)
|
||||
->orderBy('created_at','DESC')
|
||||
->paginate(20)
|
||||
->toArray();
|
||||
|
||||
|
||||
return $this->successJson('success',[
|
||||
'current_page' => (int)$result['current_page'],
|
||||
'data' => (array)$result['data'],
|
||||
'last_page' => (int)$result['last_page'],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -39,6 +39,48 @@ class CulturalOrderFundLog extends BaseModel
|
|||
$data['updated_at'] = time();
|
||||
return self::insert($data);
|
||||
}
|
||||
/**
|
||||
* Common: 转账变更记录 || 提现变更记录
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/22 18:05
|
||||
* @param int $uid
|
||||
* @param float $changeNum
|
||||
* @param int $changeType
|
||||
* @param string $remark
|
||||
* @param int $changeSource
|
||||
* @return mixed
|
||||
*/
|
||||
public function transferHandle(int $uid,float $changeNum,int $changeType,string $remark,int $changeSource = 1){
|
||||
// 获取当前用户持有数量
|
||||
$changeFront = (float)CulturalSpace::uniacid()->where('uid',$uid)->value('voucher_number');
|
||||
// 变更后的数量
|
||||
$changeAfter = $changeType == 1 ? $changeFront - $changeNum : $changeFront + $changeNum;
|
||||
// 变更记录
|
||||
$data = [
|
||||
'uniacid' => \YunShop::app()->uniacid,
|
||||
'member_id' => $uid,// 用户id
|
||||
'order_id' => 0,// 订单id
|
||||
'goods_id' => 0,// 商品id
|
||||
'good_name' => $remark,
|
||||
'voucher_number' => $changeNum,
|
||||
'created_at' => time(),// 变更时间
|
||||
'updated_at' => time(),
|
||||
'change_type' => $changeType,
|
||||
'change_source' => $changeSource,
|
||||
];
|
||||
$id = $this->insertGetId($data);
|
||||
// 修改用户持有
|
||||
CulturalSpace::uniacid()->where('uid',$uid)->update(['voucher_number' => $changeAfter]);
|
||||
|
||||
return $id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Common: 一对一关联 用户信息
|
||||
|
|
|
|||
Loading…
Reference in New Issue