From fd403c1f88e6bd482e1ed8709150ffeb406549c5 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Tue, 19 Dec 2023 14:31:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD=E4=BC=9A?= =?UTF-8?q?=E9=94=80=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/dao/HyExhibitionDAO.java | 20 ++++-- .../cool/store/dao/HyExhibitionGroupDAO.java | 3 + .../store/dao/HyPartnerExhibitionDAO.java | 7 +++ .../store/mapper/HyExhibitionGroupMapper.java | 8 ++- .../cool/store/mapper/HyExhibitionMapper.java | 9 +++ .../mapper/HyPartnerExhibitionMapper.java | 9 ++- .../mapper/HyExhibitionGroupMapper.xml | 19 ++++++ .../resources/mapper/HyExhibitionMapper.xml | 63 +++++++++++++++++++ .../mapper/HyPartnerExhibitionMapper.xml | 12 ++++ .../com/cool/store/entity/HyExhibitionDO.java | 3 + .../com/cool/store/job/ExhibitionJob.java | 13 +++- .../cool/store/service/ExhibitionService.java | 6 ++ .../exhibition/ExhibitionServiceImpl.java | 36 +++++++++++ .../store/service/ExhibitionServiceTest.java | 6 ++ 14 files changed, 203 insertions(+), 11 deletions(-) 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 fc29851fc..39dee36fb 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 @@ -1,5 +1,6 @@ package com.cool.store.dao; +import cn.hutool.core.collection.CollectionUtil; import com.cool.store.dto.exhibition.ExhibitionDTO; import com.cool.store.dto.exhibition.ExhibitionStatisticsDTO; import com.cool.store.entity.HyExhibitionDO; @@ -11,10 +12,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -132,4 +130,18 @@ public class HyExhibitionDAO { } return hyExhibitionMapper.getPartnerExhibitionInfo(exhibitionId, partnerLineId); } + + public List querySelective(HyExhibitionDO hyExhibitionDO) { + if (hyExhibitionDO == null) { + return new ArrayList<>(); + } + return hyExhibitionMapper.querySelective(hyExhibitionDO); + } + + public int batchCloseExhibition(List hyExhibitionIds) { + if (CollectionUtil.isEmpty(hyExhibitionIds)) { + return 0; + } + return hyExhibitionMapper.batchCloseExhibition(hyExhibitionIds); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionGroupDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionGroupDAO.java index 434502958..a444d00fb 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionGroupDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyExhibitionGroupDAO.java @@ -72,4 +72,7 @@ public class HyExhibitionGroupDAO { } + public int batchCloseExhibitionGroup() { + return hyExhibitionGroupMapper.batchCloseExhibitionGroup(); + } } 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 a2cf1d2eb..0583ba140 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 @@ -143,4 +143,11 @@ public class HyPartnerExhibitionDAO { } return hyPartnerExhibitionMapper.partnerSignUpCount(lineIds); } + + public List getCloseExhibitionLineIds(List exhibitionIds) { + if (CollectionUtils.isEmpty(exhibitionIds)){ + return new ArrayList<>(); + } + return hyPartnerExhibitionMapper.getCloseExhibitionLineIds(exhibitionIds); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionGroupMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionGroupMapper.java index 1692bd991..6b21ef5fd 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionGroupMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyExhibitionGroupMapper.java @@ -2,8 +2,6 @@ package com.cool.store.mapper; import com.cool.store.dto.exhibition.MyExhibitionGroupDTO; import com.cool.store.entity.HyExhibitionGroupDO; -import org.apache.ibatis.annotations.Param; -import tk.mybatis.mapper.common.Mapper; import java.util.List; @@ -42,4 +40,10 @@ public interface HyExhibitionGroupMapper { int deleteByPrimaryKey(Integer id); List listByCreator(String userId); + + /** + * 批量关闭需要关闭的会销组 + * @return + */ + int batchCloseExhibitionGroup(); } \ No newline at end of file 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 c8b08f23e..6b2224af5 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 @@ -81,4 +81,13 @@ public interface HyExhibitionMapper { * @return */ PartnerExhibitionInfoVO getPartnerExhibitionInfo(@Param("exhibitionId") Integer exhibitionId, @Param("partnerLineId") Long partnerLineId); + + /** + * 查询符合条件的会销列表 + * @param hyExhibitionDO + * @return + */ + List querySelective(HyExhibitionDO hyExhibitionDO); + + int batchCloseExhibition(@Param("hyExhibitionIds") List hyExhibitionIds); } \ No newline at end of file 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 cd3acf42b..467f55653 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 @@ -3,9 +3,7 @@ package com.cool.store.mapper; import com.cool.store.dto.exhibition.ExhibitionLineBaseDTO; import com.cool.store.dto.exhibition.ExhibitionLineDTO; import com.cool.store.dto.exhibition.PartnerSignUpDTO; -import com.cool.store.entity.HyExhibitionDO; import com.cool.store.entity.HyPartnerExhibitionDO; -import io.swagger.models.auth.In; import com.cool.store.entity.HyPartnerExhibitionInterviewDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -104,4 +102,11 @@ public interface HyPartnerExhibitionMapper { * @return */ List partnerSignUpCount(@Param("lineIds") List lineIds ); + + /** + * 获取待修改会销中状态的线索 ids + * @param exhibitionIds + * @return + */ + List getCloseExhibitionLineIds(@Param("exhibitionIds") List exhibitionIds); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionGroupMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionGroupMapper.xml index 5d644c72a..ccffa8a07 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionGroupMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionGroupMapper.xml @@ -150,4 +150,23 @@ + + + UPDATE `hy_exhibition_group` t1 + INNER JOIN ( + -- 所有关联的会销都结束的会销组(不包含未关联会销的会销组) + SELECT eg.id + FROM `hy_exhibition_group` eg + LEFT JOIN `hy_exhibition` e ON eg.id = e.exhibition_group_id + WHERE eg.deleted = 0 + AND e.deleted = 0 + AND eg.closed = 0 + GROUP BY eg.id + HAVING COUNT(e.id) = COUNT(CASE WHEN e.closed_type != 0 THEN 1 END) + ) AS t2 ON t1.id = t2.id + SET closed = 1 + WHERE t1.deleted = 0 + AND t1.closed = 0 + + \ 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 08cb09102..d7dfe0cff 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyExhibitionMapper.xml @@ -34,6 +34,59 @@ from hy_exhibition where id = #{id,jdbcType=INTEGER} + + + delete from hy_exhibition where id = #{id,jdbcType=INTEGER} @@ -405,4 +458,14 @@ AND t1.id = #{exhibitionId} + + update hy_exhibition + set closed_type = 2, close_time = now() + where id in ( + + #{hyExhibitionId} + + ) + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml index f5ed6fd21..0542224fc 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerExhibitionMapper.xml @@ -460,4 +460,16 @@ group by a.partner_line_id + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyExhibitionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyExhibitionDO.java index 8a3181f6e..1fa244e53 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyExhibitionDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyExhibitionDO.java @@ -35,6 +35,9 @@ public class HyExhibitionDO implements Serializable { @ApiModelProperty("举办日期") private Date startDate; + @ApiModelProperty("举办日期str") + private String startDateStr; + @ApiModelProperty("举办地点") private String location; 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 d497f0ef7..e91a5e15d 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 @@ -1,8 +1,10 @@ package com.cool.store.job; +import com.cool.store.service.ExhibitionService; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** @@ -13,11 +15,16 @@ import org.springframework.stereotype.Component; @Component public class ExhibitionJob { - @XxlJob("finishExhibition") + @Autowired + private ExhibitionService exhibitionService; + + @XxlJob("autoCloseExhibition") public void syncUserSourceJob() { XxlJobHelper.log("-------------------------------自动结束会销任务开始-------------------------------"); - - XxlJobHelper.log("-------------------------------自动结束会销任务结束-------------------------------"); + log.info("-------------------------------自动结束会销任务开始-------------------------------"); + int res = exhibitionService.autoCloseExhibition(); + log.info("-------------------------------自动结束会销任务结束,共结束" + res + "个会销-------------------------------"); + XxlJobHelper.log("-------------------------------自动结束会销任务结束,共结束" + res + "个会销-------------------------------"); 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 5b4fff3c0..582a36732 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 @@ -153,4 +153,10 @@ public interface ExhibitionService { * @return */ PartnerExhibitionInfoVO getExhibitionInfo(Integer exhibitionId, Long partnerLineId); + + /** + * 自动结束会销 + */ + int autoCloseExhibition(); + } 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 1a4e92f12..59d9f9f27 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 @@ -688,6 +688,42 @@ public class ExhibitionServiceImpl implements ExhibitionService { return hyExhibitionDAO.getPartnerExhibitionInfo(exhibitionId, partnerLineId); } + @Override + @Transactional + public int autoCloseExhibition() { + //1. 查询需要关闭的会销 + HyExhibitionDO hyExhibitionDO = new HyExhibitionDO(); + hyExhibitionDO.setClosedType(0); + hyExhibitionDO.setStartDateStr(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_DAY)); + hyExhibitionDO.setDeleted(Boolean.FALSE); + List hyExhibitionDOS = hyExhibitionDAO.querySelective(hyExhibitionDO); + if (CollectionUtils.isEmpty(hyExhibitionDOS)) { + return 0; + } + List exhibitionIds = hyExhibitionDOS.stream().map(HyExhibitionDO::getId).collect(Collectors.toList()); + + //2. 批量刷新会销为结束状态 + hyExhibitionDOS.forEach(x->{ + x.setClosedType(1); + x.setCloseTime(new Date()); + }); + int res = hyExhibitionDAO.batchCloseExhibition(exhibitionIds); + + //3. 处理需要关闭的会销组 + hyExhibitionGroupDAO.batchCloseExhibitionGroup(); + + //4. 批量处理报名线索是否会销中状态 + //4.1 查询可能需要修改状态的会销线索 lineId + List lineIds = hyPartnerExhibitionDAO.getCloseExhibitionLineIds(exhibitionIds); + if (CollectionUtils.isEmpty(lineIds)){ + return res; + } + //4.2 处理会销线索是否会销中状态 + whetherInExhibition(lineIds, Boolean.FALSE); + + return res; + } + /** * 计算是否会销中 * @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 14088aa91..ec818fd2b 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 @@ -22,4 +22,10 @@ class ExhibitionServiceTest extends AbstractJUnit4SpringContextTests { log.debug(""); } + @Test + void testAutoCloseExhibition() { + int i = exhibitionService.autoCloseExhibition(); + log.info(i + ""); + } + }