Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor iteration v2 without block chain #134

Open
wants to merge 47 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
dd060e3
fix: 修复非学生一作更新状态报错
lilingj Jun 8, 2022
2b31685
fix: 非学生一作文件校验bug
lilingj Jun 8, 2022
c4a1019
fix: log for debug
lilingj Jun 15, 2022
c87d035
fix: 论文状态更新后不计分bug
Jul 7, 2022
c490fc7
fix: 实时刷新绩效
Jul 11, 2022
2874a4a
fix: 投票通过比率默认值为0.75
lilingj Sep 30, 2022
0096a32
fix: 周报扣分bug
lilingj Oct 10, 2022
ee47776
refactor: 用户权限、身份、组关系重构
GLaxky Feb 6, 2023
84002b2
refactor: 用户权限、身份、组关系重构,新增一些工具类
GLaxky Feb 13, 2023
91ee069
refactor: 用户权限、身份、组关系重构,新增一些工具类
GLaxky Feb 13, 2023
62eae3e
refactor: 合并po与entity,复原删除的原始代码,优化项目包结构
GLaxky Feb 22, 2023
4b6bb52
feat: 新增公告栏功能;
GLaxky Apr 5, 2023
1a13873
feat: 新增实习期功能;
GLaxky May 9, 2023
384b966
docs: 新增测试sql脚本.
GLaxky May 9, 2023
83ff98a
docs: 更新测试sql脚本.
GLaxky May 9, 2023
83f6319
fix: 改进实习申请添加逻辑.
GLaxky Jun 11, 2023
49aee95
fix: 修改po_entity类威entity.
GLaxky Jun 19, 2023
78357b2
fix: 修改po_entity类为entity.
GLaxky Jun 19, 2023
6ebd49e
fix: 修改Dockerfile.
GLaxky Jun 21, 2023
aab8994
fix: 修复绩效申请失效bug.
GLaxky Jul 8, 2023
86e6062
test
GLaxky Sep 12, 2023
2b705cf
refactor: 修改职位扫描变更的周期.
GLaxky Sep 22, 2023
9569550
fix: 学好解析器新增9位学号的解析.
GLaxky Sep 22, 2023
9fd53c5
fix: 学好解析器新增9位学号的解析.
GLaxky Sep 22, 2023
19a1d41
fix: 学好解析器新增9位学号的解析.
GLaxky Sep 22, 2023
d8c4638
fix: 学好解析器新增9位学号的解析.
GLaxky Sep 22, 2023
f45f093
fix: 学好解析器新增9位学号的解析.
GLaxky Sep 22, 2023
6542e64
fix: 学号解析器新增9位学号的解析.
GLaxky Sep 22, 2023
876fa17
fix: 学号解析器新增9位学号的解析.
GLaxky Sep 22, 2023
f5188be
fix: 学号解析器学号的解析的过滤.
GLaxky Sep 22, 2023
bce97f8
fix: 学号解析器学号的解析的过滤.
GLaxky Sep 22, 2023
719f495
fix: 加分逻辑修改“内审论文被接收后,作者在提交完所有材料后触发加分”.
GLaxky Feb 28, 2024
f14b362
fix: 论文中止扣分逻辑修改.
GLaxky Apr 29, 2024
f1de635
fix: 添加ac变更的接口.
GLaxky Oct 4, 2024
5940e3b
fix: 添加ac变更的log细节.
GLaxky Oct 29, 2024
e696839
fix: 添加ac变更的log细节.
GLaxky Oct 29, 2024
6bacd97
fix: 添加ac变更的log细节.
GLaxky Oct 29, 2024
1661957
fix: 修改ac变更的bug.
GLaxky Oct 29, 2024
ebcf58d
fix: 修改ac变更的bug.
GLaxky Oct 29, 2024
d97424b
fix: 修改ac变更的bug.
GLaxky Oct 29, 2024
8e3c412
fix: 修改ac变更的bug.
GLaxky Oct 29, 2024
169c4ed
Merge remote-tracking branch 'origin/refactor-iterationV2-without-Blo…
GLaxky Oct 29, 2024
fc37649
fix: 增加论文ac的报错信息.
GLaxky Nov 2, 2024
e0b933a
fix: 填写论文审核意见时,不管是否文件提交完整,都会生成投票的ac.
GLaxky Nov 29, 2024
fee2f10
fix: 填写论文审核意见时,不管是否文件提交完整,都会生成投票的ac.
GLaxky Nov 29, 2024
f350298
fix: 填写论文审核意见时,不管是否文件提交完整,都会生成投票的ac.
GLaxky Nov 29, 2024
f2f6c30
fix: 修复bug.
GLaxky Dec 22, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 30 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,34 @@
#FROM openjdk:11
#MAINTAINER LiXiaoKang [email protected]
#WORKDIR /ROOT
#ADD ./target/dingtalk-0.0.1-SNAPSHOT.jar /ROOT/
#ENV LD_LIBRARY_PATH /usr/lib
#ENV PROFILES="prod"
#EXPOSE 8080
#ENTRYPOINT ["sh", "-c", "java -jar dingtalk-0.0.1-SNAPSHOT.jar --spring.profiles.active=$PROFILES"]

# First stage: complete build environment
FROM maven:3.6.3-jdk-11-slim AS builder
WORKDIR /code
COPY . /code
# add pom.xml and source code
ADD ./pom.xml /code/pom.xml
ADD ./src /code/src
# package jar
COPY ./settings.xml /root/.m2/settings.xml
RUN mvn package -DskipTests

# Second stage: minimal runtime environment
FROM openjdk:11
MAINTAINER zhanyeye [email protected]
WORKDIR /ROOT
ADD ./target/dingtalk-0.0.1-SNAPSHOT.jar /ROOT/
WORKDIR /app
# Change TimeZone
# RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
LABEL maintainer="[email protected]"
# copy jar from the first stage
COPY --from=builder /code/target/dingtalk-2.0.1-SNAPSHOT.jar /app/app.jar

ENV LD_LIBRARY_PATH /usr/lib
ENV PROFILES="prod"
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java -jar dingtalk-0.0.1-SNAPSHOT.jar --spring.profiles.active=$PROFILES"]
# run jar
ENTRYPOINT ["sh", "-c", "java -jar /app/app.jar --spring.profiles.active=$PROFILES"]
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
</tbody>
</table>

+ 钉钉SDK的封装 👉 :[com.softeng.dingtalk.api](https://github.com/nju-softeng/dingtalk-app-server/tree/main/src/main/java/com/softeng/dingtalk/api)
+ 钉钉SDK的封装 👉 :[com.softeng.dingtalk.dingApi](https://github.com/nju-softeng/dingtalk-app-server/tree/main/src/main/java/com/softeng/dingtalk/api)
+ 项目前端代码 👉 :[dingtalk-app-web](https://github.com/nju-softeng/dingtalk-app-web)

### 注意事项
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</parent>
<groupId>com.softeng</groupId>
<artifactId>dingtalk</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>2.0.1-SNAPSHOT</version>
<name>dingtalk</name>
<description>Demo project for dingtalk mini program</description>

Expand Down Expand Up @@ -182,7 +182,7 @@
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
<version>3.0.5</version>
</dependency>

<dependency>
Expand Down
14 changes: 14 additions & 0 deletions settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

</settings>
4 changes: 2 additions & 2 deletions src/main/java/com/softeng/dingtalk/DingtalkApplication.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.softeng.dingtalk;

import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
import com.softeng.dingtalk.repository.impl.CustomizedRepositoryImpl;
import com.softeng.dingtalk.dao.repository.impl.CustomizedRepositoryImpl;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
Expand All @@ -13,7 +13,7 @@
@EnableCaching
@EnableScheduling
@SpringBootApplication
@MapperScan("com.softeng.dingtalk.mapper")
@MapperScan("com.softeng.dingtalk.dao.mapper")
@EnableJpaRepositories(repositoryBaseClass = CustomizedRepositoryImpl.class)
public class DingtalkApplication {

Expand Down
21 changes: 5 additions & 16 deletions src/main/java/com/softeng/dingtalk/aspect/ACBlockchainAspect.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,17 @@
package com.softeng.dingtalk.aspect;


import com.alibaba.fastjson.JSON;
import com.softeng.dingtalk.entity.AcRecord;
import com.softeng.dingtalk.fabric.FabricManager;
import com.softeng.dingtalk.repository.AcRecordRepository;
import com.softeng.dingtalk.dao.repository.AcRecordRepository;
import com.softeng.dingtalk.service.SystemService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.hyperledger.fabric.sdk.exception.CryptoException;
import org.hyperledger.fabric.sdk.exception.InvalidArgumentException;
import org.hyperledger.fabric.sdk.exception.TransactionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.spec.InvalidKeySpecException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

@ConditionalOnExpression("${blockchain.service.enable:true}")
Expand All @@ -37,16 +26,16 @@ public class ACBlockchainAspect {
boolean isCreate=false;
//FabricManager manager=FabricManager.obtain();
public static List timeCostList=new ArrayList<>();
@Pointcut("execution(* com.softeng.dingtalk.repository.AcRecordRepository.save(..))")
@Pointcut("execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.save(..))")
public void saveRecord(){
}

@Pointcut("execution(* com.softeng.dingtalk.repository.AcRecordRepository.deleteAll(..))")
@Pointcut("execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.deleteAll(..))")
public void deleteRecordList(){
}

@Pointcut("execution(* com.softeng.dingtalk.repository.AcRecordRepository.saveAll(..)) ||" +
"execution(* com.softeng.dingtalk.repository.AcRecordRepository.saveBatch(..))")
@Pointcut("execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.saveAll(..)) ||" +
"execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.saveBatch(..))")
public void saveRecordList(){
}

Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/softeng/dingtalk/aspect/AccessPermission.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.softeng.dingtalk.aspect;

import com.softeng.dingtalk.enums.PermissionEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 指定权限通行
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessPermission {
PermissionEnum value();
}
28 changes: 28 additions & 0 deletions src/main/java/com/softeng/dingtalk/aspect/AuthAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.softeng.dingtalk.aspect;

import com.softeng.dingtalk.component.UserContextHolder;
import com.softeng.dingtalk.exception.CustomExceptionEnum;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Aspect
@Component
public class AuthAspect {

@Resource
private UserContextHolder userContextHolder;

@Before("@annotation(accessPermission)")
public void checkPermission(AccessPermission accessPermission) {
for (Integer permissionId : userContextHolder.getUserContext().getPermissionIds()) {
if (accessPermission.value().getCode() == permissionId) {
return;
}
}
CustomExceptionEnum.ACCESS_DENIED.throwWithMessage("需要权限:" + accessPermission.value().getName());
}

}

This file was deleted.

72 changes: 58 additions & 14 deletions src/main/java/com/softeng/dingtalk/component/Timer.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,23 @@
package com.softeng.dingtalk.component;

import com.softeng.dingtalk.api.MessageApi;
import com.softeng.dingtalk.constant.LocalUrlConstant;
import com.softeng.dingtalk.entity.*;
import com.softeng.dingtalk.component.dingApi.MessageApi;
import com.softeng.dingtalk.dao.repository.*;
import com.softeng.dingtalk.enums.Position;
import com.softeng.dingtalk.repository.AcRecordRepository;
import com.softeng.dingtalk.repository.ExternalPaperRepository;
import com.softeng.dingtalk.repository.InternalPaperRepository;
import com.softeng.dingtalk.repository.VoteRepository;
import com.softeng.dingtalk.service.InitService;
import com.softeng.dingtalk.service.SystemService;
import com.softeng.dingtalk.service.VoteService;
import com.softeng.dingtalk.service.WeeklyReportService;
import com.softeng.dingtalk.enums.PracticeStateEnum;
import com.softeng.dingtalk.entity.*;
import com.softeng.dingtalk.service.*;
import com.softeng.dingtalk.utils.stuNumUtils.StuNumParser;
import com.softeng.dingtalk.utils.stuNumUtils.StuNumParserFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

/**
* @author zhanyeye
Expand Down Expand Up @@ -54,6 +50,11 @@ public class Timer {
@Autowired
SystemService systemService;

@Resource
private PracticeRepository practiceRepository;
@Resource
private UserRepository userRepository;

/**
* 每周周日23点扫描一次,给当天还未提交周报的博士、硕士发送提醒消息
*/
Expand All @@ -67,9 +68,9 @@ public void weeklyReportAndPerformanceFillingReminder() {
* 每周一凌晨2点扫描一次,查询周日一整天没有提交周报的博士、硕士,每人扣 1 ac
*/
@Scheduled(cron = "0 0 2 ? * MON")
public void deductedPointsUnsubmittedWeeklyReport() {
public void deductedPointsUnSubmittedWeeklyReport() {
log.info(LocalDate.now() + " 定时扫描扣分");
systemService.manulDeductedPointsUnsubmittedWeeklyReport(LocalDate.now());
systemService.manualDeductedPointsUnSubmittedWeeklyReport(LocalDate.now().minusDays(1));
}

//每天凌晨扫描一次,会议的AC结算
Expand Down Expand Up @@ -174,4 +175,47 @@ private String startVoteInfo(String title, LocalDateTime dateTime) {
return " #### 投票 \n ##### 论文: " + title + " \n 截止时间: " + dateTime.toLocalTime().toString();
}


// @Scheduled(cron = "0/20 * * * * ?")
// public void test() {
// log.info(LocalDate.now() + "test");
// }

/**
* 每天凌晨一点根据审核通过的实习申请修改对应用户的工作状态
*/
@Scheduled(cron = "0 0 1 * * ?")
public void editWorkState() {
log.info("每天凌晨一点根据审核通过的实习申请修改对应用户的工作状态");
List<Practice> practiceList = practiceRepository.findAllByStateEquals(PracticeStateEnum.ACCEPTED.getValue());
LocalDate cur = LocalDate.now();
practiceList.forEach(practice -> {
LocalDate start = practice.getStart();
LocalDate end = practice.getEnd();
User user = practice.getUser();
user.setWorkState((cur.isAfter(start) || cur.isEqual(start)) && (cur.isBefore(end) || cur.isEqual(end)));
userRepository.save(user);
});
}

/**
* 每月22日15点10分进行用户职位的变更
*/
@Scheduled(cron = "0 10 15 22 * ?")
public void updateUserPosition() {
log.info("每月22日15点10分进行用户职位的变更");
userRepository.findAllValidUser()
.stream()
// 筛选出设置了学号的用户
.filter((user -> user.getStuNum() != null))
.forEach((user -> {
// 排除教师用户
if(user.getPosition() == Position.TEACHER || user.getPosition() == Position.DOCTOR) return;
StuNumParser parser= StuNumParserFactory.generateParser(user.getStuNum().trim().length());
assert parser != null;
user.setPosition(parser.parse(user.getStuNum()));
userRepository.save(user);
}));
}

}
Loading
Loading