diff --git a/app/common/services/credit/ConstService.php b/app/common/services/credit/ConstService.php index cff487e9..4c56e17d 100644 --- a/app/common/services/credit/ConstService.php +++ b/app/common/services/credit/ConstService.php @@ -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) { diff --git a/plugins/cultural-space/src/api/IndexController.php b/plugins/cultural-space/src/api/IndexController.php index cefc7b4f..270a6c4e 100644 --- a/plugins/cultural-space/src/api/IndexController.php +++ b/plugins/cultural-space/src/api/IndexController.php @@ -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'], + ]); + } + } \ No newline at end of file diff --git a/plugins/cultural-space/src/models/CulturalOrderFundLog.php b/plugins/cultural-space/src/models/CulturalOrderFundLog.php index 7db4bb34..96b99122 100644 --- a/plugins/cultural-space/src/models/CulturalOrderFundLog.php +++ b/plugins/cultural-space/src/models/CulturalOrderFundLog.php @@ -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: 一对一关联 用户信息