package com.szxgl.pars2021.controller; import com.szxgl.pars2021.entity.UserDO; import com.szxgl.pars2021.entity.WorksDao; import com.szxgl.pars2021.service.UserService; import com.szxgl.pars2021.service.WorksService; import com.szxgl.pars2021.utils.R; import com.szxgl.pars2021.utils.RedisUtil; import com.szxgl.pars2021.utils.UploadFileToOssUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.*; /** * 作品 */ @RestController @RequestMapping("/works") @Slf4j public class WorksController { @Autowired private WorksService worksService; @Value("${spring.profiles.active}") private String activeProfiles; //redis中作品排序的key private static final String RANKING = "RANKING"; @Autowired private UserService userService; @Autowired private RedisUtil redisUtil; //Bucket 域名 @Value("${oss.bucketDomain}") private String bucketDomain; @GetMapping("/index") public String index(){ return "index"; } /** * 添加作品 * @param file * @param request * @return */ @PostMapping("/saveWorks") public R saveWorks(MultipartFile file, HttpServletRequest request){ String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); } UserDO userDO = userService.get(openid); if(!StringUtils.isNoneBlank(userDO.getRealname()) || !StringUtils.isNoneBlank(userDO.getPhone())){ log.error("请先填写真实姓名和手机号!"); return R.error("请先填写真实姓名和手机号!"); } //查询用户是否已拥有作品 WorksDao work = worksService.getWorks(openid); if( work != null ){ log.error("您已经上传过作品,请勿重复上传!"); return R.error("您已经上传过作品,请勿重复上传!"); } try { //上传文件到oss上 R r = UploadFileToOssUtil.uploadFileToOss(file.getInputStream(), Objects.requireNonNull(file.getOriginalFilename())); if("-1".equals(r.get("ret"))){ log.error("文件上传失败!"); return R.error("文件上传失败!"); } //获取oss的文件上传路径 String url = r.get("msg").toString(); //作品信息添加到数据库 WorksDao worksDao = new WorksDao(); worksDao.setUrl(url); worksDao.setOpenid(openid); worksDao.setCreate_time(new Date()); worksService.saveWorks(worksDao); //把openid存入redis (排行榜的value) redisUtil.addZSet(RANKING,openid,0); } catch (IOException e) { e.printStackTrace(); } return R.ok(); } /** * 查询用户是否上传作品 * @param request * @return */ @GetMapping("/getUploadFile") public R getUploadFile(HttpServletRequest request){ String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); } WorksDao works = worksService.getWorks(openid); HashMap map = new HashMap<>(); if(works == null){ log.error("用户未上传作品!"); map.put("result",false); }else { map.put("result",true); } return R.ok(map); } /** * 获取cookie * @param cookies * @param key * @return */ protected String getValue(Cookie[] cookies, String key) { String value = null; if (null != cookies && cookies.length > 0) { for (Cookie c : cookies) { if (key.equals(c.getName())) { value = c.getValue(); break; } } } return value; } }