王总上门按摩后台代码
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.
 
 
 
 
 

1769 lines
45 KiB

<?php
namespace app\massage\controller;
use app\ApiRest;
use app\massage\model\Address;
use app\massage\model\Car;
use app\massage\model\CarPrice;
use app\massage\model\Coach;
use app\massage\model\CoachChangeLog;
use app\massage\model\Comment;
use app\massage\model\CommentGoods;
use app\massage\model\CommentLable;
use app\massage\model\Config;
use app\massage\model\Coupon;
use app\massage\model\CouponRecord;
use app\massage\model\Lable;
use app\massage\model\MsgConfig;
use app\massage\model\NoticeList;
use app\massage\model\Order;
use app\massage\model\OrderAddress;
use app\massage\model\OrderData;
use app\massage\model\OrderGoods;
use app\massage\model\OrderLog;
use app\massage\model\OrderPrice;
use app\massage\model\RefundOrder;
use app\massage\model\Service;
use app\massage\model\ShieldList;
use app\massage\model\UpOrderGoods;
use app\massage\model\UpOrderList;
use app\massage\model\User;
use app\massage\controller\IndexWxPay;
use app\massage\model\UserChannel;
use app\store\model\StoreList;
use longbingcore\wxcore\PayModel;
use think\App;
use think\facade\Db;
use think\Request;
class IndexOrder extends ApiRest
{
protected $model;
protected $refund_model;
protected $order_goods_model;
protected $coach_model;
public function __construct(App $app) {
parent::__construct($app);
$this->model = new Order();
$this->refund_model = new RefundOrder();
$this->order_goods_model = new OrderGoods();
$this->coach_model = new Coach();
//超时自动取消订单
$this->model->autoCancelOrder($this->_uniacid);
}
/**
* @author chenniang
* @DataTime: 2021-07-12 00:26
* @功能说明:天数
*/
public function dayText(){
$config_model = new Config();
$config = $config_model->dataInfo(['uniacid'=>$this->_uniacid]);
$start_time = strtotime(date('Y-m-d',time()));
// $start_time = $start_time+$config['max_day']*86400;
$i=0;
while ($i<$config['max_day']){
$str = $start_time+$i*86400;
$data[$i]['dat_str'] = $str;
$data[$i]['dat_text'] = date('m-d',$str);
$data[$i]['week'] = changeWeek(date('w',$str));
$i++;
}
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2021-07-09 14:41
* @功能说明:时间段
*/
public function timeText(){
$input = $this->_param;
$coach_model = new Coach();
$coach = $coach_model->dataInfo(['id'=>$input['coach_id']]);
$is_store = !empty($input['is_store'])?$input['is_store']:0;
$data = $this->getTimeData($coach['start_time'],$coach['end_time'],$coach['id'],$input['day'],0,$is_store);
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2021-03-19 15:48
* @功能说明:个人中心
*/
public function orderList(){
if(empty($this->getUserId())){
return $this->success([]);
}
$input = $this->_param;
$dis[] = ['a.uniacid','=',$this->_uniacid];
$dis[] = ['a.user_id','=',$this->getUserId()];
$dis[] = ['a.is_show','=',1];
$where = [];
if(!empty($input['name'])){
$where[] = ['b.goods_name','like','%'.$input['name'].'%'];
$where[] = ['a.order_code','like','%'.$input['name'].'%'];
}
if(!empty($input['pay_type'])){
if($input['pay_type']==5){
$dis[] = ['a.pay_type','in',[2,3,4,5]];
}else{
$dis[] = ['a.pay_type','=',$input['pay_type']];
}
}
//是否是加钟
$data = $this->model->indexDataList($dis,$where);
if(!empty($data['data'])){
$shield_model = new ShieldList();
foreach ($data['data'] as &$v){
$can_refund_num = is_array($v['order_goods'])?array_sum(array_column($v['order_goods'],'can_refund_num')):0;
//是否可以申请退款
if((in_array($v['pay_type'],[2,3,4,5])&&$can_refund_num>0)){
$v['can_refund'] = 1;
}else{
$v['can_refund'] = 0;
}
//是否能加钟
$v['can_add_order'] = $this->model->orderCanAdd($v);
$shield = $shield_model->where(['user_id'=>$v['user_id'],'coach_id'=>$v['coach_id']])->where('type','in',[2,3])->find();
$v['can_again'] = !empty($shield)?0:1;
if(empty($v['coach_id'])){
//查询是否有转派记录
$change_log_model = new CoachChangeLog();
$add_id = $v['is_add']==0?$v['id']:$v['add_pid'];
$change_log = $change_log_model->dataInfo(['order_id'=>$add_id,'status'=>1]);
if(!empty($change_log)){
$v['coach_info'] = $this->coach_model->where(['id'=>$change_log['init_coach_id']])->field('id,coach_name,mobile,work_img')->find();
}
}
}
}
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2021-03-15 14:58
* @功能说明:订单详情
*/
public function orderInfo(){
$input = $this->_param;
$dis = [
'id' => $input['id'],
'is_show' => 1
];
$data = $this->model->dataInfo($dis);
if(empty($data)){
$this->errorMsg('订单已被删除');
}
$data['time_long'] = $data['true_time_long'];
//是否能加钟
$data['can_add_order'] = $this->model->orderCanAdd($data);
$arr = ['create_time','pay_time','serout_time','arrive_time','receiving_time','start_service_time','order_end_time'];
foreach ($arr as $value){
$data[$value] = !empty($data[$value])?date('Y-m-d H:i:s',$data[$value]):0;
}
$data['start_time'] = date('Y-m-d H:i',$data['start_time']).'-'.date('H:i',$data['end_time']);
//剩余可申请退款数量
$can_refund_num = array_sum(array_column($data['order_goods'],'can_refund_num'));
//是否可以申请退款
if((in_array($data['pay_type'],[2,3,4,5])&&$can_refund_num>0)){
$data['can_refund'] = 1;
}else{
$data['can_refund'] = 0;
}
$data['distance'] = distance_text($data['distance']);
$data['over_time'] -= time();
$data['over_time'] = $data['over_time']>0?$data['over_time']:0;
//加钟订单
if($data['is_add']==0){
$add_id = $data['id'];
$data['add_order_id'] = $this->model->where(['add_pid'=>$data['id']])->where('pay_type','>',1)->field('id,order_code')->select()->toArray();
}else{
$add_id = $data['add_pid'];
$data['add_pid'] = $this->model->where(['id'=>$data['add_pid']])->field('id,order_code')->find();
}
$order_model = new OrderData();
//订单附表
$order_data = $order_model->dataInfo(['order_id'=>$input['id'],'uniacid'=>$this->_uniacid]);
$data = array_merge($order_data,$data);
$data['sign_time'] = !empty($data['sign_time'])?date('Y-m-d H:i:s',$data['sign_time']):'';
$shield_model = new ShieldList();
$shield = $shield_model->where(['user_id'=>$data['user_id'],'coach_id'=>$data['coach_id']])->where('type','in',[2,3])->find();
$data['can_again'] = !empty($shield)?0:1;
//查询是否有转派记录
$change_log_model = new CoachChangeLog();
$change_log = $change_log_model->dataInfo(['order_id'=>$add_id,'status'=>1]);
if(!empty($change_log)){
$data['old_coach_name'] = $this->coach_model->where(['id'=>$change_log['init_coach_id']])->value('coach_name');
if(empty($data['coach_id'])){
$data['coach_info'] = $this->coach_model->where(['id'=>$change_log['init_coach_id']])->field('id,uniacid,coach_name,mobile,work_img')->find();
}
}
$have_car_price = $change_log_model->dataInfo(['order_id'=>$data['id'],'status'=>1,'have_car_price'=>1]);
//是否可以退车费
$data['can_refund_car_price'] = empty($have_car_price)&&$data['pay_type']<4?1:0;
$admin_model = new \app\massage\model\Admin();
//代理商电话
$data['admin_phone'] = $admin_model->where(['id'=>$data['admin_id']])->value('phone');
//门店订单
if(!empty($data['store_id'])){
$store_model = new \app\massage\model\StoreList();
$data['store_info'] = $store_model->where(['id'=>$data['store_id']])->field('title,cover,address,lng,lat,phone')->find();
}
//是否可以联系技师
$data['order_contact_coach'] = getConfigSetting($this->_uniacid,'order_contact_coach');
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2023-02-23 18:32
* @功能说明:获取加钟订单
*/
public function getAddClockOrder(){
$input = $this->_param;
$dis[] = ['a.add_pid','=',$input['order_id']];
$dis[] = ['a.pay_type','>',1];
$dis[] = ['a.is_show','=',1];
$data = $this->model->indexDataList($dis,[]);
if(!empty($data['data'])){
$shield_model = new ShieldList();
foreach ($data['data'] as &$v){
$can_refund_num = is_array($v['order_goods'])?array_sum(array_column($v['order_goods'],'can_refund_num')):0;
if((in_array($v['pay_type'],[2,3,4,5])&&$can_refund_num>0)){
$v['can_refund'] = 1;
}else{
$v['can_refund'] = 0;
}
$shield = $shield_model->where(['user_id'=>$v['user_id'],'coach_id'=>$v['coach_id']])->where('type','in',[2,3])->find();
$v['can_again'] = !empty($shield)?0:1;
}
}
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2021-03-19 17:29
* @功能说明:退款订单详情
*
*/
public function refundOrderList(){
$input = $this->_param;
$dis[] = ['a.uniacid','=',$this->_uniacid];
$dis[] = ['a.user_id','=',$this->getUserId()];
$where = [];
if(!empty($input['name'])){
$where[] = ['b.goods_name','like','%'.$input['name'].'%'];
$where[] = ['a.order_code','like','%'.$input['name'].'%'];
}
if(!empty($input['status'])){
$dis[] = ['a.status','=',$input['status']];
}else{
$dis[] = ['a.status','>',-1];
}
$data = $this->refund_model->indexDataList($dis,$where);
//待接单数量
$data['agent_order_count'] = $this->refund_model->where(['user_id'=>$this->getUserId(),'status'=>1])->count();
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2021-03-19 17:50
* @功能说明:退款订单详情
*/
public function refundOrderInfo(){
$input = $this->_param;
$dis = [
'id' => $input['id']
];
$data = $this->refund_model->dataInfo($dis);
$data['create_time'] = date('Y-m-d H:i:s',$data['create_time']);
$data['refund_time'] = date('Y-m-d H:i:s',$data['refund_time']);
$order = $this->model->dataInfo(['id'=>$data['order_id']]);
if(!empty($order)){
//加钟订单
if($order['is_add']==0){
$data['add_order_id'] = $this->model->where(['add_pid'=>$order['id']])->where('pay_type','>',1)->field('id,order_code')->select()->toArray();
}else{
$data['add_pid'] = $this->model->where(['id'=>$order['add_pid']])->field('id,order_code')->find();
}
}
$data['store_id'] = $order['store_id'];
//门店订单
if(!empty($order['store_id'])){
$store_model = new \app\massage\model\StoreList();
$data['store_info'] = $store_model->where(['id'=>$order['store_id']])->field('title,cover,address,lng,lat,phone')->find();
}
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2021-03-22 09:43
* @功能说明:下单页面详情
*/
public function payOrderInfo(){
$input = $this->_param;
$coupon = !empty($input['coupon_id'])?$input['coupon_id']:0;
$order_id = !empty($input['order_id'])?$input['order_id']:0;
$address_model = new Address();
$coupon_modle = new Coupon();
$coupon_record_model = new CouponRecord();
if(!empty($input['address_id'])){
$address = $address_model->dataInfo(['id'=>$input['address_id']]);
}
//加钟订单
if(!empty($order_id)){
$input['car_type'] = 0;
$p_order = $this->model->dataInfo(['id'=>$order_id]);
$address = $p_order['address_info'];
}
//可用优惠券数量
$canUseCoupon = $coupon_modle->canUseCoupon($this->getUserId(),$input['coach_id']);
if(!empty($input['coupon_id'])){
$coupon = $input['coupon_id'];
}elseif (!empty($canUseCoupon)){
$coupon = $canUseCoupon[0];
}
$lat = !empty($address['lat'])?$address['lat']:0;
$lng = !empty($address['lng'])?$address['lng']:0;
$order_info = $this->model->payOrderInfo($this->getUserId(),$input['coach_id'],$lat,$lng,$input['car_type'],$coupon,$order_id);
//默认地址
$order_info['address_info'] = $address;
$coach_model = new Coach();
if(!empty($input['coach_id'])&&$input['coach_id']>0){
$order_info['coach_info'] = $coach_model->where(['id'=>$input['coach_id']])->field('id,city_id,coach_name,mobile,work_img,store_id')->find();
}else{
$change_log_model = new CoachChangeLog();
$change_log = $change_log_model->dataInfo(['order_id'=>$order_id,'status'=>1]);
$order_info['coach_info'] = $coach_model->where(['id'=>$change_log['init_coach_id']])->field('id,city_id,coach_name,mobile,work_img')->find();
}
//通过技师是否绑定门店来判断是否可以下门店订单
if(!empty($order_info['store_id'])){
$store_model = new StoreList();
$order_info['store_info'] = $store_model->where(['id'=>$order_info['store_id'],'status'=>1])->field('id,title,address,lng,lat,phone')->find();
}
//是否支持门店服务
$order_info['is_store'] = !empty($order_info['store_info'])?1:0;
$order_info['distance'] = distance_text($order_info['distance']);
$order_info['canUseCoupon'] = $coupon_record_model->where('id','in',$canUseCoupon)->sum('num');
$car_model = new CarPrice();
if(!empty($input['coach_id'])){
$dis = [
'uniacid' => $this->_uniacid,
'city_id' => $order_info['coach_info']['city_id'],
'status' => 1
];
//获取指定城市的车费配置
$order_info['car_config'] = $car_model->where($dis)->find();
}
//没有就获取全局配置
if(empty($order_info['car_config'])){
$order_info['car_config'] = $car_model->dataInfo(['uniacid'=>$this->_uniacid]);
}
$config_model = new Config();
$order_info['trading_rules'] = $config_model->where(['uniacid'=>$this->_uniacid])->value('trading_rules');
//加钟订单开始
if(!empty($order_id)){
$order_start_time = $this->model->addOrderTime($order_id);
$order_end_time = $this->model->getOrderEndTime($order_info['order_goods'],$order_start_time);
$order_info['order_end_time'] = date('Y-m-d H:i:s',$order_end_time);
$order_info['order_start_time']= date('Y-m-d H:i:s',$order_start_time);
}
$config_model = new Config();
$config = $config_model->dataInfo(['uniacid'=>$this->_uniacid]);
//默认时间
$near_time = $coach_model->getCoachEarliestTime($input['coach_id'],$config,1);
if(!empty($near_time)){
$order_info['near_time']['text'] = date('m-d',$near_time).' '.changeWeek(date('w',$near_time)).' '.date('H:i',$near_time);
$order_info['near_time']['str'] = $near_time;
}
return $this->success($order_info);
}
/**
* @author chenniang
* @DataTime: 2021-07-10 00:40
* @功能说明:可用的优惠券列表
*/
public function couponList(){
$input = $this->_param;
$coupon_model = new Coupon();
$coupon_record_model = new CouponRecord();
$coupon_id = $coupon_model->canUseCoupon($this->getUserId(),$input['coach_id']);
$data = $coupon_record_model->where('id','in',$coupon_id)->order('id desc')->paginate(10)->toArray();
if(!empty($data['data'])){
foreach ($data['data'] as &$v){
$v['start_time'] = date('Y.m.d H:i',$v['start_time']).' - '.date('Y.m.d H:i',$v['end_time']);
}
}
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2023-03-06 14:09
* @功能说明:校验是否可以加单
*/
public function checkAddOrder(){
$input = $this->_input;
$add_order = $this->model->where(['add_pid'=>$input['order_id']])->where('pay_type','in',[2,3,4,5,6,8])->field('id,start_time,end_time')->find();
if(!empty($add_order)){
$this->errorMsg('请先完成上一次加钟订单,才能继续加钟');
}
return $this->success(true);
}
/**
* @author chenniang
* @DataTime: 2021-03-22 09:53
* @功能说明:下单
*/
//@ioncube.dk myk("sha256", "cnjdbvjdnjd") -> "cff6bcac6bd92467e0cee72e5c879cdbf7044386eda8f464c817bd5c5c963d6f" RANDOM
public function payOrder(){
$input = $this->_input;
$address_order_model = new OrderAddress();
$address_model = new Address();
$coupon_record_model = new CouponRecord();
$coach_model = new Coach();
$channel_model = new UserChannel();
$input['channel_id'] = $channel_model->getChannelId($this->_user['id']);
$cap_info = $coach_model->dataInfo(['id'=>$input['coach_id']]);
$order_id = !empty($input['order_id'])?$input['order_id']:0;
$admin_id = 0;
if(!empty($cap_info)&&$cap_info['is_work']==0){
$this->errorMsg('该技师未上班');
}
if(!empty($cap_info)&&$cap_info['status']!=2){
$this->errorMsg('该技师已下架');
}
$coupon_id = !empty($input['coupon_id'])?$input['coupon_id']:0;
//加钟订单
if(!empty($order_id)){
$p_order = $this->model->dataInfo(['id'=>$order_id]);
$can_add = $this->model->orderCanAdd($p_order);
if($can_add==0){
$this->errorMsg('该订单不能加钟');
}
$add_order = $this->model->where(['add_pid'=>$order_id])->where('pay_type','in',[2,3,4,5,6,8])->field('id,start_time,end_time')->find();
if(!empty($add_order)){
$this->errorMsg('请先完成上一次加钟订单,才能继续加钟');
}
$address = $p_order['address_info'];
$address['id'] = $address['address_id'];
//加钟订单不计算车费
$input['car_type'] = 0;
//加钟
$input['start_time'] = $this->model->addOrderTime($order_id);
$admin_id = $p_order['admin_id'];
$store_id = $p_order['store_id'];
$input['channel_id'] = $p_order['channel_id'];
}else{
if(empty($input['is_store'])){
$address = $address_model->dataInfo(['id'=>$input['address_id']]);
if(empty($address)){
$this->errorMsg('请添加地址');
}
}else{
//到店服务
$address = $address_order_model->getDefaultSetting($this->_uniacid,$input['user_name'],$input['user_phone'],$cap_info['store_id']);
if(empty($address)){
$this->errorMsg('该技师未绑定门店');
}
}
$store_id = !empty($input['is_store'])&&!empty($cap_info['store_id'])?$cap_info['store_id']:0;
}
if(!empty($store_check['code'])){
$this->errorMsg($store_check['msg']);
}
$order_info = $this->model->payOrderInfo($this->getUserId(),$input['coach_id'],$address['lat'],$address['lng'],$input['car_type'],$coupon_id,$order_id);
$config_model = new Config();
$config = $config_model->dataInfo(['uniacid'=>$this->_uniacid]);
Db::startTrans();
$key = $order_info['coach_id'].'order_key';
incCache($key,1,$this->_uniacid);
$key_value = getCache($key,$this->_uniacid);
if($key_value!=1){
decCache($key,1,$this->_uniacid);
Db::rollback();
$this->errorMsg('下单人数过多,请重试');
}
//检查技师时间(返回结束时间)
$check = $this->model->checkTime($order_info,$input['start_time'],$order_id,0,$store_id);
if(!empty($check['code'])){
decCache($key,1,$this->_uniacid);
Db::rollback();
$this->errorMsg($check['msg']);
}
//默认微信
$pay_model = isset($input['pay_model'])?$input['pay_model']:1;
$order_insert = [
'uniacid' => $this->_uniacid,
'over_time' => time()+$config['over_time']*60,
'order_code' => orderCode(),
'user_id' => $this->getUserId(),
'pay_price' => $order_info['pay_price'],
'balance' => $pay_model==2?$order_info['pay_price']:0,
'init_service_price'=> $order_info['init_goods_price'],
'service_price'=> $order_info['goods_price'],
//物业费
'material_price'=> $order_info['material_price'],
'true_service_price' => $order_info['goods_price'],
'discount' => $order_info['discount'],
'car_price' => $order_info['car_price'],
'true_car_price' => $order_info['car_price'],
'pay_type' => 1,
'coach_id' => $order_info['coach_id'],
'start_time' => $input['start_time'],
'end_time' => $check['end_time'],
'distance' => $order_info['distance'],
'time_long' => $check['time_long'],
'true_time_long' => $check['time_long'],
//备注
'text' => !empty($input['text'])?$input['text']:'',
'can_tx_time' => $config['can_tx_time'],
'car_type' => $input['car_type'],
'channel_id' => !empty($input['channel_id'])?$input['channel_id']:0,
'app_pay' => $this->is_app,
//技师出发地址
'trip_start_address' => !empty($cap_info['address'])?$cap_info['address']:'',
//订单到达地址
'trip_end_address' => $address['address'].' '.$address['address_info'],
//加钟fu
'add_pid' => $order_id,
'is_add' => !empty($order_id)?1:0,
'pay_model' => $pay_model,
'store_id' => $store_id
];
//下单
$res = $this->model->dataAdd($order_insert);
if($res!=1){
decCache($key,1,$this->_uniacid);
Db::rollback();
$this->errorMsg('下单失败');
}
decCache($key,1,$this->_uniacid);
$order_id = $this->model->getLastInsID();
//使用优惠券
$coupon_record_model->couponUse($coupon_id,$order_id);
//添加下单地址
$res = $address_order_model->orderAddressAdd($address,$order_id,$order_info['coach_info']);
if(!empty($res['code'])){
Db::rollback();
$this->errorMsg($res['msg']);
}
//添加到子订单
$res = $this->order_goods_model->orderGoodsAdd($order_info['order_goods'],$order_id,$input['coach_id'],$this->getUserId());
if(!empty($res['code'])){
Db::rollback();
$this->errorMsg($res['msg']);
}
$order_insert_data = $this->model->dataInfo(['id'=>$order_id]);
//处理各类佣金情况
$order_update = $this->model->getCashData($order_insert_data,1,$admin_id);
if(!empty($order_update['code'])&&$order_update['code']==300){
$this->errorMsg('请添加技师等级');
}
if(!empty($order_update['order_data'])){
$this->model->dataUpdate(['id'=>$order_id],$order_update['order_data']);
}
Db::commit();
//如果是0元
if($order_insert['pay_price']<=0){
$this->model->orderResult($order_insert['order_code'],$order_insert['order_code']);
return $this->success(true);
}
//余额支付
if($pay_model==2){
$user_model = new User();
$user_balance= $user_model->where(['id'=>$this->getUserId()])->value('balance');
if($user_balance<$order_insert['pay_price']){
$this->errorMsg('余额不足');
}
$this->model->orderResult($order_insert['order_code'],$order_insert['order_code']);
return $this->success(true);
}elseif ($pay_model==3){
$pay_model = new PayModel($this->payConfig());
$jsApiParameters = $pay_model->aliPay($order_insert['order_code'],$order_insert['pay_price'],'MassageOrder',1);
$arr['pay_list']= $jsApiParameters;
$arr['order_code']= $order_insert['order_code'];
$arr['order_id']= $order_id;
}else{
//微信支付
$pay_controller = new \app\shop\controller\IndexWxPay($this->app);
//支付
$jsApiParameters= $pay_controller->createWeixinPay($this->payConfig(),$this->getUserInfo()['openid'],$this->_uniacid,"anmo",['type' => 'Massage' , 'out_trade_no' => $order_insert['order_code']],$order_insert['pay_price']);
$arr['pay_list']= $jsApiParameters;
$arr['order_id']= $order_id;
}
return $this->success($arr);
}
/**
* @author chenniang
* @DataTime: 2021-03-25 15:59
* @功能说明:重新支付
*/
public function rePayOrder(){
$input = $this->_input;
$order_insert = $this->model->dataInfo(['id'=>$input['id']]);
if($order_insert['pay_type']!=1){
$this->errorMsg('订单状态错误');
}
if($order_insert['app_pay']==1&&$this->is_app!=1){
$this->errorMsg('请到APP完成支付');
}
if($order_insert['app_pay']==0&&$this->is_app!=0){
$this->errorMsg('请到小程序完成支付');
}
if($order_insert['app_pay']==2&&$this->is_app!=2) {
$this->errorMsg('请到公众号完成支付');
}
if($order_insert['pay_model']==2){
$user_model = new User();
$user_balance= $user_model->where(['id'=>$this->getUserId()])->value('balance');
if($user_balance<$order_insert['pay_price']){
$this->errorMsg('余额不足');
}
$this->model->orderResult($order_insert['order_code'],$order_insert['order_code']);
return $this->success(true);
}elseif ($order_insert['pay_model']==3){
$pay_model = new PayModel($this->payConfig());
$jsApiParameters = $pay_model->aliPay($order_insert['order_code'],$order_insert['pay_price'],'MassageOrder');
$arr['pay_list']= $jsApiParameters;
$arr['order_code']= $order_insert['order_code'];
}else{
//微信支付
$pay_controller = new \app\shop\controller\IndexWxPay($this->app);
//支付
$jsApiParameters= $pay_controller->createWeixinPay($this->payConfig(),$this->getUserInfo()['openid'],$this->_uniacid,"anmo",['type' => 'Massage' , 'out_trade_no' => $order_insert['order_code']],$order_insert['pay_price']);
$arr['pay_list']= $jsApiParameters;
}
return $this->success($arr);
}
/**
* @author chenniang
* @DataTime: 2021-03-25 16:38
* @功能说明:取消订单
*/
public function cancelOrder(){
$input = $this->_input;
$order_insert = $this->model->dataInfo(['id'=>$input['id']]);
if($order_insert['pay_type']!=1){
$this->errorMsg('订单状态错误');
}
$res = $this->model->cancelOrder($order_insert);
if(!empty($res['code'])){
$this->errorMsg($res['msg']);
}
$log_model = new OrderLog();
$log_model->addLog($input['id'],$this->_uniacid,-1,$order_insert['pay_type'],2,$this->_user['id']);
return $this->success($res);
}
/**
* @author chenniang
* @DataTime: 2021-03-26 11:39
* @功能说明:申请退款
*/
public function applyOrder(){
$input = $this->_input;
$order = $this->model->dataInfo(['id'=>$input['order_id']]);
if(empty($order)){
$this->errorMsg('订单未找到');
}
if($order['pay_type']<2){
$this->errorMsg('订单状态错误');
}
if(empty($input['list'])){
$this->errorMsg('请选择商品');
}
// if($order['can_tx_date']<time()&&$order['pay_type']==7){
//
// $this->errorMsg('核销后24小时内才能申请退款哦');
//
// }
if($order['pay_type']==7){
$this->errorMsg('核销后不能退款');
}
//加钟订单
if($order['is_add']==0){
$where[] = ['add_pid','=',$order['id']];
$where[] = ['pay_type','>',1];
$add_order = $this->model->dataInfo($where);
if(!empty($add_order)){
$this->errorMsg('请先申请加钟订单退款');
}
$add_order = $this->model->where(['add_pid'=>$order['id'],'pay_type'=>1])->select()->toArray();
if(!empty($add_order)){
foreach ($add_order as $value){
$this->model->cancelOrder($value);
}
}
}
//申请退款
$res = $this->refund_model->applyRefund($order,$input);
if(!empty($res['code'])){
$this->errorMsg($res['msg']);
}
return $this->success($res);
}
/**
* @author chenniang
* @DataTime: 2021-03-26 15:55
* @功能说明:取消退款
*/
public function cancelRefundOrder(){
$input = $this->_input;
$order = $this->refund_model->dataInfo(['id'=>$input['id']]);
if($order['status']!=1){
$this->errorMsg('订单已经审核');
}
Db::startTrans();
$res = $this->refund_model->dataUpdate(['id'=>$input['id']],['status'=>-1,'cancel_time'=>time()]);
if($res!=1){
Db::rollback();
$this->errorMsg('取消失败');
}
if(!empty($order['order_goods'])){
$order_goods_model = new OrderGoods();
foreach ($order['order_goods'] as $v){
if(!empty($v['order_goods_id'])){
$num = $v['num'];
$res = $order_goods_model->where(['id'=>$v['order_goods_id']])->update(['can_refund_num'=>Db::Raw("can_refund_num+$num")]);
if($res!=1){
Db::rollback();
$this->errorMsg('取消失败');
}
}
}
}
$notice_model = new NoticeList();
//增加后台提醒
$notice_model->where(['type'=>2,'order_id'=>$input['id']])->delete();
Db::commit();
return $this->success($res);
}
/**
* @author chenniang
* @DataTime: 2021-04-07 15:30
* @功能说明:刷新订单二维码
*/
public function refreshQr(){
$input = $this->_input;
$qr_insert = [
'id' => $input['id']
];
//获取二维码
$qr = $this->model->orderQr($qr_insert,$this->_uniacid);
if(!empty($qr)){
$this->model->dataUpdate(['id'=>$input['id']],['qr'=>$qr]);
}
return $this->success($qr);
}
/**
* @author chenniang
* @DataTime: 2021-07-13 00:18
* @功能说明:评价标签
*/
public function lableList(){
$dis = [
'uniacid' => $this->_uniacid,
'status' => 1
];
$lable_model = new Lable();
$res = $lable_model->where($dis)->order('top desc,id desc')->select()->toArray();
return $this->success($res);
}
/**
* @author chenniang
* @DataTime: 2021-07-12 14:01
* @功能说明:添加评价
*/
public function addComment(){
$input = $this->_input;
$order = $this->model->dataInfo(['id'=>$input['order_id']]);
if($order['is_comment']==1){
$this->errorMsg('你已经评价过了');
}
$insert = [
'uniacid' => $this->_uniacid,
'user_id' => $this->getUserId(),
'order_id'=> $input['order_id'],
'star' => $input['star'],
'text' => $input['text'],
'coach_id'=> $order['coach_id'],
'admin_id'=> $order['admin_id'],
];
Db::startTrans();
$comment_model = new Comment();
$comment_lable_model = new CommentLable();
$lable_model = new Lable();
$res = $comment_model->dataAdd($insert);
if($res==0){
Db::rollback();
$this->errorMsg('评价失败');
}
$comment_id = $comment_model->getLastInsID();
if(!empty($input['lable'])){
foreach ($input['lable'] as $value){
$title = $lable_model->where(['id'=>$value])->value('title');
$insert = [
'uniacid' => $this->_uniacid,
'comment_id' => $comment_id,
'lable_id' => $value,
'lable_title'=> $title,
];
$comment_lable_model->dataAdd($insert);
}
}
$comment_model->updateStar($order['coach_id']);
$res = $this->model->dataUpdate(['id'=>$order['id']],['is_comment'=>1]);
if($res==0){
Db::rollback();
$this->errorMsg('评价失败');
}
//添加服务评价
if(!empty($input['service_star'])){
$comment_goods_model = new CommentGoods();
$comment_goods_model->commentAdd($input['service_star'],$this->_uniacid,$comment_id);
}
Db::commit();
return $this->success($res);
}
/**
* @author chenniang
* @DataTime: 2021-07-16 18:35
* @功能说明:删除订单
*/
public function delOrder(){
$input = $this->_input;
$order = $this->model->dataInfo(['id'=>$input['id']]);
if(!in_array($order['pay_type'],[-1,7])){
$this->errorMsg('只有取消或完成的订单才能删除');
}
$res = $this->model->dataUpdate(['id'=>$input['id']],['is_show'=>0]);
return $this->success($res);
}
/**
* @author chenniang
* @DataTime: 2022-06-30 14:27
* @功能说明:是否支持bus//408.36
*/
public function getIsBus(){
$input = $this->_param;
$config_model = new Config();
$config = $config_model->dataInfo(['uniacid'=>$this->_uniacid]);
$is_bus = $config['is_bus'];
if(!empty($input['start_time'])&&!empty($config['bus_start_time'])&&!empty($config['bus_end_time'])){
$z_time = strtotime(date('Y-m-d',$input['start_time']));
$start_time = strtotime($config['bus_start_time'])-strtotime(date('Y-m-d',time()))+$z_time;
$end_time = strtotime($config['bus_end_time'])-strtotime(date('Y-m-d',time()))+$z_time;
if($input['start_time']<$start_time){
$start_time -= 86400;
$end_time -= 86400;
}
$end_time = $end_time<$start_time?$end_time+86400:$end_time;
if($input['start_time']<$start_time||$input['start_time']>$end_time){
$is_bus = 0;
}
}
return $this->success($is_bus);
}
/**
* @author chenniang
* @DataTime: 2022-12-13 10:04
* @功能说明:回去可以升级的服务
*/
public function getUpOrderGoods(){
$input = $this->_param;
$order_goods = $this->order_goods_model->dataInfo(['id'=>$input['order_goods_id'],'status'=>1]);
if(empty($order_goods)){
$this->errorMsg('未找到升级项目');
}
$is_add = $this->model->where(['id'=>$order_goods['order_id']])->value('is_add');
$coach_id = $this->model->where(['id'=>$order_goods['order_id']])->value('coach_id');
$dis[] = ['a.uniacid','=',$this->_uniacid];
$dis[] = ['a.status','=',1];
if(!empty($coach_id)){
$dis[] = ['b.coach_id','=',$coach_id];
}
// $dis[] = ['a.price','>',$order_goods['true_price']];
$dis[] = ['a.is_add','=',$is_add];
$dis[] = ['a.id','<>',$order_goods['goods_id']];
$service_model = new Service();
$total_price = $order_goods['price'] + $order_goods['material_price'];
$data = $service_model->upServiceCoachList($dis,$total_price);
return $this->success($data);
}
/**
* @author chenniang
* @DataTime: 2022-12-16 11:44
* @功能说明:服务升级下单页面
*/
public function upOrderInfo(){
$input = $this->_input;
$order = $this->model->dataInfo(['id'=>$input['order_id']]);
if(empty($order)||!in_array($order['pay_type'],[2,3,4,5,6])){
$this->errorMsg('订单已关闭');
}
//获取升级的服务价格
$order_data = $this->order_goods_model->getUpGoodsData($input['order_goods'],$order['coupon_id'],$order['id']);
if(!empty($check['code'])){
$this->errorMsg($check['msg']);
}
$order_data['order_start_time'] = date('Y-m-d H:i:s',$order['start_time']);
$order_data['pay_model'] = $order['pay_model'];
$order_data['end_time'] = $order['start_time'] + $order_data['total_time_long']*60;
$order_data['order_end_time'] = date('Y-m-d H:i:s',$order_data['end_time']);
$coach_model = new Coach();
if(!empty($order['coach_id'])&&$order['coach_id']>0){
$order_data['coach_info']['coach_name'] = $coach_model->where(['id'=>$order['coach_id']])->value('coach_name');
}else{
$change_log_model = new CoachChangeLog();
$change_log = $change_log_model->dataInfo(['order_id'=>$input['order_id'],'status'=>1]);
$order_data['coach_info']['coach_name'] = $coach_model->where(['id'=>$change_log['init_coach_id']])->value('coach_name');
}
return $this->success($order_data);
}
/**
* @author chenniang
* @DataTime: 2022-12-13 10:27
* @功能说明:服务项目升级
*/
public function upOrderGoods(){
$input = $this->_input;
$order_price_log = new OrderPrice();
$price_log = $order_price_log->dataInfo(['top_order_id'=>$input['order_id']]);
if(empty($price_log)){
$this->error('改订单无法升级,请重新下单');
}
$order = $this->model->dataInfo(['id'=>$input['order_id']]);
if(empty($order)||!in_array($order['pay_type'],[2,3,4,5,6])){
$this->errorMsg('订单已关闭');
}
$refund_model = new RefundOrder();
//判断有无申请中的退款订单
$refund_order = $refund_model->dataInfo(['order_id' => $order['id'], 'status' => 1]);
if (!empty($refund_order)) {
$this->errorMsg('该订单正在申请退款,无法升级');
}
//获取升级的服务价格
$order_data = $this->order_goods_model->getUpGoodsData($input['order_goods'],$order['coupon_id'],$order['id']);
if(!empty($check['code'])){
$this->errorMsg($check['msg']);
}
$start_time = $order['start_time'];
$order_data['coach_id'] = $order['coach_id'];
//校验时间
$check = $this->model->checkTime($order_data,$start_time,$order['add_pid'],$order['id']);
if(!empty($check['code'])){
$this->errorMsg($check['msg']);
}
$up_order_model = new UpOrderList();
//校验加钟订单时间 如果有加钟订单时间需要往后面推
$check = $up_order_model->checkAddOrderTime($order_data['time_long']*60,$order['id']);
if(!empty($check['code'])){
$this->errorMsg($check['msg']);
}
$config_model = new Config();
$config = $config_model->dataInfo(['uniacid'=>$this->_uniacid]);
Db::startTrans();
$insert = [
'uniacid' => $this->_uniacid,
'order_id'=> $order['id'],
'user_id' => $order['user_id'],
'coach_id' => $order['coach_id'],
'order_code' => orderCode(),
'order_price'=> $order_data['order_price'],
'pay_price' => $order_data['pay_price'],
'material_price' => $order_data['material_price'],
'service_price' => $order_data['service_price'],
'true_service_price' => $order_data['true_service_price'],
'surplus_price' => $order_data['pay_price'],
'pay_model' => $order['pay_model'],
'over_time' => time()+$config['over_time']*60,
'balance' => $order['pay_model']==2?$order_data['pay_price']:0,
'time_long' => $order_data['time_long'],
'discount' => $order_data['discount'],
'coupon_discount' => $order_data['coupon_discount'],
];
$up_goods_model = new UpOrderGoods();
$up_order_model->dataAdd($insert);
$id = $up_order_model->getLastInsID();
//添加订单商品
$res = $up_goods_model->orderGoodsAdd($order_data['order_goods'],$id);
if(!empty($res['code'])){
Db::rollback();
$this->errorMsg($res['msg']);
}
Db::commit();
//如果是0元
if($insert['pay_price']<=0){
$up_order_model->orderResult($insert['order_code'],$insert['order_code']);
return $this->success(true);
}
//余额支付
if($insert['pay_model']==2){
$user_model = new User();
$user_balance= $user_model->where(['id'=>$this->getUserId()])->value('balance');
if($user_balance<$insert['pay_price']){
$this->errorMsg('余额不足');
}
$res = $up_order_model->orderResult($insert['order_code'],$insert['order_code']);
return $this->success($res);
}elseif ($insert['pay_model']==3){
$pay_model = new PayModel($this->payConfig());
$jsApiParameters = $pay_model->aliPay($insert['order_code'],$insert['pay_price'],'MassageOrder',1);
$arr['pay_list'] = $jsApiParameters;
$arr['order_code']= $insert['order_code'];
}else{
//微信支付
$pay_controller = new \app\shop\controller\IndexWxPay($this->app);
//支付
$jsApiParameters= $pay_controller->createWeixinPay($this->payConfig(),$this->getUserInfo()['openid'],$this->_uniacid,"anmo",['type' => 'MassageUp' , 'out_trade_no' => $insert['order_code']],$insert['pay_price']);
$arr['pay_list']= $jsApiParameters;
}
return $this->success($arr);
}
/**
* @author chenniang
* @DataTime: 2022-12-14 17:26
* @功能说明:客户订单签字
*/
public function userSignOrder(){
$input = $this->_input;
$dis = [
'uniacid' => $this->_uniacid,
'order_id'=> $input['id']
];
$order_model = new OrderData();
$order_model->dataInfo($dis);
$update = [
'sign_time' => time(),
'sign_img' => $input['sign_img']
];
$res = $order_model->dataUpdate($dis,$update);
return $this->success($res);
}
/**
* @author chenniang
* @DataTime: 2022-12-15 11:34
* @功能说明:订单升级记录
*/
public function orderUpRecord(){
$input = $this->_param;
$order_model = new UpOrderList();
$data = $order_model->orderUpRecord($input['order_id']);
return $this->success($data);
}
}