登录改造

pull/1/head
huan.xu 5 years ago
parent 64b507fb70
commit 7b1a99cbf0
  1. 2
      blockchain-common/blockchain-common-base/src/main/java/com/blockchain/common/base/dto/YyyfUserDto.java
  2. 1
      blockchain-server/blockchain-server-user/src/main/resources/bootstrap.yml
  3. 22
      blockchain-server/blockchain-server-yyyf/pom.xml
  4. 18
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/controller/LoginController.java
  5. 619
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/controller/TeachingGradeController.java
  6. 7
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/ExamDto.java
  7. 26
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/PractiseProDto.java
  8. 26
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/PractiseTaskDto.java
  9. 9
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/PractiseTipDto.java
  10. 10
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/StudentAnswerDto.java
  11. 23
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/StudentScoreDto.java
  12. 3
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/YyyfLoginRequestVo.java
  13. 97
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/entity/AssessUser.java
  14. 46
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/entity/AssessUserProject.java
  15. 69
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/entity/AssessUserTask.java
  16. 16
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/feign/BtcFeign.java
  17. 16
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/feign/EosFeign.java
  18. 16
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/feign/EthFeign.java
  19. 43
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/mapper/AssessUserMapper.java
  20. 15
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/mapper/AssessUserProjectMapper.java
  21. 19
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/mapper/AssessUserTaskMapper.java
  22. 4
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/service/AssessUserProjectService.java
  23. 74
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/service/AssessUserService.java
  24. 18
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/service/AssessUserTaskService.java
  25. 15
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/service/impl/AssessUserProjectServiceImpl.java
  26. 74
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/service/impl/AssessUserServiceImpl.java
  27. 28
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/service/impl/AssessUserTaskServiceImpl.java
  28. 27
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/utils/MSExcelUtil.java
  29. 77
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/utils/ResponseUtils.java
  30. 207
      blockchain-server/blockchain-server-yyyf/src/main/resources/mapper/AssessUserMapper.xml
  31. 82
      blockchain-server/blockchain-server-yyyf/src/main/resources/mapper/AssessUserProject.xml
  32. 130
      blockchain-server/blockchain-server-yyyf/src/main/resources/mapper/AssessUserTask.xml
  33. 4
      pom.xml

@ -15,7 +15,7 @@ import java.io.Serializable;
public class YyyfUserDto implements Serializable { public class YyyfUserDto implements Serializable {
private static final long serialVersionUID = -6752296227958588252L; private static final long serialVersionUID = -6752296227958588252L;
/**传过来的用户id*/ /**传过来的用户id*/
private String id; private Integer id;
/**用户名称*/ /**用户名称*/
private String name; private String name;
/**用户类型:0学生,1老师,2管理员*/ /**用户类型:0学生,1老师,2管理员*/

@ -13,6 +13,7 @@ spring:
cloud: cloud:
#配置中心 #配置中心
config: config:
uri: http://10.10.17.84:8002
discovery: discovery:
service-id: dapp-config-server service-id: dapp-config-server
enabled: true enabled: true

@ -47,6 +47,28 @@
<artifactId>gexin-rp-sdk-http</artifactId> <artifactId>gexin-rp-sdk-http</artifactId>
<version>4.1.0.3</version> <version>4.1.0.3</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.10-FINAL</version>
</dependency>
</dependencies> </dependencies>
<repositories> <repositories>

@ -7,6 +7,7 @@ import com.blockchain.common.base.dto.YyyfUserDto;
import com.blockchain.common.base.util.RSACoderUtils; import com.blockchain.common.base.util.RSACoderUtils;
import com.blockchain.server.yyyf.controller.api.LoginApi; import com.blockchain.server.yyyf.controller.api.LoginApi;
import com.blockchain.server.yyyf.dto.*; import com.blockchain.server.yyyf.dto.*;
import com.blockchain.server.yyyf.service.AssessUserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
@ -17,7 +18,6 @@ import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import sun.misc.BASE64Decoder; import sun.misc.BASE64Decoder;
@ -39,6 +39,8 @@ public class LoginController {
private static final Logger LOG = LoggerFactory.getLogger(LoginController.class); private static final Logger LOG = LoggerFactory.getLogger(LoginController.class);
@Autowired
private AssessUserService assessUserService;
@Autowired @Autowired
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
@ -46,7 +48,7 @@ public class LoginController {
@PostMapping("/login") @PostMapping("/login")
@ApiOperation(value = LoginApi.YyyfLogin.METHOD_NAME, @ApiOperation(value = LoginApi.YyyfLogin.METHOD_NAME,
notes = LoginApi.YyyfLogin.METHOD_NOTE) notes = LoginApi.YyyfLogin.METHOD_NOTE)
public ResultDTO<YyyfLoginDto> loginyyyf(@ApiParam(LoginApi.YyyfLogin.METHOD_API_YYYFLOGINREQUESTVO) @Valid @RequestBody YyyfLoginRequestVo yyyfLoginRequestVo) { public ResultDTO<YyyfLoginDto> loginyyyf(@ApiParam(LoginApi.YyyfLogin.METHOD_API_YYYFLOGINREQUESTVO) @Valid YyyfLoginRequestVo yyyfLoginRequestVo) {
//存到redis中用于以渔有方用户与智信链用户进行绑定 //存到redis中用于以渔有方用户与智信链用户进行绑定
YyyfUserDto yyyfUserDto=new YyyfUserDto(); YyyfUserDto yyyfUserDto=new YyyfUserDto();
@ -63,7 +65,7 @@ public class LoginController {
int reqType = yyyfLoginRequestVo.getReqType().intValue(); int reqType = yyyfLoginRequestVo.getReqType().intValue();
int userType = yyyfLoginRequestVo.getUserType().intValue(); int userType = yyyfLoginRequestVo.getUserType().intValue();
Integer classId =yyyfLoginRequestVo.getClassId(); Integer classId =yyyfLoginRequestVo.getClassId();
String userId = yyyfLoginRequestVo.getUserId(); Integer userId = yyyfLoginRequestVo.getUserId();
Integer schoolId = yyyfLoginRequestVo.getSchoolId(); Integer schoolId = yyyfLoginRequestVo.getSchoolId();
yyyfUserDto.setClassId(classId); yyyfUserDto.setClassId(classId);
@ -81,9 +83,9 @@ public class LoginController {
HashOperations<String, String, ExamDto> examDtoOpsForHash = redisTemplate.opsForHash(); HashOperations<String, String, ExamDto> examDtoOpsForHash = redisTemplate.opsForHash();
//将参加考试的人员缓存 //将参加考试的人员缓存
HashOperations<String, String, List<String>> studentOpsForHash = redisTemplate.opsForHash(); HashOperations<String, String, List<Integer>> studentOpsForHash = redisTemplate.opsForHash();
//参加考试的人员id //参加考试的人员id
List<String> joinStuIds =null; List<Integer> joinStuIds =null;
//考试id和案列id缓存 //考试id和案列id缓存
String caseKey = YyyfConstant.CASE_KEY + userId; String caseKey = YyyfConstant.CASE_KEY + userId;
@ -91,7 +93,7 @@ public class LoginController {
//判断考试缓存中是否存在这张卷子 //判断考试缓存中是否存在这张卷子
if (0 == reqType) { if (0 == reqType) {
//如果他提交了,库里有信息了,不允许他再次进入了。 //如果他提交了,库里有信息了,不允许他再次进入了。
if (/**this.assessUserService.getAssessUserByIssueIdAndUserIdForExam(examId, userId) != null*/1==1) { if (this.assessUserService.selectScore(examId, userId) != null) {
yyyfLoginDto.setStatus(2); yyyfLoginDto.setStatus(2);
yyyfLoginDto.setMsg(YyyfConstant.SUBMITTED); yyyfLoginDto.setMsg(YyyfConstant.SUBMITTED);
return handleAfterLogin(yyyfLoginDto,yyyfUserDto); return handleAfterLogin(yyyfLoginDto,yyyfUserDto);
@ -110,7 +112,7 @@ public class LoginController {
joinStuIds=studentOpsForHash.get(YyyfConstant.JOIN_EXAM_STU_IDS_KEY, examId); joinStuIds=studentOpsForHash.get(YyyfConstant.JOIN_EXAM_STU_IDS_KEY, examId);
if (joinStuIds == null) { if (joinStuIds == null) {
joinStuIds = new ArrayList<String>(); joinStuIds = new ArrayList<Integer>();
} }
//如果等于0 //如果等于0
if (joinStuIds.stream() if (joinStuIds.stream()
@ -209,7 +211,7 @@ public class LoginController {
*/ */
private ResultDTO handleAfterLogin(YyyfLoginDto yyyfLoginDto, YyyfUserDto yyyfUserDto) { private ResultDTO handleAfterLogin(YyyfLoginDto yyyfLoginDto, YyyfUserDto yyyfUserDto) {
int status = yyyfLoginDto.getStatus(); int status = yyyfLoginDto.getStatus();
String token = generateToken(yyyfUserDto.getId(), System.currentTimeMillis(), YyyfConstant.YYYF_ZHIXINLIAN_USER_KEY); String token = generateToken(String.valueOf(yyyfUserDto.getId()), System.currentTimeMillis(), YyyfConstant.YYYF_ZHIXINLIAN_USER_KEY);
yyyfLoginDto.setYyyfUserToken(token); yyyfLoginDto.setYyyfUserToken(token);
if(status==1){ if(status==1){
//到时看要不要设定时长 //到时看要不要设定时长

@ -0,0 +1,619 @@
package com.blockchain.server.yyyf.controller;
import com.alibaba.fastjson.JSONObject;
import com.blockchain.server.yyyf.dto.PractiseProDto;
import com.blockchain.server.yyyf.dto.PractiseTaskDto;
import com.blockchain.server.yyyf.entity.AssessUser;
import com.blockchain.server.yyyf.service.AssessUserService;
import com.blockchain.server.yyyf.service.AssessUserTaskService;
import com.blockchain.server.yyyf.utils.MSExcelUtil;
import com.blockchain.server.yyyf.utils.ResponseUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.misc.BASE64Decoder;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author huan.xu
* @version 1.0
* @className TeachingGradeController
* @description 练习考核成绩Controller
* @date 2019-11-05 16:23
*/
@Controller
@RequestMapping("/teachingGrade")
public class TeachingGradeController {
protected Logger logger = LoggerFactory.getLogger(TeachingGradeController.class);
private static final String SYS_CODE = "102";
@Autowired
private AssessUserService assessUserService;
@Autowired
private AssessUserTaskService assessUserTaskService;
// @Autowired
// private ScoreSynchroService scoreSynchroService;
/**
* http://10.10.17.93:8080/BankTrain/teachingGrade/getGradeData?issueId=7e027a96764b4749b2a2d65cdc4a5c92&totalNum=10&caseId=38
*
* @param [request, response]
* @return void
* @description 教师端获取错误率 issueId考核id即reqId;totalNum:班级总人数;caseId:项目id
* @author huan.xu
* @date 2019-11-08 18:03:39
**/
@RequestMapping(value = "/getGradeData"/*,produces = {"application/text;charset=UTF-8"}*/)
@ResponseBody
@SuppressWarnings("all")
public void getGradeData(HttpServletRequest request, HttpServletResponse response) {
String issueId = request.getParameter("issueId");
String totalNumStr = request.getParameter("totalNum");
String projectId = request.getParameter("caseId");//项目id
Integer totalNum = Integer.valueOf(totalNumStr);
JSONObject json = new JSONObject();
try {/*
//根据考核id 查询所有的有成绩的学生考核概览信息
List<AssessUser> assessUserList = this.assessUserService.selectAssessUserListByIssueId(issueId);
Map<String, Object> wrongStatistics = null;//错误信息
//无人考试 时封装错误率
if (assessUserList == null || (assessUserList != null && assessUserList.size() == 0)) {
//String projectName = JedisUtil.getMapValue(JedisUtil.bulidKey(Const.TIFPRO_KEY), projectId, TifPro.class).getProjectName();
//获取所有交易关联信息
List<TiftrnDto> tiftrnDtoList = JedisUtil.getMapValueForList(JedisUtil.bulidKey(Const.TIFTRN_KEY), projectId, TiftrnDto.class);
wrongStatistics = new HashMap<>();
Map<String, Object> maxErrorRateInfo = new HashMap<>();//最大错误率信息记录
Map<String, Object> minErrorRateInfo = new HashMap<>();//最小错误率信息记录
List<String> taskNames = new ArrayList<>();
List<Double> errorRates = new ArrayList<>();
for (TiftrnDto tifDtotrn : tiftrnDtoList) {
List<TestPointDto> testPoints = tifDtotrn.getTestPoints();
if (testPoints != null && testPoints.size() != 0) {
for (TestPointDto testPointDto : testPoints) {
taskNames.add(testPointDto.getPointName());
errorRates.add(Double.valueOf(100));
if (maxErrorRateInfo.size() == 0) {
maxErrorRateInfo.put("headCount", totalNum);
maxErrorRateInfo.put("taskName", testPointDto.getPointName());
maxErrorRateInfo.put("errorRate", Double.valueOf(100));
maxErrorRateInfo.put("projectName", tifDtotrn.getTrxName());
maxErrorRateInfo.put("errorCount", totalNum);
continue;
}
if (minErrorRateInfo.size() == 0) {
minErrorRateInfo.put("headCount", totalNum);
minErrorRateInfo.put("taskName", testPointDto.getPointName());
minErrorRateInfo.put("errorRate", Double.valueOf(100));
minErrorRateInfo.put("projectName", tifDtotrn.getTrxName());
minErrorRateInfo.put("errorCount", totalNum);
continue;
}
}
} else {
taskNames.add(tifDtotrn.getTrxName());
errorRates.add(Double.valueOf(100));
if (maxErrorRateInfo.size() == 0) {
maxErrorRateInfo.put("headCount", totalNum);
maxErrorRateInfo.put("taskName", tifDtotrn.getTrxName());
maxErrorRateInfo.put("errorRate", Double.valueOf(100));
maxErrorRateInfo.put("projectName", tifDtotrn.getTrxName());
maxErrorRateInfo.put("errorCount", totalNum);
continue;
}
if (minErrorRateInfo.size() == 0) {
minErrorRateInfo.put("headCount", totalNum);
minErrorRateInfo.put("taskName", tifDtotrn.getTrxName());
minErrorRateInfo.put("errorRate", Double.valueOf(100));
minErrorRateInfo.put("projectName", tifDtotrn.getTrxName());
minErrorRateInfo.put("errorCount", totalNum);
continue;
}
}
}
wrongStatistics.put("maxErrorRateInfo", maxErrorRateInfo);
wrongStatistics.put("minErrorRateInfo", minErrorRateInfo);
wrongStatistics.put("taskNames", taskNames);
wrongStatistics.put("errorRates", errorRates);
} else {
wrongStatistics = getWrongStatistics(issueId, totalNum - assessUserList.size());
}
json.put("result", true);
json.put("wrongStatistics", wrongStatistics);*/
} catch (Exception e) {
json.put("result", false);
json.put("msg", "获取成绩报表数据失败");
logger.error("获取成绩报表数据失败: " + e.getMessage(), e);
}
ResponseUtils.renderJson(response, json.toString());
}
/**
* @param [issueId, notExamNum]
* @return java.util.Map<java.lang.String, java.lang.Object>
* @description 封装错误率
* @author huan.xu
* @date 2019-11-08 18:27:22
**/
public Map<String, Object> getWrongStatistics(String issueId, Integer notExamNum) {
Map<String, Object> wrongStatistics = new HashMap<String, Object>();
//根据考核发布id,获取考核点信息
List<Map<String, Object>> taskListDb = assessUserTaskService.selectYHTaskInfoByIssueId(issueId);
List<Map<String, Object>> taskList = new ArrayList<>();
String appTaskIdStrs = ",";
//key 考核点id(无考核点则是交易的id),value为答题情况集合
Map<String, List<Map<String, Object>>> userTasksMap = new HashMap<>();
for (Map map : taskListDb) {
String appTaskId = (String) map.get("appTaskId");
List<Map<String, Object>> mapList = userTasksMap.get(appTaskId);
if (mapList == null) {
mapList = new ArrayList<>();
}
mapList.add(map);
userTasksMap.put(appTaskId, mapList);
String s = appTaskId + ",";
if (!appTaskIdStrs.contains("," + s)) {
taskList.add(map);
appTaskIdStrs += s;
}
}
Map<String, Object> maxErrorRateInfo = null;//最大错误率信息记录
Map<String, Object> minErrorRateInfo = null;//最小错误率信息记录
//记录考核点名称
String[] taskNames = new String[taskList.size()];
//记录错误率
double[] errorRates = new double[taskList.size()];
for (int i = 0; i < taskList.size(); i++) {
Map<String, Object> task = taskList.get(i);
taskNames[i] = task.get("taskName").toString();
/*Map<String,Object> con = new HashMap<String,Object>();
con.put("issueId", issueId);
con.put("classId", classId);
con.put("appTaskId", task.get("appTaskId"));*/
//获取该考核点用户的答题情况
List<Map<String, Object>> userTasks = new ArrayList<Map<String, Object>>();
userTasks = userTasksMap.get(task.get("appTaskId"));
int errorCount = notExamNum;//错误人数
for (Map<String, Object> userTask : userTasks) {
//答题错误记录人数
if (Integer.valueOf(userTask.get("answer").toString()) == 1) {
errorCount++;
}
}
int totalNum = userTasks.size() + notExamNum;
double errorRate = (double) (errorCount) / (double) (totalNum) * 100;//计算错误率
errorRate = Double.valueOf(String.format("%.2f", errorRate));//四舍五入保留两位小数
errorRates[i] = errorRate;
//处理最大和最小错误率信息
if (maxErrorRateInfo == null) {
maxErrorRateInfo = new HashMap<String, Object>();
maxErrorRateInfo.put("projectName", task.get("projectName").toString());
maxErrorRateInfo.put("taskName", task.get("taskName").toString());
maxErrorRateInfo.put("headCount", totalNum);
maxErrorRateInfo.put("errorCount", errorCount);
maxErrorRateInfo.put("errorRate", errorRate);
} else {
//上一次最大错误率
double prevMaxErrorRate = Double.valueOf(maxErrorRateInfo.get("errorRate").toString());
if (errorRate > prevMaxErrorRate) {
//本次错误率大于上次,则记录本次信息
maxErrorRateInfo.put("projectName", task.get("projectName").toString());
maxErrorRateInfo.put("taskName", task.get("taskName").toString());
maxErrorRateInfo.put("headCount", totalNum);
maxErrorRateInfo.put("errorCount", errorCount);
maxErrorRateInfo.put("errorRate", errorRate);
}
}
if (minErrorRateInfo == null) {
minErrorRateInfo = new HashMap<String, Object>();
minErrorRateInfo.put("projectName", task.get("projectName").toString());
minErrorRateInfo.put("taskName", task.get("taskName").toString());
minErrorRateInfo.put("headCount", totalNum);
minErrorRateInfo.put("errorCount", errorCount);
minErrorRateInfo.put("errorRate", errorRate);
} else {
//上一次最小错误率
double prevMinErrorRate = Double.valueOf(minErrorRateInfo.get("errorRate").toString());
if (prevMinErrorRate > errorRate) {
//本次错误率小于上次最小错误率,则记录本次信息
minErrorRateInfo.put("projectName", task.get("projectName").toString());
minErrorRateInfo.put("taskName", task.get("taskName").toString());
minErrorRateInfo.put("headCount", totalNum);
minErrorRateInfo.put("errorCount", errorCount);
minErrorRateInfo.put("errorRate", errorRate);
}
}
}
wrongStatistics.put("maxErrorRateInfo", maxErrorRateInfo);
wrongStatistics.put("minErrorRateInfo", minErrorRateInfo);
wrongStatistics.put("taskNames", taskNames);
wrongStatistics.put("errorRates", errorRates);
return wrongStatistics;
}
/**
* @param [reqType, issueId, userId, stuNo, userName, className, caseId, model]
* @return java.lang.String
* @description 获取考核详情
* @author huan.xu
* @date 2019-11-08 18:27:50
**/
@RequestMapping("/studyGrade/mygrade")
public String selectPractiseProList(String reqType, String issueId, String examName, Integer userId, String stuNo, String userName, String className, String caseId, Model model) {
try {/*
AssessUser assessUser = null;
List<String> assessUserIds = new ArrayList<String>();
model.addAttribute("assessUserIds", assessUserIds);
model.addAttribute("reqType", reqType);
model.addAttribute("caseId", caseId);
if ("1".equals(reqType)) { //考核
assessUser = this.assessUserService.selectScore(SYS_CODE, issueId, userId);
} else {//练习
List<AssessUser> assessUserList = this.assessUserService.selectAssessUserListByIssuerIdAndUserId(issueId, userId);
for (AssessUser assessUserInner : assessUserList) {
if (assessUser == null) {
//取第一个,最新的
assessUser = assessUserInner;
}
assessUserIds.add(assessUserInner.getId());
}
}
if (assessUser != null) { //不为空,说明其做过
cratePractiseProDtosForNotNull(assessUser, model);
} else { //为空,则生成一个,这个可不要,因为考核无答题的话,不会进入详情的页面
List<PractiseProDto> practiseProDtos = new ArrayList<PractiseProDto>();
//交易码
List<TiftrnDto> tiftrnDtoList = JedisUtil.getMapValueForList(JedisUtil.bulidKey(Const.TIFTRN_KEY), caseId, TiftrnDto.class); //获取所有交易关联信息
for (TiftrnDto tiftrnDto : tiftrnDtoList) {
PractiseProDto practiseProDto = new PractiseProDto();
practiseProDto.setId(tiftrnDto.getTrxCode());
practiseProDto.setProjectCaseDesc(String.valueOf(tiftrnDto.getSerNum()));
practiseProDto.setProjectScore(BigDecimal.ZERO);
practiseProDto.setProName(tiftrnDto.getTrxName());
List<TestPointDto> testPoints = tiftrnDto.getTestPoints();
if (testPoints != null && testPoints.size() > 0) {
List<PractiseTaskDto> taskList = new ArrayList<PractiseTaskDto>();
for (TestPointDto testPointDto : testPoints) {
PractiseTaskDto practiseTaskDto = new PractiseTaskDto();
practiseTaskDto.setId(String.valueOf(testPointDto.getPointId()));
practiseTaskDto.setAnswer(1);
practiseTaskDto.setProjectName(tiftrnDto.getTrxName());
practiseTaskDto.setRightAnswer(testPointDto.getTestPointAnswer());
practiseTaskDto.setStuAnswer("-");
practiseTaskDto.setTaskName(testPointDto.getPointName());
practiseTaskDto.setTaskScore(BigDecimal.valueOf(testPointDto.getTestPointScore()));
taskList.add(practiseTaskDto);
}
practiseProDto.setTaskList(taskList);
}
practiseProDtos.add(practiseProDto);
}
model.addAttribute("examDate", "-");
model.addAttribute("useTime", "00:00:00");
model.addAttribute("totalScore", BigDecimal.ZERO);
model.addAttribute("practiseProDtos", practiseProDtos);
}
model.addAttribute("stuNo", stuNo);
model.addAttribute("userName", new String(new BASE64Decoder().decodeBuffer(userName.replaceAll(" ", "+")), "UTF-8"));
model.addAttribute("className", new String(new BASE64Decoder().decodeBuffer(className.replaceAll(" ", "+")), "UTF-8"));
model.addAttribute("examName", new String(new BASE64Decoder().decodeBuffer(examName.replaceAll(" ", "+")), "UTF-8"));
model.addAttribute("caseInfo", JedisUtil.getMapValue(JedisUtil.bulidKey(Const.TIFPRO_KEY), caseId, TifPro.class).getCaseInfo());
*/} catch (Exception e) {
logger.error("获取成绩失败: " + e.getMessage(), e);
}
return "/yyyf/exam_mesaage";
}
/**
* @param [assessUserId, model]
* @return java.lang.String
* @description 练习用于上一次下一次的页面切换
* @author huan.xu
* @date 2019-11-08 18:46:05
**/
@RequestMapping("/studyGrade/examMesaageDetails")
public String examMesaageDetails(String assessUserId, Model model) {
AssessUser assessUser = this.assessUserService.selectAssessUserById(assessUserId.trim());
cratePractiseProDtosForNotNull(assessUser, model);
return "/yyyf/exam_mesaage_details";
}
/**
* @param [assessUser, model]
* @return void
* @description 封装有成绩的答题详情
* @author huan.xu
* @date 2019-11-08 18:38:41
**/
public void cratePractiseProDtosForNotNull(AssessUser assessUser, Model model) {
List<PractiseProDto> practiseProDtos = this.assessUserService.selectPractiseProList(assessUser.getId());
double duration = assessUser.getEndTime().getTime() - assessUser.getStartTime().getTime();
String h = String.format("%02d", (int) Math.floor(duration / 1000 / 60 / 60));
String m = String.format("%02d", (int) Math.floor(duration / 1000 / 60 % 60));
String s = String.format("%02d", (int) Math.floor(duration / 1000 % 60));
model.addAttribute("useTime", h + ":" + m + ":" + s);
model.addAttribute("totalScore", assessUser.getTotalScore());
model.addAttribute("examDate", new SimpleDateFormat("yyyy/MM/dd").format(assessUser.getStartTime()));
model.addAttribute("practiseProDtos", practiseProDtos);
model.addAttribute("assessUserId", assessUser.getId());
}
/**
* @param [issueId, authorization]
* @return java.util.Map<java.lang.String, java.lang.Object>
* @description 重新成绩同步
* @author huan.xu
* @date 2019-11-08 18:39:55
**/
@RequestMapping("/studyGrade/reSynchroze")
@ResponseBody
@SuppressWarnings("all")
public Map<String, Object> reSynchroze(String issueId, String authorization) {
Map<String, Object> result = new HashMap<>();
/* result.put("status", 0);
result.put("msg", "系统错误");
try {
if ("87DIVy348Oxzj3ha".equals(authorization)) {
result = this.scoreSynchroService.synchrozeScoreList(issueId);
} else {
result.put("msg", "验证错误");
}
} catch (Exception e) {
result.put("msg", "同步失败,请进行后台检查");
logger.error(e.getMessage(), e);
}*/
return result;
}
@RequestMapping("/export")
@ResponseBody
public void yhExport(HttpServletRequest request, HttpServletResponse response) {/*
String examName = request.getParameter("examName");
String className = request.getParameter("className");
String stuNo = request.getParameter("stuNo");
String totalScore = request.getParameter("totalScore");
String useTime = request.getParameter("useTime");
String examDate = request.getParameter("examDate");
String assessUserId = request.getParameter("assessUserId");
String userName = request.getParameter("userName");
String caseInfo = request.getParameter("caseInfo");
String caseId = request.getParameter("caseId");
// TifPro tifPro = JedisUtil.getMapValue(JedisUtil.bulidKey(Const.TIFPRO_KEY), caseId, TifPro.class);
//设置导出文件名称
String fileName = ((new SimpleDateFormat("yyyyMMdd")).format(new Date()))+"-"+userName+ "-考核详情.xls";
response.setContentType("application/x-download");//不同类型的文件对应不同的MIME类型
try {
if (request.getHeader("USER-AGENT").toLowerCase().indexOf("firefox") > 0) {
fileName = new String(fileName.getBytes("GB2312"), "ISO-8859-1");
} else {
fileName = URLEncoder.encode(fileName, "UTF-8");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("成绩详情"); //创建table工作薄
Object[][] datas = {
{"学生姓名:" + userName,
"班级:" + className,
"学号:" + stuNo,
"成绩:" + totalScore+" 分",
"日期:" + examDate, "用时:" + useTime},
{"考核名称:" + examName,"","","","",""},
{"项目名称:" + tifPro.getProjectName(),"","","","",""},
{"项目背景:" + caseInfo,"","","","",""},
{"成绩解析:","","","","",""}};
List<Object[]> cellDate = new ArrayList<Object[]>();
for (Object[] data : datas) {
cellDate.add(data);
}
List<PractiseProDto> practiseProDtos = this.assessUserService.selectPractiseProList(assessUserId);
//合并单元格参数
List<int[]> regionList = new ArrayList<int[]>();
regionList.add(new int[]{1, 1, 0, 5});
regionList.add(new int[]{2, 2, 0, 5});
regionList.add(new int[]{3, 3, 0, 5});
regionList.add(new int[]{4, 4, 0, 5});
int reginonIndex = 4;
HSSFRow row;
HSSFCell cell;
//regionList.add(new int[]{5,5,1,2});
//靠左的行索引
HashSet leftRowIndexSet=new HashSet();
leftRowIndexSet.add(reginonIndex);
for (PractiseProDto practiseProDto : practiseProDtos) {
reginonIndex++;
leftRowIndexSet.add(reginonIndex);
regionList.add(new int[]{reginonIndex, reginonIndex, 0, 5});
Object[] trx = {practiseProDto.getProName()+("(得分:")+(practiseProDto.getProjectScore())+(")").toString()};
cellDate.add(trx);//交易层次
//
Object[] trxTitle = {"序号", "考核点", "正确答案", "学生答案", "考核点分值", "得分"};
cellDate.add(trxTitle);
reginonIndex++;
*//*Object[] assess = {"",taskVo.getTaskName(),"",(taskVo.getAnswer()==0?"对":"错"),""};
cellDate.add(assess);*//*
List<PractiseTaskDto> taskList = practiseProDto.getTaskList();
if (taskList != null && taskList.size() > 0) {
int i = 1;
for (PractiseTaskDto taskDto : taskList) {
String rightAnswer = taskDto.getRightAnswer();
if (rightAnswer == null) {
rightAnswer = "-";
}
String stuAnswer = taskDto.getStuAnswer();
if (stuAnswer == null) {
stuAnswer = "-";
}
BigDecimal studentScore = BigDecimal.ZERO;
if (taskDto.getAnswer().intValue() == 0) {
studentScore = taskDto.getTaskScore();
}
Object[] assess = {i, taskDto.getTaskName(), rightAnswer, stuAnswer, taskDto.getTaskScore(), studentScore};
cellDate.add(assess);
reginonIndex++;
i++;
}
} else {
Object[] assess = {"-", "-", "-", "-", "-", "-"};
cellDate.add(assess);
reginonIndex++;
}
*//*regionList.add(new int[]{maxRow,maxRow,1,2});
maxRow ++;*//*
}
int size = cellDate.size();
for (int i = 0; i < size; i++) {
//居中标识
short alignment=2;
if(leftRowIndexSet.contains(i)){
//居左
alignment=1;
}
row = sheet.createRow(i);//创建表格行
int length = cellDate.get(i).length;
for (int j = 0; j <length ; j++) {
cell = row.createCell(j);//根据表格行创建单元格
String str = String.valueOf(cellDate.get(i)[j]);
if(i==0&&j==3){
setFontColor(wb,cell,str,3,str.length());
}else if(alignment==1 && i > 4 ){
setFontColor(wb,cell,str,str.indexOf(":")+1,str.length()-1);
}else{
cell.setCellValue(str);
}
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setAlignment(alignment);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
if(i==3)
cellStyle.setWrapText(true);
cell.setCellStyle(cellStyle);
}
row = sheet.getRow(i);
if (i ==3)
row.setHeightInPoints(320);
else
row.setHeightInPoints(30);
}
int cellDate1Len = cellDate.get(0).length;
for (int j = 0; j < cellDate1Len; j++) {
sheet.setColumnWidth(j, MSExcelUtil.pixel2WidthUnits(180));
}
for (int[] regions : regionList) {
//合并单元格
CellRangeAddress region = new CellRangeAddress(regions[0], // first row
regions[1], // last row
regions[2], // first column
regions[3] // last column
);
sheet.addMergedRegion(region);
}
ServletOutputStream sos = null;
try {
sos = response.getOutputStream();
wb.write(sos);
sos.close();
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
if (sos != null) {
try {
sos.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}*/
}
/**
* @description poi实现单元格中部分字体颜色设定
* @author huan.xu
* @date 2019-12-10 16:19:48
* @param [cell, wb, str, startIndex, endIndex]
* @return void
**/
private void setFontColor(HSSFWorkbook wb, HSSFCell cell, String str, int startIndex, int endIndex ){
HSSFFont font=wb.createFont();
font.setColor(HSSFColor.RED.index);
HSSFRichTextString richString = new HSSFRichTextString(str);
richString.applyFont(startIndex, endIndex,font);
cell.setCellValue(richString);
}
}

@ -4,13 +4,6 @@ import lombok.Data;
import java.util.Date; import java.util.Date;
/**
* @author huan.xu
* @version 1.0
* @className ExamDto
* @description 考试的dto
* @date 2019-08-19 10:50
*/
@Data @Data
public class ExamDto { public class ExamDto {
/**考试id,即reqId*/ /**考试id,即reqId*/

@ -0,0 +1,26 @@
package com.blockchain.server.yyyf.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PractiseProDto implements Serializable {
private static final long serialVersionUID = -6726051902592416723L;
//id
private String id;
//项目名称
private String proName;
//考核项目得分
private BigDecimal projectScore;
//项目案例内容
private String projectCaseDesc;
//案例集合
private List<PractiseTaskDto> taskList;
}

@ -0,0 +1,26 @@
package com.blockchain.server.yyyf.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class PractiseTaskDto implements Serializable {
private static final long serialVersionUID = 6752155834635874301L;
//id
private String id;
private String projectName;
//考核点名称
private String taskName;
//考核点得分
private BigDecimal taskScore;
//是否正确 0对 1错
private Integer answer;
//考核点正确答案
private String rightAnswer;
//学生答案
private String stuAnswer;
}

@ -6,13 +6,6 @@ import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
/**
* @author huan.xu
* @version 1.0
* @className PractiseTipDto
* @description
* @date 2019-12-18 15:50
*/
@ApiModel("练习重新开始参数封装") @ApiModel("练习重新开始参数封装")
@Data @Data
public class PractiseTipDto { public class PractiseTipDto {
@ -24,6 +17,6 @@ public class PractiseTipDto {
private String examPaperId; private String examPaperId;
@ApiModelProperty("以渔有方用户id") @ApiModelProperty("以渔有方用户id")
private String yyyfUserId; private Integer yyyfUserId;
} }

@ -1,23 +1,17 @@
package com.blockchain.server.yyyf.dto; package com.blockchain.server.yyyf.dto;
import io.swagger.models.auth.In;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Map; import java.util.Map;
/**
* @author huan.xu
* @version 1.0
* @className StudentAnswerDto
* @description 学生答题Dto
* @date 2019-08-20 9:04
*/
@Data @Data
public class StudentAnswerDto extends ExamDto { public class StudentAnswerDto extends ExamDto {
/** /**
* 用户id * 用户id
*/ */
private String userId; private Integer userId;
/** /**
* 用户姓名 * 用户姓名
*/ */

@ -0,0 +1,23 @@
package com.blockchain.server.yyyf.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class StudentScoreDto implements Serializable {
private static final long serialVersionUID = 1L;
private String authorization = "87DIVy348Oxzj3ha";
private String sysType = "102";//
private String userId;
private Float totalScore;//分数
private Date startTime;//开始时间
private Date endTime;//结束时间
private String achievementType;//0 练习 1考核
private String assessmentId;//考核id
private String classId;//班级ID
private String courseId;//课程ID
private String caseId;
}

@ -3,6 +3,7 @@ package com.blockchain.server.yyyf.dto;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -16,7 +17,7 @@ public class YyyfLoginRequestVo implements Serializable {
private static final long serialVersionUID = 6595694408632033196L; private static final long serialVersionUID = 6595694408632033196L;
@NotNull @NotNull
@ApiModelProperty("登录用户的id") @ApiModelProperty("登录用户的id")
private String userId; private Integer userId;
@NotNull @NotNull
@ApiModelProperty("登录用户的姓名") @ApiModelProperty("登录用户的姓名")
private String userName; private String userName;

@ -0,0 +1,97 @@
package com.blockchain.server.yyyf.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Table(name = "yyyf_server_assess_user")
@Data
public class AssessUser implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id")
private String id;
/**
* 子系统id
*/
@Column(name = "train_id")
private String trainId;
/**
* 已发布id
*/
@Column(name = "issue_id")
private String issueId;
/**
* 子系统练习id练习才会用到
*/
@Column(name = "ss_practise_id")
private String ssPractiseId;
/**
* 用户id
*/
@Column(name = "user_id")
private Integer userId;
/**
* 得分
*/
@Column(name = "total_score")
private BigDecimal totalScore;
/**
* 时长
*/
@Column(name = "duration")
private Integer duration;
/**
* 时长单位
*/
@Column(name = "duration_unit")
private String durationUnit;
/**
* 开始时间
*/
@Column(name = "start_time")
private Date startTime;
/**
* 结束时间
*/
@Column(name = "end_time")
private Date endTime;
/**
* 案例id
*/
@Column(name = "case_id")
private String caseId;
/**
* 0 练习 1考核
*/
@Column(name = "achieve_ment_type")
private Integer achieveMentType;
/**
* 绑定班级
*/
@Column(name = "class_id")
private String classId;
/**
* 绑定的课程id
*/
@Column(name = "course_id")
private String courseId;
}

@ -0,0 +1,46 @@
package com.blockchain.server.yyyf.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
@Table(name = "yyyf_server_assess_user_project")
@Data
public class AssessUserProject implements Serializable {
private static final long serialVersionUID = 1L;
/**
* uuid
*/
@Id
@Column(name = "id")
private String id;
/**
* 用户考核主表id
*/
@Column(name = "assess_user_id")
private String assessUserId;
/**
* 子系统项目id
*/
@Column(name = "project_id")
private String projectId;
/**
* 子系统项目名称
*/
@Column(name = "project_name")
private String projectName;
/**
* 项目得分
*/
@Column(name = "project_score")
private BigDecimal projectScore;
@Column(name = "project_case_desc")
private BigDecimal projectCaseDesc;
}

@ -0,0 +1,69 @@
package com.blockchain.server.yyyf.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Table(name = "yyyf_server_assess_user_task")
@Data
public class AssessUserTask implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id")
private String id;
/**
* 用户考核项目id
*/
@Column(name = "assessProjectId")
private String assessProjectId;
/**
* 任务id
*/
@Column(name = "taskId")
private String taskId;
/**
* 任务名
*/
@Column(name = "taskName")
private String taskName;
/**
* 答题对错0对 1错
*/
@Column(name = "answer")
private Integer answer;
/**
* 任务得分
*/
@Column(name = "taskScore")
private BigDecimal taskScore;
/**
* 排序字段
*/
@Column(name = "serialNumber")
private int serialNumber;
/**
* 正确答案
*/
@Column(name = "rightAnswer")
private String rightAnswer;
/**
* 学生答案
*/
@Column(name = "stuAnswer")
private String stuAnswer;
}

@ -1,16 +0,0 @@
package com.blockchain.server.yyyf.feign;
import com.blockchain.common.base.dto.ResultDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author huangxl
* @create 2019-02-28 17:40
*/
@FeignClient("dapp-btc-server")
public interface BtcFeign {
@GetMapping("/inner/wallet/createWallet")
ResultDTO createWallet(@RequestParam("userOpenId") String userOpenId);
}

@ -1,16 +0,0 @@
package com.blockchain.server.yyyf.feign;
import com.blockchain.common.base.dto.ResultDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author huangxl
* @create 2019-02-28 17:39
*/
@FeignClient("dapp-eos-server")
public interface EosFeign {
@GetMapping("/inner/walletTx/initEosWallet")
ResultDTO initEosWallet(@RequestParam("userOpenId") String userOpenId);
}

@ -1,16 +0,0 @@
package com.blockchain.server.yyyf.feign;
import com.blockchain.common.base.dto.ResultDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author huangxl
* @create 2019-02-28 17:39
*/
@FeignClient("dapp-eth-server")
public interface EthFeign {
@GetMapping("/inner/wallet/initWallets")
ResultDTO initWallets(@RequestParam("userOpenId") String userOpenId);
}

@ -0,0 +1,43 @@
package com.blockchain.server.yyyf.mapper;
import com.blockchain.server.yyyf.dto.PractiseProDto;
import com.blockchain.server.yyyf.entity.AssessUser;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public interface AssessUserMapper {
void insert(AssessUser assessUser);
void batchInsert(List<AssessUser> assessUserList);
AssessUser selectScore( @Param("assessmentId") String assessmentId, @Param("userId") Integer userId);
Map<String, Object> selectUserGradeCase(Map<String, Object> con);
List<Map<String, Object>> selectUserGradeListByClassIdAndIssueId(Map<String, Object> con);
List<PractiseProDto> selectPractiseProList (@Param("assessUserId") String assessUserId);
List<AssessUser> selectAssessUserListByIssuerIdAndUserId(@Param("issueId") String issueId, @Param("userId") Integer userId);
AssessUser selectAssessUserById(@Param("assessUserId") String assessUserId);
List<AssessUser> selectAssessUserListByIssueId(@Param("issueId") String issueId);
void delAssessUserByIssueId(@Param("issueId") String issueId);
}

@ -0,0 +1,15 @@
package com.blockchain.server.yyyf.mapper;
import com.blockchain.server.yyyf.entity.AssessUserProject;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface AssessUserProjectMapper {
void insert(AssessUserProject assessUserProject);
void batchInsert(List<AssessUserProject> assessUserProjectList);
}

@ -0,0 +1,19 @@
package com.blockchain.server.yyyf.mapper;
import com.blockchain.server.yyyf.entity.AssessUserTask;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public interface AssessUserTaskMapper {
void insert(AssessUserTask assessUserTask);
void batchInsert(List<AssessUserTask> assessUserTaskList);
List<Map<String, Object>> selectYHTaskInfoByIssueId(@Param("issueId") String issueId);
}

@ -0,0 +1,4 @@
package com.blockchain.server.yyyf.service;
public interface AssessUserProjectService{
}

@ -0,0 +1,74 @@
package com.blockchain.server.yyyf.service;
import com.blockchain.server.yyyf.dto.PractiseProDto;
import com.blockchain.server.yyyf.entity.AssessUser;
import java.util.List;
import java.util.Map;
/**
* @param
* @author huan.xu
* @description 学生用户考核信息表 服务接口类
* @date 2019-10-31 14:36:49
* @return
**/
public interface AssessUserService {
/**
* @description 根据 学生成绩id查询答题详情
* @author huan.xu
* @date 2019-11-08 18:39:11
* @param [assessUserId]
* @return java.util.List<com.gtafeyyyf.dto.PractiseProDto>
**/
public List<PractiseProDto> selectPractiseProList(String assessUserId);
/**
* @param [sysType, issueId, userId]
* @return com.gtafeyyyf.model.AssessUser
* @description 考核id以及用户id 查询学生答题概览考核
* @author huan.xu
* @date 2019-11-08 18:28:30
**/
AssessUser selectScore( String issueId, Integer userId);
/**
* @description 根据发布id用户id 获取学生该练习的所有答题情况
* @author huan.xu
* @date 2019-11-08 18:31:38
* @param [issueId, userId]
* @return java.util.List<com.gtafeyyyf.model.AssessUser>
**/
List<AssessUser> selectAssessUserListByIssuerIdAndUserId(String issueId, Integer userId);
/**
* @description 根据 assessUser 表的id查询assessUser
* @param [assessUserId]
* @return com.gtafeyyyf.model.AssessUser
**/
AssessUser selectAssessUserById(String assessUserId);
/**
* @param [issueId]
* @return java.util.List<com.gtafeyyyf.model.AssessUser>
* @description 根据考核id 查询所有的有成绩的学生考核概览信息这一块可做优化将其封装成成绩同步的DTO,
* 在TeachingGradeController的406 行就无需遍历封装由于时间原因暂不优化
**/
List<AssessUser> selectAssessUserListByIssueId(String issueId);
/***
* @description 通过考试id删除该考试的所有学生成绩
* @param [examId]
* @return void
**/
void delAssessUserByIssueId(String examId);
}

@ -0,0 +1,18 @@
package com.blockchain.server.yyyf.service;
import java.util.List;
import java.util.Map;
/**
* @version 1.0
* @className AssessUserTaskService
* @description
*/
public interface AssessUserTaskService {
/**
* @description 根据考核发布id获取考核点信息
* @param [issueId]
* @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
**/
List<Map<String, Object>> selectYHTaskInfoByIssueId(String issueId);
}

@ -0,0 +1,15 @@
package com.blockchain.server.yyyf.service.impl;
import com.blockchain.server.yyyf.service.AssessUserProjectService;
import org.springframework.stereotype.Service;
/**
* @author huan.xu
* @version 1.0
* @className AssessUserProjectServiceImpl
* @description
* @date 2019-10-31 17:40
*/
@Service
public class AssessUserProjectServiceImpl implements AssessUserProjectService {
}

@ -0,0 +1,74 @@
package com.blockchain.server.yyyf.service.impl;
import com.blockchain.server.yyyf.dto.PractiseProDto;
import com.blockchain.server.yyyf.entity.AssessUser;
import com.blockchain.server.yyyf.mapper.AssessUserMapper;
import com.blockchain.server.yyyf.mapper.AssessUserProjectMapper;
import com.blockchain.server.yyyf.mapper.AssessUserTaskMapper;
import com.blockchain.server.yyyf.service.AssessUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author huan.xu
* @version 1.0
* @className AssessUserServiceImpl
* @description 学生用户考核信息表 服务实现类
* @date 2019-10-31 14:34
*/
@Service
public class AssessUserServiceImpl implements AssessUserService {
private static Logger LOG = LoggerFactory.getLogger(AssessUserServiceImpl.class);
@Autowired
private AssessUserMapper assessUserMapper;
@Autowired
private AssessUserProjectMapper assessUserProjectMapper;
@Autowired
private AssessUserTaskMapper assessUserTaskMapper;
private static final String durationUnit = "m";//时长单位
@Override
public List<PractiseProDto> selectPractiseProList (String assessUserId){
return this.assessUserMapper.selectPractiseProList(assessUserId);
}
@Override
public AssessUser selectScore(String issueId, Integer userId) {
return this.assessUserMapper.selectScore(issueId,userId);
}
@Override
public List<AssessUser> selectAssessUserListByIssuerIdAndUserId(String issueId, Integer userId) {
return this.assessUserMapper.selectAssessUserListByIssuerIdAndUserId(issueId,userId);
}
@Override
public AssessUser selectAssessUserById(String assessUserId) {
return this.assessUserMapper.selectAssessUserById(assessUserId);
}
@Override
public List<AssessUser> selectAssessUserListByIssueId(String issueId) {
return this.assessUserMapper.selectAssessUserListByIssueId(issueId);
}
@Transactional
@Override
public void delAssessUserByIssueId(String examId) {
this.assessUserMapper.delAssessUserByIssueId(examId);
}
}

@ -0,0 +1,28 @@
package com.blockchain.server.yyyf.service.impl;
import com.blockchain.server.yyyf.mapper.AssessUserTaskMapper;
import com.blockchain.server.yyyf.service.AssessUserTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @author huan.xu
* @version 1.0
* @className AssessUserTaskServiceImpl
* @description
* @date 2019-10-31 17:40
*/
@Service
public class AssessUserTaskServiceImpl implements AssessUserTaskService {
@Autowired
private AssessUserTaskMapper assessUserTaskMapper;
@Override
public List<Map<String, Object>> selectYHTaskInfoByIssueId(String issueId) {
return this.assessUserTaskMapper.selectYHTaskInfoByIssueId(issueId);
}
}

@ -0,0 +1,27 @@
package com.blockchain.server.yyyf.utils;
/**
* @version 1.0
* @className MSExcelUtil
* @description
*/
public class MSExcelUtil {
public static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
public static final int UNIT_OFFSET_LENGTH = 7;
public static final int[] UNIT_OFFSET_MAP = new int[] { 0, 36, 73, 109, 146, 182, 219 };
public static short pixel2WidthUnits(int pxs) {
short widthUnits = (short) (EXCEL_COLUMN_WIDTH_FACTOR * (pxs / UNIT_OFFSET_LENGTH));
widthUnits += UNIT_OFFSET_MAP[(pxs % UNIT_OFFSET_LENGTH)];
return widthUnits;
}
public static int widthUnits2Pixel(int widthUnits) {
int pixels = (widthUnits / EXCEL_COLUMN_WIDTH_FACTOR) * UNIT_OFFSET_LENGTH;
int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
pixels += Math.round(offsetWidthUnits
/ ((float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH));
return pixels;
}
}

@ -0,0 +1,77 @@
package com.blockchain.server.yyyf.utils;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* HttpServletResponse帮助
*
* @author
*
*/
public final class ResponseUtils {
public static final Logger logger = LoggerFactory
.getLogger(ResponseUtils.class);
/**
* 发送文本使用UTF-8编码
*
* @param response
* HttpServletResponse
* @param text
* 发送的字符串
*/
public static void renderText(HttpServletResponse response, String text) {
render(response, "text/plain;charset=UTF-8", text);
}
/**
* 发送json使用UTF-8编码
*
* @param response
* HttpServletResponse
* @param text
* 发送的字符串
*/
public static void renderJson(HttpServletResponse response, String text) {
render(response, "application/json;charset=UTF-8", text);
}
/**
* 发送xml使用UTF-8编码
*
* @param response
* HttpServletResponse
* @param text
* 发送的字符串
*/
public static void renderXml(HttpServletResponse response, String text) {
render(response, "text/xml;charset=UTF-8", text);
}
/**
* 发送内容使用UTF-8编码
*
* @param response
* @param contentType
* @param text
*/
public static void render(HttpServletResponse response, String contentType,
String text) {
response.setContentType(contentType);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
try {
response.getWriter().write(text);
response.getWriter().flush();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blockchain.server.yyyf.mapper.AssessUserMapper">
<resultMap id="YfServerAssessUserResultMap" type="com.blockchain.server.yyyf.entity.AssessUser">
<id column="id" jdbcType="VARCHAR" property="id"/>
<result column="train_id" jdbcType="VARCHAR" property="trainId"/>
<result column="issue_id" jdbcType="VARCHAR" property="issueId"/>
<result column="ss_practise_id" jdbcType="VARCHAR" property="ssPractiseId"/>
<result column="user_id" jdbcType="INTEGER" property="userId"/>
<result column="total_score" jdbcType="NUMERIC" property="totalScore"/>
<result column="duration" jdbcType="INTEGER" property="duration"/>
<result column="duration_unit" jdbcType="VARCHAR" property="durationUnit"/>
<result column="start_time" jdbcType="TIMESTAMP" property="startTime"/>
<result column="end_time" jdbcType="TIMESTAMP" property="endTime"/>
<result column="case_id" jdbcType="VARCHAR" property="caseId"/>
<result column="achieve_ment_type" jdbcType="INTEGER" property="achieveMentType"/>
<result column="class_id" jdbcType="VARCHAR" property="classId"/>
<result column="course_id" jdbcType="VARCHAR" property="courseId"/>
</resultMap>
<resultMap id="PractiseProVoResultMap" type="com.blockchain.server.yyyf.dto.PractiseProDto">
<id column="id" property="id" />
<result column="project_name" property="proName" />
<result column="project_score" property="projectScore" />
<result column="project_case_desc" property="projectCaseDesc" />
<collection property="taskList" ofType="com.blockchain.server.yyyf.dto.PractiseTaskDto">
<id column="userTaskid" property="id"/>
<result column="task_name" property="taskName"/>
<result column="task_score" property="taskScore"/>
<result column="answer" property="answer"/>
<result column="right_answer" property="rightAnswer"/>
<result column="stu_answer" property="stuAnswer"/>
</collection>
</resultMap>
<sql id="YfServerAssessUser_Where_Clause">
<if test="id != null ">
and t.id=#{id,jdbcType=VARCHAR}
</if>
<if test="trainId != null and trainId != ''">
and t.train_id=#{trainId,jdbcType=VARCHAR}
</if>
<if test="issueId != null and issueId != ''">
and t.issue_id=#{issueId,jdbcType=VARCHAR}
</if>
<if test="ssPractiseId != null and ssPractiseId != ''">
and t.ss_practise_id=#{ssPractiseId,jdbcType=VARCHAR}
</if>
<if test="userId != null and userId != ''">
and t.user_id=#{userId,jdbcType=INTEGER}
</if>
<if test="totalScore != null and totalScore != ''">
and t.total_score=#{totalScore,jdbcType=NUMERIC}
</if>
<if test="customerStory != null and customerStory != ''">
and t.customer_story=#{customerStory,jdbcType=VARCHAR}
</if>
<if test="duration != null and duration != ''">
and t.duration=#{duration,jdbcType=INTEGER}
</if>
<if test="durationUnit != null and durationUnit != ''">
and t.duration_unit=#{durationUnit,jdbcType=VARCHAR}
</if>
<if test="startTime != null and startTime != ''">
and t.start_time=#{startTime,jdbcType=TIMESTAMP}
</if>
<if test="endTime != null and endTime != ''">
and t.end_time=#{endTime,jdbcType=TIMESTAMP}
</if>
<if test="caseId != null and caseId != ''">
and t.case_id=#{caseId,jdbcType=VARCHAR}
</if>
<if test="achieveMentType != null and achieveMentType != ''">
and t.achieve_ment_type=#{achieveMentType,jdbcType=INTEGER}
</if>
<if test="classId != null and classId != ''">
and t.class_id=#{classId,jdbcType=VARCHAR}
</if>
<if test="courseId != null and courseId != ''">
and t.course_id=#{courseId,jdbcType=VARCHAR}
</if>
<if test="groupId != null and groupId != ''">
and t.group_id=#{groupId,jdbcType=INTEGER}
</if>
</sql>
<sql id="YfServerAssessUser_Column_List">
t.id,
t.train_id,
t.issue_id,
t.ss_practise_id,
t.user_id,
t.total_score,
t.duration,
t.duration_unit,
t.start_time,
t.end_time,
t.case_id,
t.achieve_ment_type,
t.class_id,
t.course_id,
</sql>
<insert id="insert" parameterType="com.blockchain.server.yyyf.entity.AssessUser">
insert into yyyf_server_assess_user ( id, train_id, issue_id, ss_practise_id, user_id, total_score, duration, duration_unit, start_time, end_time, case_id, achieve_ment_type, class_id, course_id)
values(
#{id},
#{trainId},
#{issueId},
#{ssPractiseId},
#{userId},
#{totalScore},
#{duration},
#{durationUnit},
#{startTime},
#{endTime},
#{caseId},
#{achieveMentType},
#{classId},
#{courseId}
)
</insert>
<insert id="batchInsert" parameterType="java.util.List">
insert into yyyf_server_assess_user
values
<foreach collection ="list" item="item" index= "index" separator =",">
(
#{item.id},
#{item.trainId},
#{item.issueId},
#{item.ssPractiseId},
#{item.userId},
#{item.totalScore},
#{item.duration},
#{item.durationUnit},
#{item.startTime},
#{item.endTime},
#{item.caseId},
#{item.achieveMentType},
#{item.classId},
#{item.courseId},
)
</foreach >
</insert>
<delete id="delAssessUserByIssueId">
delete from yyyf_server_assess_user where issue_id=#{issueId}
</delete>
<select id="selectScore" resultMap="YfServerAssessUserResultMap">
SELECT * from yyyf_server_assess_user where issue_id=#{assessmentId} and user_id=#{userId} and achieve_ment_type = 1
</select>
<select id="selectUserGradeCase" resultType="java.util.Map" >
select AVG(t.TOTAL_SCORE) as avg,
MAX(t.TOTAL_SCORE) as max,
MIN(t.TOTAL_SCORE) as min
from yyyf_server_assess_user t
where t.class_id= #{classId} and t.issue_id= #{issueId}
</select>
<select id="selectUserGradeListByClassIdAndIssueId" resultType="java.util.Map">
SELECT t.user_id as userAId,t.TOTAL_SCORE AS totalScore from yyyf_server_assess_user t
where t.issue_id= #{issueId}
</select>
<select id="selectPractiseProList" resultMap="PractiseProVoResultMap">
SELECT
p.id,
p.project_name,
p.project_score,
p.project_case_desc,
t.id AS userTaskid,
t.task_name,
t.task_score,
t.answer,
t.right_answer,
t.stu_answer
FROM
yyyf_server_assess_user u
LEFT JOIN yyyf_server_assess_user_project p ON u.id = p.assess_user_id
LEFT JOIN yyyf_server_assess_user_task t ON p.id = t.assess_project_id
WHERE
u.id=#{assessUserId}
ORDER BY CONVERT(p.project_id,SIGNED), t.serial_number,CONVERT(t.task_id,SIGNED)
</select>
<select id="selectAssessUserListByIssuerIdAndUserId" resultMap="YfServerAssessUserResultMap">
select * from yyyf_server_assess_user
where achieve_ment_type=0 and issue_id=#{issueId} and user_id=#{userId}
ORDER BY start_time desc
</select>
<select id="selectAssessUserById" resultMap="YfServerAssessUserResultMap">
select * from yyyf_server_assess_user where id=#{assessUserId}
</select>
<select id="selectAssessUserListByIssueId" resultMap="YfServerAssessUserResultMap">
select * from yyyf_server_assess_user where issue_id=#{issueId} and achieve_ment_type = 1
</select>
<!-- <select id="getAssessUserByIssueId" resultMap="YfServerAssessUserResultMap">
SELECT * from yyyf_server_assess_user
</select>-->
</mapper>

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blockchain.server.yyyf.mapper.AssessUserProjectMapper">
<resultMap id="YfServerAssessUserProjectResultMap" type="com.blockchain.server.yyyf.entity.AssessUserProject">
<id column="id" jdbcType="VARCHAR" property="id"/>
<result column="assess_user_id" jdbcType="VARCHAR" property="assessUserId"/>
<result column="project_name" jdbcType="VARCHAR" property="projectName"/>
<result column="project_id" jdbcType="VARCHAR" property="projectId"/>
<result column="project_score" jdbcType="NUMERIC" property="projectScore"/>
<result column="project_case_desc" jdbcType="VARCHAR" property="projectCaseDesc"/>
</resultMap>
<sql id="YfServerAssessUserProject_Where_Clause">
<if test="id != null ">
and t.id=#{id,jdbcType=VARCHAR}
</if>
<if test="assessUserId != null and assessUserId != ''">
and t.assess_user_id=#{assessUserId,jdbcType=VARCHAR}
</if>
<if test="projectName != null and projectName != ''">
and t.project_name=#{projectName,jdbcType=VARCHAR}
</if>
<if test="projectId != null and projectId != ''">
and t.project_id=#{projectId,jdbcType=VARCHAR}
</if>
<if test="projectScore != null and projectScore != ''">
and t.project_score=#{projectScore,jdbcType=NUMERIC}
</if>
<if test="duration != null and duration != ''">
and t.duration=#{duration,jdbcType=INTEGER}
</if>
<if test="durationUnit != null and durationUnit != ''">
and t.duration_unit=#{durationUnit,jdbcType=VARCHAR}
</if>
<if test="projectCaseDesc != null and projectCaseDesc != ''">
and t.project_case_desc=#{projectCaseDesc,jdbcType=VARCHAR}
</if>
</sql>
<sql id="YfServerAssessUserProject_Column_List">
t.id,
t.assess_user_id,
t.project_name,
t.project_id,
t.project_score,
t.duration,
t.duration_unit,
t.project_case_desc,
</sql>
<insert id="insert" parameterType="com.blockchain.server.yyyf.entity.AssessUserProject">
insert into yyyf_server_assess_user_project (id, assess_user_id, project_name, project_id, project_score, duration, duration_unit, project_case_desc)
values(
#{id},
#{assessUserId},
#{projectName},
#{projectId},
#{projectScore},
#{duration},
#{durationUnit},
#{projectCaseDesc}
)
</insert>
<insert id="batchInsert" parameterType="java.util.List">
insert into yyyf_server_assess_user_project ( id, assess_user_id, project_name, project_id, project_score, project_case_desc)
values
<foreach collection ="list" item="item" index= "index" separator =",">
(
#{item.id},
#{item.assessUserId},
#{item.projectName},
#{item.projectId},
#{item.projectScore},
#{item.projectCaseDesc}
)
</foreach >
</insert>
</mapper>

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blockchain.server.yyyf.mapper.AssessUserTaskMapper">
<resultMap id="YfServerAssessUserTaskResultMap" type="com.blockchain.server.yyyf.entity.AssessUserTask">
<id column="id" jdbcType="VARCHAR" property="id"/>
<result column="assess_project_id" jdbcType="VARCHAR" property="assessProjectId"/>
<result column="task_id" jdbcType="VARCHAR" property="taskId"/>
<result column="task_name" jdbcType="VARCHAR" property="taskName"/>
<result column="task_score" jdbcType="NUMERIC" property="taskScore"/>
<result column="answer" jdbcType="INTEGER" property="answer"/>
<result column="serial_number" jdbcType="INTEGER" property="serialNumber"/>
<result column="right_answer" jdbcType="VARCHAR" property="rightAnswer"/>
<result column="stu_answer" jdbcType="VARCHAR" property="stuAnswer"/>
</resultMap>
<sql id="YfServerAssessUserTask_Where_Clause">
<if test="id != null ">
and t.id=#{id,jdbcType=VARCHAR}
</if>
<if test="assessProjectId != null and assessProjectId != ''">
and t.assess_project_id=#{assessProjectId,jdbcType=VARCHAR}
</if>
<if test="taskId != null and taskId != ''">
and t.task_id=#{taskId,jdbcType=VARCHAR}
</if>
<if test="taskName != null and taskName != ''">
and t.task_name=#{taskName,jdbcType=VARCHAR}
</if>
<if test="taskScore != null and taskScore != ''">
and t.task_score=#{taskScore,jdbcType=NUMERIC}
</if>
<if test="answer != null and answer != ''">
and t.answer=#{answer,jdbcType=INTEGER}
</if>
<if test="serialNumber != null and serialNumber != ''">
and t.serial_number=#{serialNumber,jdbcType=INTEGER}
</if>
<if test="rightAnswer != null and rightAnswer != ''">
and t.right_answer=#{rightAnswer,jdbcType=VARCHAR}
</if>
<if test="stuAnswer != null and stuAnswer != ''">
and t.stu_answer=#{stuAnswer,jdbcType=VARCHAR}
</if>
</sql>
<sql id="YfServerAssessUserTask_Column_List">
t.id,
t.assess_project_id,
t.task_id,
t.task_name,
t.task_score,
t.answer,
t.serial_number,
t.right_answer,
t.stu_answer,
</sql>
<insert id="insert" parameterType="com.blockchain.server.yyyf.entity.AssessUserTask">
insert into yyyf_server_assess_user_task ( id, assess_project_id, task_id, task_name, task_score, answer, serial_number, right_answer, stu_answer)
values(
#{id},
#{assessProjectId},
#{taskId},
#{taskName},
#{taskScore},
#{answer},
#{serialNumber},
#{rightAnswer},
#{stuAnswer}
)
</insert>
<insert id="batchInsert" parameterType="java.util.List">
insert into yyyf_server_assess_user_task
values
<foreach collection ="list" item="item" index= "index" separator =",">
(
#{item.id},
#{item.assessProjectId},
#{item.taskId},
#{item.taskName},
#{item.taskScore},
#{item.answer},
#{item.serialNumber},
#{item.rightAnswer},
#{item.stuAnswer}
)
</foreach >
</insert>
<select id="selectYHTaskInfoByIssueId" resultType="java.util.Map">
SELECT
u.user_id AS userId,
p.project_name projectName,
CASE
WHEN t.id IS NULL THEN
p.project_name
ELSE
t.task_name
END AS taskName,
CASE
WHEN t.id IS NULL THEN
p.project_id
ELSE
t.task_id
END AS appTaskId,
u.train_id taskId,
CASE
WHEN t.stu_answer IS NOT NULL THEN
t.answer
WHEN p.project_score = 0 THEN
'1'
ELSE
'0'
END AS answer
FROM
yyyf_server_assess_user u
LEFT JOIN yyyf_server_assess_user_project p ON u.id = p.assess_user_id
LEFT JOIN yyyf_server_assess_user_task t ON p.id = t.assess_project_id
WHERE
u.issue_id = #{issueId}
ORDER BY
t.serial_number
</select>
</mapper>

@ -33,8 +33,8 @@
<custom-project-version>latest</custom-project-version> <custom-project-version>latest</custom-project-version>
<!-- 配置信息 --> <!-- 配置信息 -->
<eureka-host>zhixinlian:zhi123xin678lian@127.0.0.1</eureka-host> <eureka-host>zhixinlian:zhi123xin678lian@10.10.17.84</eureka-host>
<redis-host>127.0.0.1</redis-host> <redis-host>10.10.17.84</redis-host>
</properties> </properties>
<dependencies> <dependencies>

Loading…
Cancel
Save