service
时间:2021-10-07
本文章向大家介绍service,主要包括service使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.ActivityInfoServiceImpl
import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.integrated.ac.entity.ActivityInfo; import com.integrated.ac.mapper.ActivityInfoMapper; import com.integrated.ac.service.ActivityInfoService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.integrated.dt.entity.Question; import com.integrated.dt.service.QuestionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author yan * @since 2021-10-05 */ @Service public class ActivityInfoServiceImpl extends ServiceImpl<ActivityInfoMapper, ActivityInfo> implements ActivityInfoService { @Autowired private QuestionService questionService; @Override public void loadActivityQuestion() { List<ActivityInfo> activityInfoList = this.list(new QueryWrapper<>(new ActivityInfo().setIisEffect(1))); if (CollectionUtil.isNotEmpty(activityInfoList)) { activityInfoList.forEach(activityInfo -> questionService.loadActivityQuestion(activityInfo.getId())); } } }
2.QuestionServiceImpl
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.integrated.dt.entity.Question; import com.integrated.dt.mapper.QuestionMapper; import com.integrated.dt.service.QuestionService; import com.integrated.dt.vo.QuestionVo; import com.integrated.util.CommonUtil; import com.integrated.util.ExecutorManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.locks.ReentrantReadWriteLock; import static java.util.stream.Collectors.groupingBy; /** * <p> * 服务实现类 * </p> * * @author yan * @since 2021-10-02 */ @Service public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> implements QuestionService { private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private Map<Integer, List<QuestionVo>> caches = null; @Autowired private QuestionMapper questionMapper; private List<QuestionVo> getRandomQuestions(Integer key, int num, Integer activityId) { /*List<QuestionVo> questionVoList = caches.get(key);*/ List<QuestionVo> questionVoList = loadActivityQuestion(activityId).get(key); if (CollectionUtils.isEmpty(questionVoList)) { return new ArrayList<>(); } List<QuestionVo> questionVos = CommonUtil.getRandomList(questionVoList, num); return questionVos; } /* @Cacheable(value = "userQuestion" ,key = "#w3Id"*//*,sync = true*//*)*/ public List<QuestionVo> getUserQuestion(Integer activityId) { List<QuestionVo> questionVoList = getRandomQuestions(1, 2, activityId); List<QuestionVo> questionVoList2 = getRandomQuestions(2, 1, activityId); questionVoList.addAll(questionVoList2); return questionVoList; } public void loadDataDictAgain() { loadDataDict(); } /** * 加载问题 */ public @PostConstruct void loadDataDict() { ExecutorManager.getInstance().execute(new Runnable() { @Override public void run() { try { lock.writeLock().lock(); /* lock.writeLock().lock(); caches = new HashMap<Integer, List<QuestionVo>>(); List<QuestionVo> questionVoList = questionMapper.getQuestions(); addCache(questionVoList);//添加到caches*/ } catch (Exception e) { e.printStackTrace(); } finally { lock.writeLock().unlock(); } } }); } private void addCache(List<QuestionVo> page) { if (!CollectionUtils.isEmpty(page)) { caches = page.stream() .collect(groupingBy(QuestionVo::getLevel)); } } @Override @Cacheable(value = "activityQuestion", key = "#activityId") public Map<Integer, List<QuestionVo>> loadActivityQuestion(Integer activityId) { List<QuestionVo> questionVoList = questionMapper.selectActivityQuestion(activityId); if (!CollectionUtils.isEmpty(questionVoList)) { return questionVoList.stream() .collect(groupingBy(QuestionVo::getLevel)); } return new HashMap<>(); } }
3. UserQuestionStaticServiceImpl
import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.integrated.common.ErrorCodeEnum; import com.integrated.common.ResponseVo; import com.integrated.dt.entity.UserQuestionRecord; import com.integrated.dt.entity.UserQuestionStatic; import com.integrated.dt.mapper.UserQuestionRecordMapper; import com.integrated.dt.mapper.UserQuestionStaticMapper; import com.integrated.dt.service.UserQuestionStaticService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.integrated.dt.vo.QuestionVo; import com.integrated.dt.vo.UserQuestionVo; import com.integrated.util.CommonUtil; import com.integrated.util.RedisUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletRequest; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; /** * <p> * 服务实现类 * </p> * * @author yan * @since 2021-10-02 */ @Service public class UserQuestionStaticServiceImpl extends ServiceImpl<UserQuestionStaticMapper, UserQuestionStatic> implements UserQuestionStaticService { @Autowired private QuestionServiceImpl questionService; @Autowired private UserQuestionStaticMapper userQuestionStaticMapper; @Autowired private UserQuestionRecordMapper userQuestionRecordMapper; @Autowired private RedisUtil redisUtil; @Override @Transactional public ResponseVo<UserQuestionVo> getQuestion(String w3Id, HttpServletRequest request) { if (redisUtil.hasKey("user_question:"+w3Id)) { UserQuestionVo data = (UserQuestionVo) redisUtil.get("user_question:"+w3Id); //UserQuestionVo userQuestionVo = JSONUtil.toBean(data, UserQuestionVo.class); return ResponseVo.getSuccessResponse(data); } String ip = CommonUtil.getIpAddr(request); UserQuestionStatic userQuestionStaticTemp = userQuestionStaticMapper .selectOne(new QueryWrapper<UserQuestionStatic>().eq("ip", ip)); if (Objects.isNull(userQuestionStaticTemp)) { List<QuestionVo> questionVoList = questionService.getUserQuestion(1); if (!CollectionUtils.isEmpty(questionVoList)) { UserQuestionStatic userQuestionStatic = new UserQuestionStatic(); userQuestionStatic.setAcNumber(0); userQuestionStatic.setAqNumber(3); userQuestionStatic.setCreatTime(LocalDateTime.now()); userQuestionStatic.setUserId(1); userQuestionStatic.setIp(ip); userQuestionStatic.setUserOnlyToken(SecureUtil.md5(w3Id+"activityId:"+1)); userQuestionStaticMapper.insert(userQuestionStatic); questionVoList.forEach(questionVo -> { UserQuestionRecord userQuestionRecord = new UserQuestionRecord(); userQuestionRecord.setCreatTime(LocalDateTime.now()) .setIisCorrect("0") .setQuestionId(questionVo.getId()) .setUserQuestionId(userQuestionStatic.getId()); userQuestionRecordMapper.insert(userQuestionRecord); questionVo.setUserQuestionRecordId(userQuestionRecord.getId()); }); UserQuestionVo userQuestionVo = new UserQuestionVo(); userQuestionVo.setQuestionVoList(questionVoList).setUserQuestionStaticId(userQuestionStatic.getId()); redisUtil.set("user_question:" + w3Id, (userQuestionVo)); return ResponseVo.getSuccessResponse(userQuestionVo); } }else { return ResponseVo.getErrorResponse("ip重复"); } return ErrorCodeEnum.ERROR_COMMON_SYSTEM.getResponseVo(); } }
原文地址:https://www.cnblogs.com/mimimikasa/p/15377199.html
- 丰富排版页面——为你的wordpress主题添加短代码形式美化框
- 开放式管理基础结构 OMI
- 人类设计了游戏和AI 2017年AI在游戏中打败了人类
- WordPress 代码实现相关文章(列表模式)功能
- 自动刷新页面
- Python语言被列入全国计算机等级考试科目中
- WordPress纯代码高仿 无觅相关文章 图文模式功能
- 各种序列化库的性能数据
- WordPress内置搜索结果只有一篇文章时自动跳转到该文章
- Flash/Flex学习笔记(23):运动学原理
- WordPress重定向作者归档链接到“关于”页面
- Flash/Flex学习笔记(25):摩擦力与屏幕环绕
- 搞事情!富士通和微软强强联手用AI加速工作方式转变
- MySQL管理工具HeidiSQL
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法