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; | ||
|  |     } | ||
|  | } |