Files
anmo/server/app/common/model/order/Order.php
2025-08-19 14:16:51 +08:00

660 lines
16 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// +----------------------------------------------------------------------
// | likeshop开源商城系统
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | gitee下载https://gitee.com/likeshop_gitee
// | github下载https://github.com/likeshop-github
// | 访问官网https://www.likeshop.cn
// | 访问社区https://home.likeshop.cn
// | 访问手册http://doc.likeshop.cn
// | 微信公众号likeshop技术社区
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用未经许可不能去除前后端官方版权标识
// | likeshop系列产品收费版本务必购买商业授权购买去版权授权后方可去除前后端官方版权标识
// | 禁止对系统程序代码以任何目的,任何形式的再发布
// | likeshop团队版权所有并拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeshop.cn.team
// +----------------------------------------------------------------------
namespace app\common\model\order;
use app\common\enum\OrderEnum;
use app\common\enum\PayEnum;
use app\common\enum\user\UserTerminalEnum;
use app\common\enum\YesNoEnum;
use app\common\model\BaseModel;
use app\common\model\coach\Coach;
use app\common\model\Region;
use app\common\model\shop\Shop;
use app\common\model\user\User;
use app\common\service\ConfigService;
use think\model\concern\SoftDelete;
/**
* 订单模型类
* Class Order
* @package app\common\model\order
*/
class Order extends BaseModel
{
use SoftDelete;
protected $json = ['extra','car_config_snap','address_snap'];
protected $deleteTime = 'delete_time';
// 设置JSON数据返回数组
protected $jsonAssoc = true;
/**
* 用户端显示按钮:取消订单;立即支付;加时(接单后就显示,到服务完成);补差价(接单完成后就显示,到服务完成);评论;查看评论
* 师傅端显示按钮:立即接单;立即出发;已达到(需要定位,上传图片);开始服务;服务完成(需要定位,上传图片)
*/
public function coachInfo()
{
return $this->hasOne(Coach::class,'id','coach_id')->field('id,sn,name,work_photo,mobile');
}
public function userInfo()
{
return $this->hasOne(User::class,'id','user_id')->field('id,sn,nickname,avatar');
}
/**
* @notes 指派技师
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/11/17 21:58
*/
public function getDispatchBtnAttr($value,$data)
{
$btn = 0;
if($data['order_status'] > OrderEnum::ORDER_STATUS_WAIT_PAY && $data['order_status'] < OrderEnum::ORDER_STATUS_DEPART){
$btn = 1;
}
return $btn;
}
/**
* 师傅端按钮-start
*/
/**
* @notes 待接单按钮
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/9/13 16:55
*/
public function getTakeOrderBtnAttr($value,$data)
{
$btn = 0;
if(OrderEnum::ORDER_STATUS_WAIT_RECEIVING == $data['order_status']){
$btn = 1;
}
return $btn;
}
/**
* @notes 出发按钮
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/9/13 16:59
*/
public function getDepartBtnAttr($value,$data)
{
$btn = 0;
if(OrderEnum::ORDER_STATUS_WAIT_DEPART == $data['order_status']){
$btn = 1;
}
return $btn;
}
/**
* @notes 到达按钮
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/9/13 17:04
*/
public function getArriveBtnAttr($value,$data)
{
$btn = 0;
if(OrderEnum::ORDER_STATUS_DEPART == $data['order_status']){
$btn = 1;
}
return $btn;
}
/**
* @notes 服务开始
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/9/13 17:05
*/
public function getServerStartBtnAttr($value,$data)
{
$btn = 0;
if(OrderEnum::ORDER_STATUS_ARRIVE == $data['order_status']){
$btn = 1;
}
return $btn;
}
/**
* @notes 服务完成按钮
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/9/13 17:07
*/
public function getServerFinishBtnAttr($value,$data)
{
$btn = 0;
if(OrderEnum::ORDER_STATUS_START_SERVER == $data['order_status']){
$btn = 1;
}
return $btn;
}
/**
* 师傅端按钮-end
*/
/**
* 用户端按钮-start
*/
/**
* @notes 差价按钮
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/9/20 01:40
*/
public function getGapBtnAttr($value,$data)
{
$btn = 0;
if( $data['order_status'] < OrderEnum::ORDER_STATUS_SERVER_FINISH && $data['order_status'] > OrderEnum::ORDER_STATUS_WAIT_RECEIVING){
$btn = 1;
}
return $btn;
}
/**
* @notes 加钟按钮
* @param $value
* @param $data
* @return int
* @author cjhao
* @date 2024/9/20 01:40
*/
public function getAppendBtnAttr($value,$data)
{
$btn = 0;
if( $data['order_status'] < OrderEnum::ORDER_STATUS_SERVER_FINISH && $data['order_status'] > OrderEnum::ORDER_STATUS_WAIT_RECEIVING){
$btn = 1;
}
return $btn;
}
/**
* @notes 取消按钮
* @param $value
* @param $data
* @return int
* @author ljj
* @date 2022/2/11 12:08 下午
*/
public function getCancelBtnAttr($value,$data)
{
$btn = YesNoEnum::NO;
//待支付或预约中的订单可以取消
if ($data['order_status'] < OrderEnum::ORDER_STATUS_SERVER_FINISH) {
$btn = YesNoEnum::YES;
}
return $btn;
}
/**
* @notes 取消按钮
* @param $value
* @param $data
* @return int
* @author ljj
* @date 2022/2/11 12:08 下午
*/
public function getUserCancelBtnAttr($value,$data)
{
$btn = YesNoEnum::NO;
//待支付或预约中的订单可以取消
if ($data['order_status'] < OrderEnum::ORDER_STATUS_WAIT_DEPART) {
$btn = YesNoEnum::YES;
}
return $btn;
}
/**
* @notes 退款按钮
* @param $value
* @param $data
* @return int
* @author ljj
* @date 2022/2/11 12:08 下午
*/
public function getRefundBtnAttr($value,$data)
{
$btn = YesNoEnum::NO;
//待支付或预约中的订单可以取消
if($data['order_status'] < OrderEnum::ORDER_STATUS_SERVER_FINISH){
return $btn;
}
if (PayEnum::ISPAID == $data['pay_status'] && $data['total_order_amount'] > $data['total_refund_amount']) {
$btn = YesNoEnum::YES;
}
return $btn;
}
/**
* @notes 删除按钮
* @param $value
* @param $data
* @return int
* @author ljj
* @date 2022/2/11 2:57 下午
*/
public function getDelBtnAttr($value,$data)
{
$btn = YesNoEnum::NO;
//已关闭的订单可以删除
if ($data['order_status'] == OrderEnum::ORDER_STATUS_CLOSE) {
$btn = YesNoEnum::YES;
}
return $btn;
}
/**
* @notes 支付按钮
* @param $value
* @param $data
* @return int
* @author ljj
* @date 2022/2/28 9:48 上午
*/
public function getPayBtnAttr($value,$data)
{
$btn = YesNoEnum::NO;
if ($data['order_status'] == OrderEnum::ORDER_STATUS_WAIT_PAY && $data['pay_status'] == PayEnum::UNPAID) {
$btn = YesNoEnum::YES;
}
return $btn;
}
/**
* @notes 评价按钮
* @param $value
* @param $data
* @return int
* @author ljj
* @date 2022/2/28 9:52 上午
*/
public function getCommentBtnAttr($value,$data)
{
$btn = YesNoEnum::NO;
if ($data['order_status'] == OrderEnum::ORDER_STATUS_SERVER_FINISH) {
$is_comment = OrderGoods::where(['order_id'=>$data['id']])->value('is_comment');
if ($is_comment == YesNoEnum::NO) {
$btn = YesNoEnum::YES;
}
}
return $btn;
}
public function getLookCommentBtnAttr($value,$data)
{
$btn = YesNoEnum::NO;
if ($data['order_status'] == OrderEnum::ORDER_STATUS_SERVER_FINISH) {
$isComment = OrderGoods::where(['order_id'=>$data['id']])->value('is_comment');
if ($isComment == YesNoEnum::YES) {
$btn = YesNoEnum::YES;
}
}
return $btn;
}
/**
* 用户端按钮-end
*/
/**
* @notes 关联用户模型
* @return \think\model\relation\HasOne
* @author ljj
* @date 2022/2/10 6:36 下午
*/
public function user()
{
return $this->hasOne(User::class,'id','user_id');
}
/**
* @notes 获取订单距离
* @param $value
* @param $data
* @return string
* @author cjhao
* @date 2024/9/13 16:30
*/
public function getOrderDistanceDescAttr($value,$data)
{
return $data['order_distance'].'km';
}
/**
* @notes 关联订单服务模型
* @return \think\model\relation\HasMany
* @author ljj
* @date 2022/2/10 6:52 下午
*/
public function orderGoods()
{
return $this->hasMany(OrderGoods::class,'order_id','id');
}
/**
* @notes 关联订单日志模型
* @return \think\model\relation\HasMany
* @author ljj
* @date 2022/2/10 6:53 下午
*/
public function orderLog()
{
return $this->hasMany(OrderLog::class,'order_id','id')->append(['operator']);
}
/**
* @notes 预约时间
* @param $value
* @param $data
* @return false|string
* @author ljj
* @date 2022/2/11 10:11 上午
*/
public function getAppointTimeAttr($value,$data)
{
return date('H:i',$data['appoint_time']);
}
/**
* @notes 预约时间
* @param $value
* @param $data
* @return false|string
* @author ljj
* @date 2022/2/11 10:11 上午
*/
public function getAppointTimeDescAttr($value,$data)
{
return date('Y-m-d H:i',$data['appoint_time']);
}
/**
* @notes 预约时间段
* @param $value
* @param $data
* @return string
* @author cjhao
* @date 2024/9/14 12:38
*/
public function getAppointDateAttr($value,$data)
{
return date('m-d',$data['appoint_time']);
}
/**
* @notes 预约日期
* @param $value
* @param $data
* @return string
* @author ljj
* @date 2022/2/11 10:09 上午
*/
public function getAppointWeekAttr($value,$data)
{
$weekarray = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
return $weekarray[date("w",$data['appoint_time'])];
}
/**
* @notes 上门时间
* @param $value
* @param $data
* @return string
* @author ljj
* @date 2022/2/11 10:54 上午
*/
public function getDoorTimeAttr($value,$data)
{
$appoint_time_start = date('H:i',$data['appoint_time_start']);
$appoint_time_end = date('H:i',$data['appoint_time_end']);
return $appoint_time_start.'-'.$appoint_time_end;
}
/**
* @notes 支付状态
* @param $value
* @param $data
* @return string|string[]
* @author ljj
* @date 2022/2/11 11:08 上午
*/
public function getPayStatusDescAttr($value,$data)
{
return PayEnum::getPayStatusDesc($data['pay_status']);
}
/**
* @notes 支付方式
* @param $value
* @param $data
* @return string|string[]
* @author ljj
* @date 2022/2/11 12:01 下午
*/
public function getPayWayDescAttr($value,$data)
{
return PayEnum::getPayTypeDesc($data['pay_way']);
}
/**
* @notes 订单状态
* @param $value
* @param $data
* @return string|string[]
* @author ljj
* @date 2022/2/11 11:59 上午
*/
public function getOrderStatusDescAttr($value,$data)
{
return OrderEnum::getOrderStatusDesc($data['order_status']);
}
/**
* @notes 核销状态
* @param $value
* @param $data
* @return string|string[]
* @author ljj
* @date 2022/2/11 12:02 下午
*/
public function getVerificationStatusDescAttr($value,$data)
{
return OrderEnum::getVerificationStatusDesc($data['verification_status']);
}
/**
* @notes 支付时间
* @param $value
* @param $data
* @author ljj
* @date 2022/2/28 11:02 上午
*/
public function getPayTimeAttr($value,$data)
{
return $value ? date('Y-m-d H:i:s',$value) : '-';
}
/**
* @notes
* @param $value
* @param $data
* @return string
* @author cjhao
* @date 2024/11/20 16:05
*/
public function getTrueServerFinishTimeAttr($value,$data){
return $value ? date('Y-m-d H:i:s',$value) : '-';
}
/**
* @notes 完成时间
* @param $value
* @param $data
* @author ljj
* @date 2022/2/28 11:02 上午
*/
public function getFinishTimeAttr($value,$data)
{
return $value ? date('Y-m-d H:i:s',$value) : '-';
}
/**
* @notes 未支付订单自动取消时间
* @param $value
* @param $data
* @return float|int|string
* @author ljj
* @date 2022/3/15 4:28 下午
*/
public function getOrderCancelTimeAttr($value, $data)
{
$end_time = 0;
$is_cancel = ConfigService::get('transaction', 'cancel_unpaid_orders',1);
if ($data['order_status'] == 0 && $data['pay_status'] == 0 && $is_cancel == 1) {
$order_cancel_time = ConfigService::get('transaction', 'cancel_unpaid_orders_times',30);
$end_time = $data['create_time'] + $order_cancel_time * 60;
}
return $end_time;
}
/**
* @notes 省
* @param $value
* @param $data
* @return mixed
* @author ljj
* @date 2022/4/6 6:57 下午
*/
public function getProvinceAttr($value,$data)
{
return Region::where(['id'=>$data['province_id']])->value('name');
}
/**
* @notes 市
* @param $value
* @param $data
* @return mixed
* @author ljj
* @date 2022/4/6 7:02 下午
*/
public function getCityAttr($value,$data)
{
return Region::where(['id'=>$data['city_id']])->value('name');
}
/**
* @notes 区
* @param $value
* @param $data
* @return mixed
* @author ljj
* @date 2022/4/6 7:02 下午
*/
public function getDistrictAttr($value,$data)
{
return Region::where(['id'=>$data['district_id']])->value('name');
}
/**
* @notes 派单状态
* @param $value
* @param $data
* @return string|string[]
* @author ljj
* @date 2022/8/29 4:57 下午
*/
public function getDispatchDescAttr($value,$data)
{
return OrderEnum::getDispatchDesc($data['is_dispatch']);
}
/**
* @notes 订单来源
* @param $value
* @param $data
* @return array|mixed|string|string[]
* @author cjhao
* @date 2024/9/21 23:49
*/
public function getOrderTerminalDescAttr($value,$data)
{
return UserTerminalEnum::getTermInalDesc($data['order_terminal']);
}
public function orderGap()
{
return $this->hasMany(OrderGap::class,'order_id','id')->where(['pay_status'=>PayEnum::ISPAID])->withoutField('create_time,update_time,delete_time');
}
public function orderAppend()
{
return $this->hasMany(OrderAppend::class,'order_id','id')->where(['pay_status'=>PayEnum::ISPAID])->field('sn,order_id,pay_status,goods_name,goods_id,duration,refund_amount,goods_num,pay_time,goods_price,order_amount');
}
}