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