rabin 2 years ago
parent
commit
4dc75286d9
4 changed files with 108 additions and 152 deletions
  1. 10 7
      app/card/lib/Code.php
  2. 30 64
      app/card/src/Api.php
  3. 66 79
      app/shop/lib/Sell.php
  4. 2 2
      app/shop/src/My.php

+ 10 - 7
app/card/lib/Code.php

@@ -170,21 +170,24 @@ class Code
     # 验证卡是否可用
     public function check(&$code)
     {
-        $info = Dever::db('card/info')->find($code['card_id']);
-        if (!$info) {
-            return false;
+        $code['info'] = Dever::db('card/info')->find($code['card_id']);
+        if (!$code['info']) {
+            return -1;
+        }
+        if ($code['info']['status'] == 2) {
+            return -2;
         }
-        if ($info['end_dh_day'] && $info['end_dh_day'] > 0) {
-            $code['eddate'] = ($code['bdate'] ? $code['bdate'] : $code['cdate']) + ($info['end_dh_day'] * 86400);
+        if ($code['info']['end_dh_day'] && $code['info']['end_dh_day'] > 0) {
+            $code['eddate'] = ($code['bdate'] ? $code['bdate'] : $code['cdate']) + ($code['info']['end_dh_day'] * 86400);
         }
 
         if (isset($code['eddate']) && $code['eddate'] && $code['eddate'] > 0) {
             $time = time();
             if ($code['eddate'] <= $time) {
-                return false;
+                return -3;
             }
         }
 
-        return $info;
+        return 1;
     }
 }

+ 30 - 64
app/card/src/Api.php

@@ -160,24 +160,14 @@ class Api extends Core
                 Dever::alert('礼品卡卡号错误或礼品卡已兑换');
             }
 
-            $info['info'] = Dever::db('card/info')->find($data['card_id']);
-            if (!$info['info']) {
+            $check = Dever::load('card/lib/code')->check($data);
+            if ($check] == -1) {
                 Dever::alert('兑换失败,礼品卡已下架');
-            }
-            if ($info['info']['status'] == 2) {
+            } elseif ($check == -2) {
                 Dever::alert('兑换失败,礼品卡已下架');
-            }
-
-            if ($info['info']['end_dh_day'] && $info['info']['end_dh_day'] > 0) {
-                $data['eddate'] = ($data['bdate'] ? $data['bdate'] : $data['cdate']) + ($info['info']['end_dh_day'] * 86400);
-            }
-
-            if (isset($data['eddate']) && $data['eddate'] && $data['eddate'] > 0) {
-                $time = time();
-                if ($data['eddate'] <= $time) {
-                    Dever::alert('礼品卡已过兑换时间');
-                }
-            }
+            } elseif ($check == -3) {
+                Dever::alert('礼品卡已过兑换时间');
+            } 
 
             $update['where_id'] = $data['id'];
             $update['dh_uid'] = $this->uid;
@@ -240,37 +230,22 @@ class Api extends Core
         $time = time();
         if ($card) {
             foreach ($card as $k => $v) {
-                $v['info'] = $card[$k]['info'] = Dever::db('card/info')->find($v['card_id']);
-
-                if (!$v['info']) {
-                    unset($card[$k]);
+                $check = Dever::load('card/lib/code')->check($v);
+                if ($check < 0) {
                     continue;
                 }
 
-                if ($v['info']['end_dh_day'] && $v['info']['end_dh_day'] > 0) {
-                    $v['eddate'] = ($v['bdate'] ? $v['bdate'] : $v['cdate']) + ($v['info']['end_dh_day'] * 86400);
-                }
-
-                if (isset($v['eddate']) && $v['eddate'] && $v['eddate'] > 0) {
-                    if ($v['eddate'] <= $time) {
-                        unset($card[$k]);
-                        continue;
-                    }
-                }
-
                 if (!$v['total_cash']) {
                     $v['total_cash'] = $v['info']['value'];
                 }
                 if (!$v['use_cash']) {
                     $v['use_cash'] = 0;
                 }
-                $card[$k]['cash'] = $v['total_cash'] - $v['use_cash'];
-                
-                $info = $card[$k]['type'] = Dever::db('card/type')->find($card[$k]['info']['type_id']);
-
-                $card[$k]['minfo'] = '';
+                $v['cash'] = $v['total_cash'] - $v['use_cash'];
+                $v['type'] = Dever::db('card/type')->find($v['info']['type_id']);
+                $v['minfo'] = '';
 
-                if ($info['city_type'] == 2) {
+                if ($v['type']['city_type'] == 2) {
                     $city = $v['city'];
                     if (!$city) {
                         $card_order = Dever::db('card/order_card')->find($v['order_card_id']);
@@ -282,46 +257,46 @@ class Api extends Core
                     if ($city) {
                         $city = Dever::db('area/city')->find($city);
                         if ($city) {
-                            $card[$k]['minfo'] = '仅限' . $city['name'] . '可用';
+                            $v['minfo'] = '仅限' . $city['name'] . '可用';
                         }
                     }
-                } elseif ($info['type'] == 2 && $v['shop_id']) {
+                } elseif ($v['type']['type'] == 2 && $v['shop_id']) {
                     $shop = Dever::db('shop/info')->find($v['shop_id']);
                     if ($shop) {
-                        $card[$k]['minfo'] = '限' . $shop['name'] . '可用';
+                        $v['minfo'] = '限' . $shop['name'] . '可用';
                     }
                 } else {
                     $config_type = Dever::db('shop/info')->config['config_type'];
 
                     /*
-                    $info['shop_type'] = explode(',', $info['shop_type']);
-                    $card[$k]['minfo'] = array();
-                    foreach ($info['shop_type'] as $tv) {
+                    $v['type']['shop_type'] = explode(',', $v['type']['shop_type']);
+                    $v['minfo'] = array();
+                    foreach ($v['type']['shop_type'] as $tv) {
                         if (isset($config_type[$tv])) {
-                            $card[$k]['minfo'][] = $config_type[$tv];
+                            $v['minfo'][] = $config_type[$tv];
                         }
                     }
-                    $card[$k]['minfo'] = implode('、', $card[$k]['minfo']) . '可用';
+                    $v['minfo'] = implode('、', $v['minfo']) . '可用';
                     */
 
                     
-                    if ($info['shop_type'] && strstr($info['shop_type'], ',')) {
-                        $card[$k]['minfo'] = '多店铺可用';
-                    } elseif ($info['shop_type'] && isset($config_type[$info['shop_type']])) {
-                        $card[$k]['minfo'] = $config_type[$info['shop_type']] . '可用';
+                    if ($v['type']['shop_type'] && strstr($v['type']['shop_type'], ',')) {
+                        $v['minfo'] = '多店铺可用';
+                    } elseif ($v['type']['shop_type'] && isset($config_type[$v['type']['shop_type']])) {
+                        $v['minfo'] = $config_type[$v['type']['shop_type']] . '可用';
                     }
                 }
 
-                $card[$k]['cinfo'] = '';
+                $v['cinfo'] = '';
                 if ($v['info']['category']) {
-                    $card[$k]['cinfo'] = '限部分要求商品可用';
+                    $v['cinfo'] = '限部分要求商品可用';
                 } else {
                     $goods = Dever::db('card/info_goods')->find(array('card_id' => $v['info']['id']));
                     if ($goods) {
-                        $card[$k]['cinfo'] = '限部分要求商品可用';
+                        $v['cinfo'] = '限部分要求商品可用';
                     }
                 }
-                $this->data['card'][] = $card[$k];
+                $this->data['card'][] = $v;
             }
         }
 
@@ -360,19 +335,10 @@ class Api extends Core
         if ($card) {
             $time = time();
             foreach ($card as $k => $v) {
-                $v['info'] = Dever::db('card/info')->find($v['card_id']);
-                if (!$v['info']) {
+                $check = Dever::load('card/lib/code')->check($v);
+                if ($check < 0) {
                     continue;
                 }
-                if ($v['info']['end_dh_day'] && $v['info']['end_dh_day'] > 0) {
-                    $v['eddate'] = ($v['bdate'] ? $v['bdate'] : $v['cdate']) + ($v['info']['end_dh_day'] * 86400);
-                }
-
-                if (isset($v['eddate']) && $v['eddate'] && $v['eddate'] > 0) {
-                    if ($v['eddate'] <= $time) {
-                        continue;
-                    }
-                }
                 if (!$v['total_cash']) {
                     $v['total_cash'] = $v['info']['value'];
                 }

+ 66 - 79
app/shop/lib/Sell.php

@@ -559,103 +559,90 @@ class Sell
                 # 验证这个礼品卡属于自己
                 $card_code = Dever::db('card/code')->find($card);
                 if ($card_code['dh_uid'] == $data['uid']) {
-                    $card_info = Dever::db('card/info')->find($card_code['card_id']);
-                    $card_state = true;
-                    if (!$card_info) {
-                        $card_state = false;
-                    }
-                    if ($card_info['end_dh_day'] && $card_info['end_dh_day'] > 0) {
-                        $card_code['eddate'] = ($card_code['bdate'] ? $card_code['bdate'] : $card_code['cdate']) + ($card_info['end_dh_day'] * 86400);
-                    }
-
-                    if (isset($card_code['eddate']) && $card_code['eddate'] && $card_code['eddate'] > 0) {
-                        $time = time();
-                        if ($card_code['eddate'] <= $time) {
-                            $card_state = false;
+                    $card_state = Dever::load('card/lib/code')->check($card_code);
+                    if ($card_state == 1) {
+                        if (!$card_code['total_cash']) {
+                            $card_code['total_cash'] = $card_code['info']['value'];
                         }
-                    }
+                        if (!$card_code['use_cash']) {
+                            $card_code['use_cash'] = 0;
+                        }
+                        $card_cash = $card_code['total_cash'] - $card_code['use_cash'];
 
-                    if (!$card_code['total_cash']) {
-                        $card_code['total_cash'] = $card_info['value'];
-                    }
-                    if (!$card_code['use_cash']) {
-                        $card_code['use_cash'] = 0;
-                    }
-                    $card_cash = $card_code['total_cash'] - $card_code['use_cash'];
-
-                    if ($card_state && $card_cash > 0) {
-                        $data['card'] = array();
-                        $card_goods = array();
-                        $check = false;
-                        $xian = false;
-                        if ($data['shop']['type'] == 1 && $card_info['shop_set'] == 1) {
+                        if ($card_cash > 0) {
+                            $data['card'] = array();
+                            $card_goods = array();
                             $check = false;
                             $xian = false;
-                        } else {
-                            $xian = true;
-                            $goods = Dever::db('card/info_goods')->getData(array('card_id' => $card_info['id']));
-                            if ($goods || $card_info['category']) {
-                                $check = true;
+                            if ($data['shop']['type'] == 1 && $card_code['info']['shop_set'] == 1) {
+                                $check = false;
+                                $xian = false;
+                            } else {
+                                $xian = true;
+                                $goods = Dever::db('card/info_goods')->getData(array('card_id' => $card_code['info'['id']));
+                                if ($goods || $card_code['info'['category']) {
+                                    $check = true;
+                                }
                             }
-                        }
 
-                        if ($check) {
-                            $price = 0;
-                            $card_info['category'] = explode(',', $card_info['category']);
-                            if ($goods) {
-                                $goods = array_keys($goods);
-                            }
-                            # 检测当前商品是否符合该卡的限制
-                            foreach ($data['list'] as $k => $v) {
-                                if (!isset($v['cash'])) {
-                                    $v['cash'] = $v['price'];
-                                }
+                            if ($check) {
+                                $price = 0;
+                                $card_code['info'['category'] = explode(',', $card_code['info'['category']);
                                 if ($goods) {
-                                    if (in_array($v['id'], $goods)) {
-                                        if ($card_info['category']) {
-                                            if (in_array($v['top_category_id'], $card_info['category'])) {
+                                    $goods = array_keys($goods);
+                                }
+                                # 检测当前商品是否符合该卡的限制
+                                foreach ($data['list'] as $k => $v) {
+                                    if (!isset($v['cash'])) {
+                                        $v['cash'] = $v['price'];
+                                    }
+                                    if ($goods) {
+                                        if (in_array($v['id'], $goods)) {
+                                            if ($card_code['info'['category']) {
+                                                if (in_array($v['top_category_id'], $card_code['info'['category'])) {
+                                                    $price += ($v['cash'] * $v['num']);
+                                                    $card_goods[] = $v;
+                                                }
+                                            } else {
                                                 $price += ($v['cash'] * $v['num']);
                                                 $card_goods[] = $v;
                                             }
-                                        } else {
+                                        }
+                                    } elseif ($card_code['info'['category']) {
+                                        if (in_array($v['top_category_id'], $card_code['info'['category'])) {
                                             $price += ($v['cash'] * $v['num']);
                                             $card_goods[] = $v;
                                         }
                                     }
-                                } elseif ($card_info['category']) {
-                                    if (in_array($v['top_category_id'], $card_info['category'])) {
-                                        $price += ($v['cash'] * $v['num']);
-                                        $card_goods[] = $v;
-                                    }
                                 }
+                            } else {
+                                $price = $data['price'];
                             }
-                        } else {
-                            $price = $data['price'];
-                        }
 
-                        if ($card_cash >= $price) {
-                            $data['card']['cash'] = $price;
-                            $data['price'] = 0;
-                        } else {
-                            $data['card']['cash'] = $card_cash;
-                            $data['price'] -= $data['card']['cash'];
-                        }
+                            if ($card_cash >= $price) {
+                                $data['card']['cash'] = $price;
+                                $data['price'] = 0;
+                            } else {
+                                $data['card']['cash'] = $card_cash;
+                                $data['price'] -= $data['card']['cash'];
+                            }
 
-                        if ($xian && ($price <= 0 || ($card_info['min'] > 0 && $price < $card_info['min']))) {
-                            # 不满足限额
-                            unset($data['card']);
-                        } else {
-                            $data['card']['info'] = $card_info;
-                            $data['card']['goods'] = $card_goods;
-                            $data['card']['id'] = $card_code['id'];
-                            $data['card']['card'] = $card_code['card'];
-                            
-                            $data['card']['cash'] = round($data['card']['cash'], 2);
-                            $config = Dever::db('main/sell_config')->find();
-                            $card_type = Dever::db('card/type')->find($card_info['type_id']);
-                            $data['card']['name'] = $config['card_name'];
-                            $card = substr($card_code['card'], -4);
-                            $data['card']['name'] .= '('.$card_type['name'].$card.')';
+                            if ($xian && ($price <= 0 || ($card_code['info'['min'] > 0 && $price < $card_code['info'['min']))) {
+                                # 不满足限额
+                                unset($data['card']);
+                            } else {
+                                $data['card']['info'] = $card_code['info';
+                                $data['card']['goods'] = $card_goods;
+                                $data['card']['id'] = $card_code['id'];
+                                $data['card']['card'] = $card_code['card'];
+                                
+                                $data['card']['cash'] = round($data['card']['cash'], 2);
+                                $config = Dever::db('main/sell_config')->find();
+                                $card_type = Dever::db('card/type')->find($card_code['info'['type_id']);
+                                $data['card']['name'] = $config['card_name'];
+                                $card = substr($card_code['card'], -4);
+                                $data['card']['name'] .= '('.$card_type['name'].$card.')';
+                            }
                         }
                     }
                 }

+ 2 - 2
app/shop/src/My.php

@@ -26,8 +26,8 @@ class My extends Core
 		if ($card) {
 			$time = time();
 			foreach ($card as $k => $v) {
-				$info = Dever::load('card/lib/code')->check($v);
-				if ($info) {
+				$state = Dever::load('card/lib/code')->check($v);
+				if ($state > 0) {
 					$this->data['card_num']++;
 				}
 			}