Commit 5f34f277 authored by shiyu's avatar shiyu

安全识别

parent c0676efd
......@@ -67,20 +67,50 @@ public class QdWxAppletApi {
public String checkMedia(WxCheckMediaRequestDto dto) {
String accessToken = qdWxLoginManager.getAccessToken();
String url = String.format(MEDIA_CHECK_URL, accessToken);
OkHttpUtil okHttpUtil = OkHttpUtil.builder().url(url);
Map<String, Object> map = new HashMap<>();
map.put("media_url", dto.getMediaUrl());
map.put("media_type", dto.getMediaType());
map.put("version", 2);
map.put("scene", 4);
map.put("openid", dto.getWxOpenId());
okHttpUtil.addParams(map);
okHttpUtil.post(true);
String responseStr = okHttpUtil.async();
logger.info("[checkMedia] response :{}", responseStr);
return responseStr;
try {
String accessToken = qdWxLoginManager.getAccessToken();
String url = String.format(MEDIA_CHECK_URL, accessToken);
OkHttpUtil okHttpUtil = OkHttpUtil.builder().url(url);
Map<String, Object> map = new HashMap<>();
map.put("media_url", dto.getMediaUrl());
map.put("media_type", dto.getMediaType());
map.put("version", 2);
map.put("scene", 4);
map.put("openid", dto.getWxOpenId());
okHttpUtil.addParams(map);
okHttpUtil.post(true);
String responseStr = okHttpUtil.async();
logger.info("[checkMedia] response :{}", responseStr);
String traceId = JsonUtils.getValueByPath(responseStr, "trace_id");
return traceId;
} catch (Exception e) {
logger.error("checkMedia error : {}", e);
}
return null;
}
public String checkAudio(WxCheckMediaRequestDto dto) {
try {
String accessToken = qdWxLoginManager.getAccessToken();
String url = String.format(MEDIA_CHECK_URL, accessToken);
OkHttpUtil okHttpUtil = OkHttpUtil.builder().url(url);
Map<String, Object> map = new HashMap<>();
map.put("media_url", dto.getMediaUrl());
map.put("media_type", dto.getMediaType());
map.put("version", 2);
map.put("scene", 4);
map.put("openid", dto.getWxOpenId());
okHttpUtil.addParams(map);
okHttpUtil.post(true);
String responseStr = okHttpUtil.async();
logger.info("[checkAudio] response :{}", responseStr);
String traceId = JsonUtils.getValueByPath(responseStr, "trace_id");
return traceId;
} catch (Exception e) {
logger.error("checkAudio error : {}", e);
}
return null;
}
......
......@@ -54,6 +54,11 @@ public interface CommConsts {
*/
public static final String AUCTION_LOCK_KEY_PRE = "AUCTION:OFFER:";
/**
* 微信内容安全检测结果缓存
*/
public static final String QIANDAO_CHECK_RESULT_KEY = "qiandao:check:result:key:";
/**
* 拍卖保证金额度更新的锁
*/
......
package com.wwdz.ch.core.consts.qiandao;
public class WxCheckEnum {
/**
* 检测类型
*/
public enum TypeEnum {
SIGN_IN_IMAGE(1, "签到笔记图片"),
SIGN_IN_AUDIO(2, "签到笔记音频"),
USER_AVATAR(3, "用户头像"),
USER_TASK(4, "用户创建的任务"),
;
private int code;
private String des;
TypeEnum(int code, String des) {
this.code = code;
this.des = des;
}
public static String getNameByCode(int code) {
for (SignInTaskEnum.TypeEnum typeEnum : SignInTaskEnum.TypeEnum.values()) {
if (code == typeEnum.getCode()) {
return typeEnum.getDes();
}
}
return null;
}
public int getCode() {
return code;
}
public String getDes() {
return des;
}
}
}
......@@ -7,7 +7,7 @@ import java.util.List;
public interface QdUserSignInNoteDao {
boolean insert(QdUserSignInNote qdUserSignInNote);
long insert(QdUserSignInNote qdUserSignInNote);
List<QdUserSignInNote> findByPage(QdUserSignInNoteRequestDto dto);
......
......@@ -21,4 +21,6 @@ public interface SignInTaskDao {
SignInTask findById(long taskId);
boolean updateByPrimaryKey(SignInTask signInTask);
boolean delete(long taskId);
}
package com.wwdz.ch.db.dao.qiandao;
import com.wwdz.ch.db.domain.qiandao.SignInTask;
import com.wwdz.ch.db.domain.qiandao.WxCheckRecord;
public interface WxCheckRecordDao {
boolean insert(WxCheckRecord wxCheckRecord);
WxCheckRecord findByTraceId(String traceId);
boolean update(WxCheckRecord wxCheckRecord);
boolean updateByPrimaryKey(WxCheckRecord wxCheckRecord);
}
......@@ -22,8 +22,9 @@ public class QdUserSignInNoteDaoImpl implements QdUserSignInNoteDao {
QdUserSignInNoteMapper qdUserSignInNoteMapper;
@Override
public boolean insert(QdUserSignInNote qdUserSignInNote) {
return qdUserSignInNoteMapper.insert(qdUserSignInNote) > 0;
public long insert(QdUserSignInNote qdUserSignInNote) {
qdUserSignInNoteMapper.insert(qdUserSignInNote);
return qdUserSignInNote.getId();
}
@Override
......
......@@ -73,4 +73,10 @@ public class SignInTaskDaoImpl implements SignInTaskDao {
public boolean updateByPrimaryKey(SignInTask signInTask) {
return signInTaskMapper.updateByPrimaryKeySelective(signInTask) > 0;
}
@Override
public boolean delete(long taskId) {
return signInTaskMapper.deleteByPrimaryKey(taskId) > 0;
}
}
package com.wwdz.ch.db.impl.qiandao;
import com.wwdz.ch.db.dao.qiandao.WxCheckRecordDao;
import com.wwdz.ch.db.domain.qiandao.WxCheckRecord;
import com.wwdz.ch.db.domain.qiandao.WxCheckRecordExample;
import com.wwdz.ch.db.mapper.qiandao.WxCheckRecordMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class WxCheckRecordDaoImpl implements WxCheckRecordDao {
@Autowired
WxCheckRecordMapper wxCheckRecordMapper;
@Override
public boolean insert(WxCheckRecord wxCheckRecord) {
return wxCheckRecordMapper.insert(wxCheckRecord) > 0;
}
@Override
public WxCheckRecord findByTraceId(String traceId) {
WxCheckRecordExample example = new WxCheckRecordExample();
WxCheckRecordExample.Criteria criteria = example.createCriteria();
criteria.andTraceIdEqualTo(traceId);
return wxCheckRecordMapper.selectOneByExample(example);
}
@Override
public boolean update(WxCheckRecord wxCheckRecord) {
WxCheckRecordExample example = new WxCheckRecordExample();
WxCheckRecordExample.Criteria criteria = example.createCriteria();
criteria.andTraceIdEqualTo(wxCheckRecord.getTraceId());
return wxCheckRecordMapper.updateByExampleSelective(wxCheckRecord,example) > 0;
}
@Override
public boolean updateByPrimaryKey(WxCheckRecord wxCheckRecord) {
return wxCheckRecordMapper.updateByPrimaryKeySelective(wxCheckRecord) > 0;
}
}
package com.wwdz.ch.db.mapper.qiandao;
import com.wwdz.ch.db.domain.qiandao.WxCheckRecord;
import com.wwdz.ch.db.domain.qiandao.WxCheckRecordExample;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface WxCheckRecordMapper {
long countByExample(WxCheckRecordExample example);
int deleteByExample(WxCheckRecordExample example);
int deleteByPrimaryKey(Long id);
int insert(WxCheckRecord record);
int insertSelective(WxCheckRecord record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table wx_check_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
WxCheckRecord selectOneByExample(WxCheckRecordExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table wx_check_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
WxCheckRecord selectOneByExampleSelective(@Param("example") WxCheckRecordExample example, @Param("selective") WxCheckRecord.Column ... selective);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table wx_check_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
List<WxCheckRecord> selectByExampleSelective(@Param("example") WxCheckRecordExample example, @Param("selective") WxCheckRecord.Column ... selective);
List<WxCheckRecord> selectByExample(WxCheckRecordExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table wx_check_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
WxCheckRecord selectByPrimaryKeySelective(@Param("id") Long id, @Param("selective") WxCheckRecord.Column ... selective);
WxCheckRecord selectByPrimaryKey(Long id);
int updateByExampleSelective(@Param("record") WxCheckRecord record, @Param("example") WxCheckRecordExample example);
int updateByExample(@Param("record") WxCheckRecord record, @Param("example") WxCheckRecordExample example);
int updateByPrimaryKeySelective(WxCheckRecord record);
int updateByPrimaryKey(WxCheckRecord record);
}
\ No newline at end of file
......@@ -72,7 +72,7 @@
<javaClientGenerator type="XMLMAPPER" targetPackage="com.wwdz.ch.db.mapper.qiandao"
targetProject="ch-dao/src/main/java"/>
<table tableName="sign_in_task" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<table tableName="wx_check_record" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
......
......@@ -2,13 +2,19 @@ package com.wwdz.ch.wx.api;
import com.wwdz.ch.core.api.QdOfficialAccountApi;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.OfficalAccountEnum;
import com.wwdz.ch.core.consts.qiandao.WxCheckEnum;
import com.wwdz.ch.core.util.RedisUtils;
import com.wwdz.ch.db.dao.qiandao.QdUserDao;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdUser;
import com.wwdz.ch.db.dao.qiandao.QdUserSignInNoteDao;
import com.wwdz.ch.db.dao.qiandao.SignInTaskDao;
import com.wwdz.ch.db.dao.qiandao.WxCheckRecordDao;
import com.wwdz.ch.db.domain.qiandao.*;
import com.wwdz.ch.wx.api.aes.AesException;
import com.wwdz.ch.wx.api.aes.WXBizMsgCrypt;
import com.wwdz.ch.wx.service.qiandao.QdOfficialAccountSubscribeRecordService;
import com.xxdxxs.utils.JsonUtils;
import com.xxdxxs.utils.StringUtils;
import com.xxdxxs.utils.XmlUtils;
import org.dom4j.DocumentException;
......@@ -50,6 +56,17 @@ public class QdAppletCallbackController {
@Autowired
QdUserDao qdUserDao;
@Autowired
RedisUtils redisUtils;
@Autowired
WxCheckRecordDao wxCheckRecordDao;
@Autowired
QdUserSignInNoteDao qdUserSignInNoteDao;
@Autowired
SignInTaskDao signInTaskDao;
@RequestMapping(value ="/getNotice")
public Object getNotice(@RequestParam(required = false, name = "signature") String signature,
......@@ -57,10 +74,70 @@ public class QdAppletCallbackController {
@RequestParam(required = false, name = "nonce") String nonce,
@RequestParam(required = false, name = "echostr") String echostr,
HttpServletRequest request, HttpServletResponse response){
logger.info("接收小程序推送信息校验 -> appid: {}, signature:{}, timestamp:{}, nonce:{}, echostr : {}", APPID, signature, timestamp, nonce, echostr);
logger.info("接收微信内容安全审核异步通知校验 -> appid: {}, signature:{}, timestamp:{}, nonce:{}, echostr : {}", APPID, signature, timestamp, nonce, echostr);
if (StringUtils.hasLength(echostr)) {
return Long.valueOf(echostr.trim());
}
ByteArrayOutputStream output = null;
InputStream input = null;
try {
output = new ByteArrayOutputStream();
input = request.getInputStream();
byte[] by = new byte[1024];
int length = 0;
while ((length = input.read(by)) != -1) {
output.write(by, 0, length);
}
String noticeStr = new String(output.toByteArray(), "UTF-8");
String result = JsonUtils.getValueByPath(noticeStr, "result/suggest");
String traceId = JsonUtils.getValueByPath(noticeStr, "trace_id");
WxCheckRecord wxCheckRecord = wxCheckRecordDao.findByTraceId(traceId);
int type = wxCheckRecord.getType();
long sourceId = wxCheckRecord.getSourceId();
long userId = wxCheckRecord.getUserId();
if (wxCheckRecord != null) {
wxCheckRecord.setTraceId(traceId);
wxCheckRecord.setSuggest(result);
wxCheckRecord.setCreateTime(new Date());
wxCheckRecordDao.updateByPrimaryKey(wxCheckRecord);
}
if (!"pass".equals(result)) {
//审核不通过,redis记录并标记
if (WxCheckEnum.TypeEnum.SIGN_IN_IMAGE.getCode() == type || WxCheckEnum.TypeEnum.SIGN_IN_AUDIO.getCode() == type) {
QdUserSignInNote qdUserSignInNote = new QdUserSignInNote();
qdUserSignInNote.setId(sourceId);
qdUserSignInNote.setIsDeleted(true);
qdUserSignInNoteDao.updateByPrimaryKey(qdUserSignInNote);
} else if (WxCheckEnum.TypeEnum.USER_AVATAR.getCode() == type) {
QdUser qdUser = new QdUser();
qdUser.setId(sourceId);
qdUser.setAvatar(CommConsts.QIANDAO_DEFAULT_AVATAR_URL);
qdUserDao.updateById(qdUser);
} else if (WxCheckEnum.TypeEnum.USER_TASK.getCode() == type) {
signInTaskDao.delete(sourceId);
}
String key = CommConsts.QIANDAO_CHECK_RESULT_KEY + userId;
redisUtils.set(key, result);
}
logger.info("微信内容安全审核异步通知原文:{}", noticeStr);
} catch (Exception e) {
logger.error("微信公众号通知回调接口 error : {}", e);
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (input != null) {
try {
input.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
return "success";
}
......
......@@ -199,4 +199,15 @@ public class QdHomePageServiceImpl implements QdHomePageService {
}
return Result.failed();
}
@Override
public Result check(QdUserSignInRequestDto dto) {
String key = CommConsts.QIANDAO_CHECK_RESULT_KEY + dto.getUserId();
if (redisUtils.hasKey(key)) {
redisUtils.delete(key);
return Result.failed();
}
return Result.success();
}
}
......@@ -4,22 +4,22 @@ import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.api.qiandao.QdWxAppletApi;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.qiandao.SignInTaskEnum;
import com.wwdz.ch.core.consts.qiandao.WxCheckEnum;
import com.wwdz.ch.core.entity.WxCheckMediaRequestDto;
import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dao.qiandao.QdUserDao;
import com.wwdz.ch.db.dao.qiandao.QdUserSignInDao;
import com.wwdz.ch.db.dao.qiandao.QdUserSignInTaskDao;
import com.wwdz.ch.db.dao.qiandao.SignInTaskDao;
import com.wwdz.ch.db.dao.qiandao.*;
import com.wwdz.ch.db.domain.qiandao.QdUser;
import com.wwdz.ch.db.domain.qiandao.QdUserSignIn;
import com.wwdz.ch.db.domain.qiandao.SignInTask;
import com.wwdz.ch.db.domain.qiandao.WxCheckRecord;
import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInTaskRequestDto;
import com.wwdz.ch.db.dto.request.qiandao.SignInTaskRequestDto;
import com.wwdz.ch.wx.entity.vo.qiandao.SignInTaskVo;
import com.wwdz.ch.wx.service.qiandao.QdSignInTaskService;
import com.wwdz.ch.wx.service.qiandao.QdUserSignInTaskService;
import com.xxdxxs.utils.EntityMapper;
import com.xxdxxs.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -59,6 +59,9 @@ public class QdSignInTaskServiceImpl implements QdSignInTaskService {
@Autowired
QdWxAppletApi qdWxAppletApi;
@Autowired
WxCheckRecordDao wxCheckRecordDao;
@Override
public Result add(SignInTaskRequestDto dto) {
try {
......@@ -97,6 +100,24 @@ public class QdSignInTaskServiceImpl implements QdSignInTaskService {
return Result.failed("创建任务后默认加入失败");
}
}
if (StringUtils.hasLength(dto.getImage())) {
//微信音频内容安全识别
wxCheckMediaRequestDto.setMediaType(2);
wxCheckMediaRequestDto.setMediaUrl(dto.getImage());
String traceId = qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
if (StringUtils.hasLength(traceId)) {
//保存该检测任务
WxCheckRecord wxCheckRecord = new WxCheckRecord();
wxCheckRecord.setTraceId(traceId);
wxCheckRecord.setSourceId(taskId);
wxCheckRecord.setUserId(dto.getCreatorId());
wxCheckRecord.setCreateTime(new Date());
wxCheckRecord.setType(WxCheckEnum.TypeEnum.SIGN_IN_IMAGE.getCode());
wxCheckRecordDao.insert(wxCheckRecord);
}
logger.info("=========== 微信图片内容安全识别接口调用成功 ===========");
}
return Result.success();
} catch (Exception e) {
logger.error("创建签到任务失败 error:{}", e);
......
......@@ -6,6 +6,7 @@ import com.wwdz.ch.core.api.WxAppletApi;
import com.wwdz.ch.core.api.qiandao.QdWxAppletApi;
import com.wwdz.ch.core.api.qiandao.QdWxLoginManager;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.qiandao.WxCheckEnum;
import com.wwdz.ch.core.entity.QdUserInfo;
import com.wwdz.ch.core.entity.WxCheckMediaRequestDto;
import com.wwdz.ch.core.notify.AliSmsSender;
......@@ -16,7 +17,9 @@ import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.*;
import com.wwdz.ch.core.util.bcrypt.BCryptPasswordEncoder;
import com.wwdz.ch.db.dao.qiandao.QdUserDao;
import com.wwdz.ch.db.dao.qiandao.WxCheckRecordDao;
import com.wwdz.ch.db.domain.qiandao.QdUser;
import com.wwdz.ch.db.domain.qiandao.WxCheckRecord;
import com.wwdz.ch.db.dto.request.qiandao.QdUserRequestDto;
import com.wwdz.ch.wx.constant.CacheCodeConstants;
import com.wwdz.ch.wx.dao.UserInfo;
......@@ -90,6 +93,9 @@ public class QdUserServiceImpl implements QdUserService {
@Autowired
QdWxAppletApi qdWxAppletApi;
@Autowired
WxCheckRecordDao wxCheckRecordDao;
@Override
public Result regCaptcha(QdUserRequestDto dto) {
try {
......@@ -289,14 +295,19 @@ public class QdUserServiceImpl implements QdUserService {
wxCheckMediaRequestDto.setMediaType(2);
wxCheckMediaRequestDto.setMediaUrl(dto.getAvatar());
wxCheckMediaRequestDto.setWxOpenId(user.getWxOpenid());
qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
String traceId = qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
if (com.xxdxxs.utils.StringUtils.hasLength(traceId)) {
//保存该检测任务
WxCheckRecord wxCheckRecord = new WxCheckRecord();
wxCheckRecord.setTraceId(traceId);
wxCheckRecord.setSourceId(user.getId());
wxCheckRecord.setUserId(user.getId());
wxCheckRecord.setCreateTime(new Date());
wxCheckRecord.setType(WxCheckEnum.TypeEnum.SIGN_IN_IMAGE.getCode());
wxCheckRecordDao.insert(wxCheckRecord);
}
logger.info("=========== 微信图片内容安全识别接口调用成功 ===========");
}
String key = dto.getUserId() + "_updateAvatar";
if (!redisUtils.hasKey(key)) {
redisUtils.set(key, key, 30);
return Result.failed("头像安全检测有风险,请更换");
}
user.setAvatar(dto.getAvatar());
qdUserDao.updateById(user);
// 更新用户缓存
......
package com.wwdz.ch.wx.impl.qiandao;
import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.api.qiandao.QdWxAppletApi;
import com.wwdz.ch.core.consts.qiandao.WxCheckEnum;
import com.wwdz.ch.core.entity.WxCheckMediaRequestDto;
import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.RedisUtils;
import com.wwdz.ch.db.dao.qiandao.*;
import com.wwdz.ch.db.domain.qiandao.QdUser;
import com.wwdz.ch.db.domain.qiandao.QdUserSignIn;
import com.wwdz.ch.db.domain.qiandao.QdUserSignInNote;
import com.wwdz.ch.db.domain.qiandao.SignInTask;
import com.wwdz.ch.db.domain.qiandao.*;
import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInNoteRequestDto;
import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInRequestDto;
import com.wwdz.ch.wx.entity.vo.qiandao.QdSignInNoteVo;
......@@ -19,6 +20,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
......@@ -49,6 +51,15 @@ public class QdUserSignInNoteServiceImpl implements QdUserSignInNoteService {
@Autowired
QdGiveLikeRecordDao qdGiveLikeRecordDao;
@Autowired
QdWxAppletApi qdWxAppletApi;
@Autowired
RedisUtils redisUtils;
@Autowired
WxCheckRecordDao wxCheckRecordDao;
@Override
public Result findSignInNoteList(QdUserSignInNoteRequestDto dto) {
try {
......@@ -173,6 +184,10 @@ public class QdUserSignInNoteServiceImpl implements QdUserSignInNoteService {
@Override
public Result update(QdUserSignInRequestDto dto) {
try {
QdUserSignInNote note = qdUserSignInNoteDao.findByNoteId(dto.getId());
long sourceId = dto.getId();
long userId = note.getUserId();
//保存签到笔记
QdUserSignInNote qdUserSignInNote = new QdUserSignInNote();
qdUserSignInNote.setId(dto.getId());
......@@ -184,6 +199,52 @@ public class QdUserSignInNoteServiceImpl implements QdUserSignInNoteService {
qdUserSignInNote.setUpdateTime(new Date());
qdUserSignInNote.setIsPrivate(dto.getIsPrivate());
qdUserSignInNoteDao.updateByPrimaryKey(qdUserSignInNote);
WxCheckMediaRequestDto wxCheckMediaRequestDto = new WxCheckMediaRequestDto();
QdUser user = qdUserDao.queryById(dto.getUserId());
wxCheckMediaRequestDto.setWxOpenId(user.getWxOpenid());
if (StringUtils.hasLength(dto.getContent())) {
//查询用户openid
wxCheckMediaRequestDto.setWordStr(dto.getContent());
boolean result = qdWxAppletApi.checkWord(wxCheckMediaRequestDto);
logger.info("=========== 微信文字内容安全识别接口调用成功 ===========");
if (!result) {
return Result.failed("发布的文字内容识别有风险,不可发布");
}
}
if (!CollectionUtils.isEmpty(dto.getImages())) {
//微信音频内容安全识别
wxCheckMediaRequestDto.setMediaType(2);
wxCheckMediaRequestDto.setMediaUrl(dto.getImages().get(0));
String traceId = qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
if (StringUtils.hasLength(traceId)) {
//保存该检测任务
WxCheckRecord wxCheckRecord = new WxCheckRecord();
wxCheckRecord.setTraceId(traceId);
wxCheckRecord.setSourceId(sourceId);
wxCheckRecord.setUserId(userId);
wxCheckRecord.setCreateTime(new Date());
wxCheckRecord.setType(WxCheckEnum.TypeEnum.SIGN_IN_IMAGE.getCode());
wxCheckRecordDao.insert(wxCheckRecord);
}
logger.info("=========== 微信图片内容安全识别接口调用成功 ===========");
}
if (!StringUtils.isEmpty(dto.getAudio())) {
wxCheckMediaRequestDto.setMediaType(1);
wxCheckMediaRequestDto.setMediaUrl(dto.getAudio());
String traceId = qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
if (StringUtils.hasLength(traceId)) {
//保存该检测任务
WxCheckRecord wxCheckRecord = new WxCheckRecord();
wxCheckRecord.setTraceId(traceId);
wxCheckRecord.setSourceId(sourceId);
wxCheckRecord.setUserId(userId);
wxCheckRecord.setCreateTime(new Date());
wxCheckRecord.setType(WxCheckEnum.TypeEnum.SIGN_IN_AUDIO.getCode());
wxCheckRecordDao.insert(wxCheckRecord);
}
logger.info("=========== 微信音频内容安全识别接口调用成功 ===========");
}
return Result.success();
} catch (Exception e) {
logger.error("修改笔记 error:{}", e);
......
......@@ -7,6 +7,7 @@ import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.SigninEnum;
import com.wwdz.ch.core.consts.qiandao.SignInTaskEnum;
import com.wwdz.ch.core.consts.qiandao.WxCheckEnum;
import com.wwdz.ch.core.entity.WxCheckMediaRequestDto;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IdUtils;
......@@ -15,13 +16,11 @@ import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.wwdz.ch.db.dao.qiandao.*;
import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.qiandao.QdUser;
import com.wwdz.ch.db.domain.qiandao.QdUserSignIn;
import com.wwdz.ch.db.domain.qiandao.QdUserSignInNote;
import com.wwdz.ch.db.domain.qiandao.SignInTask;
import com.wwdz.ch.db.domain.qiandao.*;
import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInRequestDto;
import com.wwdz.ch.wx.service.qiandao.QdUserSignInService;
import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -69,6 +68,9 @@ public class QdUserSignInServiceImpl implements QdUserSignInService {
@Autowired
RedisUtils redisUtils;
@Autowired
WxCheckRecordDao wxCheckRecordDao;
@Override
public Result check(QdUserSignInRequestDto dto) {
try {
......@@ -143,24 +145,14 @@ public class QdUserSignInServiceImpl implements QdUserSignInService {
//查询用户openid
QdUser user = qdUserDao.queryById(dto.getUserId());
wxCheckMediaRequestDto.setWxOpenId(user.getWxOpenid());
if (!CollectionUtils.isEmpty(dto.getImages())) {
//微信音频内容安全识别
wxCheckMediaRequestDto.setMediaType(2);
wxCheckMediaRequestDto.setMediaUrl(dto.getImages().get(0));
qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
logger.info("=========== 微信音频内容安全识别接口调用成功 ===========");
String key = dto.getUserId() + "_signIn";
if (!redisUtils.hasKey(key)) {
redisUtils.set(key, key, 30);
return Result.failed("图片安全检测有风险,请更换");
}
}
wxCheckMediaRequestDto.setWordStr(dto.getContent());
boolean result = qdWxAppletApi.checkWord(wxCheckMediaRequestDto);
logger.info("=========== 微信文字内容安全识别接口调用成功 ===========");
if (!result) {
return Result.failed("发布的文字内容识别有风险,不可发布");
if (StringUtils.hasLength(dto.getContent())) {
wxCheckMediaRequestDto.setWordStr(dto.getContent());
boolean result = qdWxAppletApi.checkWord(wxCheckMediaRequestDto);
logger.info("=========== 微信文字内容安全识别接口调用成功 ===========");
if (!result) {
return Result.failed("发布的文字内容识别有风险,不可发布");
}
}
//签到记录id
Long recordId = null;
......@@ -211,7 +203,41 @@ public class QdUserSignInServiceImpl implements QdUserSignInService {
qdUserSignInNote.setUpdateTime(now);
qdUserSignInNote.setIsPrivate(dto.getIsPrivate());
qdUserSignInNote.setIsDeleted(false);
qdUserSignInNoteDao.insert(qdUserSignInNote);
long id = qdUserSignInNoteDao.insert(qdUserSignInNote);
if (!CollectionUtils.isEmpty(dto.getImages())) {
//微信音频内容安全识别
wxCheckMediaRequestDto.setMediaType(2);
wxCheckMediaRequestDto.setMediaUrl(dto.getImages().get(0));
String traceId = qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
if (StringUtils.hasLength(traceId)) {
//保存该检测任务
WxCheckRecord wxCheckRecord = new WxCheckRecord();
wxCheckRecord.setTraceId(traceId);
wxCheckRecord.setSourceId(id);
wxCheckRecord.setUserId(userId);
wxCheckRecord.setCreateTime(new Date());
wxCheckRecord.setType(WxCheckEnum.TypeEnum.SIGN_IN_IMAGE.getCode());
wxCheckRecordDao.insert(wxCheckRecord);
}
logger.info("=========== 微信图片内容安全识别接口调用成功 ===========");
}
if (!StringUtils.isEmpty(dto.getAudio())) {
wxCheckMediaRequestDto.setMediaType(1);
wxCheckMediaRequestDto.setMediaUrl(dto.getAudio());
String traceId = qdWxAppletApi.checkMedia(wxCheckMediaRequestDto);
if (StringUtils.hasLength(traceId)) {
//保存该检测任务
WxCheckRecord wxCheckRecord = new WxCheckRecord();
wxCheckRecord.setTraceId(traceId);
wxCheckRecord.setSourceId(id);
wxCheckRecord.setUserId(userId);
wxCheckRecord.setCreateTime(new Date());
wxCheckRecord.setType(WxCheckEnum.TypeEnum.SIGN_IN_AUDIO.getCode());
wxCheckRecordDao.insert(wxCheckRecord);
}
logger.info("=========== 微信音频内容安全识别接口调用成功 ===========");
}
return Result.success();
} catch (Exception e) {
logger.error("乾岛签到失败 error:{}", e);
......
......@@ -35,4 +35,11 @@ public interface QdHomePageService {
* @return
*/
Result getShareInfo(QdUserSignInRequestDto dto);
/**
* 检测是否有内容安全检测不通过的情况给予提示
* @param dto
* @return
*/
Result check(QdUserSignInRequestDto dto);
}
......@@ -66,4 +66,18 @@ public class QdHomePageController {
return qdHomePageService.getShareInfo(dto);
}
@ApiOperation(value = "检测是否有内容安全检测不通过的情况给予提示")
@PostMapping("/check")
public Result check(@RequestBody QdUserSignInRequestDto dto) {
logger.info("【请求开始】检测是否有内容安全检测不通过的情况给予提示,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("userId", "用户id").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return qdHomePageService.check(dto);
}
}
......@@ -89,12 +89,12 @@ public class WxPayServiceTest {
@Test
public void refund() {
List<String> list = Arrays.asList("DA2412231422109063526");
List<String> list = Arrays.asList("DA2501081948572456638");
list.forEach(orderId ->{
DistributionOrderRequestDto dto = new DistributionOrderRequestDto();
dto.setDistributionOrderId(orderId);
dto.setAmount("10");
dto.setRefundPrice("10");
dto.setAmount("128");
dto.setRefundPrice("128");
Result result = wxPayServiceApi.refund(dto);
logger.info("申请微信支付退款:{}", result);
});
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment