Commit fefc3f0a authored by shiyu's avatar shiyu

专场开始通知

parent 3045271a
...@@ -36,13 +36,13 @@ public class AdminUserController { ...@@ -36,13 +36,13 @@ public class AdminUserController {
// @RequiresPermissions("admin:user:list") // @RequiresPermissions("admin:user:list")
@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "查询") @RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "查询")
@GetMapping("/list") @GetMapping("/list")
public Object list(String username, String mobile, @RequestParam(defaultValue = "1") Integer page, public Object list(String username, String mobile, Long userId, @RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "10") Integer limit,
@Sort @RequestParam(defaultValue = "add_time") String sort, @Sort @RequestParam(defaultValue = "add_time") String sort,
@Order @RequestParam(defaultValue = "desc") String order) { @Order @RequestParam(defaultValue = "desc") String order) {
logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 用户管理->会员管理->查询,请求参数,username:{},code:{},page:{}", username, mobile, page); logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 用户管理->会员管理->查询,请求参数,username:{},code:{},page:{}", username, mobile, page);
try { try {
Object data = adminUserService.findList(username, mobile, page, limit, sort, order); Object data = adminUserService.findList(username, mobile, userId, page, limit, sort, order);
logger.info("【请求结束】用户管理->会员管理->查询:响应结果:{}", JSONObject.toJSONString(data)); logger.info("【请求结束】用户管理->会员管理->查询:响应结果:{}", JSONObject.toJSONString(data));
return ResponseUtil.ok(data); return ResponseUtil.ok(data);
} catch (Exception e) { } catch (Exception e) {
......
...@@ -72,8 +72,8 @@ public class AdminUserServiceImpl implements AdminUserService { ...@@ -72,8 +72,8 @@ public class AdminUserServiceImpl implements AdminUserService {
SupplierItemDao supplierItemDao; SupplierItemDao supplierItemDao;
@Override @Override
public Object findList(String username, String mobile, Integer page, Integer size, String sort, String order) { public Object findList(String username, String mobile, Long userId, Integer page, Integer size, String sort, String order) {
List<User> userList = dtsUserDao.querySelective(username, mobile, page, size, sort, order); List<User> userList = dtsUserDao.querySelective(username, mobile, userId, page, size, sort, order);
long total = PageInfo.of(userList).getTotal(); long total = PageInfo.of(userList).getTotal();
List<UserVo> list = new ArrayList<>(); List<UserVo> list = new ArrayList<>();
userList.forEach(user -> { userList.forEach(user -> {
......
...@@ -10,7 +10,7 @@ import java.util.List; ...@@ -10,7 +10,7 @@ import java.util.List;
public interface AdminUserService { public interface AdminUserService {
Object findList(String username, String mobile, Integer page, Integer size, String sort, String order); Object findList(String username, String mobile, Long userId, Integer page, Integer size, String sort, String order);
List<User> findList(SysUserRequestDto dto); List<User> findList(SysUserRequestDto dto);
......
...@@ -125,6 +125,32 @@ public class AliSmsSender implements SmsSender { ...@@ -125,6 +125,32 @@ public class AliSmsSender implements SmsSender {
} }
public Result sendSms(String phone, String msg) {
try {
Map<String, Object> map = new HashMap<>();
map.put("msg", msg);
logger.info("短信通知发送内容 : {} ", msg);
com.aliyun.dysmsapi20170525.Client client = createClient();
com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
.setPhoneNumbers(phone)
.setTemplateCode(templateCode)
.setTemplateParam(JsonUtils.fromMap(map))
.setSignName("换藏小程序");
SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new com.aliyun.teautil.models.RuntimeOptions());
logger.info("短信通知发送结果 : {} ", JsonUtils.from(sendSmsResponse));
if ("OK".equals(sendSmsResponse.getBody().code)) {
return Result.success();
}
} catch (Exception e) {
logger.error("AliSmsSender.sendWithTemplate(),phone={}, error:{}", phone, e);
}
return Result.failed();
}
public static void main(String[] args) { public static void main(String[] args) {
} }
......
package com.wwdz.ch.db.dao; package com.wwdz.ch.db.dao;
import com.wwdz.ch.db.domain.User; import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.dto.request.UserRequestDto;
import java.util.List; import java.util.List;
...@@ -15,6 +16,8 @@ public interface UserDao { ...@@ -15,6 +16,8 @@ public interface UserDao {
int insertByMapper(User user); int insertByMapper(User user);
List<User> findList(UserRequestDto dto);
/** /**
* 通过oid查询未删除的记录 * 通过oid查询未删除的记录
......
...@@ -17,7 +17,7 @@ public interface DtsUserDao { ...@@ -17,7 +17,7 @@ public interface DtsUserDao {
int updateById(User user); int updateById(User user);
List<User> querySelective(String username, String mobile, Integer page, Integer size, String sort, String order); List<User> querySelective(String username, String mobile, Long userId,Integer page, Integer size, String sort, String order);
int count(); int count();
......
...@@ -4,7 +4,7 @@ import com.xxdxxs.entity.Entity; ...@@ -4,7 +4,7 @@ import com.xxdxxs.entity.Entity;
import lombok.Data; import lombok.Data;
@Data @Data
public class UserRequestDto implements Entity { public class UserRequestDto extends BaseRequestDto implements Entity {
private String user; private String user;
private Long id; private Long id;
......
package com.wwdz.ch.db.impl; package com.wwdz.ch.db.impl;
import com.alibaba.dubbo.config.annotation.Reference; import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageHelper;
import com.wwdz.ch.db.dao.UserDao; import com.wwdz.ch.db.dao.UserDao;
import com.wwdz.ch.db.domain.User; import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.domain.UserExample; import com.wwdz.ch.db.domain.UserExample;
import com.wwdz.ch.db.dto.request.UserRequestDto;
import com.wwdz.ch.db.mapper.UserMapper; import com.wwdz.ch.db.mapper.UserMapper;
import com.wwdz.mall.common.vo.response.CloudServerResponse; import com.wwdz.mall.common.vo.response.CloudServerResponse;
import com.wwdz.user.api.service.user.UserReadService; import com.wwdz.user.api.service.user.UserReadService;
...@@ -40,6 +42,17 @@ public class UserDaoImpl implements UserDao { ...@@ -40,6 +42,17 @@ public class UserDaoImpl implements UserDao {
} }
@Override
public List<User> findList(UserRequestDto dto) {
UserExample example = new UserExample();
UserExample.Criteria criteria = example.createCriteria();
criteria.andDeletedEqualTo(false);
example.setOrderByClause("add_time desc");
PageHelper.startPage(dto.getPage(), dto.getLimit());
return userMapper.selectByExample(example);
}
@Override @Override
public User queryByOid(String openId) { public User queryByOid(String openId) {
CloudServerResponse<com.wwdz.user.api.model.user.User> cloudServerResponse = userReadService.getUserByOpenIdOrUnionId(null, openId); CloudServerResponse<com.wwdz.user.api.model.user.User> cloudServerResponse = userReadService.getUserByOpenIdOrUnionId(null, openId);
......
...@@ -25,7 +25,8 @@ public class SpecialPerformanceDaoImpl implements SpecialPerformanceDao { ...@@ -25,7 +25,8 @@ public class SpecialPerformanceDaoImpl implements SpecialPerformanceDao {
SpecialPerformanceExample.Criteria criteria = example.createCriteria(); SpecialPerformanceExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getType(), criteria::andTypeEqualTo); JdbcHelper.ifPresent(dto.getType(), criteria::andTypeEqualTo);
JdbcHelper.ifPresent(dto.getState(), criteria::andStateEqualTo); JdbcHelper.ifPresent(dto.getState(), criteria::andStateEqualTo);
JdbcHelper.ifPresent(dto.getStartQueryTime(), criteria::andStartTimeGreaterThanOrEqualTo); JdbcHelper.ifPresent(dto.getStartQueryTime(), criteria::andStartTimeLessThanOrEqualTo);
JdbcHelper.ifPresent(dto.getEndQueryTime(), criteria::andStartTimeGreaterThanOrEqualTo);
example.setOrderByClause(" start_time desc"); example.setOrderByClause(" start_time desc");
PageHelper.startPage(dto.getPage(), dto.getLimit()); PageHelper.startPage(dto.getPage(), dto.getLimit());
return specialPerformanceMapper.selectByExample(example); return specialPerformanceMapper.selectByExample(example);
......
...@@ -86,7 +86,7 @@ public class DtsUserDaoImpl implements DtsUserDao { ...@@ -86,7 +86,7 @@ public class DtsUserDaoImpl implements DtsUserDao {
} }
@Override @Override
public List<User> querySelective(String username, String mobile, Integer page, Integer size, String sort, public List<User> querySelective(String username, String mobile, Long userId, Integer page, Integer size, String sort,
String order) { String order) {
UserExample example = new UserExample(); UserExample example = new UserExample();
...@@ -98,6 +98,10 @@ public class DtsUserDaoImpl implements DtsUserDao { ...@@ -98,6 +98,10 @@ public class DtsUserDaoImpl implements DtsUserDao {
if (!StringUtils.isEmpty(mobile)) { if (!StringUtils.isEmpty(mobile)) {
criteria.andMobileEqualTo(mobile); criteria.andMobileEqualTo(mobile);
} }
if (userId != null) {
criteria.andIdEqualTo(userId);
}
// criteria.andDeletedEqualTo(false); // criteria.andDeletedEqualTo(false);
if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) { if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
......
package com.wwdz.ch.wx.job; package com.wwdz.ch.wx.job;
import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.api.WxAppletApi; import com.wwdz.ch.core.api.WxAppletApi;
import com.wwdz.ch.core.consts.DistributionEnum; import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg; import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg;
...@@ -9,11 +10,15 @@ import com.wwdz.ch.core.type.Result; ...@@ -9,11 +10,15 @@ import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.PriceUtil; import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.core.util.RedisUtils; import com.wwdz.ch.core.util.RedisUtils;
import com.wwdz.ch.core.util.StringUtil; import com.wwdz.ch.core.util.StringUtil;
import com.wwdz.ch.db.dao.UserDao;
import com.wwdz.ch.db.dao.distribution.*; import com.wwdz.ch.db.dao.distribution.*;
import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.domain.distribution.*; import com.wwdz.ch.db.domain.distribution.*;
import com.wwdz.ch.db.dto.request.UserRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SpecialPerformanceRequestDto; import com.wwdz.ch.db.dto.request.distribution.SpecialPerformanceRequestDto;
import com.wwdz.ch.wx.service.distribution.DistributionOrderService; import com.wwdz.ch.wx.service.distribution.DistributionOrderService;
import com.xxdxxs.utils.DateUtils; import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.StringUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -62,12 +67,15 @@ public class SpecialPerformanceNoticeJob { ...@@ -62,12 +67,15 @@ public class SpecialPerformanceNoticeJob {
@Autowired @Autowired
WxAppletApi wxAppletApi; WxAppletApi wxAppletApi;
@Autowired
UserDao userDao;
private final static String SPECIAL_PERFORMANCE_URL = "/pages/saleSpecialList/index"; private final static String SPECIAL_PERFORMANCE_URL = "/pages/saleSpecialList/index";
/** /**
* 隔10分钟运行一次 * 隔10分钟运行一次
*/ */
// @Scheduled(fixedDelay = 1000 * 60 * 10) @Scheduled(fixedDelay = 1000 * 60 * 10)
public void execute() { public void execute() {
RLock lock = redissonClient.getLock(SPECIAL_PERFORMANCE_SEND_MSG_KEY); RLock lock = redissonClient.getLock(SPECIAL_PERFORMANCE_SEND_MSG_KEY);
if (!lock.tryLock()) { if (!lock.tryLock()) {
...@@ -82,6 +90,7 @@ public class SpecialPerformanceNoticeJob { ...@@ -82,6 +90,7 @@ public class SpecialPerformanceNoticeJob {
Instant startInstant = now.toInstant().plus(Duration.ofMinutes(20)); Instant startInstant = now.toInstant().plus(Duration.ofMinutes(20));
Date startTime = Date.from(startInstant); Date startTime = Date.from(startInstant);
specialPerformanceRequestDto.setStartQueryTime(startTime); specialPerformanceRequestDto.setStartQueryTime(startTime);
specialPerformanceRequestDto.setEndQueryTime(now);
List<SpecialPerformance> specialPerformanceList = specialPerformanceDao.find(specialPerformanceRequestDto); List<SpecialPerformance> specialPerformanceList = specialPerformanceDao.find(specialPerformanceRequestDto);
logger.info("即将开始的专场个数为 {}", specialPerformanceList.size()); logger.info("即将开始的专场个数为 {}", specialPerformanceList.size());
if (CollectionUtils.isEmpty(specialPerformanceList)) { if (CollectionUtils.isEmpty(specialPerformanceList)) {
...@@ -93,10 +102,36 @@ public class SpecialPerformanceNoticeJob { ...@@ -93,10 +102,36 @@ public class SpecialPerformanceNoticeJob {
logger.info("当前即将开始的专场id:{}, 名称为 {} ", specialPerformance.getId(), specialPerformance.getTitle()); logger.info("当前即将开始的专场id:{}, 名称为 {} ", specialPerformance.getId(), specialPerformance.getTitle());
//发送短信通知 //发送短信通知
String url = wxAppletApi.getUrlLink(SPECIAL_PERFORMANCE_URL,"specialId=" + specialPerformance.getId()); String url = wxAppletApi.getUrlLink(SPECIAL_PERFORMANCE_URL,"specialId=" + specialPerformance.getId());
String msg = specialPerformance.getTitle() + "即将开始,请前往"+ url + "查看"; String msg = specialPerformance.getTitle() + "将在" + DateUtils.toString(specialPerformance.getStartTime()) + "开始,请前往"+ url + "查看";
// aliSmsSender.sendSms(userId, msg); boolean hasNextPage = true;
int page = 1;
UserRequestDto userRequestDto = new UserRequestDto();
while (hasNextPage) {
List<User> userList = userDao.findList(userRequestDto);
PageInfo pageInfo = new PageInfo(userList);
for (User user : userList) {
String phone = user.getMobile();
if (StringUtils.hasLength(phone)) {
aliSmsSender.sendSms(phone, msg);
}
}
if (pageInfo.isHasNextPage()) {
page = page + 1;
userRequestDto.setPage(page);
logger.info("要发送短信通知的用户数据总页数为 : {}, 当前为 : {}", pageInfo.getPages(), page);
} else {
hasNextPage = false;
logger.info("============= 发送专场开始短信循环结束 =============");
}
if (page > 500) {
hasNextPage = false;
logger.info("============= 发送专场开始短信超出上限,停止发送 =============");
}
}
logger.info("================专场id: {}, 即将开始通知任务,提醒短信发送成功 ==============", specialPerformance.getId()); logger.info("================专场id: {}, 即将开始通知任务,提醒短信发送成功 ==============", specialPerformance.getId());
redisUtils.set(abortStartKey, specialPerformance.getId(), 3600 * 24); redisUtils.set(abortStartKey, specialPerformance.getId(), 3600 * 24);
} else {
logger.info("================专场id: {}, 通知任务已经完成,无需重复发送 ==============", specialPerformance.getId());
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("专场即将开始通知任务 error {}", e); logger.error("专场即将开始通知任务 error {}", e);
......
package com.wwdz.ch.wx.api; package com.wwdz.ch.wx.api;
import com.wwdz.ch.core.api.OfficialAccountApi; import com.wwdz.ch.core.api.OfficialAccountApi;
import com.wwdz.ch.core.api.WxAppletApi;
import com.wwdz.ch.core.entity.ConsignSaleSubscribeMsg; import com.wwdz.ch.core.entity.ConsignSaleSubscribeMsg;
import com.wwdz.ch.core.notify.AliSmsSender;
import com.xxdxxs.utils.DateUtils; import com.xxdxxs.utils.DateUtils;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -18,6 +20,12 @@ public class OfficialAccountApiTest { ...@@ -18,6 +20,12 @@ public class OfficialAccountApiTest {
@Autowired @Autowired
OfficialAccountApi officialAccountApi; OfficialAccountApi officialAccountApi;
@Autowired
WxAppletApi wxAppletApi;
@Autowired
AliSmsSender aliSmsSender;
@Test @Test
public void refreshAccessToken() { public void refreshAccessToken() {
officialAccountApi.getAccessToken(); officialAccountApi.getAccessToken();
...@@ -41,4 +49,13 @@ public class OfficialAccountApiTest { ...@@ -41,4 +49,13 @@ public class OfficialAccountApiTest {
consignSaleSubscribeMsg.setTime(DateUtils.toString(new Date())); consignSaleSubscribeMsg.setTime(DateUtils.toString(new Date()));
officialAccountApi.sendModelMsg(openId, consignSaleSubscribeMsg); officialAccountApi.sendModelMsg(openId, consignSaleSubscribeMsg);
} }
@Test
public void send() {
String SPECIAL_PERFORMANCE_URL = "/pages/saleSpecialList/index";
String url = wxAppletApi.getUrlLink(SPECIAL_PERFORMANCE_URL,"specialId=" + 1);
String msg = "换藏小程序," + "测试专场" + "即将开始,请前往"+ url + "查看";
aliSmsSender.sendSms(60652774, msg);
}
} }
\ No newline at end of file
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