1.推送修改
This commit is contained in:
@@ -33,39 +33,37 @@ public class MsgServiceImpl implements MsgService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<TbFullShopId> all(Integer page, Integer size, Integer shopId, String nickName, String openId, Integer state, Integer type) {
|
public Page<TbFullShopId> all(Integer page, Integer size, Integer shopId, String nickName, String openId, Integer state, Integer type) {
|
||||||
LambdaQueryWrapper<TbShopOpenId> queryWrapper = new LambdaQueryWrapper<>();
|
|
||||||
queryWrapper.eq(TbShopOpenId::getShopId, shopId);
|
|
||||||
|
|
||||||
return shopOpenIdMapper.selectAll(shopId, nickName, openId, new Page<>(page, size));
|
return shopOpenIdMapper.selectAll(shopId, nickName, openId, new Page<>(page, size));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Boolean> updateShopState(ShopMsgStateDTO shopMsgStateDTO) {
|
public Optional<Boolean> updateShopState(ShopMsgStateDTO shopMsgStateDTO) {
|
||||||
|
|
||||||
TbShopOpenId shopOpenId = new TbShopOpenId();
|
// TbShopOpenId shopOpenId = new TbShopOpenId();
|
||||||
shopOpenId.setStatus(shopMsgStateDTO.getState());
|
// shopOpenId.setStatus(shopMsgStateDTO.getState());
|
||||||
LambdaQueryWrapper<TbShopOpenId> queryWrapper = new LambdaQueryWrapper<TbShopOpenId>().eq(TbShopOpenId::getShopId, shopMsgStateDTO.getShopId());
|
// LambdaQueryWrapper<TbShopOpenId> queryWrapper = new LambdaQueryWrapper<TbShopOpenId>().eq(TbShopOpenId::getShopId, shopMsgStateDTO.getShopId());
|
||||||
if (shopMsgStateDTO.getType() != null) {
|
// if (shopMsgStateDTO.getType() != null) {
|
||||||
queryWrapper.eq(TbShopOpenId::getType, shopMsgStateDTO.getType());
|
// queryWrapper.eq(TbShopOpenId::getType, shopMsgStateDTO.getType());
|
||||||
}
|
// }
|
||||||
if (shopMsgStateDTO.getType() == null) {
|
if (shopMsgStateDTO.getType() == null) {
|
||||||
shopMsgStateDTO.setType(-1);
|
shopMsgStateDTO.setType(-1);
|
||||||
}
|
}
|
||||||
TbShopMsgState msgState = shopMsgStateService.lambdaQuery().eq(TbShopMsgState::getType, shopMsgStateDTO.getType())
|
TbShopMsgState msgState = shopMsgStateService.lambdaQuery().eq(TbShopMsgState::getType, shopMsgStateDTO.getType())
|
||||||
.eq(TbShopMsgState::getShopId, shopMsgStateDTO.getShopId()).one();
|
.eq(TbShopMsgState::getShopId, shopMsgStateDTO.getShopId()).one();
|
||||||
|
boolean flag;
|
||||||
if (msgState == null) {
|
if (msgState == null) {
|
||||||
msgState = new TbShopMsgState();
|
msgState = new TbShopMsgState();
|
||||||
msgState.setShopId(shopMsgStateDTO.getShopId());
|
msgState.setShopId(shopMsgStateDTO.getShopId());
|
||||||
msgState.setCreateTime(DateUtil.date().toInstant());
|
msgState.setCreateTime(DateUtil.date().toInstant());
|
||||||
msgState.setState(shopMsgStateDTO.getType());
|
msgState.setState(shopMsgStateDTO.getType());
|
||||||
shopMsgStateService.save(msgState);
|
flag = shopMsgStateService.save(msgState);
|
||||||
}else {
|
}else {
|
||||||
shopMsgStateService.lambdaUpdate().eq(TbShopMsgState::getShopId, shopMsgStateDTO.getShopId())
|
flag = shopMsgStateService.lambdaUpdate().eq(TbShopMsgState::getShopId, shopMsgStateDTO.getShopId())
|
||||||
.eq(TbShopMsgState::getType, shopMsgStateDTO.getType())
|
.eq(TbShopMsgState::getType, shopMsgStateDTO.getType())
|
||||||
.set(TbShopMsgState::getState, shopMsgStateDTO.getState())
|
.set(TbShopMsgState::getState, shopMsgStateDTO.getState())
|
||||||
.set(TbShopMsgState::getUpdateTime, DateUtil.date().toInstant()).update();
|
.set(TbShopMsgState::getUpdateTime, DateUtil.date().toInstant()).update();
|
||||||
}
|
}
|
||||||
return Optional.of(shopOpenIdMapper.update(shopOpenId, queryWrapper) > 0);
|
return Optional.of(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -5,18 +5,21 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpRequest;
|
||||||
import cn.hutool.http.HttpUtil;
|
import cn.hutool.http.HttpUtil;
|
||||||
|
import cn.ysk.cashier.enums.ShopWxMsgTypeEnum;
|
||||||
|
import cn.ysk.cashier.mybatis.entity.TbShopMsgState;
|
||||||
import cn.ysk.cashier.mybatis.entity.TbShopOpenId;
|
import cn.ysk.cashier.mybatis.entity.TbShopOpenId;
|
||||||
|
import cn.ysk.cashier.mybatis.mapper.TbShopMsgStateMapper;
|
||||||
|
import cn.ysk.cashier.pojo.shop.TbShopInfo;
|
||||||
|
import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -28,6 +31,11 @@ public class WxAccountUtil {
|
|||||||
private String secrete = "8492a7e8d55bbb1b57f5c8276ea1add0";
|
private String secrete = "8492a7e8d55bbb1b57f5c8276ea1add0";
|
||||||
@Value("${wx.ysk.operationMsgTmpId}")
|
@Value("${wx.ysk.operationMsgTmpId}")
|
||||||
private String operationMsgTmpId;
|
private String operationMsgTmpId;
|
||||||
|
@Value("${wx.ysk.warnMsgTmpId}")
|
||||||
|
private String warnMsgTmpId;
|
||||||
|
|
||||||
|
private final TbShopMsgStateMapper shopMsgStateMapper;
|
||||||
|
private final TbShopInfoRepository shopInfoRepository;
|
||||||
|
|
||||||
static LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
|
static LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
|
||||||
|
|
||||||
@@ -123,4 +131,29 @@ public class WxAccountUtil {
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void sendStockMsg(String shopName, String productName, int stock, String openId, ShopWxMsgTypeEnum shopWxMsgTypeEnum, Integer shopId) {
|
||||||
|
|
||||||
|
stock = Math.max(stock, 0);
|
||||||
|
Integer finalStock = stock;
|
||||||
|
Map<String, Object> data = new HashMap<String, Object>() {{
|
||||||
|
put("thing22", new HashMap<String, Object>() {{
|
||||||
|
put("value", shopName);
|
||||||
|
}});
|
||||||
|
put("thing4", new HashMap<String, Object>() {{
|
||||||
|
put("value", productName);
|
||||||
|
}});
|
||||||
|
put("number5", new HashMap<String, Object>() {{
|
||||||
|
put("value", finalStock);
|
||||||
|
}});
|
||||||
|
}};
|
||||||
|
log.info("开始发送库存预警消息, 接收用户openId: {}, 消息数据: {}", openId, data);
|
||||||
|
try {
|
||||||
|
sendTemplateMsg(warnMsgTmpId, openId, data);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("发送失败, openId:{}, msg: {}", openId, e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,12 @@ package cn.ysk.cashier.utils;
|
|||||||
import cn.ysk.cashier.enums.ShopWxMsgTypeEnum;
|
import cn.ysk.cashier.enums.ShopWxMsgTypeEnum;
|
||||||
import cn.ysk.cashier.mybatis.entity.TbShopMsgState;
|
import cn.ysk.cashier.mybatis.entity.TbShopMsgState;
|
||||||
import cn.ysk.cashier.mybatis.entity.TbShopOpenId;
|
import cn.ysk.cashier.mybatis.entity.TbShopOpenId;
|
||||||
|
import cn.ysk.cashier.mybatis.mapper.TbShopMsgStateMapper;
|
||||||
|
import cn.ysk.cashier.mybatis.mapper.TbShopOpenIdMapper;
|
||||||
import cn.ysk.cashier.mybatis.service.TbShopMsgStateService;
|
import cn.ysk.cashier.mybatis.service.TbShopMsgStateService;
|
||||||
import cn.ysk.cashier.mybatis.service.TbShopOpenIdService;
|
import cn.ysk.cashier.mybatis.service.TbShopOpenIdService;
|
||||||
|
import cn.ysk.cashier.pojo.shop.TbShopInfo;
|
||||||
|
import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@@ -25,21 +29,46 @@ public class WxMsgUtils {
|
|||||||
|
|
||||||
private final WxAccountUtil wxAccountUtil;
|
private final WxAccountUtil wxAccountUtil;
|
||||||
private final TbShopMsgStateService shopMsgStateService;
|
private final TbShopMsgStateService shopMsgStateService;
|
||||||
|
private final TbShopMsgStateMapper shopMsgStateMapper;
|
||||||
|
private final TbShopOpenIdMapper shopOpenIdMapper;
|
||||||
|
private final TbShopInfoRepository shopInfoRepository;
|
||||||
|
|
||||||
public WxMsgUtils(TbShopOpenIdService tbShopOpenIdService, RedisUtils redisUtils, WxAccountUtil wxAccountUtil, TbShopMsgStateService shopMsgStateService) {
|
public WxMsgUtils(TbShopOpenIdService tbShopOpenIdService, RedisUtils redisUtils, WxAccountUtil wxAccountUtil, TbShopMsgStateService shopMsgStateService, TbShopMsgStateMapper shopMsgStateMapper, TbShopOpenIdMapper shopOpenIdMapper, TbShopInfoRepository shopInfoRepository) {
|
||||||
this.tbShopOpenIdService = tbShopOpenIdService;
|
this.tbShopOpenIdService = tbShopOpenIdService;
|
||||||
this.redisUtils = redisUtils;
|
this.redisUtils = redisUtils;
|
||||||
this.wxAccountUtil = wxAccountUtil;
|
this.wxAccountUtil = wxAccountUtil;
|
||||||
this.shopMsgStateService = shopMsgStateService;
|
this.shopMsgStateService = shopMsgStateService;
|
||||||
|
this.shopMsgStateMapper = shopMsgStateMapper;
|
||||||
|
this.shopOpenIdMapper = shopOpenIdMapper;
|
||||||
|
this.shopInfoRepository = shopInfoRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkIsOpen(Integer shopId, ShopWxMsgTypeEnum shopWxMsgTypeEnum) {
|
||||||
|
TbShopMsgState allState = shopMsgStateMapper.selectOne(new LambdaQueryWrapper<TbShopMsgState>()
|
||||||
|
.eq(TbShopMsgState::getShopId, shopId)
|
||||||
|
.eq(TbShopMsgState::getState, 1)
|
||||||
|
.eq(TbShopMsgState::getType, ShopWxMsgTypeEnum.ALL_MSG.getType()));
|
||||||
|
if (allState == null) {
|
||||||
|
log.warn("店铺全局推送开关未开启");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TbShopMsgState currentState = shopMsgStateMapper.selectOne(new LambdaQueryWrapper<TbShopMsgState>()
|
||||||
|
.eq(TbShopMsgState::getShopId, shopId)
|
||||||
|
.eq(TbShopMsgState::getState, 1)
|
||||||
|
.eq(TbShopMsgState::getType, shopWxMsgTypeEnum.getType()));
|
||||||
|
if (currentState == null) {
|
||||||
|
log.warn("当前推送未开启: {}", shopWxMsgTypeEnum);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void aboardOperationMsg(String operationDesc, Integer shopId1) {
|
public void aboardOperationMsg(String operationDesc, Integer shopId1) {
|
||||||
TbShopMsgState msgState = shopMsgStateService.lambdaQuery().eq(TbShopMsgState::getShopId, shopId1)
|
if (!checkIsOpen(shopId1, ShopWxMsgTypeEnum.OPERATION_MSG)) {
|
||||||
.eq(TbShopMsgState::getType, 2).one();
|
|
||||||
if (msgState == null || msgState.getState().equals(0)) {
|
|
||||||
log.info("店铺未开启推送");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
||||||
|
|
||||||
Object o = redisUtils.get("online-token-"+getToken(request));
|
Object o = redisUtils.get("online-token-"+getToken(request));
|
||||||
@@ -56,6 +85,7 @@ public class WxMsgUtils {
|
|||||||
.eq(TbShopOpenId::getStatus, 1)
|
.eq(TbShopOpenId::getStatus, 1)
|
||||||
.and((queryWrapper) -> queryWrapper.eq(TbShopOpenId::getType, ShopWxMsgTypeEnum.ALL_MSG.getType())
|
.and((queryWrapper) -> queryWrapper.eq(TbShopOpenId::getType, ShopWxMsgTypeEnum.ALL_MSG.getType())
|
||||||
.or().eq(TbShopOpenId::getType, ShopWxMsgTypeEnum.OPERATION_MSG.getType()))
|
.or().eq(TbShopOpenId::getType, ShopWxMsgTypeEnum.OPERATION_MSG.getType()))
|
||||||
|
.groupBy(TbShopOpenId::getOpenId)
|
||||||
.list();
|
.list();
|
||||||
log.info("即将开始推送敏感操作消息, 接收推送openId列表: {}", openIds);
|
log.info("即将开始推送敏感操作消息, 接收推送openId列表: {}", openIds);
|
||||||
String finalNickName = nickName;
|
String finalNickName = nickName;
|
||||||
@@ -65,6 +95,24 @@ public class WxMsgUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void aboardStockMsg(String shopName, Integer shopId, String proName, Integer stock) {
|
||||||
|
if (!checkIsOpen(shopId, ShopWxMsgTypeEnum.OPERATION_MSG)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TbShopOpenId> openIds = tbShopOpenIdService.lambdaQuery()
|
||||||
|
.eq(TbShopOpenId::getShopId, shopId)
|
||||||
|
.eq(TbShopOpenId::getStatus, 1)
|
||||||
|
.and((queryWrapper) -> queryWrapper.eq(TbShopOpenId::getType, ShopWxMsgTypeEnum.ALL_MSG.getType())
|
||||||
|
.or().eq(TbShopOpenId::getType, ShopWxMsgTypeEnum.STOCK_MSG.getType()))
|
||||||
|
.groupBy(TbShopOpenId::getOpenId)
|
||||||
|
.list();
|
||||||
|
log.info("即将开始推送敏感操作消息, 接收推送openId列表: {}", openIds);
|
||||||
|
openIds.parallelStream().forEach(item -> {
|
||||||
|
wxAccountUtil.sendStockMsg(shopName, proName, stock, item.getOpenId(), ShopWxMsgTypeEnum.STOCK_MSG, shopId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public String getToken(HttpServletRequest request) {
|
public String getToken(HttpServletRequest request) {
|
||||||
final String requestHeader = request.getHeader("Authorization");
|
final String requestHeader = request.getHeader("Authorization");
|
||||||
if (requestHeader != null && requestHeader.startsWith("Bearer")) {
|
if (requestHeader != null && requestHeader.startsWith("Bearer")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user