Example #1
0
 /**
  * TransOpenApiModel::assignTrackNumbers()
  * 分配跟踪号
  * @param int $carrierId 运输方式ID
  * @param int $orderId 订单编号ID
  * @param int $channelId 渠道ID(可选)
  * @param string $country 所属国家(可选)
  * @return  array 
  */
 public static function assignTrackNumbers($carrierId, $orderId, $country = '', $channelId = 0)
 {
     self::initDB();
     $where = '';
     if (empty($country)) {
         $where = "carrierId = '{$carrierId}' AND orderId = '{$orderId}' AND (countrys = '' OR countrys IS NULL)";
     } else {
         $where = "carrierId = '{$carrierId}' AND orderId = '{$orderId}' AND countrys = '{$country}'";
     }
     //已经分配的订单跟踪号再次分配时直接返回原来的跟踪号
     $res = TrackNumberModel::assignTrackNumber($where);
     if (!empty($res['trackNumber'])) {
         return array("trackNumber" => $res['trackNumber']);
     }
     //兼容渠道
     if (empty($channelId) && $carrierId != 2) {
         $where = '';
     } else {
         $where = " AND channelId = '{$channelId}'";
     }
     //新订单跟踪号分配
     if (empty($country)) {
         $where = "carrierId = '{$carrierId}' AND orderId = 0 AND is_lock = 0 AND (countrys = '' OR countrys IS NULL)" . $where;
     } else {
         $where = "carrierId = '{$carrierId}' AND orderId = 0 AND is_lock = 0 AND countrys = '{$country}'" . $where;
     }
     $res = TrackNumberModel::assignTrackNumber($where);
     if (empty($res['trackNumber'])) {
         self::$errCode = 10001;
         self::$errMsg = "当前运输方式已无跟踪号可以分配";
         return false;
     }
     $tracknum = $res['trackNumber'];
     $id = $res['id'];
     //增加锁机制防止并发异常
     $res = TrackNumberModel::updateTrackNumber($id, array("is_lock" => 1), true);
     if (!$res) {
         self::$errCode = 10002;
         self::$errMsg = "订单ID{$orderId}=锁定{$id}=跟踪号:{$tracknum}失败,请不要过度频繁申请跟踪号!";
         return false;
     }
     //更新分配的跟踪号信息
     $data = array("orderId" => $orderId, "assignTime" => time());
     $res = TrackNumberModel::updateTrackNumber($id, $data, true);
     if (!$res) {
         self::$errCode = TrackNumberModel::$errCode;
         self::$errMsg = TrackNumberModel::$errMsg;
         return false;
     } else {
         return array("trackNumber" => $tracknum);
     }
 }
Example #2
0
 /**
  * TransOpenApiModel::getTrackCarrierList()
  * 获取跟踪号运输方式列表
  * @return  array 
  */
 public static function getTrackCarrierList()
 {
     self::initDB();
     $sql = "SELECT id,carrierName FROM trans_track_carrier_name WHERE is_delete = 0 ORDER BY id ASC";
     $query = self::$dbConn->query($sql);
     if ($query) {
         $res = self::$dbConn->fetch_array_all($query);
         return $res;
     } else {
         self::$errCode = 10000;
         self::$errMsg = "获取数据失败";
         return false;
     }
 }