diff --git a/src/main/java/com/ycwl/basic/enums/StatisticEnum.java b/src/main/java/com/ycwl/basic/enums/StatisticEnum.java index 22bf2cc..386c3e9 100644 --- a/src/main/java/com/ycwl/basic/enums/StatisticEnum.java +++ b/src/main/java/com/ycwl/basic/enums/StatisticEnum.java @@ -10,7 +10,7 @@ public enum StatisticEnum { ON_SITE_PAYMENT(3,"现场支付"), POST_PAYMENT(4,"事后支付"), REFUND(5,"退款"), - AGREE_TO_PUSH(6,"同意推送"), + MESSAGE_PUSH(6,"消息推送"), DOWNLOAD(8,"下载"), CLICK_ON_PAYMENT(9,"点击支付、购买"), diff --git a/src/main/java/com/ycwl/basic/mapper/MemberMapper.java b/src/main/java/com/ycwl/basic/mapper/MemberMapper.java index 54a879e..0d77e08 100644 --- a/src/main/java/com/ycwl/basic/mapper/MemberMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/MemberMapper.java @@ -34,7 +34,7 @@ public interface MemberMapper { * 查询用户当前景区服务通知状态 * @param scenicId 景区id * @param memberId 用户id - * @return + * @return 0关闭 1开启 */ Integer getScenicServiceNoticeStatus(@Param("scenicId") Long scenicId,@Param("memberId") Long memberId); diff --git a/src/main/java/com/ycwl/basic/mapper/MessageRecordMapper.java b/src/main/java/com/ycwl/basic/mapper/MessageRecordMapper.java index 603093c..bab61d3 100644 --- a/src/main/java/com/ycwl/basic/mapper/MessageRecordMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/MessageRecordMapper.java @@ -1,5 +1,6 @@ package com.ycwl.basic.mapper; +import com.ycwl.basic.model.mobile.messageRecord.MessageRecordEntity; import org.apache.ibatis.annotations.Mapper; /** @@ -8,4 +9,6 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface MessageRecordMapper { + + int insertMessageRecord(MessageRecordEntity messageRecordEntity); } diff --git a/src/main/java/com/ycwl/basic/model/mobile/messageRecord/MessageRecordEntity.java b/src/main/java/com/ycwl/basic/model/mobile/messageRecord/MessageRecordEntity.java new file mode 100644 index 0000000..2646522 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/messageRecord/MessageRecordEntity.java @@ -0,0 +1,34 @@ +package com.ycwl.basic.model.mobile.messageRecord; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author:longbinbin + * @Date:2024/12/13 11:37 + * 景区服务消息记录表 + */ +@Data +@TableName("message_record") +public class MessageRecordEntity { + @TableId + private Long id; + /** + * 用户id + */ + private Long memberId; + /** + * 景区id + */ + private Long scenicId; + /** + * 消息模板 + */ + private String templateId; + /** + * 消息内容 + */ + private String content; + private String createTime; +} diff --git a/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java b/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java index d21431c..305990c 100644 --- a/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java +++ b/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java @@ -41,7 +41,14 @@ public class WechatMessageSubscribeForm { * 进入小程序查看的语言类型:支持zh_CN、en_US、zh_HK、zh_TW,默认为zh_CN */ private String lang; - + /** + * 景区id + */ + private Long scenicId; + /** + * 用户id + */ + private Long memberId; } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java index bcd0bab..3bff8dc 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java @@ -6,11 +6,19 @@ import com.ycwl.basic.config.WechatConfig; import com.ycwl.basic.constant.NumberConstant; import com.ycwl.basic.constant.WeiXinConstant; import com.ycwl.basic.enums.BizCodeEnum; +import com.ycwl.basic.enums.StatisticEnum; import com.ycwl.basic.exception.AppException; +import com.ycwl.basic.mapper.MemberMapper; +import com.ycwl.basic.mapper.MessageRecordMapper; +import com.ycwl.basic.mapper.ScenicMapper; +import com.ycwl.basic.mapper.StatisticsMapper; +import com.ycwl.basic.model.mobile.messageRecord.MessageRecordEntity; +import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq; import com.ycwl.basic.model.wx.WechatAccessTokenVO; import com.ycwl.basic.model.wx.WechatMessageSubscribeForm; import com.ycwl.basic.model.wx.WechatMssVO; import com.ycwl.basic.service.mobile.WxNotifyService; +import com.ycwl.basic.utils.SnowFlakeUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -39,6 +47,12 @@ public class WxNotifyServiceImpl implements WxNotifyService { @Autowired private WechatConfig wechatConfig; + @Autowired + private MessageRecordMapper messageRecordMapper; + @Autowired + private StatisticsMapper statisticsMapper; + @Autowired + private MemberMapper memberMapper; /** * 缓存accessToken @@ -81,31 +95,58 @@ public class WxNotifyServiceImpl implements WxNotifyService { @Override public JSONObject pushMessage(WechatMessageSubscribeForm info) { - RestTemplate restTemplate = new RestTemplate(); - String url = MESSAGE_SEND_URL + getAccessToken(); - // 拼接推送的模板 - WechatMssVO wxMssVO = new WechatMssVO(); - wxMssVO.setTouser(info.getOpenId()); // 用户的openId - wxMssVO.setTemplate_id(info.getTemplateId()); // 订阅消息模板id - wxMssVO.setLang(info.getLang()); // 语言类型 - wxMssVO.setMiniprogram_state(info.getMiniprogram_state()); // 跳转小程序类型 - wxMssVO.setPage(info.getPage()); + Integer scenicServiceNoticeStatus = memberMapper.getScenicServiceNoticeStatus(info.getScenicId(), info.getMemberId()); + if (scenicServiceNoticeStatus == NumberConstant.ZERO) { + log.info("用户已关闭通知"); + return null; + }else { + // 发送通知 + RestTemplate restTemplate = new RestTemplate(); + String url = MESSAGE_SEND_URL + getAccessToken(); - // // TODO: 推送的内容 - // Map map = new HashMap<>(); - // map.put("msg", new WechatTemplateData("发消息了")); - wxMssVO.setData(info.getData()); + // 拼接推送的模板 + WechatMssVO wxMssVO = new WechatMssVO(); + wxMssVO.setTouser(info.getOpenId()); // 用户的openId + wxMssVO.setTemplate_id(info.getTemplateId()); // 订阅消息模板id + wxMssVO.setLang(info.getLang()); // 语言类型 + wxMssVO.setMiniprogram_state(info.getMiniprogram_state()); // 跳转小程序类型 + wxMssVO.setPage(info.getPage()); - // 发送 - ResponseEntity responseEntity = restTemplate.postForEntity(url, wxMssVO, String.class); - JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody())); - Integer errcode = jsonObject.getInteger(WECHAT_ERRCODE); - String errmsg = jsonObject.getString(WECHAT_ERRMSG); - if (errcode != NumberConstant.ZERO) { - throw new AppException(errcode, errmsg); + // // TODO: 推送的内容 + // Map map = new HashMap<>(); + // map.put("msg", new WechatTemplateData("发消息了")); + wxMssVO.setData(info.getData()); + + // 发送 + ResponseEntity responseEntity = restTemplate.postForEntity(url, wxMssVO, String.class); + JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody())); + Integer errcode = jsonObject.getInteger(WECHAT_ERRCODE); + String errmsg = jsonObject.getString(WECHAT_ERRMSG); + if (errcode != NumberConstant.ZERO) { + throw new AppException(errcode, errmsg); + } + + // 记录消息记录 + MessageRecordEntity messageRecord = new MessageRecordEntity(); + messageRecord.setId(SnowFlakeUtil.getLongId()); + messageRecord.setMemberId(info.getMemberId()); + messageRecord.setScenicId(info.getScenicId()); + messageRecord.setTemplateId(info.getTemplateId()); + messageRecord.setContent(info.getData().toString()); + messageRecordMapper.insertMessageRecord(messageRecord); + + // 统计消息记录 + StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq(); + statisticsRecordAddReq.setScenicId(info.getScenicId()); + statisticsRecordAddReq.setMemberId(info.getMemberId()); + statisticsRecordAddReq.setType(StatisticEnum.MESSAGE_PUSH.code); + statisticsRecordAddReq.setMorphId(messageRecord.getId()); + statisticsMapper.addStatisticsRecord(statisticsRecordAddReq); + + return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody())); } - return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody())); + } diff --git a/src/main/resources/mapper/MessageRecordMapper.xml b/src/main/resources/mapper/MessageRecordMapper.xml index eb42a14..6055153 100644 --- a/src/main/resources/mapper/MessageRecordMapper.xml +++ b/src/main/resources/mapper/MessageRecordMapper.xml @@ -1,4 +1,9 @@ + + + insert into message_record (id,member_id,scenic_id,template_id,context) + value (#{id},#{memberId},#{scenicId},#{templateId},#{content}) + \ No newline at end of file