zhangjinli 3 years ago
commit 91b78d0197

@ -5,8 +5,10 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zh.project0512.annotation.tokenValid;
import com.zh.project0512.model.QywxDepartmentUserLink;
import com.zh.project0512.model.User;
import com.zh.project0512.service.IQywxDepartmentService;
import com.zh.project0512.service.IQywxDepartmentUserLinkService;
import com.zh.project0512.service.IUserService;
import com.zh.project0512.utils.HttpUtil;
import com.zh.project0512.utils.JwtUtil;
@ -18,6 +20,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
@ -31,6 +34,8 @@ public class QYWXController {
private IQywxDepartmentService qywxDepartmentService;
@Autowired
private IUserService userService;
@Resource
private IQywxDepartmentUserLinkService qywxDepartmentUserLinkService;
@Operation(summary = "刷新企业部门信息")
@PostMapping("/departmentRefresh")
@ -57,16 +62,31 @@ public class QYWXController {
JSONObject res1 = httpUtil.qywxUser(access_token, userid);
Integer main_department = res1.getInteger("main_department");
JSONArray department = res1.getJSONArray("department");
if (null == userid || null == main_department) {
return Result.fail(HttpStatusEnum.CUSTOM_EXCEPTION, "获取企业用户信息失败");
}
//先删除部门-用户关联项
qywxDepartmentUserLinkService.delete(openid);
//再添加部门-用户关联项
if (department != null && department.size() >0){
for (Object departmentId : department) {
QywxDepartmentUserLink qywxDepartmentUserLink = new QywxDepartmentUserLink();
qywxDepartmentUserLink.setOpenid(openid);
qywxDepartmentUserLink.setDepartmentId((Integer) departmentId);
qywxDepartmentUserLinkService.insert(qywxDepartmentUserLink);
}
}
Integer sub_department = main_department;
if (sub_department != null && sub_department != 1 && sub_department != 0) {
sub_department = httpUtil.qywxDepartmentParentid(access_token, main_department, 0);
}
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("openid", openid)
.set("userid", userid).set("main_department", main_department).set("sub_department",sub_department).set("updateAt", LocalDateTime.now());
.set("main_department", main_department).set("sub_department",sub_department).set("updateAt", LocalDateTime.now());
userService.update(null, updateWrapper);
return Result.success(res1);
}

@ -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<Task> ew = new UpdateWrapper<>();
@ -35,4 +50,72 @@ private ITaskService taskService;
.set("status",2).set("updateAt",now);
taskService.update(ew);
}
// @Scheduled(cron = "0 0/1 * * * ? ")
@Scheduled(cron = "0 0 0 1 1/1 ?")
public void taskRank() {
//获取开始时间和结束时间
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH,-1);
cal.set(Calendar.DAY_OF_MONTH,1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Date timeStart = cal.getTime();
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DAY_OF_MONTH));
Date timeEnd = cal.getTime();
//获取员工排名进排名数据库
QueryWrapper<RankListDTO> queryWrapper = new QueryWrapper<>();
queryWrapper.groupBy("u.id");
queryWrapper.orderByDesc("value");
List<RankListVo> rankUserList = qywxDepartmentUserLinkMapper.getUserRankList(queryWrapper);
if (rankUserList != null && rankUserList.size()>0){
for (RankListVo rankListVo : rankUserList) {
//查询是否有上一月记录,如果有就减去上一月传播值,没有则直接添加
QueryWrapper<Rank> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("linkId",rankListVo.getLinkId());
queryWrapper2.eq("type",2);//2.员工
queryWrapper2.orderByDesc("dateStart");
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);
rank2.setType(2);//2.员工
rank2.setDateStart(timeStart);
rank2.setDateEnd(timeEnd);
rank2.setCreateDate(new Date());
rankMapper.insert(rank2);
}
}
//计算经销商排名进排名数据库
QueryWrapper<RankListDTO> queryWrapper3 = new QueryWrapper<>();
queryWrapper3.groupBy("qd.departmentId");
queryWrapper3.orderByDesc("value");
List<RankListVo> rankDepartmentList = qywxDepartmentUserLinkMapper.getDepartmentRankList(queryWrapper3);
if (rankDepartmentList != null && rankDepartmentList.size()>0){
for (RankListVo rankListVo : rankDepartmentList) {
//查询是否有上一月记录,如果有就减去上一月传播值,没有则直接添加
QueryWrapper<Rank> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("linkId",rankListVo.getLinkId());
queryWrapper2.eq("type",1);//1.经销商
queryWrapper2.orderByDesc("dateStart");
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);
rank2.setType(1);//1.经销商
rank2.setDateStart(timeStart);
rank2.setDateEnd(timeEnd);
rank2.setCreateDate(new Date());
rankMapper.insert(rank2);
}
}
}
}

@ -0,0 +1,40 @@
package com.zh.project0512.controller.wxApp;
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;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
*
*/
@Tag(name = "首页")
@RestController
@RequestMapping("/wxApp/rank")
public class RankController {
@Resource
IRankService rankService;
/**
*
* @param rankListDTO DTO
* @return
*/
@Operation(summary = "排行列表")
@PostMapping("/list")
public ResultPageInfo<RankListVo> rankList(@Validated RankListDTO rankListDTO){
return ResultPageInfo.success(rankService.rankList(rankListDTO),"请求成功");
}
}

@ -0,0 +1,18 @@
package com.zh.project0512.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zh.project0512.model.QywxDepartmentUserLink;
import com.zh.project0512.model.dto.RankListDTO;
import com.zh.project0512.model.vo.RankListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface QywxDepartmentUserLinkMapper extends BaseMapper<QywxDepartmentUserLink> {
List<RankListVo> getUserRankList(@Param("ew") Wrapper<RankListDTO> queryWrapper);
List<RankListVo> getDepartmentRankList(@Param("ew") QueryWrapper<RankListDTO> queryWrapper2);
}

@ -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<Rank> {
}

@ -0,0 +1,35 @@
package com.zh.project0512.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class QywxDepartmentUserLink implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
*
*/
private String openid;
/**
* id
*/
@TableField("departmentId")
private Integer departmentId;
}

@ -0,0 +1,60 @@
package com.zh.project0512.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
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
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* idid,id
*/
@TableField("linkId")
private String linkId;
/**
* 1.2.
*/
private Integer type;
/**
*
*/
private String title;
/**
*
*/
private String subtitle;
/**
*
*/
private Integer value;
/**
*
*/
@TableField("dateStart")
private Date dateStart;
/**
*
*/
@TableField("dateEnd")
private Date dateEnd;
/**
*
*/
@TableField("createDate")
private Date createDate;
}

@ -0,0 +1,38 @@
package com.zh.project0512.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* DTO
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RankListDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(title = "当前页数")
@NotNull(message = "当前页数不能为空")
private int pageNum;
/**
*
*/
@Schema(title = "每页记录数")
@NotNull(message = "每页记录数不能为空")
private int size;
/**
* 1.2.
*/
@Schema(title = "排行榜类型")
@NotNull(message = "排行榜类型不能为空")
private int type;
}

@ -0,0 +1,35 @@
package com.zh.project0512.model.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Vo
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RankListVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* idid,id
*/
private String linkId;
/**
*
*/
private String title;
/**
*
*/
private String subtitle;
/**
*
*/
private int value;
}

@ -0,0 +1,10 @@
package com.zh.project0512.service;
import com.zh.project0512.model.QywxDepartmentUserLink;
public interface IQywxDepartmentUserLinkService {
int insert(QywxDepartmentUserLink qywxDepartmentUserLink);
int delete(String openid);
}

@ -0,0 +1,15 @@
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;
public interface IRankService {
/**
*
* @param rankListDTO DTO
* @return Vo
*/
PageInfo<RankListVo> rankList(RankListDTO rankListDTO);
}

@ -0,0 +1,28 @@
package com.zh.project0512.serviceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zh.project0512.mapper.QywxDepartmentUserLinkMapper;
import com.zh.project0512.model.QywxDepartmentUserLink;
import com.zh.project0512.service.IQywxDepartmentUserLinkService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class QywxDepartmentUserLinkServiceImpl implements IQywxDepartmentUserLinkService {
@Resource
QywxDepartmentUserLinkMapper qywxDepartmentUserLinkMapper;
@Override
public int insert(QywxDepartmentUserLink qywxDepartmentUserLink) {
return qywxDepartmentUserLinkMapper.insert(qywxDepartmentUserLink);
}
@Override
public int delete(String openid) {
QueryWrapper<QywxDepartmentUserLink> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("openid",openid);
return qywxDepartmentUserLinkMapper.delete(queryWrapper);
}
}

@ -0,0 +1,53 @@
package com.zh.project0512.serviceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.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
RankMapper rankMapper;
@Override
public PageInfo<RankListVo> rankList(RankListDTO rankListDTO) {
ArrayList<RankListVo> 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);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Date time = cal.getTime();
QueryWrapper<Rank> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type",rankListDTO.getType());
queryWrapper.eq("dateStart",time);
Page<Rank> page = new Page<>(rankListDTO.getPageNum(), rankListDTO.getSize());
IPage<Rank> rankIPage = rankMapper.selectPage(page, queryWrapper);
List<Rank> 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());
}
}

@ -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;
/**
* sourcedestination
* get set
* @author w1251314@sohu.com
*/
public class PropertyUtils {
/**
* sourcedestination
* @param source
* @param destination
*/
public static <S,D> 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 属性转换错误");
}
}
/**
* sourcedestination
* @param source
* @param destination
* @param ignoreProperties
*/
public static <S,D> 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<String> 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 属性转换错误");
}
}
}

@ -0,0 +1,19 @@
<?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.zh.project0512.mapper.QywxDepartmentUserLinkMapper">
<select id="getUserRankList" resultType="com.zh.project0512.model.vo.RankListVo">
select u.openid as linkId,u.name as title,qd.name as subtitle,
(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
LEFT JOIN qywxDepartment as qd on qd.departmentId = u.main_department
${ew.SqlSegment}
</select>
<select id="getDepartmentRankList" resultType="com.zh.project0512.model.vo.RankListVo">
select qd.departmentId as linkId,qd.name as title,sum(r.value) as value
from qywxDepartment as qd
LEFT JOIN qywxDepartmentUserLink as qdul on qd.departmentId = qdul.departmentId
LEFT JOIN rank as r on r.linkId=qdul.openid
${ew.SqlSegment}
</select>
</mapper>
Loading…
Cancel
Save