租房掌柜微信小程序Api以及小程序前端模板
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

187 lines
7.6 KiB

<?php
/*----------------------------------------------------------------------
* 项目名称: CloudAdmin
* +----------------------------------------------------------------------
* 版权所有: 2014~2020 安徽云掌开发团队
* +----------------------------------------------------------------------
* 官方网站: [ http://www.yaoyz.com、http://www.ahyunzhang.com ]
* +----------------------------------------------------------------------
* Date: 2018/11/15 9:47
* +----------------------------------------------------------------------
* Des: 短信插件
+----------------------------------------------------------------------*/
namespace app\index\controller;
use think\Controller;
use think\Db;
class Pay extends Controller
{
/**
* 房源表
* @var string
*/
private $table_house = 'CloudHouse';
/**
* 房间表
* @var string
*/
private $table_room = 'CloudHouseRoom';
/**
* 合同表
* @var string
*/
private $table_contract = 'CloudHouseContract';
/**
* 租户表
* @var string
*/
private $table_tenant = 'CloudHouseTenant';
/**
* 租户表
* @var string
*/
private $table_member = 'CloudMember';
/**
* 租户表
* @var string
*/
private $table_order = 'CloudOrderRoom';
/**
* 支付页面
* @param int $roomid 房间id
*/
public function index()
{
$roomid = $this->request->param('roomid', 0);
$phone = $this->request->param('phone', 0);
if (!$roomid || !is_numeric($roomid)) {
return '房间信息不存在';
}
if (!$phone || !is_numeric($phone)) {
return '手机号不正确';
}
//查找房间及房源数据
$_data = Db::name($this->table_room)->alias('r')->join('cloud_house h', 'r.house_id = h.id')->where('r.is_del', 0)->field('r.*,h.name AS house_name,h.door_number,h.water_money,h.gas_money')->find($roomid);
if (empty($_data)) {
return '房间信息不存在';
}
$_data['rent_type_name'] = config('rent_type')[$_data['rent_type']];
//查找当前房间有多少人
$tenant_num = Db::name($this->table_tenant)->where('room_id', $roomid)->where('is_del', 0)->count();
//查找当前租户信息
$_tenant = Db::name($this->table_tenant)->where('phone', $phone)->where('is_del', 0)->find();
if (empty($_tenant)) {
return '租户信息不存在';
}
//查找当前二房东收款账号
$_holder = Db::name($this->table_member)->where('id', $_data['user_id'])->find();
if (empty($_holder)) {
return '二房东信息不存在';
}
if (empty($_holder['qrcode'])) {
//return '收款信息不存在!!!';
}
$qrcode = explode(',', $_holder['qrcode']);
$_holder['pay1'] = !empty($qrcode[0]) ? $qrcode[0] : '';
$_holder['pay2'] = !empty($qrcode[1]) ? $qrcode[1] : '';
//查询支付记录表,计算当前押一付三 ,如果第一次支付 需要x4 如果是续租需要x3
$order_num = Db::name($this->table_order)->where('room_id', $_data['id'])->where('is_del', 0)->where('status', 1)->count();
$rent_type = $_data['rent_type'];
$_data['broadband_fee'] = empty($_data['broadband_fee']) ? 0 : $_data['broadband_fee'];
$_data['property_fee'] = empty($_data['property_fee']) ? 0 : $_data['property_fee'];
$_data['key_deposit'] = empty($_data['key_deposit']) ? 0 : $_data['key_deposit'];
$_data['total_rent'] = ($_data['rent'] + $_data['broadband_fee'] + $_data['property_fee'] + ($_data['water_money'] + $_data['gas_money']) * $tenant_num) * $rent_type;
//计算公式: (月租+物业费+宽带费+(水费+燃气费)x户数)x月数 + 钥匙押金x户数
//计算公式[改版本]: (月租+物业费+宽带费+(水费+燃气费)x户数)x月数 + 钥匙押金x户数 $_data['key_deposit'] * $tenant_num
if (empty($order_num)) {
//$_data['total_rent'] += $_data['rent']; //如果之前没有订单加一个月的租金
}
//合同开始时间
$_data['contract_starttime_str'] = date('Y年m月d日');
$_data['contract_endtime_str'] = date('Y年m月d日', strtotime('+ ' . $_data['rent_type'] . ' month'));
$_data['contract_starttime'] = time();
$_data['contract_endtime'] = strtotime('+ ' . $_data['rent_type'] . ' month');
//合同编号
$_data['contract_number'] = 'YYT-' . date('YmdHis');
$this->assign('data', $_data);
$this->assign('holder', $_holder);
$this->assign('tenant_num', $tenant_num);
$this->assign('deposit', $order_num > 0 ? 0 : 1); //押金
$this->assign('tenant', $_tenant);
$this->assign('rent_type', $rent_type);
return $this->fetch();
}
/**
* 订单提交
*/
public function add()
{
$_data = $this->request->post();
//通过房间查找用户user_id,确认是否存在
$_room = Db::name($this->table_room)->where('id', $_data['room_id'])->where('is_del', 0)->find();
if (empty($_room)) {
return $this->error('房间号不存在');
}
unset($_data['status']);
//先清空原有订单数据
$room_order_db = Db::name($this->table_order);
$room_order_db->where('room_id', $_room['id']);
$room_order_db->where('name', $_data['name']);
$room_order_db->update(['is_del' => 1]);
$_data['create_time'] = $_data['update_time'] = time();
$_data['user_id'] = $_room['user_id'];
$start_time = $_room['start_time'];
$end_time = $_room['end_time'];
//计算指定天数后的时间戳
if ($start_time >= $end_time) {
return $this->error('房间开始时间必需小于结束时间');
}
$_arr = [];
while ($start_time < $end_time) {
$_data['room_id'] = $_room['id'];
$_data['start_time'] = $start_time;
$_data['end_time'] = $start_time = strtotime('+' . $_room['rent_type'] . ' month', $start_time);
$_arr[] = $_data;
}
if (empty($_arr)) {
return $this->error('未知错误!!!');
}
//判断是否存在订单,如果存在代表包含押一的金额,否则不包含
$order_num = Db::name($this->table_order)->where('room_id', $_room['id'])->where('is_del', 0)->where('status', 1)->count();
if (empty($order_num)) {
(int)$_arr[0]['price'] += (int)$_data['rent_price']; //加上一个月租金 即押一
(int)$_arr[0]['price'] += (int)$_data['key_deposit'] * (int)$_data['tenant_num']; //加上一个月钥匙押金 即押一
$_arr[0]['detail'] .= '<br /> 房租押金:' . $_data['rent_price'] . '元'; //加上押金、钥匙押金
$_arr[0]['detail'] .= '<br /> 钥匙押金:' . (int)$_data['key_deposit'] * (int)$_data['tenant_num'] . '元'; //加上押金、钥匙押金
}
//删除最后一个元素,置换为end_time(防止开始时间与结束时间不一致)
$last_arr = array_pop($_arr);
$last_arr['end_time'] = $end_time;
$_arr[] = $last_arr;
//插入新订单数据
$affected = Db::name($this->table_order)->strict(false)->insertAll($_arr);
if ($affected) {
//在线合同
//Db::name($this->table_contract)->strict(false)->insert($_data);
return $this->success('订单提交成功');
}
return $this->error('订单提交失败');
}
}