租房掌柜微信小程序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.
 
 
 
 
 
 

269 lines
9.8 KiB

<?php
// +----------------------------------------------------------------------
// | ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2019 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
// +----------------------------------------------------------------------
// | 官方网站: http://demo.thinkadmin.top
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | gitee 代码仓库:https://gitee.com/zoujingli/ThinkAdmin
// | github 代码仓库:https://github.com/zoujingli/ThinkAdmin
// +----------------------------------------------------------------------
namespace app\index\controller;
use think\Db;
/**
* 保洁
* Class Index
* @package app\index\controller
*/
class Clean extends Base
{
public $table = 'CloudClean';
public function __construct()
{
parent::__construct();
parent::auth();
}
/**
* 获取列表
*/
public function index()
{
$data = Db::name($this->table)->select();
return send_http_status(200, $data);
}
/**
* 更改打扫时间
*/
public function change_date()
{
$param = $this->request->param();
$res = Db::name('CloudCleanState')
->where('id', $param['id'])
->update([
'create_time' => strtotime($param['date']),
]);
return send_http_status(200, ['date' => formart_time(strtotime($param['date']))]);
}
/**
* 我要打扫的房间
*/
public function my_clean()
{
$param = $this->request->param();
$is_complete = $this->request->param('is_complete', 0);
$type = $is_complete == 0 ? '=' : '>';
$res = Db::name('CloudCleanState')
->alias('s')
->leftJoin('cloud_clean_order o', 'o.order_no=s.order_no')
->leftJoin('cloud_house h', 'h.id=o.house_id')
->leftJoin('cloud_member m', 'o.openid = m.openid')
->page($param['page'], 10)
->where('o.service_openid', $param['openid'])
->where('s.complete_time', $type, $is_complete)
->field('m.phone,s.id,s.picture,s.create_time,s.complete_time,s.step,s.order_no, h.name,h.photo,h.latitude,h.longitude,h.door_number,o.content,o.second,o.service_openid,m.nickname,m.headimg')
->order('s.create_time', 'ASC')
->select();
foreach ($res as &$v) {
$v['picture'] = json_decode($v['picture'], true);
$v['create_time'] = formart_time($v['create_time']);
$v['complete_time'] = !empty($v['complete_time']) ? date('Y-m-d', $v['complete_time']) : 0;
$v['photo'] = $v['photo'] ? explode(',', $v['photo'])[0] : '';
}
return send_http_status(200, $res);
}
/**
* 我发布的保洁
* @return \type
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function my()
{
$param = $this->request->param();
//$user = Db::name('CloudMember')->where('openid',$param['openid'])->find();
$page = $this->request->param('page', 1);
$query = Db::name('CloudCleanOrder')
->alias('o')
->leftJoin('cloud_house h', 'o.house_id = h.id')
->leftJoin('cloud_member m', 'h.user_id = m.id') // 查询房源手机号
->where('o.state', 1)
->field('m.phone,h.name,h.latitude,h.longitude,h.photo,h.door_number,o.create_time,o.content,o.second,o.complete,o.order_no,o.service_openid')
->order('o.create_time', 'desc')
->limit(($page - 1) * 15, 15);
/*if ($user['is_clean']){
$query->where('o.openid|o.service_openid','=', $param['openid'])->whereNotNull('service_openid');
}else{
$query->where('o.openid',$param['openid']);
}*/
$query->where('o.openid', $param['openid']);
$res = $query->select();
foreach ($res as &$v) {
$v['create_time'] = !empty($v['create_time']) ? date('Y-m-d H:i:s', $v['create_time']) : 0;
$v['photo'] = $v['photo'] ? explode(',', $v['photo'])[0] : '';
}
return send_http_status(200, $res);
}
/**
* 订单详情
*/
public function info()
{
$order_no = $this->request->param('order_no');
$res = Db::name('CloudCleanState')
->alias('s')
->leftJoin('cloud_clean_order o', 'o.order_no=s.order_no')
->leftJoin('cloud_house h', 'h.id=o.house_id')
->leftJoin('cloud_member m', 'o.openid = m.openid')
->where('s.order_no', $order_no)
->field('s.id,s.picture,s.commont,s.commont_time,s.create_time,s.complete_time,s.step,s.order_no, h.name,o.content,o.second,o.service_openid,m.nickname,m.headimg')
->select();
foreach ($res as &$v) {
$v['picture'] = json_decode($v['picture'], true);
$v['create_time'] = formart_time($v['create_time']);
$v['commont'] = [
'nickname' => $v['nickname'],
'headimg' => $v['headimg'],
'commont' => $v['commont'],
'commont_time' => date('Y-m-d H:i:s', $v['commont_time'])
];
$v['complete_time'] = !empty($v['complete_time']) ? date('Y-m-d', $v['complete_time']) : '未打扫';
unset($v['nickname'], $v['headimg'], $v['commont_time']);
}
return send_http_status(200, $res);
}
/**
* 评价
*/
public function commont()
{
$param = $this->request->param();
$res = Db::name('CloudCleanState')->where('id', $param['id'])
->update([
'commont' => $param['commont'],
'commont_time' => time(),
]);
if ($res) {
$data = Db::name('CloudCleanState')
->alias('a')
->leftJoin('cloud_clean_order o', 'o.order_no = a.order_no')
->leftJoin('cloud_member m', 'o.openid = m.openid')
->field('a.commont,a.commont_time,m.nickname,m.headimg')
->where('a.id', $param['id'])
->find();
$data['index'] = $param['index'];
$data['commont_time'] = date('Y-m-d H:i:s', $data['commont_time']);
return send_http_status(200, $data);
} else {
return send_http_status(201, '', '操作失败!');
}
}
/**
* 保洁完成上传图片
* @return \type
*/
public function complete()
{
$param = $this->request->param();
Db::startTrans();
try {
Db::name('CloudCleanState')->where('id', $param['id'])->update([
'service_openid' => $param['openid'],
'picture' => json_encode(explode(',', $param['images'])),
'complete_time' => strtotime($param['complete_time']),
]);
Db::name('CloudCleanOrder')
->where('order_no', $param['order_no'])
->update(['complete' => Db::raw('complete+1')]);
Db::commit();
return send_http_status(200);
} catch (\Exception $e) {
Db::rollback();
return send_http_status(201, '', $e->getMessage());
}
}
public function create()
{
$param = $this->request->post();
$clean = Db::name($this->table)->find($param['cleanid']);
if (!$clean) return $this->error('选项不存在');
$order_no = order_no();
$order = [
'order_no' => $order_no,
'openid' => $param['openid'],
'content' => $clean['title'] . ' - ' . $clean['summary'],
'second' => $clean['second'],
'price' => $clean['price'],
'house_id' => $param['house_id'],
'create_time' => time(),
'update_time' => time(),
];
//生成副表订单
Db::startTrans();
try {
Db::name('CloudCleanOrder')->insert($order);
$row = [];
$day_num = 10;
if ($clean['second'] == 2) {
$day_num = 15;
}
for ($i = 0; $i < $clean['second']; $i++) {
$create_time = strtotime((($i * $day_num) + 1) . ' day');
$row[] = [
'create_time' => $create_time,
'update_time' => $create_time,
'order_no' => $order_no,
'step' => $i + 1
];
}
Db::name('CloudCleanState')->insertAll($row);
Db::commit();
} catch (\Throwable $e) {
Db::rollback();
return send_http_status(202, '', $e->getMessage());
}
$wechat = new \WeChat\Pay(config('wechat.miniapp'));
$options = [
'body' => '保洁' . $clean['title'] . '(' . $clean['second'] . '次)',
'out_trade_no' => $order_no,
'total_fee' => $clean['price'] * 100,
'openid' => $param['openid'],
'trade_type' => 'JSAPI',
'notify_url' => $this->request->domain() . '/index/notify/clean',
'spbill_create_ip' => $this->request->ip(),
];
try {
// 生成预支付码
$result = $wechat->createOrder($options);
// 创建JSAPI参数签名
$options = $wechat->createParamsForJsApi($result['prepay_id']);
// @todo 把 $options 传到前端用js发起支付就可以了
return send_http_status(200, $options);
} catch (Exception $e) {
// 出错啦,处理下吧
return send_http_status(201, '', $e->getMessage());
}
}
}