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
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('订单提交失败');
|
|
}
|
|
|
|
}
|