Commit fefc3f0a authored by shiyu's avatar shiyu

专场开始通知

parent 3045271a
......@@ -36,13 +36,13 @@ public class AdminUserController {
// @RequiresPermissions("admin:user:list")
@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "查询")
@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,
@Sort @RequestParam(defaultValue = "add_time") String sort,
@Order @RequestParam(defaultValue = "desc") String order) {
logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 用户管理->会员管理->查询,请求参数,username:{},code:{},page:{}", username, mobile, page);
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));
return ResponseUtil.ok(data);
} catch (Exception e) {
......
......@@ -72,8 +72,8 @@ public class AdminUserServiceImpl implements AdminUserService {
SupplierItemDao supplierItemDao;
@Override
public Object findList(String username, String mobile, Integer page, Integer size, String sort, String order) {
List<User> userList = dtsUserDao.querySelective(username, mobile, page, size, sort, 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, userId, page, size, sort, order);
long total = PageInfo.of(userList).getTotal();
List<UserVo> list = new ArrayList<>();
userList.forEach(user -> {
......
......@@ -10,7 +10,7 @@ import java.util.List;
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);
......
......@@ -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) {
}
......
package com.wwdz.ch.db.dao;
import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.dto.request.UserRequestDto;
import java.util.List;
......@@ -15,6 +16,8 @@ public interface UserDao {
int insertByMapper(User user);
List<User> findList(UserRequestDto dto);
/**
* 通过oid查询未删除的记录
......
......@@ -17,7 +17,7 @@ public interface DtsUserDao {
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();
......
......@@ -4,7 +4,7 @@ import com.xxdxxs.entity.Entity;
import lombok.Data;
@Data
public class UserRequestDto implements Entity {
public class UserRequestDto extends BaseRequestDto implements Entity {
private String user;
private Long id;
......
package com.wwdz.ch.db.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageHelper;
import com.wwdz.ch.db.dao.UserDao;
import com.wwdz.ch.db.domain.User;
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.mall.common.vo.response.CloudServerResponse;
import com.wwdz.user.api.service.user.UserReadService;
......@@ -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
public User queryByOid(String openId) {
CloudServerResponse<com.wwdz.user.api.model.user.User> cloudServerResponse = userReadService.getUserByOpenIdOrUnionId(null, openId);
......
......@@ -25,7 +25,8 @@ public class SpecialPerformanceDaoImpl implements SpecialPerformanceDao {
SpecialPerformanceExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getType(), criteria::andTypeEqualTo);
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");
PageHelper.startPage(dto.getPage(), dto.getLimit());
return specialPerformanceMapper.selectByExample(example);
......
......@@ -86,7 +86,7 @@ public class DtsUserDaoImpl implements DtsUserDao {
}
@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) {
UserExample example = new UserExample();
......@@ -98,6 +98,10 @@ public class DtsUserDaoImpl implements DtsUserDao {
if (!StringUtils.isEmpty(mobile)) {
criteria.andMobileEqualTo(mobile);
}
if (userId != null) {
criteria.andIdEqualTo(userId);
}
// criteria.andDeletedEqualTo(false);
if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
......
package com.wwdz.ch.wx.job;
import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.api.WxAppletApi;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg;
......@@ -9,11 +10,15 @@ import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.core.util.RedisUtils;
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.domain.User;
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.wx.service.distribution.DistributionOrderService;
import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
......@@ -62,12 +67,15 @@ public class SpecialPerformanceNoticeJob {
@Autowired
WxAppletApi wxAppletApi;
@Autowired
UserDao userDao;
private final static String SPECIAL_PERFORMANCE_URL = "/pages/saleSpecialList/index";
/**
* 隔10分钟运行一次
*/
// @Scheduled(fixedDelay = 1000 * 60 * 10)
@Scheduled(fixedDelay = 1000 * 60 * 10)
public void execute() {
RLock lock = redissonClient.getLock(SPECIAL_PERFORMANCE_SEND_MSG_KEY);
if (!lock.tryLock()) {
......@@ -82,6 +90,7 @@ public class SpecialPerformanceNoticeJob {
Instant startInstant = now.toInstant().plus(Duration.ofMinutes(20));
Date startTime = Date.from(startInstant);
specialPerformanceRequestDto.setStartQueryTime(startTime);
specialPerformanceRequestDto.setEndQueryTime(now);
List<SpecialPerformance> specialPerformanceList = specialPerformanceDao.find(specialPerformanceRequestDto);
logger.info("即将开始的专场个数为 {}", specialPerformanceList.size());
if (CollectionUtils.isEmpty(specialPerformanceList)) {
......@@ -93,10 +102,36 @@ public class SpecialPerformanceNoticeJob {
logger.info("当前即将开始的专场id:{}, 名称为 {} ", specialPerformance.getId(), specialPerformance.getTitle());
//发送短信通知
String url = wxAppletApi.getUrlLink(SPECIAL_PERFORMANCE_URL,"specialId=" + specialPerformance.getId());
String msg = specialPerformance.getTitle() + "即将开始,请前往"+ url + "查看";
// aliSmsSender.sendSms(userId, msg);
String msg = specialPerformance.getTitle() + "将在" + DateUtils.toString(specialPerformance.getStartTime()) + "开始,请前往"+ url + "查看";
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());
redisUtils.set(abortStartKey, specialPerformance.getId(), 3600 * 24);
} else {
logger.info("================专场id: {}, 通知任务已经完成,无需重复发送 ==============", specialPerformance.getId());
}
} catch (Exception e) {
logger.error("专场即将开始通知任务 error {}", e);
......
package com.wwdz.ch.wx.api;
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.notify.AliSmsSender;
import com.xxdxxs.utils.DateUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -18,6 +20,12 @@ public class OfficialAccountApiTest {
@Autowired
OfficialAccountApi officialAccountApi;
@Autowired
WxAppletApi wxAppletApi;
@Autowired
AliSmsSender aliSmsSender;
@Test
public void refreshAccessToken() {
officialAccountApi.getAccessToken();
......@@ -41,4 +49,13 @@ public class OfficialAccountApiTest {
consignSaleSubscribeMsg.setTime(DateUtils.toString(new Date()));
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