parent
f2921b89d4
commit
64b507fb70
21 changed files with 814 additions and 0 deletions
@ -0,0 +1,34 @@ |
||||
package com.blockchain.common.base.constant; |
||||
|
||||
/** |
||||
* @author huan.xu |
||||
* @version 1.0 |
||||
* @className CaseConstant |
||||
* @description |
||||
* @date 2020-04-17 11:26 |
||||
*/ |
||||
public class YyyfConstant { |
||||
public static final String EXAM_KEY="examKey"; |
||||
|
||||
public static final String ANSER_KEY="answerKey_"; |
||||
|
||||
public static final String NO_ENTRY_INTO_PRACTICE="您有未完成的考试,请先完成考试并提交"; |
||||
|
||||
public static final String INCOMPLETE_PRACTICE="您有未提交的练习,是否重新开始?"; |
||||
|
||||
|
||||
//Submitted
|
||||
public static final String SUBMITTED="您的考试已提交,不允许再次进入"; |
||||
|
||||
public static final String EXAM_PAPER_KEY="examPaperKey"; |
||||
|
||||
/**参加考试的人员id key*/ |
||||
public static final String JOIN_EXAM_STU_IDS_KEY="joinExamStuIds"; |
||||
|
||||
public static final String CASE_KEY="case_"; |
||||
|
||||
public static final String YYYF_ZHIXINLIAN_CODE="128"; |
||||
|
||||
/**以渔有方与智信链用户绑定的cookies*/ |
||||
public static final String YYYF_ZHIXINLIAN_USER_KEY="yyyfZhixinlianUserKey"; |
||||
} |
@ -0,0 +1,28 @@ |
||||
package com.blockchain.common.base.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
/** |
||||
* @author huan.xu |
||||
* @version 1.0 |
||||
* @className YyyfUserDto |
||||
* @description |
||||
* @date 2020-04-17 11:06 |
||||
*/ |
||||
@Data |
||||
public class YyyfUserDto implements Serializable { |
||||
private static final long serialVersionUID = -6752296227958588252L; |
||||
/**传过来的用户id*/ |
||||
private String id; |
||||
/**用户名称*/ |
||||
private String name; |
||||
/**用户类型:0学生,1老师,2管理员*/ |
||||
private Integer type; |
||||
/**班级id*/ |
||||
private Integer classId; |
||||
/**学校id,为以后logo修改预留参数*/ |
||||
private Integer schoolId; |
||||
|
||||
} |
@ -0,0 +1,68 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<parent> |
||||
<artifactId>blockchain-server</artifactId> |
||||
<groupId>com.blockchain</groupId> |
||||
<version>1.0-SNAPSHOT</version> |
||||
</parent> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
|
||||
<artifactId>blockchain-server-yyyf</artifactId> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>com.blockchain</groupId> |
||||
<artifactId>blockchain-server-base</artifactId> |
||||
<version>1.0-SNAPSHOT</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.blockchain</groupId> |
||||
<artifactId>blockchain-common-tx</artifactId> |
||||
<version>1.0-SNAPSHOT</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.blockchain</groupId> |
||||
<artifactId>blockchain-common-base</artifactId> |
||||
<version>1.0-SNAPSHOT</version> |
||||
</dependency> |
||||
|
||||
<!-- java mail --> |
||||
<dependency> |
||||
<groupId>com.sun.mail</groupId> |
||||
<artifactId>javax.mail</artifactId> |
||||
<version>1.6.2</version> |
||||
</dependency> |
||||
|
||||
<!-- 阿里云依赖 --> |
||||
<dependency> |
||||
<groupId>com.aliyun</groupId> |
||||
<artifactId>aliyun-java-sdk-core</artifactId> |
||||
<version>4.0.3</version> |
||||
</dependency> |
||||
|
||||
<!-- 个推API依赖 --> |
||||
<dependency> |
||||
<groupId>com.gexin.platform</groupId> |
||||
<artifactId>gexin-rp-sdk-http</artifactId> |
||||
<version>4.1.0.3</version> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<repositories> |
||||
<repository> |
||||
<id>getui-nexus</id> |
||||
<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url> |
||||
</repository> |
||||
</repositories> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
@ -0,0 +1,20 @@ |
||||
package com.blockchain.server.yyyf; |
||||
|
||||
import com.blockchain.server.base.BaseConf; |
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties; |
||||
import org.springframework.scheduling.annotation.EnableAsync; |
||||
|
||||
/** |
||||
* @author xusm |
||||
* @data 2019/2/21 14:06 |
||||
*/ |
||||
@SpringBootApplication(scanBasePackageClasses = {BaseConf.class, YyyfApplication.class}) |
||||
@EnableConfigurationProperties |
||||
@EnableAsync |
||||
public class YyyfApplication { |
||||
public static void main(String[] args) { |
||||
SpringApplication.run(YyyfApplication.class,args); |
||||
} |
||||
} |
@ -0,0 +1,236 @@ |
||||
package com.blockchain.server.yyyf.controller; |
||||
|
||||
import com.blockchain.common.base.constant.YyyfConstant; |
||||
import com.blockchain.common.base.dto.ResultDTO; |
||||
import com.blockchain.common.base.dto.TokenDTO; |
||||
import com.blockchain.common.base.dto.YyyfUserDto; |
||||
import com.blockchain.common.base.util.RSACoderUtils; |
||||
import com.blockchain.server.yyyf.controller.api.LoginApi; |
||||
import com.blockchain.server.yyyf.dto.*; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import io.swagger.annotations.ApiParam; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.data.redis.core.HashOperations; |
||||
import org.springframework.data.redis.core.RedisTemplate; |
||||
import org.springframework.data.redis.core.ValueOperations; |
||||
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.RestController; |
||||
import sun.misc.BASE64Decoder; |
||||
|
||||
import javax.validation.Valid; |
||||
import java.io.IOException; |
||||
import java.util.*; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
/** |
||||
* @author huangxl |
||||
* @data 2019/2/21 15:06 |
||||
* 用户注册, 登录控制器 |
||||
*/ |
||||
@RestController |
||||
@Api(LoginApi.CONTROLLER_API) |
||||
@RequestMapping("/loginFromYyyf") |
||||
public class LoginController { |
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoginController.class); |
||||
|
||||
|
||||
@Autowired |
||||
private RedisTemplate redisTemplate; |
||||
|
||||
@PostMapping("/login") |
||||
@ApiOperation(value = LoginApi.YyyfLogin.METHOD_NAME, |
||||
notes = LoginApi.YyyfLogin.METHOD_NOTE) |
||||
public ResultDTO<YyyfLoginDto> loginyyyf(@ApiParam(LoginApi.YyyfLogin.METHOD_API_YYYFLOGINREQUESTVO) @Valid @RequestBody YyyfLoginRequestVo yyyfLoginRequestVo) { |
||||
|
||||
//存到redis中用于以渔有方用户与智信链用户进行绑定
|
||||
YyyfUserDto yyyfUserDto=new YyyfUserDto(); |
||||
//登录返回的Data
|
||||
YyyfLoginDto yyyfLoginDto = new YyyfLoginDto(); |
||||
yyyfLoginDto.setStatus(0); |
||||
String userName =null; |
||||
|
||||
try { |
||||
userName = new String(new BASE64Decoder().decodeBuffer(yyyfLoginRequestVo.getUserName().replaceAll(" ", "+")), "UTF-8"); |
||||
//根据案例id,考核id封装相关信息。
|
||||
//1、从缓存中取案列相关
|
||||
//0 考试 1 练习 2 不计分 3 教师、管理员的案例管理
|
||||
int reqType = yyyfLoginRequestVo.getReqType().intValue(); |
||||
int userType = yyyfLoginRequestVo.getUserType().intValue(); |
||||
Integer classId =yyyfLoginRequestVo.getClassId(); |
||||
String userId = yyyfLoginRequestVo.getUserId(); |
||||
Integer schoolId = yyyfLoginRequestVo.getSchoolId(); |
||||
|
||||
yyyfUserDto.setClassId(classId); |
||||
yyyfUserDto.setId(userId); |
||||
yyyfUserDto.setName(userName); |
||||
yyyfUserDto.setSchoolId(schoolId); |
||||
yyyfUserDto.setType(userType); |
||||
|
||||
//以渔有方考核id
|
||||
String examId = yyyfLoginRequestVo.getReqId(); |
||||
//试卷id(项目id)
|
||||
String examPaperId = yyyfLoginRequestVo.getCaseId(); |
||||
//做考试和练习
|
||||
if (0 == reqType || 1 == reqType) { |
||||
HashOperations<String, String, ExamDto> examDtoOpsForHash = redisTemplate.opsForHash(); |
||||
|
||||
//将参加考试的人员缓存
|
||||
HashOperations<String, String, List<String>> studentOpsForHash = redisTemplate.opsForHash(); |
||||
//参加考试的人员id
|
||||
List<String> joinStuIds =null; |
||||
|
||||
//考试id和案列id缓存
|
||||
String caseKey = YyyfConstant.CASE_KEY + userId; |
||||
|
||||
//判断考试缓存中是否存在这张卷子
|
||||
if (0 == reqType) { |
||||
//如果他提交了,库里有信息了,不允许他再次进入了。
|
||||
if (/**this.assessUserService.getAssessUserByIssueIdAndUserIdForExam(examId, userId) != null*/1==1) { |
||||
yyyfLoginDto.setStatus(2); |
||||
yyyfLoginDto.setMsg(YyyfConstant.SUBMITTED); |
||||
return handleAfterLogin(yyyfLoginDto,yyyfUserDto); |
||||
} |
||||
|
||||
ExamDto examDto = examDtoOpsForHash.get(YyyfConstant.EXAM_KEY, examId); |
||||
if (examDto == null) { |
||||
examDto = new ExamDto(); |
||||
examDto.setExamId(yyyfLoginRequestVo.getReqId()); |
||||
examDto.setBeginTime(yyyfLoginRequestVo.getBeginTime()); |
||||
examDto.setEndTime(yyyfLoginRequestVo.getEndTime()); |
||||
examDto.setType(reqType); |
||||
examDto.setExamPaperId(examPaperId); |
||||
examDtoOpsForHash.put(YyyfConstant.EXAM_KEY, examId, examDto); |
||||
} |
||||
|
||||
joinStuIds=studentOpsForHash.get(YyyfConstant.JOIN_EXAM_STU_IDS_KEY, examId); |
||||
if (joinStuIds == null) { |
||||
joinStuIds = new ArrayList<String>(); |
||||
} |
||||
//如果等于0
|
||||
if (joinStuIds.stream() |
||||
.filter(stuIds -> (stuIds.equals(userId))).count() == 0) { |
||||
joinStuIds.add(userId); |
||||
studentOpsForHash.put(YyyfConstant.JOIN_EXAM_STU_IDS_KEY, examId, joinStuIds); |
||||
} else { |
||||
yyyfLoginDto.setStatus(1); |
||||
yyyfLoginDto.setMsg(YyyfConstant.NO_ENTRY_INTO_PRACTICE); |
||||
return handleAfterLogin(yyyfLoginDto,yyyfUserDto); |
||||
} |
||||
}else { |
||||
|
||||
if (redisTemplate.hasKey(caseKey)) { |
||||
Map<String, String> examMsgMap = (Map<String, String>) redisTemplate.opsForValue().get(caseKey); |
||||
joinStuIds=studentOpsForHash.get(YyyfConstant.JOIN_EXAM_STU_IDS_KEY, examMsgMap.get("examId")); |
||||
} |
||||
//缓存是考试,要进入练习,则不让进入
|
||||
if (joinStuIds != null && joinStuIds.stream() |
||||
.filter(stuIds -> (stuIds.equals(userId))).count() != 0) { |
||||
yyyfLoginDto.setStatus(1); |
||||
yyyfLoginDto.setMsg(YyyfConstant.NO_ENTRY_INTO_PRACTICE); |
||||
return handleAfterLogin(yyyfLoginDto,yyyfUserDto); |
||||
} |
||||
|
||||
ValueOperations<String, Object> studentAnsweValueOperations = redisTemplate.opsForValue(); |
||||
String studentAnswerDtoKey = YyyfConstant.ANSER_KEY + userId + examPaperId; |
||||
StudentAnswerDto studentAnswerDto = (StudentAnswerDto) studentAnsweValueOperations.get(studentAnswerDtoKey); |
||||
if (studentAnswerDto != null) { |
||||
//答题结果、且未提交
|
||||
Map<String, Integer> result = studentAnswerDto.getResult(); |
||||
if (result != null && result.size() > 0 && result.get("isSubmit")==null ) { |
||||
yyyfLoginDto.setStatus(3); |
||||
yyyfLoginDto.setMsg(YyyfConstant.INCOMPLETE_PRACTICE); |
||||
PractiseTipDto practiseTipDto = new PractiseTipDto(); |
||||
practiseTipDto.setExamId(examId); |
||||
practiseTipDto.setExamPaperId(examPaperId); |
||||
practiseTipDto.setYyyfUserId(userId); |
||||
yyyfLoginDto.setPractiseTipDto(practiseTipDto); |
||||
|
||||
Map<String, String> map = new HashMap<String, String>(); |
||||
map.put("examPaperId", examPaperId); |
||||
map.put("examId", examId); |
||||
|
||||
redisTemplate.opsForValue().set(caseKey, map); |
||||
redisTemplate.expire(studentAnswerDtoKey, 2, TimeUnit.HOURS); |
||||
redisTemplate.expire(caseKey, 2, TimeUnit.HOURS); |
||||
|
||||
return handleAfterLogin(yyyfLoginDto,yyyfUserDto); |
||||
} |
||||
} |
||||
} |
||||
//删除强制提醒的缓存
|
||||
redisTemplate.delete(YyyfConstant.ANSER_KEY + userId); |
||||
|
||||
ValueOperations<String, Object> studentAnsweValueOperations = redisTemplate.opsForValue(); |
||||
String studentAnswerDtoKey = YyyfConstant.ANSER_KEY + userId + examPaperId; |
||||
StudentAnswerDto studentAnswerDto = new StudentAnswerDto(); |
||||
studentAnswerDto.setUserId(userId); |
||||
studentAnswerDto.setUserType(userType); |
||||
studentAnswerDto.setBeginTime(new Date()); |
||||
studentAnswerDto.setExamId(examId); |
||||
studentAnswerDto.setType(reqType); |
||||
studentAnswerDto.setExamPaperId(examPaperId); |
||||
studentAnswerDto.setUserName(userName); |
||||
studentAnswerDto.setClassId(classId); |
||||
studentAnswerDto.setCourseId(yyyfLoginRequestVo.getCourserId()); |
||||
|
||||
studentAnsweValueOperations.set(studentAnswerDtoKey, studentAnswerDto); |
||||
|
||||
|
||||
Map<String, String> map = new HashMap<String, String>(); |
||||
map.put("examPaperId", examPaperId); |
||||
map.put("examId", examId); |
||||
|
||||
HashOperations<String, String, ExamPaperDto> examPaperOpsForHash = redisTemplate.opsForHash(); |
||||
ExamPaperDto examPaperDto = examPaperOpsForHash.get(YyyfConstant.EXAM_PAPER_KEY, examPaperId); |
||||
if (examPaperDto == null) { |
||||
// examPaperDto = this.projectManageService.getExamPaperDtoById(examPaperId);
|
||||
examPaperOpsForHash.put(YyyfConstant.EXAM_PAPER_KEY, examPaperId, examPaperDto); |
||||
} |
||||
|
||||
redisTemplate.opsForValue().set(caseKey, map); |
||||
redisTemplate.expire(studentAnswerDtoKey, 2, TimeUnit.HOURS); |
||||
redisTemplate.expire(caseKey, 2, TimeUnit.HOURS); |
||||
} |
||||
} catch (IOException e) { |
||||
LOG.error(e.getMessage(),e); |
||||
} |
||||
return handleAfterLogin(yyyfLoginDto,yyyfUserDto); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 登录成功之后的处理 |
||||
*/ |
||||
private ResultDTO handleAfterLogin(YyyfLoginDto yyyfLoginDto, YyyfUserDto yyyfUserDto) { |
||||
int status = yyyfLoginDto.getStatus(); |
||||
String token = generateToken(yyyfUserDto.getId(), System.currentTimeMillis(), YyyfConstant.YYYF_ZHIXINLIAN_USER_KEY); |
||||
yyyfLoginDto.setYyyfUserToken(token); |
||||
if(status==1){ |
||||
//到时看要不要设定时长
|
||||
redisTemplate.opsForValue().set(token,yyyfUserDto); |
||||
} |
||||
return ResultDTO.requstSuccess(yyyfLoginDto); |
||||
} |
||||
|
||||
/** |
||||
* 生成token返回前端 |
||||
* |
||||
* @param tel 手机号 |
||||
* @param timestamp 时间撮 |
||||
* @return token |
||||
*/ |
||||
private String generateToken(String tel, long timestamp, String tokenType) { |
||||
TokenDTO tokenDTO = new TokenDTO(); |
||||
tokenDTO.setTel(tel); |
||||
tokenDTO.setTimestamp(timestamp); |
||||
tokenDTO.setTokenType(tokenType); |
||||
return RSACoderUtils.encryptToken(tokenDTO); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.blockchain.server.yyyf.controller.api; |
||||
|
||||
/** |
||||
* @author huangxl |
||||
* @create 2018-11-16 14:51 |
||||
*/ |
||||
public class LoginApi { |
||||
public static final String CONTROLLER_API = "以渔有方登陆控制器"; |
||||
|
||||
public static class YyyfLogin { |
||||
public static final String METHOD_NAME = "以渔有方登录"; |
||||
public static final String METHOD_NOTE = "主要是获取案列,并将案列和用户对应上"; |
||||
public static final String METHOD_API_YYYFLOGINREQUESTVO = "以渔有方登录VO"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,32 @@ |
||||
package com.blockchain.server.yyyf.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* @author huan.xu |
||||
* @version 1.0 |
||||
* @className ExamDto |
||||
* @description 考试的dto |
||||
* @date 2019-08-19 10:50 |
||||
*/ |
||||
@Data |
||||
public class ExamDto { |
||||
/**考试id,即reqId*/ |
||||
private String examId; |
||||
|
||||
/**开始时间*/ |
||||
private Date beginTime; |
||||
|
||||
/**结束时间*/ |
||||
private Date endTime; |
||||
|
||||
/**类型:0 考试 1 练习 2 不计分 */ |
||||
|
||||
private Integer type; |
||||
|
||||
/**试卷id(案列id)*/ |
||||
private String examPaperId; |
||||
|
||||
} |
@ -0,0 +1,32 @@ |
||||
package com.blockchain.server.yyyf.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class ExamPaperDto { |
||||
/** |
||||
* id |
||||
*/ |
||||
private String id; |
||||
/** |
||||
* 案例名称 |
||||
*/ |
||||
private String name; |
||||
/** |
||||
* 案例数据 |
||||
*/ |
||||
List caseDataList; |
||||
|
||||
/** |
||||
* 计分交易数据 |
||||
*/ |
||||
List tradeList; |
||||
|
||||
/** |
||||
* 案例内容描述 |
||||
*/ |
||||
private String content; |
||||
|
||||
} |
@ -0,0 +1,29 @@ |
||||
package com.blockchain.server.yyyf.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.Getter; |
||||
import lombok.Setter; |
||||
|
||||
/** |
||||
* @author huan.xu |
||||
* @version 1.0 |
||||
* @className PractiseTipDto |
||||
* @description |
||||
* @date 2019-12-18 15:50 |
||||
*/ |
||||
@ApiModel("练习重新开始参数封装") |
||||
@Data |
||||
public class PractiseTipDto { |
||||
|
||||
@ApiModelProperty("考试id") |
||||
private String examId; |
||||
|
||||
@ApiModelProperty("案例id") |
||||
private String examPaperId; |
||||
|
||||
@ApiModelProperty("以渔有方用户id") |
||||
private String yyyfUserId; |
||||
|
||||
} |
@ -0,0 +1,47 @@ |
||||
package com.blockchain.server.yyyf.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author huan.xu |
||||
* @version 1.0 |
||||
* @className StudentAnswerDto |
||||
* @description 学生答题Dto |
||||
* @date 2019-08-20 9:04 |
||||
*/ |
||||
@Data |
||||
public class StudentAnswerDto extends ExamDto { |
||||
/** |
||||
* 用户id |
||||
*/ |
||||
private String userId; |
||||
/** |
||||
* 用户姓名 |
||||
*/ |
||||
private String userName; |
||||
/** |
||||
* 答题结果 0答错,1答对 |
||||
*/ |
||||
private Map<String, Integer> result; |
||||
|
||||
/** |
||||
* 总分 |
||||
*/ |
||||
private BigDecimal totalScore; |
||||
/** |
||||
* 班级id |
||||
*/ |
||||
private Integer classId; |
||||
|
||||
/** |
||||
* 用户类型 |
||||
*/ |
||||
private Integer userType; |
||||
/** |
||||
* 课程id |
||||
*/ |
||||
private String courseId; |
||||
} |
@ -0,0 +1,27 @@ |
||||
package com.blockchain.server.yyyf.dto; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.Getter; |
||||
import lombok.Setter; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
@ApiModel("以渔有方登录结果Dto") |
||||
@Data |
||||
public class YyyfLoginDto implements Serializable { |
||||
private static final long serialVersionUID = -4676837836442073982L; |
||||
|
||||
@ApiModelProperty("提示信息") |
||||
private String msg; |
||||
|
||||
@ApiModelProperty("状态:0,失败,1成功,2 考试提交后重复进入,3 练习未提交提醒") |
||||
private int status; |
||||
|
||||
@ApiModelProperty("练习重新开始参数封装") |
||||
private PractiseTipDto practiseTipDto; |
||||
@ApiModelProperty("以渔有方用户token") |
||||
private String yyyfUserToken; |
||||
|
||||
} |
@ -0,0 +1,59 @@ |
||||
package com.blockchain.server.yyyf.dto; |
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
import java.io.Serializable; |
||||
import java.util.Date; |
||||
|
||||
@ApiModel(description = "以渔有方登录请求对象") |
||||
@Data |
||||
public class YyyfLoginRequestVo implements Serializable { |
||||
private static final long serialVersionUID = 6595694408632033196L; |
||||
@NotNull |
||||
@ApiModelProperty("登录用户的id") |
||||
private String userId; |
||||
@NotNull |
||||
@ApiModelProperty("登录用户的姓名") |
||||
private String userName; |
||||
@NotNull |
||||
@ApiModelProperty("用户类型:0学生,1老师,2管理员") |
||||
private Integer userType; |
||||
@ApiModelProperty("学校id,为后期的改logo预留") |
||||
private Integer schoolId; |
||||
@NotNull |
||||
@ApiModelProperty("检验码") |
||||
private String authorization; |
||||
|
||||
@ApiModelProperty("课程id") |
||||
private String courserId; |
||||
|
||||
@ApiModelProperty("请求类型:0 考试 1 练习 2 不计分 3 教师、管理员的案例管理") |
||||
private Integer reqType; |
||||
|
||||
@ApiModelProperty("考核id") |
||||
private String reqId; |
||||
|
||||
@ApiModelProperty("案例Id") |
||||
private String caseId; |
||||
|
||||
@ApiModelProperty("班级id") |
||||
private Integer classId; |
||||
|
||||
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") |
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
||||
@ApiModelProperty("开始时间") |
||||
private Date beginTime; |
||||
|
||||
|
||||
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") |
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
||||
@ApiModelProperty("结束时间") |
||||
private Date endTime; |
||||
|
||||
|
||||
} |
@ -0,0 +1,16 @@ |
||||
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); |
||||
} |
@ -0,0 +1,16 @@ |
||||
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); |
||||
} |
@ -0,0 +1,16 @@ |
||||
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,4 @@ |
||||
#日志配置路径 |
||||
logging: |
||||
config: classpath:logback/logback-${spring.cloud.config.profile}.xml |
||||
|
@ -0,0 +1,23 @@ |
||||
server: |
||||
port: 8111 |
||||
#注册中心 |
||||
eureka: |
||||
client: |
||||
service-url: |
||||
defaultZone: http://${eureka-host}:8001/eureka/ |
||||
instance: |
||||
prefer-ip-address: true |
||||
instance-id: ${spring.cloud.client.ip-address}:${server.port} |
||||
hostname: ${spring.cloud.client.ip-address} |
||||
spring: |
||||
cloud: |
||||
#配置中心 |
||||
config: |
||||
discovery: |
||||
service-id: dapp-config-server |
||||
enabled: true |
||||
profile: dev |
||||
name: springconf,springcloudconf,redisconf,dbconf,txconf,xssconf,fileconf,smsconf,emailconf,ipconf,pushconf |
||||
application: |
||||
name: dapp-yyyf-server |
||||
|
@ -0,0 +1,54 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<configuration> |
||||
<!-- 输入文件的根目录 --> |
||||
<property name="log.path" value="/log/${custom-project-name}/${project.artifactId}" /> |
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> |
||||
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> |
||||
<encoder> |
||||
<pattern>${log.pattern}</pattern> |
||||
</encoder> |
||||
</appender> |
||||
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
<file>${log.path}/sys-info.log</file> |
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
<level>INFO</level> |
||||
<onMatch>ACCEPT</onMatch> |
||||
<onMismatch>DENY</onMismatch> |
||||
</filter> |
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
<maxHistory>60</maxHistory> |
||||
</rollingPolicy> |
||||
<encoder> |
||||
<pattern>${log.pattern}</pattern> |
||||
</encoder> |
||||
</appender> |
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
<level>ERROR</level> |
||||
<onMatch>ACCEPT</onMatch> |
||||
<onMismatch>DENY</onMismatch> |
||||
</filter> |
||||
<file>${log.path}/sys-error.log</file> |
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
<maxHistory>60</maxHistory> |
||||
</rollingPolicy> |
||||
<encoder> |
||||
<pattern>${log.pattern}</pattern> |
||||
</encoder> |
||||
</appender> |
||||
|
||||
<!-- 包名debug --> |
||||
<logger name="com.blockchain" level="debug"/> |
||||
|
||||
<root level="debug"> |
||||
<appender-ref ref="console" /> |
||||
</root> |
||||
<root level="info"> |
||||
<appender-ref ref="file_info" /> |
||||
<appender-ref ref="file_error" /> |
||||
</root> |
||||
</configuration> |
@ -0,0 +1,54 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<configuration> |
||||
<!-- 输入文件的根目录 --> |
||||
<property name="log.path" value="/log/${custom-project-name}/${project.artifactId}" /> |
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> |
||||
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> |
||||
<encoder> |
||||
<pattern>${log.pattern}</pattern> |
||||
</encoder> |
||||
</appender> |
||||
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
<file>${log.path}/sys-info.log</file> |
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
<level>INFO</level> |
||||
<onMatch>ACCEPT</onMatch> |
||||
<onMismatch>DENY</onMismatch> |
||||
</filter> |
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
<maxHistory>60</maxHistory> |
||||
</rollingPolicy> |
||||
<encoder> |
||||
<pattern>${log.pattern}</pattern> |
||||
</encoder> |
||||
</appender> |
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
<level>ERROR</level> |
||||
<onMatch>ACCEPT</onMatch> |
||||
<onMismatch>DENY</onMismatch> |
||||
</filter> |
||||
<file>${log.path}/sys-error.log</file> |
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
<maxHistory>60</maxHistory> |
||||
</rollingPolicy> |
||||
<encoder> |
||||
<pattern>${log.pattern}</pattern> |
||||
</encoder> |
||||
</appender> |
||||
|
||||
<!-- 包名debug --> |
||||
<logger name="com.blockchain" level="info"/> |
||||
|
||||
<root level="info"> |
||||
<appender-ref ref="console" /> |
||||
</root> |
||||
<root level="info"> |
||||
<appender-ref ref="file_info" /> |
||||
<appender-ref ref="file_error" /> |
||||
</root> |
||||
</configuration> |
Loading…
Reference in new issue