diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionDAO.java index 39dee36fb..e95517010 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionDAO.java @@ -91,12 +91,12 @@ public class HyExhibitionDAO { } - public Map exhibitionStatisticsMap(List list) { + public Map exhibitionStatisticsMap(List list) { if (CollectionUtils.isEmpty(list)) { return new HashMap<>(4); } List result = hyExhibitionMapper.exhibitionStatistic(list); - return result.stream().collect(Collectors.toMap(ExhibitionStatisticsDTO::getExhibitionCode, date -> date)); + return result.stream().collect(Collectors.toMap(ExhibitionStatisticsDTO::getExhibitionId, date -> date)); } public List listByExhibitionGroupIds(List exhibitionGroupIdList,Boolean filterCloseExhibition){ diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerExhibitionDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerExhibitionDAO.java index 0583ba140..891b2dd83 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerExhibitionDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerExhibitionDAO.java @@ -150,4 +150,11 @@ public class HyPartnerExhibitionDAO { } return hyPartnerExhibitionMapper.getCloseExhibitionLineIds(exhibitionIds); } + + public List getLineByExhibitionIds(List exhibitionIds) { + if (CollectionUtils.isEmpty(exhibitionIds)){ + return new ArrayList<>(); + } + return hyPartnerExhibitionMapper.getLineByExhibitionIds(exhibitionIds); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionMapper.java index 6b2224af5..80697fb72 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionMapper.java @@ -52,7 +52,7 @@ public interface HyExhibitionMapper { @Param("closedType") Integer closedType); - List exhibitionStatistic(@Param("list") List exhibitionCodeList); + List exhibitionStatistic(@Param("list") List exhibitionIdList); List listByExhibitionGroupIds(@Param("list") List exhibitionGroupIdList, @Param("filterCloseExhibition") Boolean filterCloseExhibition); diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerExhibitionMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerExhibitionMapper.java index 467f55653..391614fdb 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerExhibitionMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerExhibitionMapper.java @@ -109,4 +109,11 @@ public interface HyPartnerExhibitionMapper { * @return */ List getCloseExhibitionLineIds(@Param("exhibitionIds") List exhibitionIds); + + /** + * 根据展会 id 列表获取会销线索信息 + * @param exhibitionIds + * @return + */ + List getLineByExhibitionIds(List exhibitionIds); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionMapper.xml index d7dfe0cff..aff427604 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionMapper.xml @@ -363,18 +363,18 @@ diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml index 0542224fc..0ef1287f3 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml @@ -150,6 +150,7 @@ pu.mobile as mobile from hy_partner_exhibition hpe left join hy_partner_user_info pu on hpe.partner_id = pu.partner_id where hpe.participation_status != 7 + and hpe.deleted = 0 and hpe.exhibition_id = #{exhibitionId} @@ -472,4 +473,21 @@ ) AND participation_status != 7 + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/exhibition/ExhibitionStatisticsDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/exhibition/ExhibitionStatisticsDTO.java index e437ba7a5..f43a5bf5f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/exhibition/ExhibitionStatisticsDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/exhibition/ExhibitionStatisticsDTO.java @@ -13,7 +13,7 @@ public class ExhibitionStatisticsDTO { /** * 展会code */ - private String exhibitionCode; + private String exhibitionId; /** * 报名人数 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/job/ExhibitionJob.java b/coolstore-partner-service/src/main/java/com/cool/store/job/ExhibitionJob.java index e91a5e15d..a72744370 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/job/ExhibitionJob.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/job/ExhibitionJob.java @@ -7,6 +7,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Date; + /** * @author Fun Li 2023/12/8 13:50 * @version 1.0 @@ -19,13 +21,25 @@ public class ExhibitionJob { private ExhibitionService exhibitionService; @XxlJob("autoCloseExhibition") + //每天 23:59:00 执行 public void syncUserSourceJob() { XxlJobHelper.log("-------------------------------自动结束会销任务开始-------------------------------"); log.info("-------------------------------自动结束会销任务开始-------------------------------"); - int res = exhibitionService.autoCloseExhibition(); + int res = exhibitionService.autoCloseExhibition(new Date()); log.info("-------------------------------自动结束会销任务结束,共结束" + res + "个会销-------------------------------"); XxlJobHelper.log("-------------------------------自动结束会销任务结束,共结束" + res + "个会销-------------------------------"); XxlJobHelper.handleSuccess(); } + @XxlJob("sendSMSToExhibitionApplicants") + //每天 08:00 执行 + public void sendSMSToExhibitionApplicants() { + XxlJobHelper.log("-------------------------------给被自动结束会销的参会人发送短信任务开始-------------------------------"); + log.info("-------------------------------给被自动结束会销的参会人发送短信任务开始-------------------------------"); + exhibitionService.sendSMSToExhibitionApplicants(); + log.info("-------------------------------给被自动结束会销的参会人发送短信任务结束-------------------------------"); + XxlJobHelper.log("-------------------------------给被自动结束会销的参会人发送短信任务结束-------------------------------"); + XxlJobHelper.handleSuccess(); + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ExhibitionService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ExhibitionService.java index 582a36732..e5d231497 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ExhibitionService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ExhibitionService.java @@ -10,6 +10,7 @@ import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.exhibition.*; import com.github.pagehelper.PageInfo; +import java.util.Date; import java.util.List; /** @@ -157,6 +158,11 @@ public interface ExhibitionService { /** * 自动结束会销 */ - int autoCloseExhibition(); + int autoCloseExhibition(Date now); + + /** + * 给被自动结束会销的参会人发短信通知 + */ + void sendSMSToExhibitionApplicants(); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/exhibition/ExhibitionServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/exhibition/ExhibitionServiceImpl.java index 6beb0c7b0..e62bb5c50 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/exhibition/ExhibitionServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/exhibition/ExhibitionServiceImpl.java @@ -259,9 +259,9 @@ public class ExhibitionServiceImpl implements ExhibitionService { List list = new ArrayList<>(); //查询协作人 Set collaboratorsSet = new HashSet(); - List codeList = new ArrayList<>(); + List codeList = new ArrayList<>(); exhibitionList.forEach(x->{ - codeList.add(x.getExhibitionCode()); + codeList.add(x.getId()); if (StringUtils.isNotEmpty(x.getCollaborators())){ List userIdList = Arrays.asList(x.getCollaborators().substring(1).split(Constants.COMMA)); collaboratorsSet.addAll(userIdList); @@ -289,7 +289,7 @@ public class ExhibitionServiceImpl implements ExhibitionService { }); myExhibitionVO.setCollaborators(coll); } - ExhibitionStatisticsDTO statistics = StatisticsMap.getOrDefault(x.getExhibitionCode(), new ExhibitionStatisticsDTO()); + ExhibitionStatisticsDTO statistics = StatisticsMap.getOrDefault(x.getId(), new ExhibitionStatisticsDTO()); myExhibitionVO.setSignUpCount(statistics.getSignUpCount()); myExhibitionVO.setCheckInCount(statistics.getCheckInCount()); myExhibitionVO.setFormFillCount(statistics.getFormFillCount()); @@ -690,11 +690,11 @@ public class ExhibitionServiceImpl implements ExhibitionService { @Override @Transactional - public int autoCloseExhibition() { + public int autoCloseExhibition(Date now) { //1. 查询需要关闭的会销 HyExhibitionDO hyExhibitionDO = new HyExhibitionDO(); hyExhibitionDO.setClosedType(0); - hyExhibitionDO.setStartDateStr(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_DAY)); + hyExhibitionDO.setStartDateStr(DateUtil.format(now, CoolDateUtils.DATE_FORMAT_DAY)); hyExhibitionDO.setDeleted(Boolean.FALSE); List hyExhibitionDOS = hyExhibitionDAO.querySelective(hyExhibitionDO); if (CollectionUtils.isEmpty(hyExhibitionDOS)) { @@ -724,6 +724,35 @@ public class ExhibitionServiceImpl implements ExhibitionService { return res; } + @Override + public void sendSMSToExhibitionApplicants() { + //1. 查询昨晚被自动结束的会销 + HyExhibitionDO hyExhibitionDO = new HyExhibitionDO(); + hyExhibitionDO.setClosedType(2); + String startDayStr = DateUtil.format(DateUtil.offsetDay(new Date(), -1), CoolDateUtils.DATE_FORMAT_DAY); + hyExhibitionDO.setStartDateStr(startDayStr); + hyExhibitionDO.setDeleted(Boolean.FALSE); + List hyExhibitionDOS = hyExhibitionDAO.querySelective(hyExhibitionDO); + if (CollectionUtils.isEmpty(hyExhibitionDOS)) { + return; + } + + //2. 昨晚结束的会销关联的线索 + List exhibitionLine = hyPartnerExhibitionDAO.getLineByExhibitionIds(hyExhibitionDOS.stream().map(HyExhibitionDO::getId).collect(Collectors.toList())); + if (CollectionUtils.isEmpty(exhibitionLine)){ + return; + } + + //3. 短信通知 + exhibitionLine.stream().forEach(x->{ + try { + eventCenterHttpRequest.sendSmsVariable(x.getMobile(), SMSMsgEnum.EXHIBITION_CLOSE); + } catch (ApiException e) { + log.info("closeExhibition 发送短信通知失败,mobile:{}, exhibitionId:{}", x.getMobile(), hyExhibitionDO.getId()); + } + }); + } + /** * 计算是否会销中 * @param lineId diff --git a/coolstore-partner-webb/src/test/java/com/cool/store/service/ExhibitionServiceTest.java b/coolstore-partner-webb/src/test/java/com/cool/store/service/ExhibitionServiceTest.java index ec818fd2b..fe29c1237 100644 --- a/coolstore-partner-webb/src/test/java/com/cool/store/service/ExhibitionServiceTest.java +++ b/coolstore-partner-webb/src/test/java/com/cool/store/service/ExhibitionServiceTest.java @@ -6,6 +6,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; +import java.util.Date; + /** * @author Fun Li 2023/12/6 16:17 * @version 1.0 @@ -24,8 +26,13 @@ class ExhibitionServiceTest extends AbstractJUnit4SpringContextTests { @Test void testAutoCloseExhibition() { - int i = exhibitionService.autoCloseExhibition(); + int i = exhibitionService.autoCloseExhibition(new Date()); log.info(i + ""); } + @Test + void testSendSMSToExhibitionApplicants() { + exhibitionService.sendSMSToExhibitionApplicants(); + } + }