Browse Source

Merge branch 'sign_task_follow' into sign_draw

# Conflicts:
#	netflix-dao/src/main/java/com/cyksj/model/entity/TaskUserCompleteRecord.java
#	netflix-dao/src/main/java/com/cyksj/model/views/TaskView.java
#	netflix-service/src/main/java/com/cyksj/service/market/MarketFrontService.java
#	netflix-service/src/main/java/com/cyksj/service/market/impl/MarketFrontServiceImpl.java
#	netflix-service/src/main/java/com/cyksj/service/market/task/TaskService.java
#	netflix-service/src/main/java/com/cyksj/service/market/task/impl/TaskServiceImpl.java
#	netflix-service/src/main/java/com/cyksj/task/SignStatisticsDataScheduler.java
#	netflix-web/src/main/java/com/cyksj/web/controller/manage/market/TaskController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/market/TaskFrontController.java
zoujiajian 3 năm trước cách đây
mục cha
commit
556bad36aa

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/market/task/TaskFollowPlatVerifyMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.market.task;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.TaskFollowPlatVerify;
+
+/*
+ *项目名: netflix
+ *文件名: TaskFollowPlatVerifyMapper
+ *创建者: JavaZou
+ *创建时间:2023/1/6 14:07
+ */
+public interface TaskFollowPlatVerifyMapper extends BaseMapper<TaskFollowPlatVerify> {
+}

+ 0 - 5
netflix-dao/src/main/java/com/cyksj/model/entity/BaseEntity.java

@@ -1,8 +1,6 @@
 package com.cyksj.model.entity;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.ejlchina.searcher.bean.DbField;
 import lombok.Data;
@@ -19,7 +17,6 @@ import java.util.Date;
 public class BaseEntity {
 
     @TableId(value = "id",type = IdType.AUTO)
-    @DbField("id")
     private Long id;
 
     /**
@@ -27,13 +24,11 @@ public class BaseEntity {
      */
 
     @DbField("created_time")
-    @TableField(fill = FieldFill.INSERT)
     private Date createdTime;
 
     /**
      * 修改时间
      */
     @DbField("update_time")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
 }

+ 45 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/TaskFollowPlatVerify.java

@@ -0,0 +1,45 @@
+package com.cyksj.model.entity;
+
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: TaskFollowPlatVerify
+ *创建者: JavaZou
+ *创建时间:2023/1/6 14:03
+ */
+@Getter
+@Setter
+@SearchBean(tables = "task_follow_plat_verify")
+public class TaskFollowPlatVerify extends BaseEntity {
+	private Long taskId;
+
+	private Long userId;
+
+	private String platNickname;
+
+	private String img;
+
+	private Status status;
+
+	private String errorReason;
+
+	private Date verifyTime;
+
+	@Getter
+	public enum Status {
+		verifying("审核中"),
+		fail("审核失败"),
+		success("审核成功"),
+		;
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+	}
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/TaskUserCompleteRecord.java

@@ -25,6 +25,8 @@ public class TaskUserCompleteRecord extends BaseEntity {
 		waiting("待完成"),
 		complete("已完成"),
 		received("已领取"),
+		verifying("审核中"),
+		fail("审核失败"),
 		;
 		String desc;
 

+ 44 - 0
netflix-dao/src/main/java/com/cyksj/model/request/TaskFollowReq.java

@@ -0,0 +1,44 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/*
+ *项目名: netflix
+ *文件名: TaskFollowReq
+ *创建者: JavaZou
+ *创建时间:2023/1/6 13:55
+ */
+@Getter
+@Setter
+public class TaskFollowReq {
+	/**
+	 * 提交记录id
+	 */
+	private Long id;
+
+	/**
+	 * 关注任务id
+	 */
+	@NotNull
+	@Min(value = 1)
+	private Long taskId;
+
+	/**
+	 * 所在平台昵称
+	 */
+	@NotEmpty(message = "昵称不能为空")
+	private String platNickname;
+
+	/**
+	 * 关注平台截图
+	 */
+	@NotEmpty(message = "截图不能为空")
+	private String img;
+
+	private Long userId;
+}

+ 54 - 0
netflix-dao/src/main/java/com/cyksj/model/views/TaskFollowVerifyView.java

@@ -0,0 +1,54 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.TaskFollowPlatVerify;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: TaskFollowVerifyView
+ *创建者: JavaZou
+ *创建时间:2023/1/6 14:21
+ */
+@Getter
+@Setter
+@SearchBean(tables = "task_follow_plat_verify tv left join task t on t.id = tv.task_id" +
+		" left join user u on u.id = tv.user_id")
+public class TaskFollowVerifyView {
+	@DbField("tv.id")
+	private Long id;
+
+	@DbField("u.id")
+	private Long userId;
+
+	@DbField("tv.task_id")
+	private Long taskId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("tv.plat_nickname")
+	private String platNickname;
+
+	@DbField("tv.img")
+	private String img;
+
+	@DbField("t.points")
+	private Integer points;
+
+	@DbField("tv.status")
+	private TaskFollowPlatVerify.Status status;
+
+	@DbField("tv.error_reason")
+	private String errorReason;
+
+	@DbField("tv.created_time")
+	private Date createdTime;
+
+	@DbField("tv.verify_time")
+	private Date verifyTime;
+}

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/TaskView.java

@@ -73,4 +73,10 @@ public class TaskView {
 	 */
 	@DbIgnore
 	private Integer sumPoints;
+
+	/**
+	 * 待审核数量
+	 */
+	@DbIgnore
+	private Integer verifyNum;
 }

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/market/MarketFrontService.java

@@ -3,6 +3,7 @@ package com.cyksj.service.market;
 
 import com.cyksj.model.entity.SignUser;
 import com.cyksj.model.request.LuckyDrawReq;
+import com.cyksj.model.request.TaskFollowReq;
 import com.cyksj.model.views.LuckyDrawView;
 import com.cyksj.model.views.TaskFrontView;
 
@@ -23,4 +24,8 @@ public interface MarketFrontService {
 	void updateTaskStatus(TaskFrontView data, Long userId);
 
 	void receivedTaskPoints(Long userId, Long taskId);
+
+	void toCompleteFollowTask(TaskFollowReq taskFollowReq);
+
+	void updateFailFollowTask(TaskFollowReq taskFollowReq);
 }

+ 59 - 0
netflix-service/src/main/java/com/cyksj/service/market/impl/MarketFrontServiceImpl.java

@@ -22,12 +22,14 @@ import com.cyksj.mapper.market.draw.LuckyDrawRecordMapper;
 import com.cyksj.mapper.market.sign.SignConfigMapper;
 import com.cyksj.mapper.market.sign.SignUserMapper;
 import com.cyksj.mapper.market.sign.UserPointsRecordMapper;
+import com.cyksj.mapper.market.task.TaskFollowPlatVerifyMapper;
 import com.cyksj.mapper.market.task.TaskUserCompleteRecordMapper;
 import com.cyksj.mapper.market.task.UserBindPhoneMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.excel.ExcelExchangeCodeData;
 import com.cyksj.model.request.ExchangeCodeReq;
 import com.cyksj.model.request.LuckyDrawReq;
+import com.cyksj.model.request.TaskFollowReq;
 import com.cyksj.model.views.LuckyDrawView;
 import com.cyksj.model.views.TaskFrontView;
 import com.cyksj.redis.RedisService;
@@ -91,6 +93,8 @@ public class MarketFrontServiceImpl implements MarketFrontService {
 
 	private final RedisService redisService;
 
+	private final TaskFollowPlatVerifyMapper taskFollowPlatVerifyMapper;
+
 	@Override
 	public SignUser signByUserId(Long userId) {
 		//第一次签到
@@ -292,6 +296,61 @@ public class MarketFrontServiceImpl implements MarketFrontService {
 		taskUserCompleteRecordMapper.updateById(record);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void toCompleteFollowTask(TaskFollowReq taskFollowReq) {
+		Long taskId = taskFollowReq.getTaskId();
+		Long userId = taskFollowReq.getUserId();
+		TaskFrontView data = beanSearcher.searchFirst(TaskFrontView.class, MapUtils.builder()
+				.field(TaskFrontView::getId, taskId).build());
+		if (!"关注引导".equals(data.getTypeName())) {
+			throw BusinessRuntimeException.getInstance("");
+		}
+		TaskFollowPlatVerify taskFollowPlatVerify = new TaskFollowPlatVerify();
+		taskFollowPlatVerify.setTaskId(taskId);
+		taskFollowPlatVerify.setUserId(userId);
+		taskFollowPlatVerify.setPlatNickname(taskFollowReq.getPlatNickname());
+		taskFollowPlatVerify.setImg(taskFollowReq.getImg());
+		try {
+			taskFollowPlatVerifyMapper.insert(taskFollowPlatVerify);
+			TaskUserCompleteRecord record = new TaskUserCompleteRecord();
+			record.setTaskId(taskId);
+			record.setUserId(userId);
+			record.setPoints(data.getPoints());
+			record.setStatus(TaskUserCompleteRecord.Status.verifying);
+			taskUserCompleteRecordMapper.insert(record);
+		} catch (DuplicateKeyException e) {
+
+		}
+	}
+
+	@Override
+	public void updateFailFollowTask(TaskFollowReq taskFollowReq) {
+		if (taskFollowReq.getId() == null || taskFollowReq.getId() < 1) {
+			throw BusinessRuntimeException.getInstance("");
+		}
+		TaskFollowPlatVerify dbTaskFollowPlatVerify = taskFollowPlatVerifyMapper.selectById(taskFollowReq.getId());
+		if (dbTaskFollowPlatVerify == null) {
+			throw BusinessRuntimeException.getInstance("该提交记录不存在");
+		}
+		if (dbTaskFollowPlatVerify.getStatus() == TaskFollowPlatVerify.Status.success) {
+			throw BusinessRuntimeException.getInstance("您提交的记录已审核成功");
+		}
+		dbTaskFollowPlatVerify.setPlatNickname(taskFollowReq.getPlatNickname());
+		dbTaskFollowPlatVerify.setStatus(TaskFollowPlatVerify.Status.verifying);
+		dbTaskFollowPlatVerify.setImg(taskFollowReq.getImg());
+		taskFollowPlatVerifyMapper.updateById(dbTaskFollowPlatVerify);
+
+		TaskUserCompleteRecord record = taskUserCompleteRecordMapper.selectOne(Wrappers.lambdaQuery(TaskUserCompleteRecord.class)
+				.eq(TaskUserCompleteRecord::getUserId, dbTaskFollowPlatVerify.getUserId())
+				.eq(TaskUserCompleteRecord::getTaskId, dbTaskFollowPlatVerify.getTaskId())
+				.last("limit 1"));
+		if (record != null) {
+			record.setStatus(TaskUserCompleteRecord.Status.verifying);
+			taskUserCompleteRecordMapper.updateById(record);
+		}
+	}
+
 	/**
 	 * 更新签到时间
 	 */

+ 7 - 0
netflix-service/src/main/java/com/cyksj/service/market/task/TaskService.java

@@ -1,8 +1,11 @@
 package com.cyksj.service.market.task;
 
 import com.cyksj.model.entity.Task;
+import com.cyksj.model.entity.TaskFollowPlatVerify;
 import com.cyksj.model.entity.TaskType;
 
+import java.util.List;
+
 /*
  *项目名: netflix
  *文件名: TaskService
@@ -15,4 +18,8 @@ public interface TaskService {
 	void updateTask(Task task);
 
 	void completeTask(TaskType type, Long userId);
+
+	void batchVerifyFollow( List<TaskFollowPlatVerify> taskFollowPlatVerifyList);
+
+	void pointsRecord(Long userId, Integer points, String remark, Boolean isLottery);
 }

+ 80 - 9
netflix-service/src/main/java/com/cyksj/service/market/task/impl/TaskServiceImpl.java

@@ -5,20 +5,21 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.PointsRecordConst;
 import com.cyksj.common.constant.TaskTypeEnum;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.manage.distribute.UserDistributeSharedMapper;
+import com.cyksj.mapper.market.sign.UserPointsRecordMapper;
+import com.cyksj.mapper.market.task.TaskFollowPlatVerifyMapper;
 import com.cyksj.mapper.market.task.TaskMapper;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.mapper.market.task.TaskUserCompleteRecordMapper;
-import com.cyksj.model.entity.Task;
-import com.cyksj.model.entity.TaskType;
-import com.cyksj.model.entity.TaskUserCompleteRecord;
-import com.cyksj.model.entity.UserDistributeShared;
+import com.cyksj.model.entity.*;
 import com.cyksj.service.market.task.TaskService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -33,7 +34,7 @@ import java.util.List;
 @Slf4j
 public class TaskServiceImpl implements TaskService {
 
-	public static List<String> times = List.of("添加企业微信", "绑定手机号");
+	public static List<String> times = List.of("添加企业微信", "绑定手机号", "关注引导");
 
 	private final TaskTypeMapper taskTypeMapper;
 
@@ -43,6 +44,10 @@ public class TaskServiceImpl implements TaskService {
 
 	private final UserDistributeSharedMapper userDistributeSharedMapper;
 
+	private final TaskFollowPlatVerifyMapper taskFollowPlatVerifyMapper;
+
+	private final UserPointsRecordMapper userPointsRecordMapper;
+
 	@Override
 	public void saveTask(Task task) {
 		checkTask(task);
@@ -90,6 +95,70 @@ public class TaskServiceImpl implements TaskService {
 		});
 	}
 
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void batchVerifyFollow(List<TaskFollowPlatVerify> taskFollowPlatVerifyList) {
+		TaskFollowPlatVerify.Status success = TaskFollowPlatVerify.Status.success;
+		TaskFollowPlatVerify.Status fail = TaskFollowPlatVerify.Status.fail;
+		TaskFollowPlatVerify.Status verifying = TaskFollowPlatVerify.Status.verifying;
+		taskFollowPlatVerifyList.forEach(taskVerify -> {
+			if (taskVerify.getId() != null) {
+				TaskFollowPlatVerify dbPlatVerify = taskFollowPlatVerifyMapper.selectById(taskVerify.getId());
+				TaskFollowPlatVerify.Status verifyStatus = taskVerify.getStatus();
+				TaskFollowPlatVerify.Status dbStatus = dbPlatVerify.getStatus();
+				Boolean isFlag = false;
+				if (dbPlatVerify != null && dbStatus != success) {
+					if (dbStatus == fail && verifyStatus == success) {
+						dbPlatVerify.setStatus(success);
+						dbPlatVerify.setErrorReason("");
+						isFlag = true;
+					} else if (dbStatus == verifying) {
+						if (verifyStatus == fail) {
+							dbPlatVerify.setStatus(fail);
+							dbPlatVerify.setErrorReason(taskVerify.getErrorReason());
+							isFlag = true;
+						} else if (verifyStatus == success) {
+							dbPlatVerify.setStatus(success);
+							isFlag = true;
+						}
+					}
+				}
+				if (isFlag) {
+					dbPlatVerify.setVerifyTime(DateTime.now());
+					taskFollowPlatVerifyMapper.updateById(dbPlatVerify);
+					TaskUserCompleteRecord record = taskUserCompleteRecordMapper.selectOne(Wrappers.lambdaQuery(TaskUserCompleteRecord.class)
+							.eq(TaskUserCompleteRecord::getUserId, taskVerify.getUserId())
+							.eq(TaskUserCompleteRecord::getTaskId, taskVerify.getTaskId())
+							.last("limit 1"));
+					if (record == null) {
+						return;
+					}
+					if (verifyStatus == success) {
+						record.setStatus(TaskUserCompleteRecord.Status.received);
+						this.pointsRecord(record.getUserId(), record.getPoints(), PointsRecordConst.TASK, false);
+					} else if (verifyStatus == fail) {
+						record.setStatus(TaskUserCompleteRecord.Status.fail);
+					}
+					taskUserCompleteRecordMapper.updateById(record);
+				}
+			}
+		});
+	}
+
+	@Override
+	public void pointsRecord(Long userId, Integer points, String remark, Boolean isLottery) {
+		UserPointsRecord userPointsRecord = new UserPointsRecord();
+		userPointsRecord.setUserId(userId);
+		userPointsRecord.setPoints(points);
+		userPointsRecord.setRemark(remark);
+		userPointsRecordMapper.insert(userPointsRecord);
+
+		if (!isLottery) {
+			//发放爱心
+			userPointsRecordMapper.updateUserPoints(userId, points);
+		}
+	}
+
 	public void checkTask(Task task) {
 		Long typeId = task.getTypeId();
 		TaskType taskType = taskTypeMapper.selectById(typeId);
@@ -109,9 +178,11 @@ public class TaskServiceImpl implements TaskService {
 		if (task.getId() != null) {
 			wrapper.ne(Task::getId, task.getId());
 		}
-		Task selectOne = taskMapper.selectOne(wrapper);
-		if (selectOne != null) {
-			throw BusinessRuntimeException.getInstance("已新增对应的任务");
+		if (!"关注引导".equals(taskType.getName())) {
+			Task selectOne = taskMapper.selectOne(wrapper);
+			if (selectOne != null) {
+				throw BusinessRuntimeException.getInstance("已新增对应的任务");
+			}
 		}
 	}
 
@@ -130,7 +201,7 @@ public class TaskServiceImpl implements TaskService {
 			wrapper.between(TaskUserCompleteRecord::getCreatedTime, beginTime, endTime);
 			TaskUserCompleteRecord record = taskUserCompleteRecordMapper.selectOne(wrapper);
 			if (record == null) {
-				saveCompleteTask(task.getId(), userId,task.getPoints());
+				saveCompleteTask(task.getId(), userId, task.getPoints());
 			}
 		} else if (TaskTypeEnum.share.getDesc().equals(type.getName())) {
 			//邀请人数是否达标

+ 34 - 0
netflix-service/src/main/java/com/cyksj/task/SignStatisticsDataScheduler.java

@@ -8,14 +8,20 @@ import com.cyksj.common.constant.PointsRecordConst;
 import com.cyksj.mapper.manage.statistics.SignStatisticsDataMapper;
 import com.cyksj.mapper.market.sign.SignUserMapper;
 import com.cyksj.mapper.market.sign.UserPointsRecordMapper;
+import com.cyksj.mapper.market.task.TaskFollowPlatVerifyMapper;
+import com.cyksj.mapper.market.task.TaskUserCompleteRecordMapper;
 import com.cyksj.model.entity.SignStatisticsData;
 import com.cyksj.model.entity.SignUser;
+import com.cyksj.model.entity.TaskFollowPlatVerify;
+import com.cyksj.model.entity.TaskUserCompleteRecord;
+import com.cyksj.service.market.MarketFrontService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.List;
 
 /*
  *项目名: netflix
@@ -33,6 +39,12 @@ public class SignStatisticsDataScheduler {
 
 	private final SignUserMapper signUserMapper;
 
+	private final TaskFollowPlatVerifyMapper taskFollowPlatVerifyMapper;
+
+	private final TaskUserCompleteRecordMapper taskUserCompleteRecordMapper;
+
+	private final MarketFrontService marketFrontService;
+
 	@Scheduled(cron = "0 0 0 * * ?")
 	public void signStatisticsData() {
 		Date thisZeroDate = DateUtil.beginOfDay(DateTime.now());
@@ -92,4 +104,26 @@ public class SignStatisticsDataScheduler {
 		signStatisticsData.setStatisticsDate(yesZeroDate);
 		signStatisticsDataMapper.insert(signStatisticsData);
 	}
+
+	/**
+	 * 关注任务3天未审核 自动审核成功
+	 */
+	@Scheduled(cron = "0 30 0 * * ?")
+	public void autoVerifySuccess() {
+		DateTime now = DateTime.now();
+		DateTime threeBefore = DateUtil.offsetDay(now, -3);
+		List<TaskFollowPlatVerify> taskFollowPlatVerifies = taskFollowPlatVerifyMapper.selectList(Wrappers.lambdaQuery(TaskFollowPlatVerify.class)
+				.le(TaskFollowPlatVerify::getCreatedTime, threeBefore)
+				.eq(TaskFollowPlatVerify::getStatus, TaskFollowPlatVerify.Status.verifying));
+		taskFollowPlatVerifies.forEach(data->{
+			data.setStatus(TaskFollowPlatVerify.Status.success);
+			TaskUserCompleteRecord record = taskUserCompleteRecordMapper.selectOne(Wrappers.lambdaQuery(TaskUserCompleteRecord.class)
+					.eq(TaskUserCompleteRecord::getUserId, data.getUserId())
+					.eq(TaskUserCompleteRecord::getTaskId, data.getTaskId())
+					.last("limit 1"));
+			record.setStatus(TaskUserCompleteRecord.Status.received);
+			taskUserCompleteRecordMapper.updateById(record);
+			marketFrontService.pointsRecord(record.getUserId(), record.getPoints(), PointsRecordConst.TASK, false);
+		});
+	}
 }

+ 27 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/market/TaskController.java

@@ -2,14 +2,18 @@ package com.cyksj.web.controller.manage.market;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.market.task.TaskFollowPlatVerifyMapper;
 import com.cyksj.mapper.market.task.TaskMapper;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.mapper.market.task.TaskUserCompleteRecordMapper;
 import com.cyksj.model.entity.Task;
+import com.cyksj.model.entity.TaskFollowPlatVerify;
 import com.cyksj.model.entity.TaskType;
+import com.cyksj.model.views.TaskFollowVerifyView;
 import com.cyksj.model.views.TaskView;
 import com.cyksj.service.market.task.TaskService;
 import com.ejlchina.searcher.BeanSearcher;
@@ -42,6 +46,8 @@ public class TaskController {
 
 	private final TaskUserCompleteRecordMapper taskUserCompleteRecordMapper;
 
+	private final TaskFollowPlatVerifyMapper taskFollowPlatVerifyMapper;
+
 	/**
 	 * 任务分类列表
 	 */
@@ -103,8 +109,29 @@ public class TaskController {
 			data.setTodayPoints(todayPoints);
 			Integer sumPoints = taskUserCompleteRecordMapper.sumPoints(data.getId());
 			data.setSumPoints(sumPoints);
+			//关注任务待审核数量
+			data.setVerifyNum(taskFollowPlatVerifyMapper.selectCount(Wrappers.lambdaQuery(TaskFollowPlatVerify.class)
+					.eq(TaskFollowPlatVerify::getStatus, TaskFollowPlatVerify.Status.verifying)));
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
+
+	/**
+	 * 关注任务 待审核详情
+	 */
+	@GetMapping("/get/follow/detail")
+	public Result<SearchResult<TaskFollowVerifyView>> getFollowDetail(HttpServletRequest request) {
+		SearchResult<TaskFollowVerifyView> search = beanSearcher.search(TaskFollowVerifyView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+	/**
+	 * 批量审核 关注任务
+	 */
+	@PutMapping("/batch/verify/follow")
+	public Result<String> batchVerifyFollow(@RequestBody List<TaskFollowPlatVerify> taskFollowPlatVerifyList) {
+		taskService.batchVerifyFollow(taskFollowPlatVerifyList);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("审核成功");
+	}
 }
 

+ 37 - 0
netflix-web/src/main/java/com/cyksj/web/controller/market/TaskFrontController.java

@@ -8,9 +8,11 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.mapper.market.task.UserBindPhoneMapper;
+import com.cyksj.model.entity.TaskFollowPlatVerify;
 import com.cyksj.model.entity.TaskType;
 import com.cyksj.model.entity.UserBindPhone;
 import com.cyksj.model.request.LoginPhoneReq;
+import com.cyksj.model.request.TaskFollowReq;
 import com.cyksj.model.views.TaskFrontView;
 import com.cyksj.service.market.MarketFrontService;
 import com.cyksj.service.market.task.TaskService;
@@ -21,6 +23,7 @@ import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.dao.DuplicateKeyException;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -129,4 +132,38 @@ public class TaskFrontController {
 		userBindPhoneMapper.updateById(bindPhone);
 		return GatewayResponse.SUCCESS.newBuilder().toResult("更换手机号成功");
 	}
+
+	/**
+	 * 去完成关注任务
+	 */
+	@PostMapping("/post/follow")
+	@NoSubmit
+	public Result<String> toCompleteFollowTask(@RequestBody @Validated TaskFollowReq taskFollowReq) {
+		Long userId = StpUserUtil.getLoginIdAsLong();
+		taskFollowReq.setUserId(userId);
+		marketFrontService.toCompleteFollowTask(taskFollowReq);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("提交成功");
+	}
+
+	/**
+	 * 关注任务提交详情
+	 */
+	@GetMapping("/get/follow/detail")
+	public Result<TaskFollowPlatVerify> getFollowDetail(HttpServletRequest request) {
+		Long userId = StpUserUtil.getLoginIdAsLong();
+		TaskFollowPlatVerify taskFollowPlatVerify = beanSearcher.searchFirst(TaskFollowPlatVerify.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(TaskFollowPlatVerify::getUserId, userId).build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(taskFollowPlatVerify);
+	}
+
+	/**
+	 * 关注任务审核失败,重新提交
+	 */
+	@PutMapping("/put/follow")
+	public Result<String> updateFailFollowTask(@RequestBody @Validated TaskFollowReq taskFollowReq) {
+		Long userId = StpUserUtil.getLoginIdAsLong();
+		taskFollowReq.setUserId(userId);
+		marketFrontService.updateFailFollowTask(taskFollowReq);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("提交成功");
+	}
 }