短信推送任务

This commit is contained in:
2025-10-14 17:57:32 +08:00
parent 19b410aadd
commit 4062cdea57
11 changed files with 520 additions and 2 deletions

View File

@@ -0,0 +1,14 @@
package com.czg.service.market.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.market.entity.SmsPushEvent;
/**
* 营销推送发送记录 映射层。
*
* @author ww
* @since 2025-10-14
*/
public interface SmsPushEventMapper extends BaseMapper<SmsPushEvent> {
}

View File

@@ -0,0 +1,14 @@
package com.czg.service.market.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.market.entity.SmsPushEventUser;
/**
* 营销推送任务 映射层。
*
* @author ww
* @since 2025-10-14
*/
public interface SmsPushEventUserMapper extends BaseMapper<SmsPushEventUser> {
}

View File

@@ -0,0 +1,98 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.czg.BaseQueryParam;
import com.czg.config.RabbitPublisher;
import com.czg.exception.CzgException;
import com.czg.market.dto.ShopCouponDTO;
import com.czg.market.dto.SmsPushEventDTO;
import com.czg.market.entity.ShopCoupon;
import com.czg.market.entity.SmsPushEventUser;
import com.czg.service.market.mapper.SmsPushEventUserMapper;
import com.czg.utils.AssertUtil;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.market.entity.SmsPushEvent;
import com.czg.market.service.SmsPushEventService;
import com.czg.service.market.mapper.SmsPushEventMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
/**
* 营销推送发送记录 服务层实现。
*
* @author ww
* @since 2025-10-14
*/
@Service
public class SmsPushEventServiceImpl extends ServiceImpl<SmsPushEventMapper, SmsPushEvent> implements SmsPushEventService {
@Resource
private SmsPushEventUserMapper eventUserMapper;
@Resource
private RabbitPublisher rabbitPublisher;
@Override
public Page<SmsPushEventDTO> getPushEventPage(BaseQueryParam param, Long shopId, Long id) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq(SmsPushEvent::getShopId, shopId)
.eq(SmsPushEvent::getId, id)
.eq(SmsPushEvent::getIsDel, 0)
.orderBy(SmsPushEvent::getCreateTime).desc();
Page<SmsPushEventDTO> page = pageAs(new Page<>(param.getPage(), param.getSize()), queryWrapper, SmsPushEventDTO.class);
for (SmsPushEventDTO record : page.getRecords()) {
if (record.getUserType() != 2) {
continue;
}
SmsPushEventUser eventUser = eventUserMapper.selectOneByQuery(
new QueryWrapper().eq(SmsPushEventUser::getEventId, record.getId())
);
record.setSmsPushEventUser(eventUser);
}
return page;
}
@Override
@Transactional
public void addPushEvent(SmsPushEventDTO param) {
AssertUtil.isNull(param.getUserType(), "请选择用户范围后进行推送");
if (param.getUserType() == 2 && param.getSmsPushEventUser() == null) {
throw new CzgException("范围推送时,必须指定用户范围");
} else if (param.getUserType() == 3 && param.getUserId() == null) {
throw new CzgException("指定推送时,必须指定用户");
}
AssertUtil.isNull(param.getPushEventId(), "请选择模板后进行推送");
AssertUtil.isNull(param.getContent(), "消息内容不能为空");
if (param.getSendType() == 2) {
AssertUtil.isNull(param.getSendTime(), "定时发送时,必须指定发送时间");
} else {
param.setSendTime(LocalDateTime.now());
}
SmsPushEvent pushEvent = BeanUtil.toBean(param, SmsPushEvent.class);
save(pushEvent);
if (param.getUserType() == 2) {
SmsPushEventUser eventUser = param.getSmsPushEventUser();
eventUser.setShopId(param.getShopId());
eventUser.setEventId(pushEvent.getId());
eventUserMapper.insert(eventUser);
}
// 推送消息 进行 阿里模板申请
rabbitPublisher.sendWechatTemplateMsg(pushEvent.getShopId() + "," + pushEvent.getId());
}
/**
* 逻辑删除记录
*/
@Override
public void deletePushEvent(Long id) {
SmsPushEvent pushEvent = getById(id);
AssertUtil.isNull(pushEvent, "记录不存在");
pushEvent.setIsDel(1);
updateById(pushEvent);
}
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.market.mapper.SmsPushEventMapper">
</mapper>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.market.mapper.SmsPushEventUserMapper">
</mapper>