This commit is contained in:
zt
2025-03-25 10:26:59 +08:00
parent 8aa9e7b9ad
commit b35695c4ee
7 changed files with 160 additions and 23 deletions

View File

@ -0,0 +1,42 @@
package com.ruoyi.web.controller.bgt;
import com.ruoyi.bgt.domain.vo.BgtQuestionResult;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.wgz.service.IWgzQuestionSaveService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 用户试卷存储Controller
*
* @author ruoyi
* @date 2025-02-17
*/
@Api(value = "包工头岗前培训", tags = {"包工头岗前培训"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/bgt/question/")
public class AppBgtQuestionSaveController extends BaseController {
private final IWgzQuestionSaveService iWgzQuestionSaveService;
/**
* 查询用户试卷存储列表
*/
@ApiOperation("查询用户答题结果")
@GetMapping("/getResult")
public AjaxResult<BgtQuestionResult> getResult(Long userId) {
return AjaxResult.success(iWgzQuestionSaveService.getResult(userId));
}
}

View File

@ -78,7 +78,7 @@ public class UploadZipController {
} }
String username = bgtUser.getUsername(); String username = bgtUser.getUsername();
String firstLevelFolderName ="";
try { try {
// 保存上传的压缩文件 // 保存上传的压缩文件
File zipFile = new File(TEMP_DIR, file.getOriginalFilename()); File zipFile = new File(TEMP_DIR, file.getOriginalFilename());
@ -89,7 +89,7 @@ public class UploadZipController {
// 解压压缩文件 // 解压压缩文件
BgtProjectRecruit recruit = recruitService.queryById(recruitId); BgtProjectRecruit recruit = recruitService.queryById(recruitId);
String firstLevelFolderName = recruit.getId() + "_" + recruit.getRecruitName(); firstLevelFolderName = recruit.getId() + "_" + recruit.getRecruitName();
File extractDir = new File(TEMP_DIR, firstLevelFolderName); File extractDir = new File(TEMP_DIR, firstLevelFolderName);
ensureDirectoryExists(extractDir); ensureDirectoryExists(extractDir);
extractZipFile(zipFile, extractDir); extractZipFile(zipFile, extractDir);
@ -105,6 +105,9 @@ public class UploadZipController {
return AjaxResult.success("文件上传并处理成功"); return AjaxResult.success("文件上传并处理成功");
} catch (IOException e) { } catch (IOException e) {
// 删除临时文件和文件夹
File extractDir = new File(TEMP_DIR, firstLevelFolderName);
deleteFolder(extractDir);
e.printStackTrace(); e.printStackTrace();
return AjaxResult.error("文件处理过程中出现错误"); return AjaxResult.error("文件处理过程中出现错误");
} }

View File

@ -0,0 +1,31 @@
package com.ruoyi.bgt.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("务工者岗前培训结果视图对象")
public class BgtQuestionResult {
@ApiModelProperty("分数")
private Double score;
@ApiModelProperty("答对题数")
private Integer successNum;
@ApiModelProperty("答错题数")
private Integer errorNum;
@ApiModelProperty("耗时")
private Long time;
@ApiModelProperty("头像")
private String avatarName;
}

View File

@ -1,12 +1,13 @@
package com.ruoyi.wgz.service; package com.ruoyi.wgz.service;
import com.ruoyi.bgt.domain.vo.BgtQuestionResult;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppSubmitATestPaperReq; import com.ruoyi.wgz.bo.req.WgzAppSubmitATestPaperReq;
import com.ruoyi.wgz.bo.res.WgzAppSubmitATestPaperRes; import com.ruoyi.wgz.bo.res.WgzAppSubmitATestPaperRes;
import com.ruoyi.wgz.bo.res.WgzAppUserScoreQuery; import com.ruoyi.wgz.bo.res.WgzAppUserScoreQuery;
import com.ruoyi.wgz.domain.WgzQuestionSave; import com.ruoyi.wgz.domain.WgzQuestionSave;
import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -74,4 +75,7 @@ public interface IWgzQuestionSaveService extends IServicePlus<WgzQuestionSave> {
* 查詢指定用戶的试卷是否及格 * 查詢指定用戶的试卷是否及格
*/ */
WgzAppUserScoreQuery userScoreQuery(long userId); WgzAppUserScoreQuery userScoreQuery(long userId);
BgtQuestionResult getResult(Long userId);
} }

View File

@ -1,33 +1,37 @@
package com.ruoyi.wgz.service.impl; package com.ruoyi.wgz.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.PageUtils; import com.ruoyi.bgt.domain.vo.BgtQuestionResult;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.BaseException;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppSubmitATestPaperReq; import com.ruoyi.wgz.bo.req.WgzAppSubmitATestPaperReq;
import com.ruoyi.wgz.bo.res.WgzAppSubmitATestPaperRes; import com.ruoyi.wgz.bo.res.WgzAppSubmitATestPaperRes;
import com.ruoyi.wgz.bo.res.WgzAppUserScoreQuery; import com.ruoyi.wgz.bo.res.WgzAppUserScoreQuery;
import com.ruoyi.wgz.bo.rests.WgzAppSubmitATestPaperTwo; import com.ruoyi.wgz.bo.rests.WgzAppSubmitATestPaperTwo;
import com.ruoyi.wgz.domain.WgzQuestionBank; import com.ruoyi.wgz.domain.WgzQuestionBank;
import com.ruoyi.wgz.domain.WgzQuestionSave;
import com.ruoyi.wgz.domain.WgzQuestionsConfiguration; import com.ruoyi.wgz.domain.WgzQuestionsConfiguration;
import com.ruoyi.wgz.domain.WgzUser;
import com.ruoyi.wgz.mapper.WgzQuestionSaveMapper;
import com.ruoyi.wgz.service.IWgzQuestionBankService; import com.ruoyi.wgz.service.IWgzQuestionBankService;
import com.ruoyi.wgz.service.IWgzQuestionSaveService;
import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService; import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService;
import com.ruoyi.wgz.service.IWgzUserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo;
import com.ruoyi.wgz.domain.WgzQuestionSave;
import com.ruoyi.wgz.mapper.WgzQuestionSaveMapper;
import com.ruoyi.wgz.service.IWgzQuestionSaveService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.text.DecimalFormat; import java.util.ArrayList;
import java.util.*; import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger; import java.util.List;
import java.util.concurrent.atomic.AtomicReference; import java.util.Map;
/** /**
* 用户试卷存储Service业务层处理 * 用户试卷存储Service业务层处理
@ -44,6 +48,9 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl<WgzQuestionSaveM
@Autowired @Autowired
private IWgzQuestionBankService iWgzQuestionBankService; private IWgzQuestionBankService iWgzQuestionBankService;
@Autowired
private IWgzUserService wgzUserService;
@Override @Override
public WgzQuestionSave queryById(Long id){ public WgzQuestionSave queryById(Long id){
return getById(id); return getById(id);
@ -270,4 +277,43 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl<WgzQuestionSaveM
res.setCurrentMinute(sumScore); res.setCurrentMinute(sumScore);
return res; return res;
} }
@Override
public BgtQuestionResult getResult(Long userId) {
BgtQuestionResult bgtQuestionResult = new BgtQuestionResult();
WgzUser byUserId = wgzUserService.findByUserId(userId);
if(byUserId == null){
throw new BaseException("用户不存在");
}
bgtQuestionResult.setAvatarName(byUserId.getAvatarName());
LambdaQueryWrapper<WgzQuestionSave> wra = new LambdaQueryWrapper<WgzQuestionSave>()
.eq(WgzQuestionSave::getUserId, userId);
List<WgzQuestionSave> savaList = baseMapper.selectList(wra);
double score= 0d;
int successNum = 0;
int errorNum= 0;
long time= 0L;
for (WgzQuestionSave wgzQuestionSave : savaList){
score += wgzQuestionSave.getScore();
if(wgzQuestionSave.getCorrect().equals("1")){
successNum++;
}else{
errorNum++;
}
if(wgzQuestionSave.getTakeTime() != null){
time += wgzQuestionSave.getTakeTime();
}
}
bgtQuestionResult.setScore(score);
bgtQuestionResult.setSuccessNum(successNum);
bgtQuestionResult.setErrorNum(errorNum);
bgtQuestionResult.setTime(time);
return bgtQuestionResult;
}
} }

View File

@ -67,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="htmlList" resultType="com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO"> <select id="htmlList" resultType="com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO">
select select
distinct
wu.user_id, wu.user_id,
wu.username wu.username
from bgt_project_recruit_apply bpra from bgt_project_recruit_apply bpra

View File

@ -167,13 +167,21 @@
userIds: [], userIds: [],
loading: false, loading: false,
listStatusText: "请先选择主题", listStatusText: "请先选择主题",
userId: "1893247598219890699", userId: "",
checkAll: false, checkAll: false,
isIndeterminate: false, isIndeterminate: false,
uploadFile: null, uploadFile: null,
}; };
}, },
mounted() { mounted() {
const protocol = window.location.protocol;
const host = window.location.host;
this.baseUrl = `${protocol}//${host}`; // 动态获取基础 URL
// 获取 URL 中的 userId 参数
const urlParams = new URLSearchParams(window.location.search);
this.userId = urlParams.get("userId");
console.log("userId", this.userId);
this.getRecruitList(); this.getRecruitList();
}, },
methods: { methods: {
@ -256,16 +264,20 @@
formData.append("userId", this.userId); formData.append("userId", this.userId);
try { try {
await this.ajaxRequest({ const res = await this.ajaxRequest({
url: "/ruoyi/upload-zip", url: "/ruoyi/upload-zip",
method: "POST", method: "POST",
body: formData, body: formData,
}); });
this.$refs.uploadRef.clearFiles(); this.$refs.uploadRef.clearFiles();
this.uploadFile = null; this.uploadFile = null;
ElementPlus.ElMessage.success("上传成功"); if (res.code == 200) {
ElementPlus.ElMessage.success("上传成功");
} else {
ElementPlus.ElMessage.error(`${res.msg}`);
}
} catch (error) { } catch (error) {
ElementPlus.ElMessage.error("上传失败"); ElementPlus.ElMessage.error(`${error}`);
} }
}, },
@ -310,7 +322,6 @@
config.body = JSON.stringify(options.body); config.body = JSON.stringify(options.body);
} }
} }
const response = await fetch(this.baseUrl + options.url, config); const response = await fetch(this.baseUrl + options.url, config);
if (!response.ok) throw new Error(response.statusText); if (!response.ok) throw new Error(response.statusText);
@ -325,7 +336,6 @@
}, },
}, },
}); });
app.use(ElementPlus); app.use(ElementPlus);
app.mount("#app"); app.mount("#app");
</script> </script>