$shop_id]) ->field("id,name,logo,is_run,wallet,score,nickname,mobile,intro, run_start_time,run_end_time,weekdays,province_id,city_id,district_id,address,refund_address,open_invoice,spec_invoice") ->find()->toArray(); $shop['run_start_time'] = date('H:i',$shop['run_start_time']); $shop['run_end_time'] = date('H:i',$shop['run_end_time']); $shop['province_name'] = ''; $shop['city_name'] = ''; $shop['district_name'] = ''; $shop['province_id'] && $shop['province_name'] = AreaServer::getAddress($shop['province_id']); $shop['city_id'] && $shop['city_name'] = AreaServer::getAddress($shop['city_id']); $shop['district_id'] && $shop['district_name'] = AreaServer::getAddress($shop['district_id']); $shop['refund_address']['province_name'] = !empty($shop['refund_address']['province_id']) ? AreaServer::getAddress($shop['refund_address']['province_id']) : ''; $shop['refund_address']['city_name'] = !empty($shop['refund_address']['city_id']) ? AreaServer::getAddress($shop['refund_address']['city_id']) : ''; $shop['refund_address']['district_name'] = !empty($shop['refund_address']['district_id']) ? AreaServer::getAddress($shop['refund_address']['district_id']) : ''; return $shop; } /** * @notes 获取提现信息 * @param int $shop_id * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author cjhao * @date 2021/11/10 16:30 */ public function getWithdrawInfo(int $shop_id){ $wallet = Shop::where(['id'=>$shop_id]) ->value("wallet"); $min_withdrawal_money = ConfigServer::get('shop_withdrawal', 'min_withdrawal_money', 0); $max_withdrawal_money = ConfigServer::get('shop_withdrawal', 'max_withdrawal_money', 0); $withdrawal_service_charge = ConfigServer::get('shop_withdrawal', 'withdrawal_service_charge', 0); $bank_list = ShopBank::where(['shop_id'=>$shop_id,'del'=>0]) ->field('id,name,branch,nickname,account') ->select()->toArray(); return [ 'wallet' => $wallet, 'min_withdrawal_money' => $min_withdrawal_money, 'max_withdrawal_money' => $max_withdrawal_money, 'withdrawal_service_charge' => $withdrawal_service_charge, 'bank_list' => $bank_list, ]; } /** * @notes 提现金额 * @param array $post * @return bool|string * @author cjhao * @date 2021/11/10 16:56 */ public function withdraw(array $post){ Db::startTrans(); try { $shop_id = $post['shop_id']; // 1、获取提现条件 $withdrawal_service_charge = ConfigServer::get('shop_withdrawal', 'withdrawal_service_charge', 0); // 2、获取商家信息 $shop = (new Shop())->findOrEmpty($shop_id)->toArray(); // 4、获取商家提现手续费 $poundage_amount = 0; if ($withdrawal_service_charge > 0) { $proportion = $withdrawal_service_charge / 100; $poundage_amount = $post['money'] * $proportion; $poundage_amount = $poundage_amount <= 0 ? 0 : $poundage_amount; } // 5、创建申请记录 $withdrawal = ShopWithdrawal::create([ 'sn' => createSn('shop_withdrawal', 'sn'), 'bank_id' => $post['bank_id'], 'shop_id' => $shop_id, 'apply_amount' => floatval($post['money']), 'left_amount' => $post['money'] - $poundage_amount, 'poundage_amount' => $poundage_amount, 'poundage_ratio' => $withdrawal_service_charge, 'status' => WithdrawalEnum::APPLY_STATUS ]); // 6、扣除商家可提现金额 Shop::update([ 'wallet' => ['dec', floatval($post['money'])], 'update_time' => time() ], ['id' => $shop_id]); $left_amount = Shop::where(['id' => $shop_id])->value('wallet'); // 7、增加提现流水记录(待提现) $logType = ShopAccountLog::withdrawal_stay_money; ShopAccountLog::decData($shop_id, $logType, $post['money'], $left_amount, [ 'source_id' => $withdrawal['id'], 'source_sn' => $withdrawal['sn'], 'remark' => '商家提现' ]); $platform_contacts = ConfigServer::get('website_platform', 'platform_mobile'); if (!empty($platform_contacts)) { event('Notice', [ 'scene' => NoticeEnum::SHOP_WITHDRAWAL_NOTICE_PLATFORM, 'mobile' => $platform_contacts, 'params' => [ 'shop_withdrawal_sn' => $withdrawal['sn'], 'shop_name' => $shop['name'], ] ]); } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); return $e->getMessage(); } } /** * @notes 提现记录 * @param $shop_id * @param $page_no * @param $page_size * @return array * @throws \think\db\exception\DbException * @author cjhao * @date 2021/11/10 17:10 */ public function withdrawLog(int $shop_id,int $page_no,int $page_size){ $lists = ShopWithdrawal::alias('SW') ->join('shop_account_log SCL','SW.sn = SCL.source_sn') ->where(['SW.shop_id'=>$shop_id,'source_type'=>[ShopAccountLog::withdrawal_stay_money,ShopAccountLog::withdrawal_dec_money,ShopAccountLog::withdrawal_fail_money]]) ->field("SCL.id,SCL.change_amount,SCL.left_amount,status,SCL.create_time") ->paginate([ 'page' => $page_no, 'list_rows' => $page_size, 'var_page' => 'page' ])->toArray(); return ['count' => $lists['total'], 'lists' => $lists['data']]; } /** * @notes 添加银行账户 * @param $post * @return bool * @author cjhao * @date 2021/11/10 18:30 */ public function addBank(array $post){ $shop_bank = new ShopBank(); $shop_bank->shop_id = $post['shop_id']; $shop_bank->name = $post['name']; $shop_bank->branch = $post['branch']; $shop_bank->nickname = $post['nickname']; $shop_bank->account = $post['account']; $shop_bank->save(); return true; } /** * @notes 获取银行卡 * @param int $id * @param int $shop_id * @return array * @author cjhao * @date 2021/11/11 15:46 */ public function getBank(int $id,int $shop_id){ $shop_bank = ShopBank::where(['id'=>$id,'shop_id'=>$shop_id]) ->field('id,name,branch,nickname,account') ->findOrEmpty()->toArray(); return $shop_bank; } /** * @notes 编辑银行账户 * @param $post * @return bool * @author cjhao * @date 2021/11/10 18:38 */ public function editBank(array $post){ ShopBank::update([ 'name' => $post['name'], 'branch' => $post['branch'], 'nickname' => $post['nickname'], 'account' => $post['account'], 'del' => 0 ], ['id'=>$post['id']]); return true; } /** * @notes 删除银行卡 * @param $id * @param $shop_id * @return bool * @author cjhao * @date 2021/11/10 18:42 */ public function delBank(int $id,int $shop_id){ ShopBank::where(['id'=>$id,'shop_id'=>$shop_id])->delete(); return true; } /** * @notes 更新商家信息 * @param array $post * @param int $shop_id * @return Shop * @author cjhao * @date 2021/11/11 11:34 */ public function shopSet(array $post,int $shop_id){ if(isset($post['refund_address'])){ $post['refund_address'] = json_encode($post['refund_address'],JSON_UNESCAPED_UNICODE); } return Shop::update($post,['id'=>$shop_id]); } /** * @notes 修改密码 * @param $password * @param $admin_id * @param $shop_id * @return bool * @author cjhao * @date 2021/11/11 16:03 */ public function updatePassword(array $post,int $shop_id) { try { $admin = ShopAdmin::where(['id' => $post['admin_id'], 'shop_id' => $shop_id])->find(); $admin->password = generatePassword($post['password'], $admin['salt']); $admin->save(); return true; } catch (\Exception $e) { return $e->getMessage(); } } }