Appearance
[TOC]
用户输入的内容,需要进行审核,防止用户输入违规内容(涉恐、涉政、色情、暴力等)
文本审核:对文本内容进行内容审核,查看是否合规
图片审核:鉴别,图片的合法性
基于百度的AI接口实现文本审核和图片审核
1.开通账号,添加应用
https://cloud.baidu.com/doc/ANTIPORN/s/hk3h6xdbp
AppID:17540802
AppKey:wKE4Iuyd383Wld3GXCKCGNF7
AppSec:cUDtMt9n5Ur4xoQRKiLizW5flGLS15AZ
2.查阅文档,编写代码
1.依赖jar
<dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.16.6</version> </dependency>
2.编写代码
public class BaiduContentCensor { public static final String APP_ID = "17540802"; public static final String API_KEY = "wKE4Iuyd383Wld3GXCKCGNF7"; public static final String SECRET_KEY = "cUDtMt9n5Ur4xoQRKiLizW5flGLS15AZ"; private AipContentCensor client; private BaiduContentCensor(){ client = new AipContentCensor(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); } private static class BaiduContentSignle{ public static BaiduContentCensor contentCensor=new BaiduContentCensor(); } public static BaiduContentCensor getInstance(){ return BaiduContentSignle.contentCensor; } /** * 文本内容审核*/ public boolean censorText(String msg){ JSONObject response=client.textCensorUserDefined(msg); int r=response.getInt("conclusionType"); return r==1; } /** * 图片审核*/ public boolean censorImg(byte[] data){ JSONObject response=client.imageCensorUserDefined(data,null); int r=response.getInt("conclusionType"); return r==1; } }
3.测试
实现系统的评价业务,用户对订单进行评价
梳理需求,明白需要要干什么
接口列表:
1.评价接口
2.追加评价接口
3.查询我的评价
难点:
1.流程(1.校验 2.内容 3.奖励 4.自动好评)
2.数据库设计
会员生日提醒:定时任务(每日早上7点)
自动好评:定时任务(每日1点)
1、启动类增加注解,作用是启用定时任务,Spring默认自动装配了定时任务组件
@EnableScheduling
2、使用定时任务
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class AutoCommentTask { @Scheduled(cron = "*/5 * * * * ?") public void handler(){ System.out.println("开始每日自动评价检查"); System.out.println("开始每日自动评价结束"); } }
3、Cron表达式
cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期}例 "0 0 12 ? * WED" 在每星期三下午12:00 执行(年份通常 省略)
cron表达式格式:
{秒数} {分钟} {小时} {日期} {月份} {星期}
例 "0 0 12 ? * WED" 在每星期三下午12:00 执行(年份通常 省略)
### 每个字段的允许值 字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * /
示例
*/5 * * * * ? 每隔5秒执行一次 0 */1 * * * ? 每隔1分钟执行一次 0 0 5-15 * * ? 每天5-15点整点触发 0 0/3 * * * ? 每三分钟触发一次 0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发 0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发 0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 0 0 12 ? * WED 表示每个星期三中午12点 0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点 0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发 0 15 10 ? * MON-FRI 周一至周五的上午10:15触发 0 0 23 L * ? 每月最后一天23点执行一次 0 15 10 L * ? 每月最后一日的上午10:15触发 0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发 0 15 10 * * ? 2005 2005年的每天上午10:15触发 0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发 0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发 "30 * * * * ?" 每半分钟触发任务 "30 10 * * * ?" 每小时的10分30秒触发任务 "30 10 1 * * ?" 每天1点10分30秒触发任务 "30 10 1 20 * ?" 每月20号1点10分30秒触发任务 "30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务 "30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务 "30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务 "30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务 "15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务 "15-45 * * * * ?" 15到45秒内,每秒都触发任务 "15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次 "15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次 "0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次 "0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务 "0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务 "0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务 "0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务 "0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务
4、表达式生成器
http://cron.qqe2.com/
数据库设计:
1.订单评价表
2.商品评价表
CREATE TABLE t_ordercomment( id INT NOT NULL AUTO_INCREMENT COMMENT '主键' , oid INT COMMENT '订单ID' , rate INT COMMENT '评分' , lrate INT COMMENT '物流评分' , ctime DATETIME COMMENT '创建时间' , PRIMARY KEY (id) ) COMMENT = '订单评价表'; CREATE TABLE t_goodscomment( id INT NOT NULL AUTO_INCREMENT COMMENT '主键' , rate INT COMMENT '评分' , ocid INT COMMENT '订单评价ID' , content VARCHAR(255) COMMENT '评价内容' , score INT COMMENT '积分' , ctime DATETIME COMMENT '创建时间' , pid INT COMMENT '上级ID' , sid INT COMMENT '商家id' , type INT COMMENT '类型' , uid INT COMMENT '用户ID' , PRIMARY KEY (id) ) COMMENT = '商品评价信息';
@Service public class OrderCommentserviceImpl implements OrderCommentservice { @Resource private OrderCommentDao dao; @Resource private GoodsCommentDao goodsCommentDao; @Resource private NetWorkProvider workProvider; @Resource private OrderProvider orderProvider; @Resource private RabbitTemplate rabbitTemplate; private int oid=0; private OrderComment comment=null; //用户新增评价 @Override @Transactional @GlobalTransactional//分布式事务 public R save(CommentAddDto dto,int uid) { //1.查询 OrderDetailDto detailDto=orderProvider.queryById(dto.getOid()); if(detailDto!=null && detailDto.getStatus()== OrderFlag.已确认.getCode()) { //允许评价 //2.文本审核 if(workProvider.consorText(dto.getContent())){ //3.生成信息 OrderComment comment=new OrderComment(dto.getOid(),dto.getRate1(),dto.getRate2()); //4.数据更改 if(dao.insert(comment)>0){ //5.远程服务-订单 orderProvider.updateFalg(detailDto.getOid(),OrderFlag.已评价.getCode()); int s=(int)(detailDto.getPrice()*detailDto.getNum()); //6.奖励-MQ 积分-1元=1积分(1分钱) rabbitTemplate.convertAndSend("", RabbitMQConstConfig.Q_USERSCORE,new MqMsgBo(SnowFlowUtil.getInstance().nextId(), RabbitMQConstConfig.MQTYPE_ORDERCOMMENT, new UserMqBo(uid,s,SystemConfig.SCORETYPE_ORDERCOMMENT,dto.getIp(),dto.getDecive()))); //7.其他数据 GoodsComment goodsComment=new GoodsComment(dto.getRate3(),comment.getId(),dto.getContent(),s,0,0,SystemConfig.COMMENT_TYPE_ADD,uid); //8.返回 return RUtil.ok(); } } } return RUtil.fail(); } @Override @Transactional @GlobalTransactional public R autoSave() { //每日定时任务 检查是否需要自动评价 //1.查询需要自动评价的订单信息 List<OrderItemCommentDto> list=orderProvider.queryAuto(); //2.遍历,实现自动好评 量多->批处理-->线程池 分担压力 list.forEach(dto->{ if(oid!=dto.getId()){ oid=dto.getId(); comment=new OrderComment(dto.getId(),5,5); //新增订单评价到数据库 if(dao.insert(comment)>0){ //操作远程服务 更改订单状态 orderProvider.updateFalg(dto.getId(),OrderFlag.已评价.getCode()); //订单流水日志 } } //新增订单商品评价 GoodsComment goodsComment=new GoodsComment(5,comment.getId(),"系统自动评价",0,0,0,SystemConfig.COMMENT_TYPE_AUTOADD, dto.getUid()); goodsCommentDao.insert(goodsComment); }); return RUtil.ok(); } }
[TOC]
0、前言
用户输入的内容,需要进行审核,防止用户输入违规内容(涉恐、涉政、色情、暴力等)
文本审核:对文本内容进行内容审核,查看是否合规
图片审核:鉴别,图片的合法性
基于百度的AI接口实现文本审核和图片审核
1.开通账号,添加应用
https://cloud.baidu.com/doc/ANTIPORN/s/hk3h6xdbp
AppID:17540802
AppKey:wKE4Iuyd383Wld3GXCKCGNF7
AppSec:cUDtMt9n5Ur4xoQRKiLizW5flGLS15AZ
2.查阅文档,编写代码
1.依赖jar
2
3
4
5
2.编写代码
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
3.测试
一、需求
实现系统的评价业务,用户对订单进行评价
二、分析
梳理需求,明白需要要干什么
接口列表:
1.评价接口
2.追加评价接口
3.查询我的评价
难点:
1.流程(1.校验 2.内容 3.奖励 4.自动好评)
2.数据库设计
会员生日提醒:定时任务(每日早上7点)
自动好评:定时任务(每日1点)
三、定时任务
1、启动类增加注解,作用是启用定时任务,Spring默认自动装配了定时任务组件
2、使用定时任务
2
3
4
5
6
7
8
9
10
11
12
13
3、Cron表达式
2
3
4
5
6
7
8
9
示例
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
4、表达式生成器
http://cron.qqe2.com/
四、设计
数据库设计:
1.订单评价表
2.商品评价表
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
五、编码
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
六、测试