From f6f82a79e3422f6e668d2d1fa125ebee9aa95a59 Mon Sep 17 00:00:00 2001 From: kanade <3136520963@qq.com> Date: Thu, 9 Jun 2022 15:06:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=92=E8=A1=8C=E6=A6=9C?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ScheduleController.java | 57 ++++++++++- .../controller/wxApp/RankController.java | 7 +- .../mapper/QywxDepartmentUserLinkMapper.java | 4 +- .../com/zh/project0512/mapper/RankMapper.java | 7 ++ .../java/com/zh/project0512/model/Rank.java | 48 +++++++++ .../zh/project0512/model/dto/RankListDTO.java | 1 + .../zh/project0512/model/vo/RankListVo.java | 4 +- .../zh/project0512/service/IRankService.java | 4 +- .../serviceImpl/RankServiceImpl.java | 41 ++++++-- .../zh/project0512/utils/PropertyUtils.java | 97 +++++++++++++++++++ .../mapper/QywxDepartmentUserLinkMapper.xml | 8 +- 11 files changed, 251 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/zh/project0512/mapper/RankMapper.java create mode 100644 src/main/java/com/zh/project0512/model/Rank.java create mode 100644 src/main/java/com/zh/project0512/utils/PropertyUtils.java diff --git a/src/main/java/com/zh/project0512/controller/ScheduleController.java b/src/main/java/com/zh/project0512/controller/ScheduleController.java index bc57aba..32dc197 100644 --- a/src/main/java/com/zh/project0512/controller/ScheduleController.java +++ b/src/main/java/com/zh/project0512/controller/ScheduleController.java @@ -3,22 +3,37 @@ package com.zh.project0512.controller; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.zh.project0512.mapper.QywxDepartmentUserLinkMapper; +import com.zh.project0512.mapper.RankMapper; +import com.zh.project0512.model.Rank; import com.zh.project0512.model.Task; +import com.zh.project0512.model.dto.RankListDTO; +import com.zh.project0512.model.vo.RankListVo; import com.zh.project0512.service.ITaskService; +import com.zh.project0512.utils.PropertyUtils; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.util.List; @Tag(name = "定时任务") @RestController public class ScheduleController { -@Autowired -private ITaskService taskService; + @Autowired + private ITaskService taskService; + @Resource + QywxDepartmentUserLinkMapper qywxDepartmentUserLinkMapper; + @Resource + RankMapper rankMapper; + @Scheduled(cron = "0 0 0 * * ?") public void taskBegin() { UpdateWrapper ew = new UpdateWrapper<>(); @@ -35,4 +50,42 @@ private ITaskService taskService; .set("status",2).set("updateAt",now); taskService.update(ew); } + + @Scheduled(cron = "0 0 0 1 1/1 ?") + public void taskRank() { + //获取员工排名进排名数据库 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.groupBy("u.id"); + queryWrapper.orderByDesc("value"); + List rankList = qywxDepartmentUserLinkMapper.getUserRankList(queryWrapper); + if (rankList != null && rankList.size()>0){ + for (RankListVo rankListVo : rankList) { + //查询是否有上一月记录,如果有就减去上一月传播值,没有则直接添加 + QueryWrapper queryWrapper2 = new QueryWrapper<>(); + queryWrapper2.eq("link_id",rankListVo.getLinkId()); + queryWrapper2.eq("type",2);//2.员工 + queryWrapper2.orderByDesc("date_start"); + queryWrapper2.last("limit 1"); + Rank rank = rankMapper.selectOne(queryWrapper2); + if (rank != null){ + rankListVo.setValue(rankListVo.getValue() - rank.getValue()); + } + Rank rank2 = new Rank(); + PropertyUtils.copyProperties(rankListVo,rank2); + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DAY_OF_MONTH,-1); + cal.set(Calendar.DAY_OF_MONTH,1); + Date timeStart = cal.getTime(); + cal.getActualMaximum(Calendar.DAY_OF_MONTH); + Date timeEnd = cal.getTime(); + rank2.setDateStart(timeStart); + rank2.setDateEnd(timeEnd); + rankMapper.insert(rank2); + } + } + //计算经销商排名进排名数据库 + + + } } diff --git a/src/main/java/com/zh/project0512/controller/wxApp/RankController.java b/src/main/java/com/zh/project0512/controller/wxApp/RankController.java index a83413a..7a4ce35 100644 --- a/src/main/java/com/zh/project0512/controller/wxApp/RankController.java +++ b/src/main/java/com/zh/project0512/controller/wxApp/RankController.java @@ -4,6 +4,7 @@ import com.zh.project0512.model.dto.RankListDTO; import com.zh.project0512.model.vo.RankListVo; import com.zh.project0512.service.IRankService; import com.zh.project0512.utils.result.ResultList; +import com.zh.project0512.utils.result.ResultPageInfo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +20,7 @@ import javax.annotation.Resource; */ @Tag(name = "首页") @RestController -@RequestMapping("/wxApp/ks") +@RequestMapping("/wxApp/rank") public class RankController { @Resource IRankService rankService; @@ -31,8 +32,8 @@ public class RankController { */ @Operation(summary = "排行列表") @PostMapping("/list") - public ResultList rankList(@Validated RankListDTO rankListDTO){ - return ResultList.success(rankService.rankList(rankListDTO),"请求成功"); + public ResultPageInfo rankList(@Validated RankListDTO rankListDTO){ + return ResultPageInfo.success(rankService.rankList(rankListDTO),"请求成功"); } diff --git a/src/main/java/com/zh/project0512/mapper/QywxDepartmentUserLinkMapper.java b/src/main/java/com/zh/project0512/mapper/QywxDepartmentUserLinkMapper.java index 8d9832b..99a7005 100644 --- a/src/main/java/com/zh/project0512/mapper/QywxDepartmentUserLinkMapper.java +++ b/src/main/java/com/zh/project0512/mapper/QywxDepartmentUserLinkMapper.java @@ -2,9 +2,7 @@ package com.zh.project0512.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.zh.project0512.model.QywxDepartmentUserLink; -import com.zh.project0512.model.Reference; import com.zh.project0512.model.dto.RankListDTO; import com.zh.project0512.model.vo.RankListVo; import org.apache.ibatis.annotations.Param; @@ -12,6 +10,6 @@ import org.apache.ibatis.annotations.Param; import java.util.List; public interface QywxDepartmentUserLinkMapper extends BaseMapper { - List rankListPage(IPage page, @Param("ew") Wrapper queryWrapper); + List getUserRankList( @Param("ew") Wrapper queryWrapper); } diff --git a/src/main/java/com/zh/project0512/mapper/RankMapper.java b/src/main/java/com/zh/project0512/mapper/RankMapper.java new file mode 100644 index 0000000..72f8b8a --- /dev/null +++ b/src/main/java/com/zh/project0512/mapper/RankMapper.java @@ -0,0 +1,7 @@ +package com.zh.project0512.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zh.project0512.model.Rank; + +public interface RankMapper extends BaseMapper { +} diff --git a/src/main/java/com/zh/project0512/model/Rank.java b/src/main/java/com/zh/project0512/model/Rank.java new file mode 100644 index 0000000..7ae00ba --- /dev/null +++ b/src/main/java/com/zh/project0512/model/Rank.java @@ -0,0 +1,48 @@ +package com.zh.project0512.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Rank implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Integer id; + /** + * 关联主键id(用户主键id,经销商主键id) + */ + private Integer linkId; + /** + * 类型:1.经销商,2.员工 + */ + private Integer type; + /** + * 标题 + */ + private String title; + /** + * 副标题 + */ + private String subtitle; + /** + * 传播值 + */ + private Integer value; + /** + * 开始时间 + */ + private Date dateStart; + /** + * 结束时间 + */ + private Date dateEnd; +} diff --git a/src/main/java/com/zh/project0512/model/dto/RankListDTO.java b/src/main/java/com/zh/project0512/model/dto/RankListDTO.java index 18e8b3a..3590daf 100644 --- a/src/main/java/com/zh/project0512/model/dto/RankListDTO.java +++ b/src/main/java/com/zh/project0512/model/dto/RankListDTO.java @@ -33,5 +33,6 @@ public class RankListDTO implements Serializable { * 类型:1.经销商,2.员工 */ @Schema(title = "排行榜类型") + @NotNull(message = "排行榜类型不能为空") private int type; } diff --git a/src/main/java/com/zh/project0512/model/vo/RankListVo.java b/src/main/java/com/zh/project0512/model/vo/RankListVo.java index 21d34e7..c901e46 100644 --- a/src/main/java/com/zh/project0512/model/vo/RankListVo.java +++ b/src/main/java/com/zh/project0512/model/vo/RankListVo.java @@ -16,9 +16,9 @@ public class RankListVo implements Serializable { private static final long serialVersionUID = 1L; /** - * 主键id + * 关联主键id(用户主键id,经销商主键id) */ - private Integer id; + private Integer linkId; /** * 标题 */ diff --git a/src/main/java/com/zh/project0512/service/IRankService.java b/src/main/java/com/zh/project0512/service/IRankService.java index 11932f3..392a261 100644 --- a/src/main/java/com/zh/project0512/service/IRankService.java +++ b/src/main/java/com/zh/project0512/service/IRankService.java @@ -2,8 +2,8 @@ package com.zh.project0512.service; import com.zh.project0512.model.dto.RankListDTO; import com.zh.project0512.model.vo.RankListVo; +import com.zh.project0512.utils.page.PageInfo; -import java.util.List; public interface IRankService { /** @@ -11,5 +11,5 @@ public interface IRankService { * @param rankListDTO 排行列表DTO * @return 排行列表 Vo */ - List rankList(RankListDTO rankListDTO); + PageInfo rankList(RankListDTO rankListDTO); } diff --git a/src/main/java/com/zh/project0512/serviceImpl/RankServiceImpl.java b/src/main/java/com/zh/project0512/serviceImpl/RankServiceImpl.java index d4594f5..9322da3 100644 --- a/src/main/java/com/zh/project0512/serviceImpl/RankServiceImpl.java +++ b/src/main/java/com/zh/project0512/serviceImpl/RankServiceImpl.java @@ -1,29 +1,50 @@ package com.zh.project0512.serviceImpl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.zh.project0512.mapper.QywxDepartmentUserLinkMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zh.project0512.mapper.RankMapper; +import com.zh.project0512.model.Rank; import com.zh.project0512.model.dto.RankListDTO; import com.zh.project0512.model.vo.RankListVo; import com.zh.project0512.service.IRankService; -import com.zh.project0512.utils.MybatisPlusUtil; +import com.zh.project0512.utils.PropertyUtils; +import com.zh.project0512.utils.page.PageInfo; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; @Service public class RankServiceImpl implements IRankService { @Resource - QywxDepartmentUserLinkMapper qywxDepartmentUserLinkMapper; + RankMapper rankMapper; @Override - public List rankList(RankListDTO rankListDTO) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.groupBy("u.id"); - queryWrapper.orderByDesc("value"); - List rankListVoList = qywxDepartmentUserLinkMapper.rankListPage(MybatisPlusUtil.SetNumPage(rankListDTO.getPageNum(), rankListDTO.getSize()),queryWrapper); + public PageInfo rankList(RankListDTO rankListDTO) { + ArrayList rankListVoList = new ArrayList<>(); + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DAY_OF_MONTH,-1); + cal.set(Calendar.DAY_OF_MONTH,1); + Date time = cal.getTime(); - - return null; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("type",rankListDTO.getType()); + queryWrapper.eq("date_start",time); + Page page = new Page<>(rankListDTO.getPageNum(), rankListDTO.getSize()); + IPage rankIPage = rankMapper.selectPage(page, queryWrapper); + List records = rankIPage.getRecords(); + if (records != null && records.size()>0){ + for (Rank record : records) { + RankListVo rankListVo = new RankListVo(); + PropertyUtils.copyProperties(record,rankListVo); + rankListVoList.add(rankListVo); + } + } + return new PageInfo<>(rankIPage.getPages(), rankListVoList, rankIPage.getTotal()); } } diff --git a/src/main/java/com/zh/project0512/utils/PropertyUtils.java b/src/main/java/com/zh/project0512/utils/PropertyUtils.java new file mode 100644 index 0000000..79e8857 --- /dev/null +++ b/src/main/java/com/zh/project0512/utils/PropertyUtils.java @@ -0,0 +1,97 @@ +package com.zh.project0512.utils; + + +import com.zh.project0512.utils.result.HttpStatusEnum; + +import java.lang.reflect.Field; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 对象source私有属性复制给destination对象的同名私有属性工具 + * 注意:只支持属性名完全相同的属性复制,支持忽略一些属性,其他需要手动get set + * @author 明明如月 w1251314@sohu.com + */ +public class PropertyUtils { + + /** + * 将source对象的属性填充到destination对象对应属性中 + * @param source 原始对象 + * @param destination 目标对象 + */ + public static void copyProperties(S source, D destination) { + Class clsDestination; + try { + clsDestination = Class.forName(destination.getClass().getName()); + + Class clsSource = Class.forName(source.getClass().getName()); + + Field[] declaredFields = clsDestination.getDeclaredFields(); + + for (Field field : declaredFields){ + field.setAccessible(true); + String fieldName = field.getName(); + try{ + //跳过serialVersionUID + if("serialVersionUID".equals(fieldName)){ + continue; + } + Field sourceField = clsSource.getDeclaredField(fieldName); + sourceField.setAccessible(true); + field.set(destination,sourceField.get(source)); + + }catch (NoSuchFieldException e){ + // continue; + } + } + } catch (Exception e) { + throw new RuntimeException("PropertyUtils 属性转换错误"); +// throw new BizException(HttpStatusEnum.CUSTOM_EXCEPTION,"PropertyUtils 属性转换错误"); + } + + } + + /** + * 将source对象的属性填充到destination对象对应属性中 + * @param source 原始对象 + * @param destination 目标对象 + * @param ignoreProperties 不转换的属性 + */ + public static void copyProperties(S source, D destination,String... ignoreProperties) { + Class clsDestination ; + try { + clsDestination = Class.forName(destination.getClass().getName()); + + Class clsSource = Class.forName(source.getClass().getName()); + + Field[] declaredFields = clsDestination.getDeclaredFields(); + + for (Field field : declaredFields){ + + String fieldName = field.getName(); + + Set collect = Stream.of(ignoreProperties).collect(Collectors.toSet()); + //跳过serialVersionUID + collect.add("serialVersionUID"); + + if(collect.contains(fieldName)){ + continue; + } + try{ + field.setAccessible(true); + Field sourceField = clsSource.getDeclaredField(fieldName); + sourceField.setAccessible(true); + field.set(destination,sourceField.get(source)); + + }catch (NoSuchFieldException e){ + // 没有对应属性跳过; + } + } + } catch (Exception e) { + throw new RuntimeException("PropertyUtils 属性转换错误"); +// throw new BizException(HttpStatusEnum.CUSTOM_EXCEPTION,"PropertyUtils 属性转换错误"); + } + + } +} diff --git a/src/main/resources/mapper/QywxDepartmentUserLinkMapper.xml b/src/main/resources/mapper/QywxDepartmentUserLinkMapper.xml index 4948bcc..e90c514 100644 --- a/src/main/resources/mapper/QywxDepartmentUserLinkMapper.xml +++ b/src/main/resources/mapper/QywxDepartmentUserLinkMapper.xml @@ -1,13 +1,11 @@ - select u.id,u.name as title, - (sum(IFNULL(v.playNum,0))+sum(IFNULL(v.commendNum,0))+sum(IFNULL(v.collectionNum,0))+sum(IFNULL(v.commentNum,0))) as value + (sum(IFNULL(v.playNum,0))+sum(IFNULL(v.commendNum,0))+sum(IFNULL(v.collectionNum,0))+sum(IFNULL(v.commentNum,0))) as value from user as u LEFT JOIN video as v ON u.id = v.userId - - ${ew.SqlSegment} - + ${ew.SqlSegment}