zhangjinli 3 years ago
parent a070c8d4cd
commit 7e0a37c072

@ -5,12 +5,16 @@ 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.mapper.UserMapper;
import com.zh.project0512.model.Rank;
import com.zh.project0512.model.Task;
import com.zh.project0512.model.UserPointsRecords;
import com.zh.project0512.model.Video;
import com.zh.project0512.model.dto.RankListDTO;
import com.zh.project0512.model.vo.RankListVo;
import com.zh.project0512.service.IRewardRuleService;
import com.zh.project0512.service.ITaskService;
import com.zh.project0512.service.IUserPointsRecordsService;
import com.zh.project0512.service.IVideoService;
import com.zh.project0512.utils.PropertyUtils;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -21,11 +25,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
@Tag(name = "定时任务")
@RestController
@ -38,7 +41,12 @@ public class ScheduleController {
RankMapper rankMapper;
@Autowired
private IVideoService videoService;
@Autowired
private UserMapper userMapper;
@Autowired
private IRewardRuleService rewardRuleService;
@Autowired
private IUserPointsRecordsService userPointsRecordsService;
@Scheduled(cron = "0 0 0 * * ?")
public void taskBegin() {
UpdateWrapper<Task> ew = new UpdateWrapper<>();
@ -64,10 +72,41 @@ public class ScheduleController {
@Scheduled(cron = "0 0 0 * * ?")
@Transactional
public void videoEffect() {
// taskService.getMap()
Integer taskId = 1;
// 任务结束7天时自动结算积分
videoService.videoEffectResult(taskId);
QueryWrapper<Task> qw = new QueryWrapper<>();
LocalDateTime now = LocalDateTime.now();
LocalDateTime weekAgo = now.minusWeeks(1);
String format = weekAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
qw.eq("date_format(end, '%Y-%m-%d')", format);
List<Task> taskList = taskService.list(qw);
// 处理每个任务的传播值
for (Task t : taskList) {
Integer taskId = t.getId();
List<Map> videoEffectResult = videoService.videoEffectResult(taskId);
List<Map> rewardRule = rewardRuleService.listByTemplateId(t.getRewardRuleTemplateId());
List<UserPointsRecords> recordsList = new ArrayList<>();
System.out.println("videoEffectResult" + videoEffectResult);
// 处理任务中每个用户的传播值
for (Map m : videoEffectResult) {
BigDecimal bigDecimal = (BigDecimal) m.get("effectResultSum");
Integer effectResultSum = Integer.parseInt(bigDecimal.toString());
if (effectResultSum != null && effectResultSum != 0) {
int point = 0;
int userId = (Integer) m.get("userId");
// 根据传播值计算规则算出奖励
for (Map r : rewardRule) {
if (effectResultSum > (Integer) r.get("limitNum")) {
point = (Integer) r.get("reward");
}
}
// (视频结算标识)并更新用户积分
userMapper.updPoints(userId, point);
recordsList.add(new UserPointsRecords().setSettlementMethod(1).setPoints(point).setType(1).setCreateDate(now).setUserId(userId));
}
}
// 按任务生成积分流水记录
userPointsRecordsService.saveBatch(recordsList);
}
}
// @Scheduled(cron = "0 0/1 * * * ? ")
// @Scheduled(cron = "0 0 0 1 1/1 ?")

@ -2,31 +2,32 @@ package com.zh.project0512.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.zh.project0512.service.IUserService;
import com.zh.project0512.mapper.QywxDepartmentGroupLinkMapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zh.project0512.mapper.QywxDepartmentUserLinkMapper;
import com.zh.project0512.mapper.RankMapper;
import com.zh.project0512.mapper.UserMapper;
import com.zh.project0512.model.Rank;
import com.zh.project0512.model.Task;
import com.zh.project0512.model.UserPointsRecords;
import com.zh.project0512.model.Video;
import com.zh.project0512.model.dto.RankListDTO;
import com.zh.project0512.model.vo.RankListVo;
import com.zh.project0512.service.IQywxDepartmentGroupLinkService;
import com.zh.project0512.service.IRewardRuleService;
import com.zh.project0512.service.ITaskService;
import com.zh.project0512.service.IUserPointsRecordsService;
import com.zh.project0512.service.IVideoService;
import com.zh.project0512.utils.AliyunOss;
import com.zh.project0512.utils.FileTypeUtil;
import com.zh.project0512.utils.result.HttpStatusEnum;
import com.zh.project0512.utils.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -34,6 +35,7 @@ import ws.schild.jave.MultimediaObject;
import javax.annotation.Resource;
import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
@ -157,10 +159,9 @@ public class UtilsController {
RankMapper rankMapper;
@Autowired
private IVideoService videoService;
@Autowired
private IRewardRuleService rewardRuleService;
@Autowired
private IQywxDepartmentGroupLinkService qywxDepartmentGroupLinkService;
@PostMapping("/test")
@ResponseBody
public Result test() {
@ -180,46 +181,4 @@ public class UtilsController {
return Result.success(rankUserList);
}
@Data
static class Param {
@Schema(title="接受任务部门列表")
private List<Integer> departmentList;
}
@Autowired
private QywxDepartmentGroupLinkMapper qywxDepartmentGroupLinkMapper;
@PostMapping("/test2")
@ResponseBody
public Result test2(@RequestBody Param param) {
List departmentIdList = qywxDepartmentGroupLinkService.departmentIdList(0,param.getDepartmentList());
// QueryWrapper<Task> qw = new QueryWrapper<>();
// LocalDateTime now = LocalDateTime.now().minusWeeks(1);
// String format = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
// qw.eq("date_format(end, '%Y-%m-%d')", format);
// List<Task> taskList = taskService.list(qw);
// // 处理每个任务的传播值
//
// // 生成奖励流水并更新给用户积分
// for (Task t : taskList) {
// Integer taskId = t.getId();
// List<Map> videoEffectResult = videoService.videoEffectResult(taskId);
// List<Map> rewardRule = rewardRuleService.listByTemplateId(t.getRewardRuleTemplateId());
//
// System.out.println("videoEffectResult" + videoEffectResult);
// // 处理任务中每个用户的传播值
// for (Map m : videoEffectResult) {
// if (m.get("effectResultSum") != null && (Integer) m.get("effectResultSum") != 0) {
// int point = 0;
// int effectResultSum = (Integer) m.get("effectResultSum");
// // 根据传播值计算规则算出奖励
// for (Map r : rewardRule) {
// if (effectResultSum > (Integer) r.get("limitNum")) {
// point = (Integer) r.get("reward");
// }
// }
// }
// }
// }
return Result.success();
}
}

@ -1,55 +0,0 @@
package com.zh.project0512.controller.wxApp;
import com.zh.project0512.annotation.TokenValid;
import com.zh.project0512.model.dto.UserPointsRecordListDTO;
import com.zh.project0512.model.vo.UserPointsRecordListVo;
import com.zh.project0512.model.vo.UserPointsVo;
import com.zh.project0512.service.IUserPointsRecordsService;
import com.zh.project0512.utils.JwtUtil;
import com.zh.project0512.utils.result.Result;
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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
*
*/
@Tag(name = "用户积分")
@RestController
@RequestMapping("/wxApp/userPoints")
public class UserPointsController {
@Resource
IUserPointsRecordsService userPointsRecordsService;
/**
*
* @return
*/
@Operation(summary = "用户积分详情")
@PostMapping("/detail")
@TokenValid
public Result<UserPointsVo> pointsDetail(@RequestHeader String token){
String openid = new JwtUtil().parseOpenid(token);
return Result.success(userPointsRecordsService.pointsDetail(openid),"请求成功");
}
/**
*
* @param userPointsRecordListDTO list DTO
* @return list Vo
*/
@Operation(summary = "用户积分记录")
@PostMapping("/list")
@TokenValid
public ResultPageInfo<UserPointsRecordListVo> list(@Validated @RequestBody UserPointsRecordListDTO userPointsRecordListDTO,@RequestHeader String token){
String openid = new JwtUtil().parseOpenid(token);
return ResultPageInfo.success(userPointsRecordsService.list(userPointsRecordListDTO,openid),"请求成功");
}
}

@ -0,0 +1,83 @@
package com.zh.project0512.controller.wxApp;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zh.project0512.annotation.TokenValid;
import com.zh.project0512.model.User;
import com.zh.project0512.model.UserPointsRecords;
import com.zh.project0512.service.IUserPointsRecordsService;
import com.zh.project0512.service.IUserService;
import com.zh.project0512.utils.JwtUtil;
import com.zh.project0512.utils.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
*
*/
@Tag(name = "用户积分")
@RestController
@RequestMapping("/wxApp/userPoints")
public class UserPointsRecordsController {
@Autowired
private IUserPointsRecordsService userPointsRecordsService;
@Autowired
private IUserService userService;
// @Resource
// IUserPointsRecordsService userPointsRecordsService;
//
//
/**
*
*/
@Operation(summary = "用户积分详情")
@PostMapping("/detail")
@TokenValid
public Result pointsDetail(@RequestHeader String token) {
String openid = new JwtUtil().parseOpenid(token);
User user = userService.selByOpenid(openid);
return Result.success(new JSONObject().fluentPut("points", user.getPoints()).fluentPut("historyPoints", user.getHistoryPoints()), "请求成功");
}
@Data
static class UPRParam {
@NotNull(message = "year不能为空")
@Schema(title = "年份")
private Integer year;
@NotNull(message = "month不能为空")
@Schema(title = "月份")
private Integer month;
}
/**
*
*/
@Operation(summary = "用户积分记录")
@PostMapping("/list")
@TokenValid
public Result list(@Validated @RequestBody UPRParam param, @RequestHeader String token) {
String openid = new JwtUtil().parseOpenid(token);
User user = userService.selByOpenid(openid);
QueryWrapper<UserPointsRecords> qw = new QueryWrapper<>();
qw.eq("userId", user.getId());
LocalDate now = LocalDate.of(param.getYear(), param.getMonth(),1);
String format = now.format(DateTimeFormatter.ofPattern("yyyy-MM"));
qw.eq("date_format(createDate, '%Y-%m')", format);
qw.orderByDesc("createDate");
return Result.success(userPointsRecordsService.list(qw), "请求成功");
}
}

@ -7,6 +7,7 @@ import com.zh.project0512.model.Reference;
import com.zh.project0512.model.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.time.LocalDateTime;
import java.util.List;
@ -14,7 +15,7 @@ import java.util.Map;
/**
* <p>
* Mapper
* Mapper
* </p>
*
* @author zh
@ -23,10 +24,13 @@ import java.util.Map;
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user where openid=#{openid} ")
User selByOpenid(@Param("openid") String openid);
@Select("SELECT t1.*,t2.name as departmentName FROM user t1 left join qywxDepartment t2 on t1.main_department = t2.departmentId where openid=#{openid} ")
Map selByOpenid2(@Param("openid") String openid);
@Select("UPDATE user set token=#{token},lastLoginAt=#{time} where openid=#{openid}")
void updByOpenid(String openid, String token, LocalDateTime time);
@Select("SELECT t1.name,t1.tel,t1.avatar,t1.main_department,t1.sub_department,t1.creatAt,t1.updateAt,t1.lastLoginAt" +
",t2.name as main_departmentName,t3.name as sub_departmentName " +
"from user as t1 " +
@ -35,4 +39,7 @@ public interface UserMapper extends BaseMapper<User> {
"${ew.customSqlSegment} " +
"ORDER BY lastLoginAt DESC,updateAt DESC,creatAt DESC")
IPage<Map> pageList(IPage iPage, @Param("ew") Wrapper<User> queryWrapper);
@Update("UPDATE user set points = points + #{record},historyPoints = historyPoints + #{record} WHERE id = #{userId}")
void updPoints(int userId, int record);
}

@ -1,7 +0,0 @@
package com.zh.project0512.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zh.project0512.model.UserPointsRecords;
public interface UserPointsRecordMapper extends BaseMapper<UserPointsRecords> {
}

@ -0,0 +1,16 @@
package com.zh.project0512.mapper;
import com.zh.project0512.model.UserPointsRecords;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper
* </p>
*
* @author zh
* @since 2022-06-29
*/
public interface UserPointsRecordsMapper extends BaseMapper<UserPointsRecords> {
}

@ -54,11 +54,11 @@ public interface VideoMapper extends BaseMapper<Video> {
JSONObject record(String openid);
// 任务下视频影响值统计
@Select("SELECT t2.title as taskTitle,t3.name as userName,SUM(IFNULL(t1.effectResult,0)) as effectResultSum \n" +
@Select("SELECT t1.id,t1.taskId,t2.title as taskTitle,t1.userId,t3.name as userName,SUM(IFNULL(t1.effectResult,0)) as effectResultSum \n" +
"from video as t1\n" +
"INNER JOIN task as t2 on t1.taskId = t2.id\n" +
"INNER JOIN user as t3 on t1.userId = t3.id\n" +
"WHERE taskId = #{taskId}\n" +
"WHERE taskId = #{taskId} and t1.status = 1\n" +
"GROUP BY t1.userId \n" +
"ORDER BY effectResultSum DESC")
List<Map> videoEffectResult(int taskId);

@ -1,50 +1,64 @@
package com.zh.project0512.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
*
* <p>
*
* </p>
*
* @author zh
* @since 2022-06-29
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("userPointsRecords")
public class UserPointsRecords implements Serializable {
public class UserPointsRecords extends Model {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
@TableField("id")
private Integer id;
/**
* id
*/
@TableField("userId")
private Integer userId;
/**
* 1.2.3.线
*/
@TableField("type")
private Integer type;
/**
* 1.2.
*/
@TableField("settlementMethod")
private Integer settlementMethod;
/**
*
*/
@TableField("points")
private Integer points;
/**
*
*/
@TableField("createDate")
private Date createDate;
private LocalDateTime createDate;
}

@ -1,43 +0,0 @@
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;
/**
* list DTO
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema
public class UserPointsRecordListDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(title = "当前页数")
@NotNull(message = "当前页数不能为空")
private int pageNum;
/**
*
*/
@Schema(title = "每页记录数")
@NotNull(message = "每页记录数不能为空")
private int pageSize;
/**
*
*/
@Schema(title = "年")
private Integer years;
/**
*
*/
@Schema(title = "月")
private Integer months;
}

@ -1,45 +0,0 @@
package com.zh.project0512.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* list Vo
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserPointsRecordListVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* Id
*/
@Schema(title = "主键Id")
private Integer id;
/**
* 1.2.3.线
*/
@Schema(title = "类型",description = "1.任务奖励2.素材分享奖励3.线下结算扣除")
private Integer type;
/**
* 1.2.
*/
@Schema(title = "结算方式",description = "1.增加2.扣除")
private Integer settlementMethod;
/**
*
*/
@Schema(title = "积分")
private Integer points;
/**
*
*/
@Schema(title = "创建日期")
private Date createDate;
}

@ -1,24 +1,16 @@
package com.zh.project0512.service;
import com.zh.project0512.model.dto.UserPointsRecordListDTO;
import com.zh.project0512.model.vo.UserPointsRecordListVo;
import com.zh.project0512.model.vo.UserPointsVo;
import com.zh.project0512.utils.page.PageInfo;
import com.zh.project0512.model.UserPointsRecords;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IUserPointsRecordsService {
/**
*
* @param openid
* @return Vo
*/
UserPointsVo pointsDetail(String openid);
/**
*
* @param userPointsRecordListDTO list DTO
* @param openid openid
* @return list Vo
*/
PageInfo<UserPointsRecordListVo> list(UserPointsRecordListDTO userPointsRecordListDTO, String openid);
/**
* <p>
*
* </p>
*
* @author zh
* @since 2022-06-29
*/
public interface IUserPointsRecordsService extends IService<UserPointsRecords> {
}

@ -1,59 +0,0 @@
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.UserMapper;
import com.zh.project0512.mapper.UserPointsRecordMapper;
import com.zh.project0512.model.User;
import com.zh.project0512.model.UserPointsRecords;
import com.zh.project0512.model.dto.UserPointsRecordListDTO;
import com.zh.project0512.model.vo.UserPointsRecordListVo;
import com.zh.project0512.model.vo.UserPointsVo;
import com.zh.project0512.service.IUserPointsRecordsService;
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.List;
@Service
public class UserPointsRecordServiceImpl implements IUserPointsRecordsService {
@Resource
UserPointsRecordMapper userPointsRecordMapper;
@Resource
UserMapper userMapper;
@Override
public UserPointsVo pointsDetail(String openid) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("openid",openid);
User user = userMapper.selectOne(queryWrapper);
UserPointsVo userPointsVo = new UserPointsVo();
userPointsVo.setPoints(user.getPoints());
userPointsVo.setHistoryPoints(user.getHistoryPoints());
return userPointsVo;
}
@Override
public PageInfo<UserPointsRecordListVo> list(UserPointsRecordListDTO userPointsRecordListDTO, String openid) {
ArrayList<UserPointsRecordListVo> userPointsRecordListVos = new ArrayList<>();
QueryWrapper<UserPointsRecords> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(userPointsRecordListDTO.getYears() != null,"YEAR(createDate)",userPointsRecordListDTO.getYears());
queryWrapper.eq(userPointsRecordListDTO.getMonths() != null,"MONTH(createDate)",userPointsRecordListDTO.getMonths());
Page<UserPointsRecords> page = new Page<>(userPointsRecordListDTO.getPageNum(), userPointsRecordListDTO.getPageSize());
IPage<UserPointsRecords> userPointsRecordsIPage = userPointsRecordMapper.selectPage(page, queryWrapper);
List<UserPointsRecords> records = userPointsRecordsIPage.getRecords();
if (records != null && records.size()>0){
for (UserPointsRecords record : records) {
UserPointsRecordListVo userPointsRecordListVo = new UserPointsRecordListVo();
PropertyUtils.copyProperties(record,userPointsRecordListVo);
userPointsRecordListVos.add(userPointsRecordListVo);
}
}
return new PageInfo<>(userPointsRecordsIPage.getPages(), userPointsRecordListVos, userPointsRecordsIPage.getTotal());
}
}

@ -0,0 +1,20 @@
package com.zh.project0512.serviceImpl;
import com.zh.project0512.model.UserPointsRecords;
import com.zh.project0512.mapper.UserPointsRecordsMapper;
import com.zh.project0512.service.IUserPointsRecordsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
*
* </p>
*
* @author zh
* @since 2022-06-29
*/
@Service
public class UserPointsRecordsServiceImpl extends ServiceImpl<UserPointsRecordsMapper, UserPointsRecords> implements IUserPointsRecordsService {
}
Loading…
Cancel
Save