package com.izouma.awesomeadmin.web; import com.izouma.awesomeadmin.beans.UserPlayTimes; import com.izouma.awesomeadmin.constant.AppConstant; import com.izouma.awesomeadmin.dto.Page; import com.izouma.awesomeadmin.dto.Result; import com.izouma.awesomeadmin.model.HouseInfo; import com.izouma.awesomeadmin.model.PlayerInfo; import com.izouma.awesomeadmin.model.UserInfo; import com.izouma.awesomeadmin.service.*; import com.izouma.awesomeadmin.util.ExportExcelUtil; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; /** * controller类 */ @Controller @RequestMapping("/playerInfo") public class PlayerInfoController { @Autowired private PlayerInfoService playerInfoService; @Autowired private OSSFileService OSSFileService; @Autowired private VideoRecognitionService videoRecognitionService; @Autowired private HouseInfoService houseInfoService; @Autowired private SystemVariableService systemVariableService; /** *

获取全部记录。

*/ @RequiresAuthentication @RequestMapping(value = "/all", method = RequestMethod.GET) @ResponseBody public Result all(PlayerInfo record) { List pp = playerInfoService.getPlayerInfoList(record); return new Result(true, pp); } /** *

根据Id。

*/ @RequestMapping(value = "/getPlayerInfo", method = RequestMethod.GET) @ResponseBody public Result getPlayerInfo(@RequestParam(required = false, value = "id") String id) { PlayerInfo data = playerInfoService.getPlayerInfoById(id); return new Result(true, data); } /** *

根据条件获取。

*/ @RequestMapping(value = "/getOne", method = RequestMethod.GET) @ResponseBody public Result getOne(PlayerInfo record) { PlayerInfo data = playerInfoService.getPlayerInfo(record); return new Result(true, data); } @RequestMapping(value = "/check", method = RequestMethod.GET) @ResponseBody public Result check(PlayerInfo record) { PlayerInfo data = playerInfoService.getPlayerInfo(record); if (data != null) { return new Result(false, "玩家已存在"); } return new Result(true, "玩家不存在"); } /** *

分页查询。

*/ @RequestMapping(value = "/page", method = RequestMethod.GET) @ResponseBody public Result page(Page page, PlayerInfo record) { Map result = new HashMap<>(); List pp = playerInfoService.getPlayerInfoByPage(page, record); result.put(AppConstant.PAGE, page); result.put("pp", pp); return new Result(true, result); } /** *

分页排名查询。

*/ @RequestMapping(value = "/rankPage", method = RequestMethod.GET) @ResponseBody public Result rankPage(Page page, PlayerInfo record) { Map result = new HashMap<>(); List pp = playerInfoService.getPlayerInfoRankByPage(page, record); result.put(AppConstant.PAGE, page); result.put("pp", pp); return new Result(true, result); } @RequestMapping(value = "/seasonRankPage", method = RequestMethod.GET) @ResponseBody public Result seasonRankPage(Page page, PlayerInfo record) { Map result = new HashMap<>(); List pp = playerInfoService.getPlayerInfoSeasonRankPageByPage(page, record); result.put(AppConstant.PAGE, page); result.put("pp", pp); return new Result(true, result); } @RequestMapping(value = "/userRank", method = RequestMethod.GET) @ResponseBody public Result userRank(PlayerInfo record) { int rank = playerInfoService.userRank(record); return new Result(true, rank); } /** * 查询已完成数量 * * @param record * @return */ @RequestMapping(value = "/endNum", method = RequestMethod.GET) @ResponseBody public Result endNum(PlayerInfo record) { int rank = playerInfoService.endNum(record); return new Result(true, rank); } @RequestMapping(value = "/seasonUserRank", method = RequestMethod.GET) @ResponseBody public Result seasonUserRank(PlayerInfo record) { PlayerInfo playerInfo = playerInfoService.seasonUserRank(record); return new Result(true, playerInfo); } /** *

保存。

*/ @RequestMapping(value = "/save", method = RequestMethod.POST) @ResponseBody public Result save(PlayerInfo record) { boolean num = playerInfoService.createPlayerInfo(record); if (num) { return new Result(true, record.getId()); } return new Result(false, "保存异常"); } /** *

更新信息。

*/ @RequestMapping(value = "/update", method = RequestMethod.POST) @ResponseBody public Result updatePlayerInfo(PlayerInfo record) { boolean num = playerInfoService.updatePlayerInfo(record); if (num) { return new Result(true, "保存成功"); } return new Result(false, "保存异常"); } /** *

删除。

*/ @RequestMapping(value = "/del", method = RequestMethod.POST) @ResponseBody public Result deletePlayerInfo(PlayerInfo record) { boolean num = playerInfoService.deletePlayerInfo(record); if (num) { return new Result(true, "删除成功"); } return new Result(false, "删除异常"); } /** *

领取奖励。

*/ @RequestMapping(value = "/receive", method = RequestMethod.POST) @ResponseBody public Result receiveBonus(PlayerInfo record) { return playerInfoService.receiveBonus(record); } /** * 导出Excel * * @param request * @param response * @param record * @throws Exception */ @RequestMapping(value = "/exportExcel", method = RequestMethod.GET) @ResponseBody public void exportExcel(HttpServletRequest request, HttpServletResponse response, PlayerInfo record) throws Exception { List playerInfos = playerInfoService.getPlayerInfoList(record); String sheetName = "player_info"; String titleName = "参赛人员数据表"; String fileName = "参赛人员表"; int columnNumber = 26; int[] columnWidth = {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}; String[] columnName = {"ID", "删除标识", "更新时间", "更新人", "创建时间", "创建人", "游戏ID", "房间ID", "加入时间", "本金", "奖金", "用户", "备注", "截图", "击败玩家", "游戏排名", "开始时间", "结束时间", "状态", "审核人", "审核时间", "审核类型", "视频地址", "存活时长", "游戏类型", "赛季ID"}; String[][] dataList = new String[playerInfos.size()][26]; for (int i = 0; i < playerInfos.size(); i++) { dataList[i][0] = String.valueOf(playerInfos.get(i).getId()); dataList[i][1] = String.valueOf(playerInfos.get(i).getDelFlag()); dataList[i][2] = String.valueOf(playerInfos.get(i).getUpdateTime()); dataList[i][3] = String.valueOf(playerInfos.get(i).getUpdateUser()); dataList[i][4] = String.valueOf(playerInfos.get(i).getCreateTime()); dataList[i][5] = String.valueOf(playerInfos.get(i).getCreateUser()); dataList[i][6] = String.valueOf(playerInfos.get(i).getGameId()); dataList[i][7] = String.valueOf(playerInfos.get(i).getHouseId()); dataList[i][8] = String.valueOf(playerInfos.get(i).getJoinTime()); dataList[i][9] = String.valueOf(playerInfos.get(i).getPrincipal()); dataList[i][10] = String.valueOf(playerInfos.get(i).getPoints()); dataList[i][11] = String.valueOf(playerInfos.get(i).getUserId()); dataList[i][12] = String.valueOf(playerInfos.get(i).getRemark()); dataList[i][13] = String.valueOf(playerInfos.get(i).getImage()); dataList[i][14] = String.valueOf(playerInfos.get(i).getKillNumber()); dataList[i][15] = String.valueOf(playerInfos.get(i).getRanking()); dataList[i][16] = String.valueOf(playerInfos.get(i).getBeginTime()); dataList[i][17] = String.valueOf(playerInfos.get(i).getEndTime()); dataList[i][18] = String.valueOf(playerInfos.get(i).getStatusFlag()); dataList[i][19] = String.valueOf(playerInfos.get(i).getExamineUser()); dataList[i][20] = String.valueOf(playerInfos.get(i).getExamineTime()); dataList[i][21] = String.valueOf(playerInfos.get(i).getExamineType()); dataList[i][22] = String.valueOf(playerInfos.get(i).getVideo()); dataList[i][23] = String.valueOf(playerInfos.get(i).getLiveTime()); dataList[i][24] = String.valueOf(playerInfos.get(i).getGameType()); dataList[i][25] = String.valueOf(playerInfos.get(i).getSeasonId()); } ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName, columnNumber, columnWidth, columnName, dataList, response); } @RequestMapping(value = "/uploadResult") @ResponseBody public Result uploadResult(HttpServletRequest request, Integer id, String rank, String time) { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); if (multipartResolver.isMultipart(request)) { PlayerInfo playerInfo = new PlayerInfo(); playerInfo.setId(id); MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; MultipartFile videoFile = multiRequest.getFile("video"); MultipartFile screenshotFile = multiRequest.getFile("screenshot"); if (videoFile != null) { try { String fileName = genFileName(videoFile); File saveFile = new File("/var/videos", fileName); videoFile.transferTo(saveFile); Runtime.getRuntime().exec("chmod 777 " + saveFile.getAbsolutePath()); playerInfo.setVideo(saveFile.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); } } if (screenshotFile != null) { try { String fileName = genFileName(screenshotFile); String uploadPath = String.format("%s/%s", "image", fileName); String screenshot = OSSFileService.upload(screenshotFile.getInputStream(), uploadPath); playerInfo.setImage(screenshot); } catch (Exception e) { e.printStackTrace(); } } if (rank != null && time != null && !"null".equals(rank) && !"null".equals(time)) { playerInfo.setRanking(Integer.valueOf(rank)); playerInfo.setLiveTime(time); playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED); } else { playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED_FAIL); } playerInfoService.updatePlayerInfo(playerInfo); return new Result(true, ""); } return new Result(false, "上传失败"); } private String genFileName(MultipartFile file) { Random random = new Random(); StringBuilder randStr = new StringBuilder(); for (int i = 0; i < 8; i++) { randStr.append(Integer.toString(random.nextInt(36), 36)); } String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); return String.format("%s-%s%s", new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss").format(new Date()), randStr, ext); } @RequestMapping(value = "/uploadVideo") @ResponseBody public Result uploadVideo(HttpServletRequest request, Integer id) { if ("false".equals(systemVariableService.get("uploadShort"))) { PlayerInfo record = playerInfoService.getPlayerInfoById(String.valueOf(id)); HouseInfo houseInfo = houseInfoService.getHouseInfoById(String.valueOf(record.getHouseId())); Date date = new Date(System.currentTimeMillis() - 15 * 60 * 1000); if (!houseInfo.getBeginTime().before(date)) { PlayerInfo playerInfo = new PlayerInfo(); playerInfo.setId(id); playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED_FAIL); playerInfo.setDataError(true); playerInfoService.updatePlayerInfo(playerInfo); return new Result(true, ""); } } CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); if (multipartResolver.isMultipart(request)) { PlayerInfo playerInfo = new PlayerInfo(); playerInfo.setId(id); MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; String video; MultipartFile file = multiRequest.getFile("video"); if (file == null) return new Result(false, ""); try { Random random = new Random(); StringBuilder randomCode = new StringBuilder(); for (int i = 0; i < 8; i++) { randomCode.append(Integer.toString(random.nextInt(36), 36)); } String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); video = String.format("/var/videos/%s-%s%s", new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss").format(new Date()), randomCode, ext); file.transferTo(new File(video)); Runtime.getRuntime().exec("chmod 777 " + video); playerInfo.setVideo(video); playerInfoService.updatePlayerInfo(playerInfo); playerInfo = playerInfoService.getPlayerInfoById(String.valueOf(playerInfo.getId())); videoRecognitionService.start(playerInfo); return new Result(true, ""); } catch (IOException e) { e.printStackTrace(); } } return new Result(false, ""); } @RequestMapping(value = "/getTodayPlayTimes") @ResponseBody public Result getTodayPlayTimes() { UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal(); UserPlayTimes userPlayTimes = playerInfoService.getUserPlayTimes(userInfo.getId()); if (userPlayTimes != null) { return new Result(true, userPlayTimes); } return new Result(false, "失败"); } @RequestMapping(value = "/getErrorPlayerInfo") @ResponseBody public Result getErrorPlayerInfo() { UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal(); PlayerInfo playerInfo = playerInfoService.getErrorPlayerInfo(userInfo.getId()); if (playerInfo != null) { return new Result(true, playerInfo); } return new Result(false, "失败"); } }