redis实现接口限流策略

pull/254/head
xjs 3 years ago
parent 0e994a168c
commit 0914ee4f37

@ -0,0 +1,35 @@
package com.xjs.annotation;
import com.xjs.enums.InterfaceLimitType;
import java.lang.annotation.*;
/**
*
* @author xiejs
* @since 2022-05-16
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
/**
* key
*/
String key() default "rate_limit:";
/**
* ,
*/
int time() default 60;
/**
*
*/
int count() default 100;
/**
*
*/
InterfaceLimitType limitType() default InterfaceLimitType.DEFAULT;
}

@ -0,0 +1,70 @@
package com.xjs.aop;
import com.ruoyi.common.core.utils.ip.IpUtils;
import com.xjs.annotation.RateLimiter;
import com.xjs.enums.InterfaceLimitType;
import com.xjs.exception.BusinessException;
import lombok.extern.log4j.Log4j2;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
/**
* aop
* @author xiejs
* @since 2022-05-16
*/
@Aspect
@Component
@Log4j2
public class RateLimiterAspect {
@Autowired
private RedisTemplate<Object, Object> redisTemplate;
@Autowired
private RedisScript<Long> limitScript;
@Before("@annotation(rateLimiter)")
public void doBefore(JoinPoint point, RateLimiter rateLimiter) throws Throwable {
String key = rateLimiter.key();
int time = rateLimiter.time();
int count = rateLimiter.count();
String combineKey = getCombineKey(rateLimiter, point);
List<Object> keys = Collections.singletonList(combineKey);
try {
Long number = redisTemplate.execute(limitScript, keys, count, time);
if (number==null || number.intValue() > count) {
throw new BusinessException("访问过于频繁,请稍候再试");
}
log.info("限制请求'{}',当前请求'{}',缓存key'{}'", count, number.intValue(), key);
} catch (BusinessException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException("服务器限流异常,请稍候再试");
}
}
public String getCombineKey(RateLimiter rateLimiter, JoinPoint point) {
StringBuilder stringBuffer = new StringBuilder(rateLimiter.key());
if (rateLimiter.limitType() == InterfaceLimitType.IP) {
stringBuffer.append(IpUtils.getIpAddr(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest())).append("-");
}
MethodSignature signature = (MethodSignature) point.getSignature();
Method method = signature.getMethod();
Class<?> targetClass = method.getDeclaringClass();
stringBuffer.append(targetClass.getName()).append("-").append(method.getName());
return stringBuffer.toString();
}
}

@ -0,0 +1,18 @@
package com.xjs.enums;
/**
*
* @author xiejs
* @since 2022-05-16
*/
public enum InterfaceLimitType {
/**
*
*/
DEFAULT,
/**
* IP
*/
IP
}

@ -0,0 +1,23 @@
package com.xjs.script;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.scripting.support.ResourceScriptSource;
/**
* redis
* @author xiejs
* @since 2022-05-16
*/
@Configuration
public class RedisScript {
@Bean
public DefaultRedisScript<Long> limitScript() {
DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("lua/limit.lua")));
redisScript.setResultType(Long.class);
return redisScript;
}
}

@ -0,0 +1,12 @@
local key = KEYS[1]
local count = tonumber(ARGV[1])
local time = tonumber(ARGV[2])
local current = redis.call('get', key)
if current and tonumber(current) > count then
return tonumber(current)
end
current = redis.call('incr', key)
if tonumber(current) == 1 then
redis.call('expire', key, time)
end
return tonumber(current)

@ -10,6 +10,7 @@ import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.xjs.annotation.RateLimiter;
import com.xjs.copywriting.domain.CopyWriting;
import com.xjs.copywriting.domain.RequestBody;
import com.xjs.copywriting.factory.CopyWritingFactory;
@ -29,6 +30,7 @@ import java.util.Optional;
/**
* controller
*
* @author xiejs
* @since 2021-12-27
*/
@ -93,6 +95,7 @@ public class CopyWritingController extends BaseController {
@ApiOperation("删除重复文案内容")
@RequiresPermissions("openapi:copywriting:remove")
@Log(title = "删除重复文案", businessType = BusinessType.DELETE)
@RateLimiter(count = 1, time = 1)
public AjaxResult deleteRepeatData() {
int count = copyWritingService.deleteRepeatData();
return AjaxResult.success(count);
@ -152,6 +155,7 @@ public class CopyWritingController extends BaseController {
@ApiOperation("文案列表")
@RequiresPermissions("openapi:copywriting:list")
@GetMapping("/list")
@RateLimiter(count = 1, time = 1)
public TableDataInfo list(@Validated({SelectGroup.class}) CopyWriting copyWriting) {
startPage();
List<CopyWriting> list = copyWritingService.selectCopyWritingList(copyWriting);
@ -188,6 +192,7 @@ public class CopyWritingController extends BaseController {
@Log(title = "文案管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
@ApiOperation("删除文案")
@RateLimiter(count = 1, time = 1)
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(copyWritingService.deleteCopyWritingByIds(ids));
}

@ -1,7 +1,6 @@
package com.xjs.mall.product.vo.sku;
import lombok.Data;
import lombok.ToString;
/**
* Sku Id VO Attr
@ -9,7 +8,6 @@ import lombok.ToString;
* @since 2022-05-12
*/
@Data
@ToString
public class AttrValueWithSkuIdVO {
private String attrValue;

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
@ -240,7 +240,8 @@
<div class="er_1_1">
<h6><a href="#">京东金融客户端</a></h6>
<p>新人专享大礼包</p>
<div><a href="#"><img src="index/img/11.png"/></a><a href="#"><img src="index/img/22.png"/></a></div>
<div><a href="#"><img src="index/img/11.png"/></a><a href="#"><img
src="index/img/22.png"/></a></div>
</div>
</div>
</div>
@ -252,8 +253,11 @@
<div class="nav_min">
<div class="nav_top">
<div class="nav_top_one"><a href="#"><img src="index/img/111.png"/></a></div>
<div class="nav_top_two"><input type="text"/><button>搜索</button></div>
<div class="nav_top_three"><a href="../JD_Shop/One_JDshop.html">我的购物车</a><span class="glyphicon glyphicon-shopping-cart"></span>
<div class="nav_top_two"><input type="text"/>
<button>搜索</button>
</div>
<div class="nav_top_three"><a href="../JD_Shop/One_JDshop.html">我的购物车</a><span
class="glyphicon glyphicon-shopping-cart"></span>
<div class="nav_top_three_1">
<img src="img/44.png"/>购物车还没有商品,赶紧选购吧!
</div>
@ -429,11 +433,11 @@
<div class="imgbox">
<div class="probox">
<img class="img1" alt="" src="index/img/59ded626N7c4cb0a3.jpg">
<img class="img1" alt="" th:src="${item.info.skuDefaultImg}">
<div class="hoverbox"></div>
</div>
<div class="showbox">
<img class="img1" alt="" src="index/img/59ded626N7c4cb0a3.jpg">
<img class="img1" alt="" th:src="${item.info.skuDefaultImg}">
</div>
</div>
@ -441,19 +445,14 @@
<div class="box-lh-one">
<ul>
<li><img src="index/img/59ded62eN64a9784c.jpg" /></li>
<li><img src="index/img/59ded626Ne3c69b70.jpg" /></li>
<li><img src="index/img/59ded626N7c4cb0a3.jpg" /></li>
<li><img src="index/img/59ded626Ne3c69b70.jpg" /></li>
<li><img src="index/img/59ded62dN7e28abc5 (1).jpg" /></li>
<li><img src="index/img/59ded62cN6e9ac17c.jpg" /></li>
<li><img src="index/img/59ded620Nfc0ab489.jpg" /></li>
<li><img src="index/img/59ded60eN3110f3a8.jpg" /></li>
<li><img src="index/img/59ded62dNfed003a8.jpg" /></li>
<li th:each="img:${item.images}" th:if="${!#strings.isEmpty(img.imgUrl)}"><img
th:src="${img.imgUrl}"/></li>
</ul>
</div>
<div id="left">
< </div>
<
</div>
<div id="right">
>
</div>
@ -479,11 +478,11 @@
</div>
<div class="box-two">
<div class="box-name">
<div class="box-name" th:text="${item.info.skuTitle}">
华为 HUAWEI Mate 10 6GB+128GB 亮黑色 移动联通电信4G手机 双卡双待
</div>
<div class="box-hide">预订用户预计11月30日左右陆续发货麒麟970芯片AI智能拍照
<a href=""><u>华为 HUAWEI Mate 10 Pro 10:08 限时限量抢!</u></a>
<div class="box-hide" th:text="${item.info.skuSubtitle}">预订用户预计11月30日左右陆续发货麒麟970芯片AI智能拍照
<a href=""><u></u></a>
</div>
<div class="box-yuyue">
<div class="yuyue-one">
@ -509,7 +508,7 @@
<li>京东价</li>
<li>
<span></span>
<span>4499.00</span>
<span th:text="${#numbers.formatDecimal(item.info.price,3,2)}">4499.00</span>
</li>
<li>
预约享资格
@ -544,7 +543,8 @@
<dl>
<dt>
<a>选择新地址</a>
<img src="index/img/4a79b87a68623d4e8a73aff3e25fa99b.png" alt="" class="box-stock-two-img"/>
<img src="index/img/4a79b87a68623d4e8a73aff3e25fa99b.png" alt=""
class="box-stock-two-img"/>
</dt>
<dd>
<div class="box-stock-dd">
@ -587,7 +587,7 @@
</li>
<li>
<span>无货</span> 此商品暂时售完
<span th:text="${item.hasStock?'有货':'无货'}">无货</span> 此商品暂时售完
</li>
</ul>
</div>
@ -600,54 +600,17 @@
</ul>
</div>
<div class="box-attr-3">
<div class="box-attr clear">
<div class="box-attr clear" th:each="attr:${item.saleAttr}">
<dl>
<dt>选择颜色</dt>
<dd>
<a href="#">
<img src="index/img/59ddfcb1Nc3edb8f1.jpg" /> 摩卡金
</a>
</dd>
<dd>
<a href="#">
<img src="index/img/59ded62eN64a9784c.jpg" /> 亮黑色
</a>
</dd>
<dd>
<dt>选择[[${attr.attrName}]]</dt>
<dd th:each="val:${attr.attrValues}">
<a href="#">
<img src="index/img/59ddfcb1Nc3edb8f1.jpg" /> 香槟金
</a>
</dd>
<dd>
<a href="#">
<img src="index/img/59ded682N99d4efcc.jpg" /> 樱粉金
[[${val.attrValue}]]
<!-- <img src="index/img/59ddfcb1Nc3edb8f1.jpg" /> 摩卡金-->
</a>
</dd>
</dl>
</div>
<div class="box-attr-2 clear">
<dl>
<dt>选择版本</dt>
<dd>
<a href="#">标准版</a>
</dd>
<dd>
<a href="#">套装版</a>
</dd>
</dl>
</div>
<div class="box-attr-2 clear">
<dl>
<dt>选择内存</dt>
<dd>
<a href="#">64GB</a>
</dd>
<dd>
<a href="#">128GB</a>
</dd>
</dl>
</div>
</div>
<div class="box-btns clear">
@ -758,21 +721,26 @@
<li>
<a href="##"><img src="index/img/5a12873eN41754123.jpg"/></a>
<p>
<a target="_blank" title="詹姆士GEMRY R19plus全网通4G 智能手机 双卡双待 6+128GB 鳄鱼纹雅致版(新品预约)" href="//item.jd.com/20348283521.html">詹姆士GEMRY R19plus全网通4G 智能手机 双卡双待 6+128GB 鳄鱼纹雅致版(新品预约)</a>
<a target="_blank" title="詹姆士GEMRY R19plus全网通4G 智能手机 双卡双待 6+128GB 鳄鱼纹雅致版(新品预约)"
href="//item.jd.com/20348283521.html">詹姆士GEMRY R19plus全网通4G 智能手机 双卡双待 6+128GB
鳄鱼纹雅致版(新品预约)</a>
</p>
<p><strong class="J-p-20348283521">¥13999.00</strong></p>
</li>
<li>
<a href="##"><img src="index/img/59ec0131Nf239df75.jpg"/></a>
<p>
<a target="_blank" title="斐纳TOMEFON 德国家用无线无绳手持立式充电吸尘器 静音大吸力吸尘器TF-X60" href="//item.jd.com/16683419775.html">斐纳TOMEFON 德国家用无线无绳手持立式充电吸尘器 静音大吸力吸尘器TF-X60</a>
<a target="_blank" title="斐纳TOMEFON 德国家用无线无绳手持立式充电吸尘器 静音大吸力吸尘器TF-X60"
href="//item.jd.com/16683419775.html">斐纳TOMEFON 德国家用无线无绳手持立式充电吸尘器 静音大吸力吸尘器TF-X60</a>
</p>
<p><strong class="J-p-16683419775">¥1599.00</strong></p>
</li>
<li>
<a href="##"><img src="index/img/59015444N27317512.jpg"/></a>
<p>
<a target="_blank" title="斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60 香槟金" href="//item.jd.com/12187770381.html">斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60 香槟金</a>
<a target="_blank" title="斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60 香槟金"
href="//item.jd.com/12187770381.html">斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60
香槟金</a>
</p>
<p><strong class="J-p-12187770381">¥2599.00</strong></p>
</li>
@ -787,13 +755,16 @@
<li>
<a href="##"><img src="index/img/59e55e01N369f98f2.jpg"/></a>
<p>
<a target="_blank" title="华为HUAWEI 华为 Mate10 4G手机 双卡双待 亮黑色 全网通(6GB RAM+128GB ROM)" href="//item.jd.com/17931625443.html">华为HUAWEI 华为 Mate10 4G手机 双卡双待 亮黑色 全网通(6GB RAM+128GB ROM)</a>
<a target="_blank" title="华为HUAWEI 华为 Mate10 4G手机 双卡双待 亮黑色 全网通(6GB RAM+128GB ROM)"
href="//item.jd.com/17931625443.html">华为HUAWEI 华为 Mate10 4G手机 双卡双待 亮黑色 全网通(6GB
RAM+128GB ROM)</a>
<p><strong class="J-p-17931625443">¥4766.00</strong></p>
</li>
<li>
<a href="##"><img src="index/img/584fcc3eNdb0ab94c.jpg"/></a>
<p>
<a target="_blank" title="华为 Mate 9 Pro 6GB+128GB版 琥珀金 移动联通电信4G手机 双卡双待" href="//item.jd.com/3749093.html">华为 Mate 9 Pro 6GB+128GB版 琥珀金 移动联通电信4G手机 双卡双待</a>
<a target="_blank" title="华为 Mate 9 Pro 6GB+128GB版 琥珀金 移动联通电信4G手机 双卡双待"
href="//item.jd.com/3749093.html">华为 Mate 9 Pro 6GB+128GB版 琥珀金 移动联通电信4G手机 双卡双待</a>
</p>
<p><strong class="J-p-3749093">¥4899.00</strong></p>
</li>
@ -801,14 +772,17 @@
<!--shopjieshao-->
<a href="##"><img src="index/img/59eb0df9Nd66d7585.jpg"/></a>
<p>
<a target="_blank" title="华为HUAWEI 华为 Mate10 手机 亮黑色 全网通(4+64G)标准版" href="//item.jd.com/12306211773.html">华为HUAWEI 华为 Mate10 手机 亮黑色 全网通(4+64G)标准版</a>
<a target="_blank" title="华为HUAWEI 华为 Mate10 手机 亮黑色 全网通(4+64G)标准版"
href="//item.jd.com/12306211773.html">华为HUAWEI 华为 Mate10 手机 亮黑色 全网通(4+64G)标准版</a>
</p>
<p><strong class="J-p-12306211773">¥4088.00</strong></p>
</li>
<li>
<a href="##"><img src="index/img/5a002ba3N126c2f73.jpg"/></a>
<p>
<a target="_blank" title="斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60 香槟金" href="//item.jd.com/12187770381.html">斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60 香槟金</a>
<a target="_blank" title="斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60 香槟金"
href="//item.jd.com/12187770381.html">斐纳TOMEFON 扫地机器人德国智能导航规划全自动超薄扫地机器人吸尘器TF-D60
香槟金</a>
</p>
<p><strong class="J-p-12187770381">¥2599.00</strong></p>
</li>
@ -820,19 +794,19 @@
<div class="allquanbushop">
<ul class="shopjieshao">
<li class="jieshoa" style="background: #e4393c;">
<a href="##" style="color: white;">商品介绍</a>
<a style="color: white;">商品介绍</a>
</li>
<li class="baozhuang">
<a href="##">规格与包装</a>
<a>规格与包装</a>
</li>
<li class="baozhang">
<a href="##">售后保障</a>
<a>售后保障</a>
</li>
<li class="pingjia">
<a href="##">商品评价(4万+)</a>
<a>商品评价(4万+)</a>
</li>
<li class="shuoming">
<a href="##">预约说明</a>
<a>预约说明</a>
</li>
</ul>
@ -900,517 +874,27 @@
</td>
</tr>
</table>
<img class="xiaoguo" src="index/img/5a0d4181Nf70c5ebf.jpg" />
<img class="xiaoguo" th:src="${descp}"
th:each="descp:${#strings.listSplit(item.desc.decript,',')}"/>
<div class="guiGebox guiGebox1">
<div class="guiGe">
<h3>主体</h3>
<dl>
<dt>品牌</dt>
<dd>华为(HUAWEI)</dd>
<dt>型号</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>ALP-AL00</dd>
<dt>入网型号</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>ALP-AL00</dd>
<dt>上市年份</dt>
<dd>2017年</dd>
<dt>上市时间</dt>
<dd>10月</dd>
</dl>
</div>
<div class="guiGe">
<h3>基本信息</h3>
<dl>
<dt>机身颜色</dt>
<dd>亮黑色</dd>
<dt>机身长度mm</dt>
<dd>150.5</dd>
<dt>机身宽度mm</dt>
<dd>77.8</dd>
<dt>机身厚度mm</dt>
<dd>8.2</dd>
<dt>机身重量g</dt>
<dd>约186g含电池</dd>
<dt>输入方式</dt>
<dd>触控</dd>
<dt>运营商标志与内容</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd></dd>
<dt>机身材质分类</dt>
<dd>金属边框;玻璃后盖</dd>
<dt>机身材质工艺</dt>
<dd>四曲面玻璃后壳</dd>
</dl>
</div>
<div class="guiGe">
<h3>操作系统</h3>
<dl>
<dt>操作系统</dt>
<dd>Android</dd>
<dt>操作系统版本</dt>
<dd>华为 EMUI 8.0</dd>
</dl>
</div>
<div class="guiGe">
<h3>主芯片</h3>
<dl>
<dt>CPU品牌</dt>
<dd>海思Hisilicon</dd>
<dt>CPU频率</dt>
<dd>4*Cortex A73 2.36GHz + 4*Cortex A53 1.8GHz</dd>
<dt>CPU核数</dt>
<dd>八核</dd>
<dt>CPU型号</dt>
<dd>麒麟970</dd>
</dl>
</div>
<div class="guiGe">
<h3>网络支持</h3>
<dl>
<dt>双卡机类型</dt>
<dd>双卡双待单通</dd>
<dt>最大支持SIM卡数量</dt>
<dd>2个</dd>
<dt>SIM卡类型</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>Nano SIM</dd>
<dt>4G网络</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>4G移动TD-LTE4G联通FDD-LTE4G电信FDD-LTE4G联通TD-LTE</dd>
<dt>3G/2G网络</dt>
<dd>3G移动TD-LTE4G联通WCDMA3G电信CDMA20002G移动联通GSM+ 电信CDMA</dd>
<dt>副SIM卡类型</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>副SIM卡与存储卡二选一</dd>
<dt>副SIM卡4G网络</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>4G移动TD-LTE4G联通FDD-LTE4G电信FDD-LTE4G联通TD-LTE</dd>
<dt>副SIM卡3G/2G网络</dt>
<dd>不支持主副卡同时使用电信卡3G联通WCDMA3G电信CDMA20002G移动联通GSM+电信CDMA</dd>
<dt>网络频率2G/3G</dt>
<dd>2GGSM 850/900/1800/19002GCDMA 8003GTD-SCDMA 1900/20003GWCDMA 850/900/1900/21003G</dd>
<dd>CDMA20003GCDMA 800MHz 1X&EVDO 3GWCDMA850/900/1700/1900/2100MHz</dd>
</dl>
</div>
<div class="guiGe">
<h3>存储</h3>
<dl>
<dt>ROM</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>128GB</dd>
<dt>RAM</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>6GB</dd>
<dt>存储卡</dt>
<dd>支持MicroSDTF</dd>
<dt>最大存储扩展容量</dt>
<dd>256GB</dd>
</dl>
</div>
<div class="guiGe">
<h3>屏幕</h3>
<dl>
<dt>主屏幕尺寸(英寸)</dt>
<dd>5.9英寸</dd>
<dt>分辨率</dt>
<dd>2560X1400Quad HD/2k</dd>
<dt>屏幕材质类型</dt>
<dd>TFT</dd>
</dl>
</div>
<div class="guiGe">
<h3>前置摄像头</h3>
<dl>
<dt>前置摄像头</dt>
<dd>800万像素</dd>
<dt>前摄光圈大小</dt>
<dd>f/2.0</dd>
<dt>美颜技术</dt>
<dd>支持</dd>
</dl>
</div>
<!--nav-->
<div class="guiGe">
<h3>后置摄像头</h3>
<dl>
<dt>摄像头数量</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>2个</dd>
<dt>后置摄像头</dt>
<dd>1200万像素2000万像素</dd>
<dt>摄像头光圈大小</dt>
<dd>其他</dd>
<dt>闪光灯</dt>
<dd>双色温双LED闪光灯</dd>
<dt>美颜技术</dt>
<dd>支持</dd>
<dt>副摄像头光圈大小</dt>
<dd>其他</dd>
<dt>照片最大分辨率</dt>
<dd>5120X3840</dd>
<dt>拍照特点</dt>
<dd>数码变焦自动对焦防抖美颜连拍微距全景滤镜场景模式HDRPDAF夜间拍摄微信小视频有声照片</dd>
<dd>水印;美肤录像;全像素双核激光对焦拍摄</dd>
</dl>
</div>
<div class="guiGe">
<h3>电池信息</h3>
<dl>
<dt>电池容量mAh</dt>
<dd>4000典型值</dd>
<dt>电池类型</dt>
<dd>锂聚合物电池</dd>
<dt>电池是否可拆卸</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd></dd>
<dt>充电器</dt>
<dd>5V/4.5A</dd>
<dt>快速充电</dt>
<dd>华为超级快充</dd>
</dl>
</div>
<div class="guiGe">
<h3>娱乐功能</h3>
<dl>
<dt>mic数量</dt>
<dd>3个</dd>
</dl>
</div>
<div class="guiGe">
<h3>数据接口</h3>
<dl>
<dt>数据传输接口</dt>
<dd>红外WIFINFC蓝牙WiFi热点</dd>
<dt>NFC/NFC模式</dt>
<dd>支持(点对点模式);支持(读卡器模式);支持卡模拟</dd>
<dt>耳机接口类型</dt>
<dd>3.5mm</dd>
<dt>充电接口类型</dt>
<dd>Type-C</dd>
<dt>数据线</dt>
<dd>其他</dd>
</dl>
</div>
<div class="guiGe">
<h3>手机特性</h3>
<dl>
<dt>指纹识别</dt>
<dd>支持</dd>
<dt>语音识别</dt>
<dd>支持</dd>
<dt>GPS</dt>
<dd>支持</dd>
<dt>电子罗盘</dt>
<dd>支持</dd>
<dt>霍尔感应器</dt>
<dd>支持</dd>
<dt>陀螺仪</dt>
<dd>支持</dd>
<dt>红外遥控</dt>
<dd>支持</dd>
<dt>适配VR</dt>
<dd>支持</dd>
<dt>其他</dt>
<dd>呼气灯;多麦降噪技术;光线感应</dd>
</dl>
</div>
<div class="guiGe">
<h3>辅助功能</h3>
<dl>
<dt>常用功能</dt>
<dd>录音手势识别便签超大字体SOS功能重礼感应</dd>
<dt>其他1</dt>
<dd>智能识屏</dd>
<dt>其他特性</dt>
<dd>手套模式</dd>
<dt>其他2</dt>
<dd>单手操作</dd>
</dl>
</div>
<div class="package-list">
<h3>包装清单</h3>
<p>手机(含内置电池) X 1、5A大电流华为SuperCharge充电器X 1、5A USB数据线 X 1、半入耳式线控耳机 X 1、快速指南X 1、三包凭证 X 1、取卡针 X 1、保护壳 X 1</p>
</div>
</div>
</div>
</li>
<li class="baozhuang actives" id="li2">
<div class="guiGebox">
<div class="guiGe">
<h3>主体</h3>
<div class="guiGe" th:each="group:${item.groupAttrs}">
<h3 th:text="${group.groupName}">主体</h3>
<dl>
<dt>品牌</dt>
<dd>华为(HUAWEI)</dd>
<dt>型号</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>ALP-AL00</dd>
<dt>入网型号</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>ALP-AL00</dd>
<dt>上市年份</dt>
<dd>2017年</dd>
<dt>上市时间</dt>
<dd>10月</dd>
</dl>
<div th:each="attr:${group.attrs}">
<dt th:text="${attr.attrName}">品牌</dt>
<dd th:text="${attr.attrValue}">华为(HUAWEI)</dd>
</div>
<div class="guiGe">
<h3>基本信息</h3>
<dl>
<dt>机身颜色</dt>
<dd>亮黑色</dd>
<dt>机身长度mm</dt>
<dd>150.5</dd>
<dt>机身宽度mm</dt>
<dd>77.8</dd>
<dt>机身厚度mm</dt>
<dd>8.2</dd>
<dt>机身重量g</dt>
<dd>约186g含电池</dd>
<dt>输入方式</dt>
<dd>触控</dd>
<dt>运营商标志与内容</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd></dd>
<dt>机身材质分类</dt>
<dd>金属边框;玻璃后盖</dd>
<dt>机身材质工艺</dt>
<dd>四曲面玻璃后壳</dd>
</dl>
</div>
<div class="guiGe">
<h3>操作系统</h3>
<dl>
<dt>操作系统</dt>
<dd>Android</dd>
<dt>操作系统版本</dt>
<dd>华为 EMUI 8.0</dd>
</dl>
</div>
<div class="guiGe">
<h3>主芯片</h3>
<dl>
<dt>CPU品牌</dt>
<dd>海思Hisilicon</dd>
<dt>CPU频率</dt>
<dd>4*Cortex A73 2.36GHz + 4*Cortex A53 1.8GHz</dd>
<dt>CPU核数</dt>
<dd>八核</dd>
<dt>CPU型号</dt>
<dd>麒麟970</dd>
</dl>
</div>
<div class="guiGe">
<h3>网络支持</h3>
<dl>
<dt>双卡机类型</dt>
<dd>双卡双待单通</dd>
<dt>最大支持SIM卡数量</dt>
<dd>2个</dd>
<dt>SIM卡类型</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>Nano SIM</dd>
<dt>4G网络</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>4G移动TD-LTE4G联通FDD-LTE4G电信FDD-LTE4G联通TD-LTE</dd>
<dt>3G/2G网络</dt>
<dd>3G移动TD-LTE4G联通WCDMA3G电信CDMA20002G移动联通GSM+ 电信CDMA</dd>
<dt>副SIM卡类型</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>副SIM卡与存储卡二选一</dd>
<dt>副SIM卡4G网络</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>4G移动TD-LTE4G联通FDD-LTE4G电信FDD-LTE4G联通TD-LTE</dd>
<dt>副SIM卡3G/2G网络</dt>
<dd>不支持主副卡同时使用电信卡3G联通WCDMA3G电信CDMA20002G移动联通GSM+电信CDMA</dd>
<dt>网络频率2G/3G</dt>
<dd>2GGSM 850/900/1800/19002GCDMA 8003GTD-SCDMA 1900/20003GWCDMA 850/900/1900/21003G</dd>
<dd>CDMA20003GCDMA 800MHz 1X&EVDO 3GWCDMA850/900/1700/1900/2100MHz</dd>
</dl>
</div>
<div class="guiGe">
<h3>存储</h3>
<dl>
<dt>ROM</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>128GB</dd>
<dt>RAM</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>6GB</dd>
<dt>存储卡</dt>
<dd>支持MicroSDTF</dd>
<dt>最大存储扩展容量</dt>
<dd>256GB</dd>
</dl>
</div>
<div class="guiGe">
<h3>屏幕</h3>
<dl>
<dt>主屏幕尺寸(英寸)</dt>
<dd>5.9英寸</dd>
<dt>分辨率</dt>
<dd>2560X1400Quad HD/2k</dd>
<dt>屏幕材质类型</dt>
<dd>TFT</dd>
</dl>
</div>
<div class="guiGe">
<h3>前置摄像头</h3>
<dl>
<dt>前置摄像头</dt>
<dd>800万像素</dd>
<dt>前摄光圈大小</dt>
<dd>f/2.0</dd>
<dt>美颜技术</dt>
<dd>支持</dd>
</dl>
</div>
<div class="guiGe">
<h3>后置摄像头</h3>
<dl>
<dt>摄像头数量</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd>2个</dd>
<dt>后置摄像头</dt>
<dd>1200万像素2000万像素</dd>
<dt>摄像头光圈大小</dt>
<dd>其他</dd>
<dt>闪光灯</dt>
<dd>双色温双LED闪光灯</dd>
<dt>美颜技术</dt>
<dd>支持</dd>
<dt>副摄像头光圈大小</dt>
<dd>其他</dd>
<dt>照片最大分辨率</dt>
<dd>5120X3840</dd>
<dt>拍照特点</dt>
<dd>数码变焦自动对焦防抖美颜连拍微距全景滤镜场景模式HDRPDAF夜间拍摄微信小视频有声照片</dd>
<dd>水印;美肤录像;全像素双核激光对焦拍摄</dd>
</dl>
</div>
<div class="guiGe">
<h3>电池信息</h3>
<dl>
<dt>电池容量mAh</dt>
<dd>4000典型值</dd>
<dt>电池类型</dt>
<dd>锂聚合物电池</dd>
<dt>电池是否可拆卸</dt>
<dd class="Ptable-tips">
<a href="#"><i></i></a>
</dd>
<dd></dd>
<dt>充电器</dt>
<dd>5V/4.5A</dd>
<dt>快速充电</dt>
<dd>华为超级快充</dd>
</dl>
</div>
<div class="guiGe">
<h3>娱乐功能</h3>
<dl>
<dt>mic数量</dt>
<dd>3个</dd>
</dl>
</div>
<div class="guiGe">
<h3>数据接口</h3>
<dl>
<dt>数据传输接口</dt>
<dd>红外WIFINFC蓝牙WiFi热点</dd>
<dt>NFC/NFC模式</dt>
<dd>支持(点对点模式);支持(读卡器模式);支持卡模拟</dd>
<dt>耳机接口类型</dt>
<dd>3.5mm</dd>
<dt>充电接口类型</dt>
<dd>Type-C</dd>
<dt>数据线</dt>
<dd>其他</dd>
</dl>
</div>
<div class="guiGe">
<h3>手机特性</h3>
<dl>
<dt>指纹识别</dt>
<dd>支持</dd>
<dt>语音识别</dt>
<dd>支持</dd>
<dt>GPS</dt>
<dd>支持</dd>
<dt>电子罗盘</dt>
<dd>支持</dd>
<dt>霍尔感应器</dt>
<dd>支持</dd>
<dt>陀螺仪</dt>
<dd>支持</dd>
<dt>红外遥控</dt>
<dd>支持</dd>
<dt>适配VR</dt>
<dd>支持</dd>
<dt>其他</dt>
<dd>呼气灯;多麦降噪技术;光线感应</dd>
</dl>
</div>
<div class="guiGe">
<h3>辅助功能</h3>
<dl>
<dt>常用功能</dt>
<dd>录音手势识别便签超大字体SOS功能重礼感应</dd>
<dt>其他1</dt>
<dd>智能识屏</dd>
<dt>其他特性</dt>
<dd>手套模式</dd>
<dt>其他2</dt>
<dd>单手操作</dd>
</dl>
</div>
<div class="package-list">
<h3>包装清单</h3>
<p>手机(含内置电池) X 1、5A大电流华为SuperCharge充电器X 1、5A USB数据线 X 1、半入耳式线控耳机 X 1、快速指南X 1、三包凭证 X 1、取卡针 X 1、保护壳 X 1</p>
</div>
</div>
</li>
<!--包装-->
@ -1461,7 +945,8 @@
<h3>全国联保</h3>
</span>
<div class="wenZi">
凭质保证书及京东商城发票,可享受全国联保服务(奢侈品、钟表除外;奢侈品、钟表由京东联系保修,享受法定三包售后服务),与您亲临商场选购的商品享受相同的质量保证。京东商城还为您提供具有竞争力的商品价格和运费政策,请您放心购买! <br />
凭质保证书及京东商城发票,可享受全国联保服务(奢侈品、钟表除外;奢侈品、钟表由京东联系保修,享受法定三包售后服务),与您亲临商场选购的商品享受相同的质量保证。京东商城还为您提供具有竞争力的商品价格和运费政策,请您放心购买!
<br/>
注:因厂家会在没有任何提前通知的情况下更改产品包装、产地或者一些附件,本司不能确保客户收到的货物与商城图片、产地、附件说明完全一致。只能确保为原厂正货!并且保证与当时市场上同样主流新品一致。若本商城没有及时更新,请大家谅解!
</div>
@ -1548,7 +1033,8 @@
<li><a href="##">中评100+</a></li>
<li><a href="##">差评100+</a></li>
<li><a href="##"><input type="checkbox"/>只看当前商品价格</a></li>
<li class="imga" style="float: right;"><a href="##">推荐排序 <img src="index/img/animaite.png"/> </a>
<li class="imga" style="float: right;"><a href="##">推荐排序 <img
src="index/img/animaite.png"/> </a>
</li>
</ul>
</div>

Loading…
Cancel
Save