Commit 80514973 authored by shiyu's avatar shiyu

公众号通知回调

parent e065d866
package com.wwdz.ch.db.dao.qiandao;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecord;
public interface QdOfficialAccountSubscribeRecordDao {
boolean insert(QdOfficialAccountSubscribeRecord officialAccountSubscribeRecord);
boolean update(QdOfficialAccountSubscribeRecord officialAccountSubscribeRecord);
boolean isExisted(String openid);
boolean isSubscribed(String unionid);
QdOfficialAccountSubscribeRecord findOne(String unionid);
}
package com.wwdz.ch.db.impl.qiandao;
import com.wwdz.ch.db.dao.qiandao.QdOfficialAccountSubscribeRecordDao;
import com.wwdz.ch.db.domain.OfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecordExample;
import com.wwdz.ch.db.mapper.qiandao.QdOfficialAccountSubscribeRecordMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class QdOfficialAccountSubscribeRecordDaoImpl implements QdOfficialAccountSubscribeRecordDao {
@Autowired
QdOfficialAccountSubscribeRecordMapper qdOfficialAccountSubscribeRecordMapper;
@Override
public boolean insert(QdOfficialAccountSubscribeRecord officialAccountSubscribeRecord) {
return qdOfficialAccountSubscribeRecordMapper.insert(officialAccountSubscribeRecord) > 0;
}
@Override
public boolean update(QdOfficialAccountSubscribeRecord officialAccountSubscribeRecord) {
QdOfficialAccountSubscribeRecordExample example = new QdOfficialAccountSubscribeRecordExample();
QdOfficialAccountSubscribeRecordExample.Criteria criteria = example.createCriteria();
criteria.andOpenidEqualTo(officialAccountSubscribeRecord.getOpenid());
return qdOfficialAccountSubscribeRecordMapper.updateByExampleSelective(officialAccountSubscribeRecord, example) > 0;
}
@Override
public boolean isExisted(String openid) {
QdOfficialAccountSubscribeRecordExample example = new QdOfficialAccountSubscribeRecordExample();
QdOfficialAccountSubscribeRecordExample.Criteria criteria = example.createCriteria();
criteria.andOpenidEqualTo(openid);
return qdOfficialAccountSubscribeRecordMapper.countByExample(example) > 0;
}
@Override
public boolean isSubscribed(String unionid) {
QdOfficialAccountSubscribeRecordExample example = new QdOfficialAccountSubscribeRecordExample();
QdOfficialAccountSubscribeRecordExample.Criteria criteria = example.createCriteria();
criteria.andUnionidEqualTo(unionid);
criteria.andEnabledEqualTo(1);
return qdOfficialAccountSubscribeRecordMapper.countByExample(example) > 0;
}
@Override
public QdOfficialAccountSubscribeRecord findOne(String unionid) {
QdOfficialAccountSubscribeRecordExample example = new QdOfficialAccountSubscribeRecordExample();
QdOfficialAccountSubscribeRecordExample.Criteria criteria = example.createCriteria();
criteria.andUnionidEqualTo(unionid);
return qdOfficialAccountSubscribeRecordMapper.selectOneByExample(example);
}
}
package com.wwdz.ch.db.mapper.qiandao;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecordExample;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface QdOfficialAccountSubscribeRecordMapper {
long countByExample(QdOfficialAccountSubscribeRecordExample example);
int deleteByExample(QdOfficialAccountSubscribeRecordExample example);
int deleteByPrimaryKey(Integer id);
int insert(QdOfficialAccountSubscribeRecord record);
int insertSelective(QdOfficialAccountSubscribeRecord record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table qd_official_account_subscribe_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
QdOfficialAccountSubscribeRecord selectOneByExample(QdOfficialAccountSubscribeRecordExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table qd_official_account_subscribe_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
QdOfficialAccountSubscribeRecord selectOneByExampleSelective(@Param("example") QdOfficialAccountSubscribeRecordExample example, @Param("selective") QdOfficialAccountSubscribeRecord.Column ... selective);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table qd_official_account_subscribe_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
List<QdOfficialAccountSubscribeRecord> selectByExampleSelective(@Param("example") QdOfficialAccountSubscribeRecordExample example, @Param("selective") QdOfficialAccountSubscribeRecord.Column ... selective);
List<QdOfficialAccountSubscribeRecord> selectByExample(QdOfficialAccountSubscribeRecordExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table qd_official_account_subscribe_record
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
QdOfficialAccountSubscribeRecord selectByPrimaryKeySelective(@Param("id") Integer id, @Param("selective") QdOfficialAccountSubscribeRecord.Column ... selective);
QdOfficialAccountSubscribeRecord selectByPrimaryKey(Integer id);
int updateByExampleSelective(@Param("record") QdOfficialAccountSubscribeRecord record, @Param("example") QdOfficialAccountSubscribeRecordExample example);
int updateByExample(@Param("record") QdOfficialAccountSubscribeRecord record, @Param("example") QdOfficialAccountSubscribeRecordExample example);
int updateByPrimaryKeySelective(QdOfficialAccountSubscribeRecord record);
int updateByPrimaryKey(QdOfficialAccountSubscribeRecord 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="qd_user_sign_in_task" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<table tableName="qd_official_account_subscribe_record" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
......
......@@ -3,27 +3,23 @@ package com.wwdz.ch.wx.api;
import com.wwdz.ch.core.api.QdOfficialAccountApi;
import com.wwdz.ch.core.consts.OfficalAccountEnum;
import com.wwdz.ch.core.entity.ConsignSaleSubscribeMsg;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dao.qiandao.QdUserDao;
import com.wwdz.ch.db.domain.OfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdUser;
import com.wwdz.ch.wx.api.aes.AesException;
import com.wwdz.ch.wx.api.aes.WXBizMsgCrypt;
import com.wwdz.ch.wx.service.OfficialAccountSubscribeRecordService;
import com.wwdz.ch.wx.service.qiandao.QdOfficialAccountSubscribeRecordService;
import com.xxdxxs.utils.StringUtils;
import com.xxdxxs.utils.XmlUtils;
import io.swagger.annotations.ApiOperation;
import org.dom4j.DocumentException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
......@@ -62,7 +58,7 @@ public class QdOfficialAccountCallbackController {
QdOfficialAccountApi qdOfficialAccountApi;
@Autowired
OfficialAccountSubscribeRecordService officialAccountSubscribeRecordService;
QdOfficialAccountSubscribeRecordService qdOfficialAccountSubscribeRecordService;
@Autowired
QdUserDao qdUserDao;
......@@ -102,8 +98,8 @@ public class QdOfficialAccountCallbackController {
Date date = new Date(Long.valueOf(createTime) * 1000L);
logger.info("解析xml得到 openId:{}, event :{}, time:{}", userOpenId, event, date);
//新增或更新订阅记录
OfficialAccountSubscribeRecord officialAccountSubscribeRecord = new OfficialAccountSubscribeRecord();
officialAccountSubscribeRecord.setOpenid(userOpenId);
QdOfficialAccountSubscribeRecord qdOfficialAccountSubscribeRecord = new QdOfficialAccountSubscribeRecord();
qdOfficialAccountSubscribeRecord.setOpenid(userOpenId);
if (SUBSCRIBE_EVENT.equals(event)) {
//只有关注了公众号,才可以通过根据openid获取unionid
String unionid = qdOfficialAccountApi.getUnionidByOpenid(userOpenId);
......@@ -111,24 +107,24 @@ public class QdOfficialAccountCallbackController {
QdUser user = qdUserDao.getUserByUnionId(unionid);
if (user != null) {
logger.info("根据unionid查询手机号, unionid :{}, phone : {}", unionid, user.getMobile());
officialAccountSubscribeRecord.setPhone(user.getMobile());
qdOfficialAccountSubscribeRecord.setPhone(user.getMobile());
}
officialAccountSubscribeRecord.setUnionid(unionid);
officialAccountSubscribeRecord.setEnabled(1);
qdOfficialAccountSubscribeRecord.setUnionid(unionid);
qdOfficialAccountSubscribeRecord.setEnabled(1);
} else {
officialAccountSubscribeRecord.setEnabled(0);
qdOfficialAccountSubscribeRecord.setEnabled(0);
}
//查询有无历史订阅记录
boolean isExisted = officialAccountSubscribeRecordService.isExisted(userOpenId);
boolean isExisted = qdOfficialAccountSubscribeRecordService.isExisted(userOpenId);
if (isExisted) {
officialAccountSubscribeRecord.setUpdateTime(date);
officialAccountSubscribeRecordService.update(officialAccountSubscribeRecord);
qdOfficialAccountSubscribeRecord.setUpdateTime(date);
qdOfficialAccountSubscribeRecordService.update(qdOfficialAccountSubscribeRecord);
} else {
//没有历史订阅记录
officialAccountSubscribeRecord.setCreateTime(date);
officialAccountSubscribeRecord.setUpdateTime(date);
officialAccountSubscribeRecord.setPlatformType(OfficalAccountEnum.PlatformTypeEnum.WECHAT.getCode());
officialAccountSubscribeRecordService.insert(officialAccountSubscribeRecord);
qdOfficialAccountSubscribeRecord.setCreateTime(date);
qdOfficialAccountSubscribeRecord.setUpdateTime(date);
qdOfficialAccountSubscribeRecord.setPlatformType(OfficalAccountEnum.PlatformTypeEnum.WECHAT.getCode());
qdOfficialAccountSubscribeRecordService.insert(qdOfficialAccountSubscribeRecord);
}
logger.info("=============== 更新订阅公众号记录成功 ==============");
} else if (SUBSCRIBE_MSG_POPUP_EVENT.equals(event)) {
......
......@@ -40,6 +40,9 @@ public class QdHomePageServiceImpl implements QdHomePageService {
@Autowired
QdUserSignInDao qdUserSignInDao;
@Autowired
QdOfficialAccountSubscribeRecordDao qdOfficialAccountSubscribeRecordDao;
@Override
public Result findUserInfo(QdHomePageRequestDto dto) {
try {
......@@ -62,6 +65,14 @@ public class QdHomePageServiceImpl implements QdHomePageService {
List<SignInTask> signInTaskList = signInTaskDao.findDataByPage(signInTaskRequestDto);
map.put("taskList", signInTaskList);
}
//用户是否订阅公众号
String unionid = qdUser.getWxUnionid();
if (StringUtils.hasLength(unionid)) {
boolean flag = qdOfficialAccountSubscribeRecordDao.isSubscribed(unionid);
map.put("isSubscribed", flag);
} else {
map.put("isSubscribed", false);
}
return Result.success(map);
} catch (Exception e) {
logger.error("查询乾岛首页用户信息失败 error:{}", e);
......
package com.wwdz.ch.wx.impl.qiandao;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dao.qiandao.QdOfficialAccountSubscribeRecordDao;
import com.wwdz.ch.db.domain.OfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecord;
import com.wwdz.ch.wx.service.qiandao.QdOfficialAccountSubscribeRecordService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
public class QdOfficialAccountSubscribeRecordServiceImpl implements QdOfficialAccountSubscribeRecordService {
private static final Logger logger = LoggerFactory.getLogger(QdOfficialAccountSubscribeRecordServiceImpl.class);
private static final String OFFICAL_ACCOUNT_URL = "https://mp.weixin.qq.com/s?__biz=Mzk0MDY4NjkxOQ==&mid=2247485269&idx=1&sn=244235b56cf8632e6ca7184efdb8c82f&chksm=c2dcac7df5ab256ba2c966616168501680a0d8b4625f3c637244f01355fbe34c2c37f7b047ce#rd";
@Autowired
QdOfficialAccountSubscribeRecordDao qdOfficialAccountSubscribeRecordDao;
@Override
public Result insert(QdOfficialAccountSubscribeRecord qdOfficialAccountSubscribeRecord) {
try {
qdOfficialAccountSubscribeRecordDao.insert(qdOfficialAccountSubscribeRecord);
return Result.success();
} catch (Exception e) {
logger.error("新增公众号订阅记录出错:{}", e);
}
return Result.failed();
}
@Override
public Result update(QdOfficialAccountSubscribeRecord qdOfficialAccountSubscribeRecord) {
try {
qdOfficialAccountSubscribeRecordDao.update(qdOfficialAccountSubscribeRecord);
return Result.success();
} catch (Exception e) {
logger.error("新增公众号订阅记录出错:{}", e);
}
return Result.failed();
}
@Override
public boolean isExisted(String openid) {
return qdOfficialAccountSubscribeRecordDao.isExisted(openid);
}
@Override
public Result isSubscribed(String unionid) {
try {
boolean flag = qdOfficialAccountSubscribeRecordDao.isSubscribed(unionid);
Map<String, Object> map = new HashMap<>();
// map.put("isSubscribed", flag);
//暂时先默认为关注
map.put("isSubscribed", true);
map.put("url", OFFICAL_ACCOUNT_URL);
return Result.success(map);
} catch (Exception e) {
logger.error("isSubscribed error :{}", e);
}
return Result.failed();
}
@Override
public Result findOne(String unionid) {
try {
QdOfficialAccountSubscribeRecord officialAccountSubscribeRecord = qdOfficialAccountSubscribeRecordDao.findOne(unionid);
return Result.success(officialAccountSubscribeRecord);
} catch (Exception e) {
logger.error("findOne error :{}", e);
}
return Result.failed();
}
}
package com.wwdz.ch.wx.service.qiandao;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.domain.OfficialAccountSubscribeRecord;
import com.wwdz.ch.db.domain.qiandao.QdOfficialAccountSubscribeRecord;
public interface QdOfficialAccountSubscribeRecordService {
Result insert(QdOfficialAccountSubscribeRecord officialAccountSubscribeRecord);
Result update(QdOfficialAccountSubscribeRecord officialAccountSubscribeRecord);
/**
* 是否有历史订阅记录
* @param openid
* @return
*/
boolean isExisted(String openid);
/**
* 是否关注过公众号
* @param openid
* @return
*/
Result isSubscribed(String openid);
Result findOne(String openid);
}
package com.wwdz.ch.wx.web.qiandao;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.core.api.OfficialAccountApi;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.domain.qiandao.QdUser;
import com.wwdz.ch.db.dto.request.UserRequestDto;
import com.wwdz.ch.db.dto.request.qiandao.QdUserRequestDto;
import com.wwdz.ch.wx.service.qiandao.QdOfficialAccountSubscribeRecordService;
import com.wwdz.ch.wx.service.qiandao.QdUserService;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/wx/qdOfficialAccount")
public class QdOfficialAccountController {
private static final Logger logger = LoggerFactory.getLogger(QdOfficialAccountController.class);
@Autowired
QdOfficialAccountSubscribeRecordService qdOfficialAccountSubscribeRecordService;
@Autowired
QdUserService qdUserService;
@ApiOperation(value = "判断用户是否关注过公众号")
@PostMapping("/isSubscribed")
public Result isSubscribed(@RequestBody QdUserRequestDto dto) {
logger.info("【请求开始】判断用户是否关注过公众号,请求参数:{}", JSON.toJSONString(dto));
if (StringUtils.isEmpty(dto.getUserId())) {
return Result.failed(ResultCode.PARAM_ERROR);
}
Result<QdUser> result = qdUserService.queryUserInfo(dto);
String unionid = null;
if (result.getSuccess() && result.getData() != null) {
unionid = result.getData().getWxUnionid();
}
if (unionid == null) {
return Result.failed("该用户没有记录下unionid");
}
return qdOfficialAccountSubscribeRecordService.isSubscribed(unionid);
}
}
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