Selaa lähdekoodia

Merge branch 'discount' into bonus_rate

stanley-king 6 vuotta sitten
vanhempi
commit
c22c7a340d

+ 1 - 1
core/framework/libraries/validator.php

@@ -112,7 +112,7 @@ Class Validator{
 						break;
 					case "compare":
 						if ($v['operator'] != ""){
-							eval("\$result = '" . $v['input'] . "'" . $v['operator'] . "'" . $v['to'] . "'" . ";" );
+                            eval("\$result = '" . $v['input'] . "'" . $v['operator'] . "'" . $v['to'] . "'" . ";" );
 							$this->validateparam[$k]['result'] = $result;	
 						}
 						break;

+ 46 - 0
crontab/control/command.php

@@ -19,6 +19,7 @@ require_once(BASE_ROOT_PATH . '/helper/account_helper.php');
 require_once(BASE_ROOT_PATH . '/data/mobile/lrlz_staff.php');
 require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
+require_once(BASE_ROOT_PATH . '/helper/kdn_helper.php');
 
 class commandControl extends BaseCronControl
 {
@@ -277,8 +278,53 @@ class commandControl extends BaseCronControl
             }
         }
     }
+
     public function init_shakeOp()
     {
         $ret = room\factory_client::instance()->create_shake(self::admin_member_id);
     }
+
+    public function update_expressOp()
+    {
+        $start_time = microtime(true);
+        $mod = Model();
+        $express = rkcache('express', true);
+
+        $i = 0;
+        while(true)
+        {
+            $start = $i * 1000;
+            $orders = $mod->query("SELECT lrlz_order.order_id,order_sn,pay_sn,buyer_id,buyer_name,order_state,shipping_code, 
+                    shipping_express_id FROM lrlz_order JOIN lrlz_order_common 
+                    ON lrlz_order_common.order_id = lrlz_order.order_id 
+                    WHERE ( order_state >= '30' ) ORDER BY order_id ASC limit {$start},1000");
+
+            if (empty($orders))
+            {
+                break;
+            }
+            $i++;
+
+            foreach ($orders as $order)
+            {
+                if (intval($order['shipping_express_id']) == 0) continue;
+
+                if ($order['shipping_code'] == "") continue;
+
+                $e_code = $express[$order['shipping_express_id']]['e_kdn_code'];
+                $e_name = $express[$order['shipping_express_id']]['e_name'];
+
+                $key = "express_{$e_code}_" . $order['shipping_code'];
+                $deliver_info = rkcache($key);
+
+                if (isset($deliver_info['Success']) && $deliver_info['Success'] == false)
+                {
+                    Log::record("重新订阅 {$e_name}::{$order['shipping_code']}, order:{$order['order_sn']}",Log::DEBUG);
+                    kdn_helper::req_subscribe($e_code, $order['shipping_code'],$order['order_sn']);
+                }
+            }
+        }
+        $elapsed = microtime(true) - $start_time;
+        Log::record("Update_Express 结束,耗时 {$elapsed}",Log::DEBUG);
+    }
 }

+ 2 - 2
data/logic/queue.logic.php

@@ -589,14 +589,14 @@ class queueLogic
     public function subscribeKDN($param)
     {
         if (empty($param) || empty($param['order_sn'])) {
-            Log::record("kdn_helper: 数据有误! param:" . json_encode($param));
+            Log::record("kdn_helper_new: 数据有误! param:" . json_encode($param));
             return callback(false);
         }
 
         try {
             kdn_helper::subscribe($param['order_sn']);
         } catch (Exception $e) {
-            Log::record("kdn_helper: fall error\treturn:" . $e->getMessage() . "\t param:" . json_encode($param));
+            Log::record("kdn_helper_new: fall error\treturn:" . $e->getMessage() . "\t param:" . json_encode($param));
         }
 
         return callback(true);

+ 0 - 42
helper/car_convert/formater.php

@@ -1,42 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: lionared
- * Date: 2018/1/11
- * Time: 上午12:57
- */
-
-namespace car_convert;
-
-interface IFormat
-{
-    public function format();
-}
-
-class basic_format implements IFormat
-{
-    private $mParams;
-    public function __construct($params)
-    {
-        $this->mParams = $params;
-    }
-
-    public function format()
-    {
-        // TODO: Implement format() method.
-    }
-}
-
-class body_format implements IFormat
-{
-    private $mParams;
-    public function __construct($params)
-    {
-        $this->mParams = $params;
-    }
-
-    public function format()
-    {
-        // TODO: Implement format() method.
-    }
-}

+ 0 - 558
helper/car_convert/importer.php

@@ -1,558 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: lionared
- * Date: 2018/1/10
- * Time: 下午6:38
- */
-
-namespace car_convert;
-
-use Exception;
-
-class importer
-{
-    /**
-     * @var string $_file: file path to load
-     */
-    protected $_file;
-    /**
-     * @var array $_header: table header 缓存表头字段
-     */
-    protected $_header;
-    /**
-     * @var array $_data: table data 缓存数据各行
-     */
-    protected $_data;
-    /**
-     * @var string 解析csv文件分隔符
-     */
-    const _delimiter = ',';
-
-    private static $stAlias = null;
-    /**
-     * @var $_fileds_pos: 缓存各字段对应坐标
-     */
-    private $_fileds_pos;
-    /**
-     * ImportAutoData constructor.
-     * @param $filepath
-     * @throws \Exception
-     */
-    public function __construct($filepath)
-    {
-        if(self::$stAlias == null) {
-            self::init_alias();
-        }
-
-        if(is_file($filepath)) {
-            $this->_file = $filepath;
-        } else {
-            throw new Exception("no file given!");
-        }
-    }
-    private static function init_alias()
-    {
-        self::$stAlias = [];
-        self::$stAlias['base_info'] = self::base_info();
-        self::$stAlias['body_info'] = self::body_info();
-        self::$stAlias['engine_info'] = self::engine_info();
-        self::$stAlias['motor_info'] = self::motor_info();
-        self::$stAlias['gearbox_info'] = self::gearbox_info();
-        self::$stAlias['underpan_info'] = self::underpan_info();
-        self::$stAlias['brake_info'] = self::brake_info();
-        self::$stAlias['secure_info'] = self::secure_info();
-        self::$stAlias['oper_info'] = self::oper_info();
-        self::$stAlias['guard_info'] = self::guard_info();
-        self::$stAlias['inside_info'] = self::inside_info();
-        self::$stAlias['seat_info'] = self::seat_info();
-        self::$stAlias['media_info'] = self::media_info();
-        self::$stAlias['light_info'] = self::light_info();
-        self::$stAlias['glass_info'] = self::glass_info();
-        self::$stAlias['air_info'] = self::air_info();
-    }
-
-    private static function body_info()
-    {
-        $data = [
-            [ 'origin'=>'车身-长度(mm)',               'alias'=>'length'],
-            [ 'origin'=>'车身-宽度(mm)',               'alias'=>'width' ],
-            [ 'origin'=>'车身-高度(mm)',               'alias'=>'height'],
-            [ 'origin'=>'车身-轴距(mm)',               'alias'=>'between_wheels'],
-            [ 'origin'=>'车身-前轮距(mm)',             'alias'=>'front_wheels_distance'],
-            [ 'origin'=>'车身-后轮距(mm)',             'alias'=>'back_wheels_distance'],
-            [ 'origin'=>'车身-最小离地间隙(mm)',        'alias'=>'min_ground'],
-            [ 'origin'=>'车身-整备质量(kg)',           'alias'=>'total_weight'],
-            [ 'origin'=>'车身-车身结构',               'alias'=>'body_struct'],
-            [ 'origin'=>'车身-车门数(个)',             'alias'=>'doors'],
-            [ 'origin'=>'车身-座位数(个)',             'alias'=>'seats'],
-            [ 'origin'=>'车身-油箱容积(L)',            'alias'=>'fuel_vol'],
-            [ 'origin'=>'车身-行李厢容积(L)',          'alias'=>'cargo_vol'],
-            [ 'origin'=>'车身-后排车门开启方式',        'alias'=>'cdoor'],
-            [ 'origin'=>'车身-货箱尺寸(mm)',           'alias'=>'cargo_size'],
-            [ 'origin'=>'车身-最大载重质量(kg)',        'alias'=>'carry_cap'],
-        ];
-        return $data;
-    }
-
-    private static function base_info()
-    {
-        $data = [
-            [ 'origin'=>'车系ID',             'alias'=>'car_id'],
-            [ 'origin'=>'品牌',               'alias'=>'brand'],
-            [ 'origin'=>'品牌图标',            'alias'=>'brand_logo'],
-            [ 'origin'=>'国家',               'alias'=>'country'],
-            [ 'origin'=>'车系',               'alias'=>'car_series'],
-            [ 'origin'=>'生产方式',            'alias'=>'produce_type'],
-            [ 'origin'=>'车系首页',            'alias'=>'series_home'],
-            [ 'origin'=>'车型ID',              'alias'=>'type_id'],
-            [ 'origin'=>'基本参数-车型名称',        'alias'=>'type_name'],
-            [ 'origin'=>'基本参数-厂商指导价(元)',    'alias'=>'market_price'],
-            [ 'origin'=>'基本参数-厂商',          'alias'=>'manufacturer'],
-            [ 'origin'=>'基本参数-级别',          'alias'=>'car_level'],
-            [ 'origin'=>'基本参数-上市时间',          'alias'=>'market_time'],
-            [ 'origin'=>'基本参数-发动机',         'alias'=>'engine'],
-            [ 'origin'=>'基本参数-变速箱',         'alias'=>'gearbox'],
-            [ 'origin'=>'基本参数-长*宽*高(mm)',           'alias'=>'car_size'],
-            [ 'origin'=>'基本参数-车身结构',               'alias'=>'car_struct'],
-            [ 'origin'=>'基本参数-最高车速(km/h)',             'alias'=>'max_speed'],
-            [ 'origin'=>'基本参数-官方0-100km/h加速(s)',        'alias'=>'official_speedup'],
-            [ 'origin'=>'基本参数-实测0-100km/h加速(s)',        'alias'=>'actual_speedup'],
-            [ 'origin'=>'基本参数-实测100-0km/h制动(m)',        'alias'=>'actual_brake'],
-            [ 'origin'=>'基本参数-实测油耗(L/100km)',           'alias'=>'actual_fueluse'],
-            [ 'origin'=>'基本参数-工信部综合油耗(L/100km)',      'alias'=>'gerenal_fueluse'],
-            [ 'origin'=>'基本参数-实测离地间隙(mm)',            'alias'=>'actual_ground'],
-            [ 'origin'=>'基本参数-整车质保',               'alias'=>'quality_guarantee'],
-            [ 'origin'=>'基本参数-能源类型',        'alias'=>'energy_type'],
-            [ 'origin'=>'基本参数-最大功率(kW)',    'alias'=>'max_power'],
-            [ 'origin'=>'基本参数-最大扭矩(N・m)',   'alias'=>'max_torque'],
-            [ 'origin'=>'基本参数-纯电续航里程',               'alias'=>'electric_cruise'],
-            [ 'origin'=>'基本参数-电池充电时间',               'alias'=>'electric_power'],
-            [ 'origin'=>'基本参数-快充电量百分比',               'alias'=>'fast_charge']];
-
-        return $data;
-    }
-
-    private static function engine_info()
-    {
-        $data = [
-            [ 'origin'=>'发动机-发动机型号', 'alias'=>'engine0'],
-            [ 'origin'=>'发动机-排量(mL)', 'alias'=>'engine1'],
-            [ 'origin'=>'发动机-进气形式', 'alias'=>'engine2'],
-            [ 'origin'=>'发动机-气缸排列形式', 'alias'=>'engine3'],
-            [ 'origin'=>'发动机-气缸数(个)', 'alias'=>'engine4'],
-            [ 'origin'=>'发动机-每缸气门数(个)', 'alias'=>'engine5'],
-            [ 'origin'=>'发动机-压缩比', 'alias'=>'engine6'],
-            [ 'origin'=>'发动机-配气机构', 'alias'=>'engine7'],
-            [ 'origin'=>'发动机-缸径(mm)', 'alias'=>'engine8'],
-            [ 'origin'=>'发动机-行程(mm)', 'alias'=>'engine9'],
-            [ 'origin'=>'发动机-最大马力(Ps)', 'alias'=>'engine10'],
-            [ 'origin'=>'发动机-最大功率(kW)', 'alias'=>'engine11'],
-            [ 'origin'=>'发动机-最大功率转速(rpm)', 'alias'=>'engine12'],
-            [ 'origin'=>'发动机-最大扭矩(N・m)', 'alias'=>'engine13'],
-            [ 'origin'=>'发动机-最大扭矩转速(rpm)', 'alias'=>'engine14'],
-            [ 'origin'=>'发动机-发动机特有技术', 'alias'=>'engine15'],
-            [ 'origin'=>'发动机-燃料形式', 'alias'=>'engine16'],
-            [ 'origin'=>'发动机-燃油标号', 'alias'=>'engine17'],
-            [ 'origin'=>'发动机-供油方式', 'alias'=>'engine18'],
-            [ 'origin'=>'发动机-缸盖材料', 'alias'=>'engine19'],
-            [ 'origin'=>'发动机-缸体材料', 'alias'=>'engine20'],
-            [ 'origin'=>'发动机-环保标准', 'alias'=>'engine21']
-        ];
-        return $data;
-    }
-
-    private static function motor_info()
-    {
-        $data = [
-            [ 'origin'=>'电动机-电机类型', 'alias'=>'motor0'],
-            [ 'origin'=>'电动机-电动机总功率(kW)', 'alias'=>'motor1'],
-            [ 'origin'=>'电动机-电动机总扭矩(N・m)', 'alias'=>'motor2'],
-            [ 'origin'=>'电动机-前电动机最大功率(kW)', 'alias'=>'motor3'],
-            [ 'origin'=>'电动机-前电动机最大扭矩(N・m)', 'alias'=>'motor4'],
-            [ 'origin'=>'电动机-后电动机最大功率(kW)', 'alias'=>'motor5'],
-            [ 'origin'=>'电动机-后电动机最大扭矩(N・m)', 'alias'=>'motor6'],
-            [ 'origin'=>'电动机-系统综合功率(kW)', 'alias'=>'motor7'],
-            [ 'origin'=>'电动机-系统综合扭矩(N・m)', 'alias'=>'motor8'],
-            [ 'origin'=>'电动机-驱动电机数', 'alias'=>'motor9'],
-            [ 'origin'=>'电动机-电机布局', 'alias'=>'motor10'],
-            [ 'origin'=>'电动机-电池类型', 'alias'=>'motor11'],
-            [ 'origin'=>'电动机-工信部续航里程(km)', 'alias'=>'motor12'],
-            [ 'origin'=>'电动机-电池容量(kWh)', 'alias'=>'motor13'],
-            [ 'origin'=>'电动机-百公里耗电量(kWh/100km)', 'alias'=>'motor14'],
-            [ 'origin'=>'电动机-电池组质保', 'alias'=>'motor15'],
-            [ 'origin'=>'电动机-电池充电时间', 'alias'=>'motor16'],
-            [ 'origin'=>'电动机-快充电量(%)', 'alias'=>'motor17'],
-            [ 'origin'=>'电动机-充电桩价格', 'alias'=>'motor18'],
-        ];
-        return $data;
-    }
-
-    private static function gearbox_info()
-    {
-        $data = [
-            [ 'origin'=>'变速箱-简称', 'alias'=>'gearbox0'],
-            [ 'origin'=>'变速箱-挡位个数', 'alias'=>'gearbox1'],
-            [ 'origin'=>'变速箱-变速箱类型', 'alias'=>'gearbox2'],
-        ];
-        return $data;
-    }
-
-    private static function underpan_info()
-    {
-        $data = [
-            [ 'origin'=>'底盘转向-驱动方式', 'alias'=>'underpan0'],
-            [ 'origin'=>'底盘转向-前悬架类型', 'alias'=>'underpan1'],
-            [ 'origin'=>'底盘转向-后悬架类型', 'alias'=>'underpan2'],
-            [ 'origin'=>'底盘转向-助力类型', 'alias'=>'underpan3'],
-            [ 'origin'=>'底盘转向-车体结构', 'alias'=>'underpan4'],
-            [ 'origin'=>'底盘转向-四驱形式', 'alias'=>'underpan5'],
-            [ 'origin'=>'底盘转向-中央差速器结构', 'alias'=>'underpan6'],
-        ];
-        return $data;
-    }
-
-    private static function brake_info()
-    {
-        $data = [
-            [ 'origin'=>'车轮制动-前制动器类型', 'alias'=>'brake0'],
-            [ 'origin'=>'车轮制动-后制动器类型', 'alias'=>'brake1'],
-            [ 'origin'=>'车轮制动-驻车制动类型', 'alias'=>'brake2'],
-            [ 'origin'=>'车轮制动-前轮胎规格', 'alias'=>'brake3'],
-            [ 'origin'=>'车轮制动-后轮胎规格', 'alias'=>'brake4'],
-            [ 'origin'=>'车轮制动-备胎规格', 'alias'=>'brake5'],
-        ];
-        return $data;
-    }
-
-    private static function secure_info()
-    {
-        $data = [
-            [ 'origin'=>'主/被动安全装备-主驾驶座安全气囊', 'alias'=>'secure0'],
-            [ 'origin'=>'主/被动安全装备-副驾驶座安全气囊', 'alias'=>'secure1'],
-            [ 'origin'=>'主/被动安全装备-前/后排侧气囊', 'alias'=>'secure2'],
-            [ 'origin'=>'主/被动安全装备-前/后排头部气囊(气帘)', 'alias'=>'secure3'],
-            [ 'origin'=>'主/被动安全装备-膝部气囊', 'alias'=>'secure4'],
-            [ 'origin'=>'主/被动安全装备-胎压监测装置', 'alias'=>'secure5'],
-            [ 'origin'=>'主/被动安全装备-零胎压继续行驶', 'alias'=>'secure6'],
-            [ 'origin'=>'主/被动安全装备-安全带未系提示', 'alias'=>'secure7'],
-            [ 'origin'=>'主/被动安全装备-ISOFIX儿童座椅接口', 'alias'=>'secure8'],
-            [ 'origin'=>'主/被动安全装备-ABS防抱死', 'alias'=>'secure9'],
-            [ 'origin'=>'主/被动安全装备-制动力分配(EBD/CBC等)', 'alias'=>'secure10'],
-            [ 'origin'=>'主/被动安全装备-刹车辅助(EBA/BAS/BA等)', 'alias'=>'secure11'],
-            [ 'origin'=>'主/被动安全装备-牵引力控制(ASR/TCS/TRC等)', 'alias'=>'secure12'],
-            [ 'origin'=>'主/被动安全装备-车身稳定控制(ESC/ESP/DSC等)', 'alias'=>'secure13'],
-            [ 'origin'=>'主/被动安全装备-并线辅助', 'alias'=>'secure14'],
-            [ 'origin'=>'主/被动安全装备-车道偏离预警系统', 'alias'=>'secure15'],
-            [ 'origin'=>'主/被动安全装备-主动刹车/主动安全系统', 'alias'=>'secure16'],
-            [ 'origin'=>'主/被动安全装备-夜视系统', 'alias'=>'secure17'],
-            [ 'origin'=>'主/被动安全装备-疲劳驾驶提示', 'alias'=>'secure18'],
-            [ 'origin'=>'主/被动安全装备-主/副驾驶座安全气囊', 'alias'=>'secure19'],
-            [ 'origin'=>'主/被动安全装备-前排侧气囊', 'alias'=>'secure20'],
-            [ 'origin'=>'主/被动安全装备-后排侧气囊', 'alias'=>'secure21'],
-            [ 'origin'=>'主/被动安全装备-前排头部气囊(气帘)', 'alias'=>'secure22'],
-            [ 'origin'=>'主/被动安全装备-后排头部气囊(气帘)', 'alias'=>'secure23']
-        ];
-        return $data;
-    }
-
-    private static function oper_info()
-    {
-        $data = [
-            [ 'origin'=>'辅助/操控配置-前驻车雷达', 'alias'=>'oper0'],
-            [ 'origin'=>'辅助/操控配置-后驻车雷达', 'alias'=>'oper1'],
-            [ 'origin'=>'辅助/操控配置-倒车视频影像', 'alias'=>'oper2'],
-            [ 'origin'=>'辅助/操控配置-全景摄像头', 'alias'=>'oper3'],
-            [ 'origin'=>'辅助/操控配置-定速巡航', 'alias'=>'oper4'],
-            [ 'origin'=>'辅助/操控配置-自适应巡航', 'alias'=>'oper5'],
-            [ 'origin'=>'辅助/操控配置-自动泊车入位', 'alias'=>'oper6'],
-            [ 'origin'=>'辅助/操控配置-发动机启停技术', 'alias'=>'oper7'],
-            [ 'origin'=>'辅助/操控配置-自动驾驶技术', 'alias'=>'oper8'],
-            [ 'origin'=>'辅助/操控配置-上坡辅助', 'alias'=>'oper9'],
-            [ 'origin'=>'辅助/操控配置-自动驻车', 'alias'=>'oper10'],
-            [ 'origin'=>'辅助/操控配置-陡坡缓降', 'alias'=>'oper11'],
-            [ 'origin'=>'辅助/操控配置-可变悬架', 'alias'=>'oper12'],
-            [ 'origin'=>'辅助/操控配置-空气悬架', 'alias'=>'oper13'],
-            [ 'origin'=>'辅助/操控配置-电磁感应悬架', 'alias'=>'oper14'],
-            [ 'origin'=>'辅助/操控配置-可变转向比', 'alias'=>'oper15'],
-            [ 'origin'=>'辅助/操控配置-前桥限滑差速器/差速锁', 'alias'=>'oper16'],
-            [ 'origin'=>'辅助/操控配置-中央差速器锁止功能', 'alias'=>'oper17'],
-            [ 'origin'=>'辅助/操控配置-后桥限滑差速器/差速锁', 'alias'=>'oper18'],
-            [ 'origin'=>'辅助/操控配置-整体主动转向系统', 'alias'=>'oper19'],
-            [ 'origin'=>'辅助/操控配置-前/后驻车雷达', 'alias'=>'oper20'],
-        ];
-        return $data;
-    }
-
-    private static function guard_info()
-    {
-        $data = [
-            [ 'origin'=>'外部/防盗配置-电动天窗', 'alias'=>'guard0'],
-            [ 'origin'=>'外部/防盗配置-全景天窗', 'alias'=>'guard1'],
-            [ 'origin'=>'外部/防盗配置-多天窗', 'alias'=>'guard2'],
-            [ 'origin'=>'外部/防盗配置-运动外观套件', 'alias'=>'guard3'],
-            [ 'origin'=>'外部/防盗配置-铝合金轮圈', 'alias'=>'guard4'],
-            [ 'origin'=>'外部/防盗配置-电动吸合门', 'alias'=>'guard5'],
-            [ 'origin'=>'外部/防盗配置-侧滑门', 'alias'=>'guard6'],
-            [ 'origin'=>'外部/防盗配置-电动后备厢', 'alias'=>'guard7'],
-            [ 'origin'=>'外部/防盗配置-感应后备厢', 'alias'=>'guard8'],
-            [ 'origin'=>'外部/防盗配置-车顶行李架', 'alias'=>'guard9'],
-            [ 'origin'=>'外部/防盗配置-发动机电子防盗', 'alias'=>'guard10'],
-            [ 'origin'=>'外部/防盗配置-车内中控锁', 'alias'=>'guard11'],
-            [ 'origin'=>'外部/防盗配置-遥控钥匙', 'alias'=>'guard12'],
-            [ 'origin'=>'外部/防盗配置-无钥匙启动系统', 'alias'=>'guard13'],
-            [ 'origin'=>'外部/防盗配置-无钥匙进入系统', 'alias'=>'guard14'],
-            [ 'origin'=>'外部/防盗配置-远程启动', 'alias'=>'guard15'],
-        ];
-        return $data;
-    }
-
-    private static function inside_info()
-    {
-        $data = [
-            [ 'origin'=>'内部配置-皮质方向盘', 'alias'=>'inside0'],
-            [ 'origin'=>'内部配置-方向盘调节', 'alias'=>'inside1'],
-            [ 'origin'=>'内部配置-方向盘电动调节', 'alias'=>'inside2'],
-            [ 'origin'=>'内部配置-多功能方向盘', 'alias'=>'inside3'],
-            [ 'origin'=>'内部配置-方向盘换挡', 'alias'=>'inside4'],
-            [ 'origin'=>'内部配置-方向盘加热', 'alias'=>'inside5'],
-            [ 'origin'=>'内部配置-方向盘记忆', 'alias'=>'inside6'],
-            [ 'origin'=>'内部配置-行车电脑显示屏', 'alias'=>'inside7'],
-            [ 'origin'=>'内部配置-全液晶仪表盘', 'alias'=>'inside8'],
-            [ 'origin'=>'内部配置-HUD抬头数字显示', 'alias'=>'inside9'],
-            [ 'origin'=>'内部配置-内置行车记录仪', 'alias'=>'inside10'],
-            [ 'origin'=>'内部配置-主动降噪', 'alias'=>'inside11'],
-            [ 'origin'=>'内部配置-手机无线充电', 'alias'=>'inside12'],
-        ];
-        return $data;
-    }
-
-    private static function seat_info()
-    {
-        $data = [
-            [ 'origin'=>'座椅配置-座椅材质', 'alias'=>'seat0'],
-            [ 'origin'=>'座椅配置-运动风格座椅', 'alias'=>'seat1'],
-            [ 'origin'=>'座椅配置-座椅高低调节', 'alias'=>'seat2'],
-            [ 'origin'=>'座椅配置-腰部支撑调节', 'alias'=>'seat3'],
-            [ 'origin'=>'座椅配置-肩部支撑调节', 'alias'=>'seat4'],
-            [ 'origin'=>'座椅配置-主/副驾驶座电动调节', 'alias'=>'seat5'],
-            [ 'origin'=>'座椅配置-第二排靠背角度调节', 'alias'=>'seat6'],
-            [ 'origin'=>'座椅配置-第二排座椅移动', 'alias'=>'seat7'],
-            [ 'origin'=>'座椅配置-后排座椅电动调节', 'alias'=>'seat8'],
-            [ 'origin'=>'座椅配置-副驾驶位后排可调节按钮', 'alias'=>'seat9'],
-            [ 'origin'=>'座椅配置-电动座椅记忆', 'alias'=>'seat10'],
-            [ 'origin'=>'座椅配置-前排座椅加热', 'alias'=>'seat11'],
-            [ 'origin'=>'座椅配置-后排座椅加热', 'alias'=>'seat12'],
-            [ 'origin'=>'座椅配置-前/后排座椅通风', 'alias'=>'seat13'],
-            [ 'origin'=>'座椅配置-前/后排座椅按摩', 'alias'=>'seat14'],
-            [ 'origin'=>'座椅配置-第二排独立座椅', 'alias'=>'seat15'],
-            [ 'origin'=>'座椅配置-第三排座椅', 'alias'=>'seat16'],
-            [ 'origin'=>'座椅配置-后排座椅放倒方式', 'alias'=>'seat17'],
-            [ 'origin'=>'座椅配置-前中央扶手', 'alias'=>'seat18'],
-            [ 'origin'=>'座椅配置-后中央扶手', 'alias'=>'seat19'],
-            [ 'origin'=>'座椅配置-后排杯架', 'alias'=>'seat20'],
-            [ 'origin'=>'座椅配置-可加热/制冷杯架', 'alias'=>'seat21'],
-            [ 'origin'=>'座椅配置-前/后排座椅加热', 'alias'=>'seat22'],
-            [ 'origin'=>'座椅配置-前/后中央扶手', 'alias'=>'seat23'],
-            [ 'origin'=>'座椅配置-主驾驶座电动调节', 'alias'=>'seat24'],
-            [ 'origin'=>'座椅配置-副驾驶座电动调节', 'alias'=>'seat25'],
-            [ 'origin'=>'座椅配置-前排座椅通风', 'alias'=>'seat26'],
-            [ 'origin'=>'座椅配置-后排座椅通风', 'alias'=>'seat27'],
-            [ 'origin'=>'座椅配置-前排座椅按摩', 'alias'=>'seat28'],
-            [ 'origin'=>'座椅配置-后排座椅按摩', 'alias'=>'seat29'],
-            [ 'origin'=>'座椅配置-可加热冷杯架', 'alias'=>'seat30'],
-            [ 'origin'=>'座椅配置-可加制冷杯架', 'alias'=>'seat31'],
-        ];
-        return $data;
-    }
-
-    private static function media_info()
-    {
-        $data = [
-            [ 'origin'=>'多媒体配置-GPS导航系统', 'alias'=>'media0'],
-            [ 'origin'=>'多媒体配置-定位互动服务', 'alias'=>'media1'],
-            [ 'origin'=>'多媒体配置-中控台彩色大屏', 'alias'=>'media2'],
-            [ 'origin'=>'多媒体配置-中控台彩色大屏尺寸', 'alias'=>'media3'],
-            [ 'origin'=>'多媒体配置-中控液晶屏分屏显示', 'alias'=>'media4'],
-            [ 'origin'=>'多媒体配置-蓝牙/车载电话', 'alias'=>'media5'],
-            [ 'origin'=>'多媒体配置-手机互联/映射', 'alias'=>'media6'],
-            [ 'origin'=>'多媒体配置-车联网', 'alias'=>'media7'],
-            [ 'origin'=>'多媒体配置-车载电视', 'alias'=>'media8'],
-            [ 'origin'=>'多媒体配置-后排液晶屏', 'alias'=>'media9'],
-            [ 'origin'=>'多媒体配置-220V/230V电源', 'alias'=>'media10'],
-            [ 'origin'=>'多媒体配置-外接音源接口', 'alias'=>'media11'],
-            [ 'origin'=>'多媒体配置-CD/DVD', 'alias'=>'media12'],
-            [ 'origin'=>'多媒体配置-扬声器品牌', 'alias'=>'media13'],
-            [ 'origin'=>'多媒体配置-扬声器数量', 'alias'=>'media14'],
-        ];
-        return $data;
-    }
-
-    private static function light_info()
-    {
-        $data = [
-            [ 'origin'=>'灯光配置-近光灯', 'alias'=>'light0'],
-            [ 'origin'=>'灯光配置-远光灯', 'alias'=>'light1'],
-            [ 'origin'=>'灯光配置-LED日间行车灯', 'alias'=>'light2'],
-            [ 'origin'=>'灯光配置-自适应远近光', 'alias'=>'light3'],
-            [ 'origin'=>'灯光配置-自动头灯', 'alias'=>'light4'],
-            [ 'origin'=>'灯光配置-转向辅助灯', 'alias'=>'light5'],
-            [ 'origin'=>'灯光配置-转向头灯', 'alias'=>'light6'],
-            [ 'origin'=>'灯光配置-前雾灯', 'alias'=>'light7'],
-            [ 'origin'=>'灯光配置-大灯高度可调', 'alias'=>'light8'],
-            [ 'origin'=>'灯光配置-大灯清洗装置', 'alias'=>'light9'],
-            [ 'origin'=>'灯光配置-车内氛围灯', 'alias'=>'light10'],
-        ];
-        return $data;
-    }
-
-    private static function glass_info()
-    {
-        $data = [
-            [ 'origin'=>'玻璃/后视镜-前电动车窗', 'alias'=>'glass0'],
-            [ 'origin'=>'玻璃/后视镜-后电动车窗', 'alias'=>'glass1'],
-            [ 'origin'=>'玻璃/后视镜-车窗一键升降', 'alias'=>'glass2'],
-            [ 'origin'=>'玻璃/后视镜-车窗防夹手功能', 'alias'=>'glass3'],
-            [ 'origin'=>'玻璃/后视镜-防紫外线/隔热玻璃', 'alias'=>'glass4'],
-            [ 'origin'=>'玻璃/后视镜-后视镜电动调节', 'alias'=>'glass5'],
-            [ 'origin'=>'玻璃/后视镜-后视镜加热', 'alias'=>'glass6'],
-            [ 'origin'=>'玻璃/后视镜-内/外后视镜自动防眩目', 'alias'=>'glass7'],
-            [ 'origin'=>'玻璃/后视镜-流媒体车内后视镜', 'alias'=>'glass8'],
-            [ 'origin'=>'玻璃/后视镜-后视镜电动折叠', 'alias'=>'glass9'],
-            [ 'origin'=>'玻璃/后视镜-后视镜记忆', 'alias'=>'glass10'],
-            [ 'origin'=>'玻璃/后视镜-后风挡遮阳帘', 'alias'=>'glass11'],
-            [ 'origin'=>'玻璃/后视镜-后排侧遮阳帘', 'alias'=>'glass12'],
-            [ 'origin'=>'玻璃/后视镜-后排侧隐私玻璃', 'alias'=>'glass13'],
-            [ 'origin'=>'玻璃/后视镜-遮阳板化妆镜', 'alias'=>'glass14'],
-            [ 'origin'=>'玻璃/后视镜-后雨刷', 'alias'=>'glass15'],
-            [ 'origin'=>'玻璃/后视镜-感应雨刷', 'alias'=>'glass16'],
-            [ 'origin'=>'玻璃/后视镜-内后视镜自动防眩目', 'alias'=>'glass17'],
-            [ 'origin'=>'玻璃/后视镜-外后视镜自动防眩目', 'alias'=>'glass18'],
-            [ 'origin'=>'玻璃/后视镜-前/后电动车窗', 'alias'=>'glass19'],
-        ];
-        return $data;
-    }
-
-    private static function air_info()
-    {
-        $data = [
-            [ 'origin'=>'空调/冰箱-空调控制方式', 'alias'=>'air0'],
-            [ 'origin'=>'空调/冰箱-后排独立空调', 'alias'=>'air1'],
-            [ 'origin'=>'空调/冰箱-后座出风口', 'alias'=>'air2'],
-            [ 'origin'=>'空调/冰箱-温度分区控制', 'alias'=>'air3'],
-            [ 'origin'=>'空调/冰箱-车内空气调节/花粉过滤', 'alias'=>'air4'],
-            [ 'origin'=>'空调/冰箱-车载空气净化器', 'alias'=>'air5'],
-            [ 'origin'=>'空调/冰箱-车载冰箱', 'alias'=>'air6'],
-        ];
-        return $data;
-    }
-    /**
-     *  read data from file and fill into this _header & _data
-     */
-    public function read_data()
-    {
-        $encoding = $this->encoding();
-        if($encoding == false) return [];
-
-        $data = [];
-
-        $file = @fopen($this->_file, 'r');
-        $i = 0;
-        while( !@feof($file) )
-        {
-            if( $line = @fgets($file) )
-            {
-                if($i == 0) {
-                    $this->_header = explode(self::_delimiter, trim(iconv($encoding, 'UTF-8', $line)));
-                } else {
-                    $data[] = explode(self::_delimiter, trim(iconv($encoding, 'UTF-8', $line)));
-                }
-                $i++;
-            }
-        }
-        if(!empty($data)) {
-            $this->_data = $data;
-        }
-        @fclose($file);
-    }
-    /**
-     * 解析各数据表所属字段在_data中所在位置
-     * @param array $tables: 需解析的数据表名, ['base_info', 'body_info', 'engine_info', 'motor_info', 'gearbox_info', 'underpan_info',
-     *                      'brake_info', 'secure_info', 'oper_info', 'guard_info', 'inside_info', 'seat_info',
-     *                      'media_info', 'light_info', 'glass_info', 'air_info']
-     */
-    public function resolve($tables)
-    {
-        if(empty($this->_header)) {
-            $this->read_data();
-        };
-
-        foreach ($tables as $table) {
-            $this->resolve_field($table);
-        }
-        return $this->_fileds_pos;
-    }
-    /**
-     * 根据表名返回数据
-     * @param $table_name: 'base_info', 'body_info', 'engine_info', 'motor_info', 'gearbox_info', 'underpan_info',
-     *                      'brake_info', 'secure_info', 'oper_info', 'guard_info', 'inside_info', 'seat_info',
-     *                      'media_info', 'light_info', 'glass_info', 'air_info'
-     * @return array
-     */
-    public function get_data($table_name)
-    {
-        if(empty($this->_fileds_pos[$table_name])) {
-            $this->resolve( array($table_name) );
-        }
-
-        if(!isset($this->_fileds_pos[$table_name])) return [];
-
-        $datas = [];
-
-        foreach ($this->_data as $key=>$item)
-        {
-            foreach ($this->_fileds_pos[$table_name] as $index=>$value) {
-                $datas[$key][$index] = $item[$value];
-            }
-        }
-
-        return $datas;
-    }
-    /**
-     * resolve the index of fields in this _header
-     * @param $table_name
-     */
-    private function resolve_field($table_name)
-    {
-        if(!isset(self::$stAlias[$table_name])) return false;
-
-        foreach (self::$stAlias[$table_name] as $alias)
-        {
-            $header_fields[$alias['alias']] = $alias['origin'];
-        }
-
-        if(empty($header_fields)) return false;
-
-        foreach ($this->_header as $key=>$item)
-        {
-            if(in_array($item, $header_fields)) {
-                $index = array_search($item, $header_fields);
-                $this->_fileds_pos[$table_name][$index] = $key;
-            }
-        }
-    }
-    /**
-     * @return false|string
-     */
-    private function encoding()
-    {
-        $content = file_get_contents($this->_file);
-        $encoding = mb_detect_encoding($content, ['GB2312','GBK','UTF-16','UCS-2','UTF-8','BIG5','ASCII']);
-        return $encoding;
-    }
-
-    private function format_type($value, $type)
-    {
-
-    }
-}

+ 63 - 64
helper/kdn_helper.php

@@ -2,93 +2,62 @@
 /**
  * Created by PhpStorm.
  * User: stanley-king
- * Date: 16/3/30
- * Time: 下午5:10
+ * Date: 2018/8/9
+ * Time: 下午7:52
  */
 
 require_once (BASE_CORE_PATH . "/framework/function/http.php");
+
 class kdn_helper
 {
-    const req_url = 'http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx';
+    private static $EBusinessID = 1366783;
+    private static $AppKey    = "e62955d6-4871-4740-9ec9-62068a544ab5";
+    private static $ReqURL    = "http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";
+    //const TRACEAPI  = "http://api.kdniao.cc/api/dis";
 
-//1256766   22c88d88-3565-4023-b5ac-0201792869ed
-//1256767   e02cd836-3146-4958-b1dc-c1585fa05b9e
-//1256768   e7eb7d2f-0525-484e-80ba-c8f5b5a90af3
+    public static function cur_businessid()
+    {
+        return self::$EBusinessID;
+    }
 
-    static public function query($shipperCode, $logisticCode)
+    public static function query($shipperCode, $logisticCode)
     {
         $requestData = json_encode(array('ShipperCode' => $shipperCode,'LogisticCode' => $logisticCode));
 
-        $account = self::get_account();
-        Log::record("EBusinessID={$account}",Log::DEBUG);
+        Log::record("EBusinessID=". self::$EBusinessID,Log::DEBUG);
         $datas = array(
-            'EBusinessID' => $account['EBusinessID'],
-            'RequestType' => '1002',
+            'EBusinessID' => self::$EBusinessID,
+            'RequestType' => '8001',
             'RequestData' => urlencode($requestData),
             'DataType' => '2',
-            'DataSign' => self::encrypt($requestData, $account['AppID'])
+            'DataSign' => self::encrypt($requestData, self::$AppKey)
         );
-        $result = http_post_data(self::req_url,$datas);
+        $result = http_post_data(self::$ReqURL,$datas);
         return $result;
     }
-    static public function cur_businessid() {
-        $account = self::get_account();
-        return $account['EBusinessID'];
-    }
-
-    static public function get_account()
-    {
-        if(defined('MOBILE_PUBLISH') && MOBILE_PUBLISH == true) {
-            return array('EBusinessID' => '1256766','AppID' => '22c88d88-3565-4023-b5ac-0201792869ed');
-        } else {
-            return array('EBusinessID' => '1256051','AppID' => '6718d260-e2b6-4329-ad78-daff173309ac');
-        }
-    }
 
-    static private function encrypt($data, $appkey)
+    public static function req_subscribe($e_code, $logisticCode, $order_sn)
     {
-        return urlencode(base64_encode(md5($data . $appkey)));
-    }
-
-    static public function subscribe($order_sn)
-    {
-        $model_order = Model('order');
-        $condition['order_sn'] = $order_sn;
-        $order_info = $model_order->getOrderInfo($condition, array('order_common', 'order_goods'));
-        // 发送快递鸟订阅回调
-        $express = rkcache('express', true);
-        $e_code = $express[$order_info['extend_order_common']['shipping_express_id']]['e_kdn_code'];
-        if(empty($e_code)) {
-            Log::record("找不到该单号的快递公司编码—— ordersn={$order_sn}",Log::ERR);
-            return;
-        }
-        // 通知订阅, 快递鸟定时回调
-        $ret = self::req_subscribe($e_code, $order_info['shipping_code'], $order_sn);
-        if($ret === false) {
-            Log::record("kdn_helper::subscribe order_sn={$order_sn} error.",Log::ERR);
-        } else {
-            Log::record("kdn_helper::subscribe ret={$ret}",Log::DEBUG);
-        }
-    }
+        $datas = [
+            'ShipperCode'   => $e_code,
+            'LogisticCode'  => $logisticCode,
+            'Callback'      => $order_sn
+        ];
 
-    static public function req_subscribe($e_code, $logisticCode, $order_sn)
-    {
-        $datas = array(array('Code' => $e_code,'Item' => array(array('No' => $logisticCode,'Bk' => $order_sn))));
         $requestData = json_encode($datas);
 
-        $account = self::get_account();
         $datas = array(
-            'EBusinessID' => $account['EBusinessID'],
-            'RequestType' => '1005',
+            'EBusinessID' => self::$EBusinessID,
+            'RequestType' => '8008',
             'RequestData' => urlencode($requestData),
             'DataType' => '2',
-            'DataSign' => self::encrypt($requestData, $account['AppID'])
+            'DataSign' => self::encrypt($requestData, self::$AppKey)
         );
-        $result = http_post_data(self::req_url, $datas);
+        $result = http_post_data(self::$ReqURL, $datas);
         return $result;
     }
 
-    static public function onCallback($data)
+    public static function onCallback($data)
     {
         $order_sn = $data['CallBack'];
         if(empty($order_sn)) return;
@@ -100,17 +69,47 @@ class kdn_helper
         // 数据解析
         switch ($data['State'])
         {
-            case '3':	// 已签收, 设置为已收货
-                Log::record(__METHOD__ . " order_sn={$order_sn},code = {$data['LogisticCode']} 已签收.",Log::ERR);
+            case '1':   // 已揽收
+                Log::record(__METHOD__ . " order_sn={$order_sn},code = {$data['LogisticCode']} 已揽收.",Log::DEBUG);
+                break;
+            case '2':   // 在途中
+                Log::record(__METHOD__ . " order_sn={$order_sn},code = {$data['LogisticCode']} 在途中.",Log::DEBUG);
                 break;
-            case '4':	// 问题件
+            case '3':   // 已签收, 设置为已收货
+                Log::record(__METHOD__ . " order_sn={$order_sn},code = {$data['LogisticCode']} 已签收.",Log::DEBUG);
+                break;
+            case '4':   // 问题件
                 Log::record(__METHOD__ . " order_sn={$order_sn},code = {$data['LogisticCode']} 问题件.",Log::ERR);
                 break;
             default: {
                 Log::record(__METHOD__ . ' query_status false');
-                break;
             }
         }
     }
-}
 
+    public static function subscribe($order_sn)
+    {
+        $model_order = Model('order');
+        $condition['order_sn'] = $order_sn;
+        $order_info = $model_order->getOrderInfo($condition, array('order_common', 'order_goods'));
+        // 发送快递鸟订阅回调
+        $express = rkcache('express', true);
+        $e_code = $express[$order_info['extend_order_common']['shipping_express_id']]['e_kdn_code'];
+        if(empty($e_code)) {
+            Log::record("找不到该单号的快递公司编码—— ordersn={$order_sn}",Log::ERR);
+            return;
+        }
+        // 通知订阅, 快递鸟定时回调
+        $ret = self::req_subscribe($e_code, $order_info['shipping_code'], $order_sn);
+        if($ret === false) {
+            Log::record("kdn_helper_new::subscribe order_sn={$order_sn} error.",Log::ERR);
+        } else {
+            Log::record("kdn_helper_new::subscribe ret={$ret}",Log::DEBUG);
+        }
+    }
+
+    private static function encrypt($data, $appkey)
+    {
+        return urlencode(base64_encode(md5($data . $appkey)));
+    }
+}

+ 116 - 0
helper/kdn_helper_back.php

@@ -0,0 +1,116 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/3/30
+ * Time: 下午5:10
+ */
+
+require_once (BASE_CORE_PATH . "/framework/function/http.php");
+class kdn_helper_back
+{
+    const req_url = 'http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx';
+
+//1256766   22c88d88-3565-4023-b5ac-0201792869ed
+//1256767   e02cd836-3146-4958-b1dc-c1585fa05b9e
+//1256768   e7eb7d2f-0525-484e-80ba-c8f5b5a90af3
+
+    static public function query($shipperCode, $logisticCode)
+    {
+        $requestData = json_encode(array('ShipperCode' => $shipperCode,'LogisticCode' => $logisticCode));
+
+        $account = self::get_account();
+        Log::record("EBusinessID={$account}",Log::DEBUG);
+        $datas = array(
+            'EBusinessID' => $account['EBusinessID'],
+            'RequestType' => '1002',
+            'RequestData' => urlencode($requestData),
+            'DataType' => '2',
+            'DataSign' => self::encrypt($requestData, $account['AppID'])
+        );
+        $result = http_post_data(self::req_url,$datas);
+        return $result;
+    }
+    static public function cur_businessid() {
+        $account = self::get_account();
+        return $account['EBusinessID'];
+    }
+
+    static public function get_account()
+    {
+        if(defined('MOBILE_PUBLISH') && MOBILE_PUBLISH == true) {
+            return array('EBusinessID' => '1256766','AppID' => '22c88d88-3565-4023-b5ac-0201792869ed');
+        } else {
+            return array('EBusinessID' => '1256051','AppID' => '6718d260-e2b6-4329-ad78-daff173309ac');
+        }
+    }
+
+    static private function encrypt($data, $appkey)
+    {
+        return urlencode(base64_encode(md5($data . $appkey)));
+    }
+
+    static public function subscribe($order_sn)
+    {
+        $model_order = Model('order');
+        $condition['order_sn'] = $order_sn;
+        $order_info = $model_order->getOrderInfo($condition, array('order_common', 'order_goods'));
+        // 发送快递鸟订阅回调
+        $express = rkcache('express', true);
+        $e_code = $express[$order_info['extend_order_common']['shipping_express_id']]['e_kdn_code'];
+        if(empty($e_code)) {
+            Log::record("找不到该单号的快递公司编码—— ordersn={$order_sn}",Log::ERR);
+            return;
+        }
+        // 通知订阅, 快递鸟定时回调
+        $ret = self::req_subscribe($e_code, $order_info['shipping_code'], $order_sn);
+        if($ret === false) {
+            Log::record("kdn_helper::subscribe order_sn={$order_sn} error.",Log::ERR);
+        } else {
+            Log::record("kdn_helper::subscribe ret={$ret}",Log::DEBUG);
+        }
+    }
+
+    static public function req_subscribe($e_code, $logisticCode, $order_sn)
+    {
+        $datas = array(array('Code' => $e_code,'Item' => array(array('No' => $logisticCode,'Bk' => $order_sn))));
+        $requestData = json_encode($datas);
+
+        $account = self::get_account();
+        $datas = array(
+            'EBusinessID' => $account['EBusinessID'],
+            'RequestType' => '1005',
+            'RequestData' => urlencode($requestData),
+            'DataType' => '2',
+            'DataSign' => self::encrypt($requestData, $account['AppID'])
+        );
+        $result = http_post_data(self::req_url, $datas);
+        return $result;
+    }
+
+    static public function onCallback($data)
+    {
+        $order_sn = $data['CallBack'];
+        if(empty($order_sn)) return;
+
+        $e_code = $data['ShipperCode'];
+        $shipping_code = $data['LogisticCode'];
+        $key = "express_{$e_code}_{$shipping_code}";
+        wkcache($key, $data);
+        // 数据解析
+        switch ($data['State'])
+        {
+            case '3':	// 已签收, 设置为已收货
+                Log::record(__METHOD__ . " order_sn={$order_sn},code = {$data['LogisticCode']} 已签收.",Log::ERR);
+                break;
+            case '4':	// 问题件
+                Log::record(__METHOD__ . " order_sn={$order_sn},code = {$data['LogisticCode']} 问题件.",Log::ERR);
+                break;
+            default: {
+                Log::record(__METHOD__ . ' query_status false');
+                break;
+            }
+        }
+    }
+}
+

+ 29 - 22
mobile/kdniao_notify.php

@@ -1,37 +1,44 @@
 <?php
+//ini_set("display_errors",1);
+//error_reporting(E_ALL);
 
-require_once(BASE_MOBILE_PATH . '/control/app_pay.php');
+defined('BASE_ROOT_PATH') or define('BASE_ROOT_PATH',str_replace('/mobile','',dirname(__FILE__)));
+//require_once(BASE_MOBILE_PATH . '/control/app_pay.php');
 require_once (BASE_DATA_PATH . '/logic/delivery.logic.php');
 require_once(BASE_ROOT_PATH . '/helper/kdn_helper.php');
 
-$requestData = $_POST['RequestData'];  // 快递鸟数据
-$deliver_info = json_decode(urldecode($requestData),true);
+Log::record("快递鸟回调:", Log::DEBUG);
+$requestData = isset($_POST['RequestData']) ? $_POST['RequestData'] : null;  // 快递鸟数据
 
-$success = true;
-$reson = '';
-//数据不正确, 记录并退出
-if ($deliver_info === false || empty($deliver_info))
-{
-    $success = false;
-    $reson = 'data is empty.';
-    Log::record("kdniao_notify:cannot query delivery info from kuaidn.",Log::ERR);
-}
-else
+if (!empty($requestData))
 {
-    Log::record("start handle....",Log::DEBUG);
-    $count = intval($deliver_info['Count']);
-    if($count <= 0 || $deliver_info['EBusinessID'] != kdn_helper::cur_businessid()) {
+    $deliver_info = json_decode(urldecode($requestData),true);
+
+    $success = true;
+    $reson = '';
+//数据不正确, 记录并退出
+    if ($deliver_info === false || empty($deliver_info))
+    {
         $success = false;
-        $reson = "count={$count} or EBusinessID = {$deliver_info['EBusinessID']} != " . kdn_helper::cur_businessid();
+        $reson = 'data is empty.';
+        Log::record("kdniao_notify:cannot query delivery info from kuaidn.",Log::ERR);
     }
     else
     {
-        foreach($deliver_info['Data'] as $item) {
-            kdn_helper::onCallback($item);
+        Log::record("start handle....",Log::DEBUG);
+        $count = intval($deliver_info['Count']);
+        if($count <= 0 || $deliver_info['EBusinessID'] != kdn_helper::cur_businessid()) {
+            $success = false;
+            $reson = "count={$count} or EBusinessID = {$deliver_info['EBusinessID']} != " . kdn_helper::cur_businessid();
+        }
+        else
+        {
+            foreach($deliver_info['Data'] as $item) {
+                kdn_helper::onCallback($item);
+            }
         }
     }
-}
-
-echo (json_encode(array('EBusinessID' => kdn_helper::cur_businessid(),'UpdateTime' => strftime("%Y-%m-%d %H:%M:%S",time()), 'Success' => $success,'Reason' => $reson)));
 
+    echo (json_encode(array('EBusinessID' => kdn_helper::cur_businessid(),'UpdateTime' => strftime("%Y-%m-%d %H:%M:%S",time()), 'Success' => $success,'Reason' => $reson)));
+}
 ?>

+ 8 - 1
shop/control/store_goods_add.php

@@ -160,7 +160,14 @@ class store_goods_addControl extends BaseSellerControl
                             "require" => "true",
                             "validator" => "Double",
                             "message" => L('store_goods_index_goods_price_null')
-                    )
+                    ),
+                    /*array (
+                        "input" => $_POST["g_price"],
+                        "validator" => "compare",
+                        "operator"  => ">=",
+                        "to"        => $_POST['g_costprice'],
+                        "message"   => "商品价格不能低于成本价",
+                    )*/
             );
             $error = $obj_validate->validate();
             if ($error != '') {

+ 25 - 1
shop/control/store_goods_online.php

@@ -245,7 +245,14 @@ class store_goods_onlineControl extends BaseSellerControl {
                 "require" => "true",
                 "validator" => "Double",
                 "message" => L('store_goods_index_goods_price_null')
-            )
+            ),
+            /*array (
+                "input" => $_POST["g_price"],
+                "validator" => "compare",
+                "operator"  => ">=",
+                "to"        => $_POST['g_costprice'],
+                "message"   => "商品价格不能低于成本价",
+            )*/
         );
         $error = $obj_validate->validate ();
         if ($error != '') {
@@ -400,8 +407,10 @@ class store_goods_onlineControl extends BaseSellerControl {
         // 更新商品规格
         $goodsid_array = array();
         $colorid_array = array();
+
         if (is_array ( $_POST ['spec'] ))
         {
+            $specs = [];
             foreach ($_POST['spec'] as $value)
             {
                 $goods_info = $model_goods->getGoodsInfo(array('goods_id' => $value['goods_id'], 'goods_commonid' => $common_id, 'store_id' => $_SESSION['store_id']), 'goods_id');
@@ -426,6 +435,10 @@ class store_goods_onlineControl extends BaseSellerControl {
                     $update['oms_id']            = intval($value['oms_id']);
                     $update['goods_storage_alarm']= intval($value['alarm']);
                     $update['goods_spec']        = serialize($value['sp_value']);
+                    foreach ($value['sp_value'] as $k => $v)
+                    {
+                        $specs[$k] = $v;
+                    }
                     $update['goods_storage']     = $value['stock'];
                     $update['goods_state']       = $update_common['goods_state'];
                     $update['goods_verify']      = $update_common['goods_verify'];
@@ -510,6 +523,17 @@ class store_goods_onlineControl extends BaseSellerControl {
                 $colorid_array[] = intval($value['color']);
                 $model_type->addGoodsType($goods_id, $common_id, array('cate_id' => $_POST['cate_id'], 'type_id' => $_POST['type_id'], 'attr' => $_POST['attr']));
             }
+            if(!empty($specs))
+            {
+                $mod_spec = Model('spec');
+                foreach ($specs as $k=>$v)
+                {
+                    $mod_spec->editSpecValue(
+                        array('sp_value_name' => $v),
+                        array('sp_value_id' => $k, 'store_id' => $_SESSION['store_id'])
+                    );
+                }
+            }
         }
         else
         {

+ 27 - 0
shop/control/store_spec.php

@@ -104,6 +104,33 @@ class store_specControl extends BaseSellerControl {
         showDialog(L('nc_common_op_succ'), 'reload', 'succ');
     }
 
+    public function ajax_edit_specvalueOp()
+    {
+        $where = [];
+        if (isset($_POST['id'])) {
+            $sp_value_id = intval($_POST['id']);
+            if ($sp_value_id <= 0) return;
+            $where['sp_value_id'] = $sp_value_id;
+        }
+        if (isset($_SESSION['store_id'])) {
+            $store_id = intval($_SESSION['store_id']);
+            if ($store_id <= 0) return;
+            $where['store_id'] = $store_id;
+        }
+
+        $update = [];
+        if (isset($_POST['sp_value'])) {
+            $update['sp_value_name'] = trim($_POST['sp_value']);
+        }
+
+        if (empty($where) || empty($update)) return;
+        $mod = Model('spec');
+        $ret = $mod->editSpecValue($update, $where);
+        if (!$ret) {
+            echo json_encode([ 'done' => false ]);exit();
+        }
+        echo json_encode([ 'done' => true ]);exit();
+    }
     /**
      * ajax删除规格值
      */

+ 31 - 1
shop/templates/default/seller/store_goods_add.step2.php

@@ -1149,7 +1149,7 @@ $(function(){
 			v = $(this).parents('li').find('span[nctype="pv_name"]');
 			if(E_SP[s] != ''){
 				$(this).val(E_SP[s]);
-				v.html('<input type="text" maxlength="20" value="'+E_SP[s]+'" />');
+				v.html('<input type="text" maxlength="20" value="'+E_SP[s]+'" class="nc_edit_spec" /> <input sp_value_id="'+ s +'" class="nc_edit_spec_save" type="button" value="保存" style="display:none;" />');
 			}else{
 				v.html('<input type="text" maxlength="20" value="'+v.html()+'" />');
 			}
@@ -1157,6 +1157,36 @@ $(function(){
 		}
 	});
 
+    $(".nc_edit_spec").on("click", function () {
+        $('.nc_edit_spec_save').css("display","none");
+        var parent = $(this).parent();
+        parent.children("input[type='button']").css("display","inline");
+    });
+    //修改并保存规格值
+    $('.nc_edit_spec_save').on("click", function () {
+        var sp_id = $(this).attr("sp_value_id");
+        var sp_value = $(this).parent().children("input[type='text']").val();
+        var url = "/shop/index.php?act=store_spec&op=ajax_edit_specvalue";
+        var $data = {};
+        $data['id'] = sp_id;
+        $data['sp_value'] = sp_value;
+        $.ajax({
+            url: url,
+            type: 'POST',
+            data: $data,
+            contentType: 'application/x-www-form-urlencoded',
+            dataType: 'json'
+        }).success(function (res) {
+            if (typeof(res) !== undefined && typeof(res) === "object" ) {
+                if(res.done) {
+                    return res.done;
+                }
+                return false;
+            }
+        });
+        $(this).css("display","none");
+    });
+
     into_array();	// 将选中的规格放入数组
     str = '<tr>';
     <?php recursionSpec(0,$output['sign_i']);?>

+ 35 - 1
shop/templates/default/seller/store_spec.add.php

@@ -61,7 +61,10 @@ body {
           <?php foreach ($output['sp_value_list'] as $value) {?>
           <tr class="bd-line">
             <td class="w80"><input type="text" class="text w40" name="sv[old][<?php echo $value['sp_value_id'];?>][sort]" value="<?php echo $value['sp_value_sort'];?>" /></td>
-            <td class="tl"><input type="text" class="text w250" name="sv[old][<?php echo $value['sp_value_id'];?>][name]" value="<?php echo $value['sp_value_name'];?>" /></td>
+            <td class="tl">
+                <input type="text" onclick="showBtnSave();" class="text w250" name="sv[old][<?php echo $value['sp_value_id'];?>][name]" value="<?php echo $value['sp_value_name'];?>" />
+                <input class="nc_edit_spec_save" type="button" value="保存" style="display:none;" sp_value_id="<?php echo $value['sp_value_id'];?>" />
+            </td>
             <?php if ($output['sp_info']['sp_id'] == DEFAULT_SPEC_COLOR_ID) {?>
             <td class="w300 tl"><input type="text" class="text w100" name="sv[old][<?php echo $value['sp_value_id'];?>][color]" value="<?php echo $value['sp_value_color'];?>" nctype="spec_color" /></td>
             <?php }?>
@@ -105,7 +108,38 @@ var SITEURL = "<?php echo SHOP_SITE_URL;?>";
 <script src="<?php echo RESOURCE_SITE_URL;?>/js/perfect-scrollbar.min.js"></script>
 <script src="<?php echo RESOURCE_SITE_URL;?>/js/jquery.mousewheel.js"></script>
 <script>
+    function showBtnSave() {
+        $('.nc_edit_spec_save').css("display","none");
+        var self = event.target;
+        var parent = $(self).parent();
+        parent.children("input[type='button']").css("display","inline");
+    }
 $(function(){
+    //修改并保存规格值
+    $('.nc_edit_spec_save').on("click", function () {
+        var sp_id = $(this).attr("sp_value_id");
+        var sp_value = $(this).parent().children("input[type='text']").val();
+        var url = "/shop/index.php?act=store_spec&op=ajax_edit_specvalue";
+        var $data = {};
+        $data['id'] = sp_id;
+        $data['sp_value'] = sp_value;
+        $.ajax({
+            url: url,
+            type: 'POST',
+            data: $data,
+            contentType: 'application/x-www-form-urlencoded',
+            dataType: 'json'
+        }).success(function (res) {
+            if (typeof(res) !== undefined && typeof(res) === "object" ) {
+                if(res.done) {
+                    return res.done;
+                }
+                return false;
+            }
+        });
+        $(this).css("display","none");
+    });
+
     // 提交表单
     $('a[nctype="submit-btn"]').click(function(){
         var _submit = true;

+ 47 - 0
test/TestKdniao.php

@@ -0,0 +1,47 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: lionared
+ * Date: 2018/7/31
+ * Time: 上午10:27
+ */
+
+defined('BASE_ROOT_PATH') or define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
+
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once(BASE_ROOT_PATH . '/helper/kdn_helper.php');
+
+class TestKdniao extends PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        Base::run_util();
+    }
+
+    public function testQuery()
+    {
+        //$order_sn   = "9000000002470048";
+        //$e_code     = "YTO";
+        //$logisticCode   = "886670260037510426";
+
+        //$order_sn   = "9000000002456344";
+        //$order_sn = PHP_INT_MAX >> 32;
+        $e_code     = "ZTO";
+        $logisticCode   = "457209987858";
+
+        $ret = kdn_helper::query($e_code, $logisticCode);
+
+        var_dump($ret);
+    }
+
+    public function testSubscribe()
+    {
+        $order_sn   = "9000000002456344";
+        $e_code     = "ZTO";
+        $logisticCode   = "457209987858";
+
+        $subs = kdn_helper::req_subscribe($e_code, $logisticCode, $order_sn);
+
+        var_dump($subs);
+    }
+}