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'] .= '
房租押金:' . $_data['rent_price'] . '元'; //加上押金、钥匙押金 $_arr[0]['detail'] .= '
钥匙押金:' . (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('订单提交失败'); } }