137 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			137 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\api\validate;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use app\common\basics\Validate;
							 | 
						||
| 
								 | 
							
								use app\common\server\ConfigServer;
							 | 
						||
| 
								 | 
							
								use think\facade\Db;
							 | 
						||
| 
								 | 
							
								use app\common\model\after_sale\AfterSale;
							 | 
						||
| 
								 | 
							
								use app\common\enum\OrderEnum;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AfterSaleValidate extends Validate
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    protected $rule = [
							 | 
						||
| 
								 | 
							
								        'id' => 'require',
							 | 
						||
| 
								 | 
							
								        'order_id' => 'require|checkSettle|checkRefundAddress|checkAfterSale|checkAbleApply',
							 | 
						||
| 
								 | 
							
								        'reason' => 'require',
							 | 
						||
| 
								 | 
							
								        'item_id' => 'require',
							 | 
						||
| 
								 | 
							
								        'refund_type' => 'require',
							 | 
						||
| 
								 | 
							
								        'express_name' => 'require',
							 | 
						||
| 
								 | 
							
								        'invoice_no' => 'require|alphaNum',
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								    protected $message = [
							 | 
						||
| 
								 | 
							
								        'id.require' => '参数错误',
							 | 
						||
| 
								 | 
							
								        'reason.require' => '请选择退款原因',
							 | 
						||
| 
								 | 
							
								        'order_id.require' => '参数错误',
							 | 
						||
| 
								 | 
							
								        'order_id.checkSettle' => '该订单无法申请售后',
							 | 
						||
| 
								 | 
							
								        'order_id.checkRefundAddress' => '该商家未设置售后地址',
							 | 
						||
| 
								 | 
							
								        'item_id.require' => '参数错误',
							 | 
						||
| 
								 | 
							
								        'refund_type.require' => '参数错误',
							 | 
						||
| 
								 | 
							
								        'express_name.require' => '请填写物流公司名称',
							 | 
						||
| 
								 | 
							
								        'invoice_no.require' => '请填写快递单号',
							 | 
						||
| 
								 | 
							
								        'invoice_no.alphaNum' => '请填写正确的快递单号',
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								    protected $scene = [
							 | 
						||
| 
								 | 
							
								        'add' => ['item_id', 'order_id', 'reason', 'refund_type'],
							 | 
						||
| 
								 | 
							
								        'sceneInfo' => ['order_id', 'item_id'],
							 | 
						||
| 
								 | 
							
								        'goodsInfo' => ['item_id'],
							 | 
						||
| 
								 | 
							
								        'express' => ['id', 'express_name', 'invoice_no'],
							 | 
						||
| 
								 | 
							
								        'cancel' => ['id'],
							 | 
						||
| 
								 | 
							
								        'detail' => ['id'],
							 | 
						||
| 
								 | 
							
								        'again' => ['id', 'reason', 'refund_type'],
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 验证该订单是否已经申请售后
							 | 
						||
| 
								 | 
							
								     * @param $value
							 | 
						||
| 
								 | 
							
								     * @param $rule
							 | 
						||
| 
								 | 
							
								     * @param $data
							 | 
						||
| 
								 | 
							
								     * @author suny
							 | 
						||
| 
								 | 
							
								     * @date 2021/7/29 4:43 下午
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function checkAfterSale($value, $rule, $data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								       $after_sale = AfterSale::where(['order_id' => $value,'del' => 0])->find();
							 | 
						||
| 
								 | 
							
								       if(!$after_sale){
							 | 
						||
| 
								 | 
							
								           return true;
							 | 
						||
| 
								 | 
							
								       }else{
							 | 
						||
| 
								 | 
							
								           return '该订单已申请过售后,请勿重复申请';
							 | 
						||
| 
								 | 
							
								       }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 判断该订单是否已经结算
							 | 
						||
| 
								 | 
							
								     * @param $value
							 | 
						||
| 
								 | 
							
								     * @param $rule
							 | 
						||
| 
								 | 
							
								     * @param $data
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author suny
							 | 
						||
| 
								 | 
							
								     * @date 2021/7/13 6:26 下午
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function checkSettle($value, $rule, $data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $settle_id = Db::name('order')->where('id', $value)->value('settle_id');
							 | 
						||
| 
								 | 
							
								        if ($settle_id == 1) {
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 验证退货地址
							 | 
						||
| 
								 | 
							
								     * @param $value
							 | 
						||
| 
								 | 
							
								     * @param $rule
							 | 
						||
| 
								 | 
							
								     * @param $data
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author suny
							 | 
						||
| 
								 | 
							
								     * @date 2021/7/13 6:27 下午
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function checkRefundAddress($value, $rule, $data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($data['refund_type'] == 1) {
							 | 
						||
| 
								 | 
							
								            $shop_id = Db::name('order')->where('id', $value)->value('shop_id');
							 | 
						||
| 
								 | 
							
								            $refund_address = Db::name('shop')->where('id', $shop_id)->value('refund_address');
							 | 
						||
| 
								 | 
							
								            if (empty($refund_address) || $refund_address == '') {
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                return true;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //验证订单是否在售后时间内
							 | 
						||
| 
								 | 
							
								    protected function checkAbleApply($value, $rule, $data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $now = time();
							 | 
						||
| 
								 | 
							
								        $where = [];
							 | 
						||
| 
								 | 
							
								        $where[] = ['o.id', '=', $value];
							 | 
						||
| 
								 | 
							
								        $where[] = ['g.item_id', '=', $data['item_id']];
							 | 
						||
| 
								 | 
							
								        $where[] = ['o.order_status', 'in', [OrderEnum::ORDER_STATUS_GOODS, OrderEnum::ORDER_STATUS_COMPLETE]];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $order = Db::name('order')->alias('o')
							 | 
						||
| 
								 | 
							
								            ->field('o.order_status,o.confirm_take_time,g.refund_status')
							 | 
						||
| 
								 | 
							
								            ->join('order_goods g', 'o.id = g.order_id')
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->find();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $refund_days = ConfigServer::get('transaction', 'order_after_sale_days', 0);
							 | 
						||
| 
								 | 
							
								        if ($refund_days == 0) {
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($order['order_status'] == OrderEnum::ORDER_STATUS_COMPLETE) {
							 | 
						||
| 
								 | 
							
								            $check_time = intval($order['confirm_take_time'] + ($refund_days * 24 * 60 * 60));
							 | 
						||
| 
								 | 
							
								            if ($now > $check_time) {
							 | 
						||
| 
								 | 
							
								                return '不在售后时间内';
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |