diff --git a/Dockerfile b/Dockerfile index 0657fa9f..deaa7465 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,34 @@ +#FROM openjdk:11 +#MAINTAINER LiXiaoKang 191250075@smail.nju.edu.cn +#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 zhanyeye@qq.com -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="191250075@smail.nju.edu.cn" +# 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"] \ No newline at end of file +# run jar +ENTRYPOINT ["sh", "-c", "java -jar /app/app.jar --spring.profiles.active=$PROFILES"] diff --git a/README.md b/README.md index 00392d2d..8ea1be23 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ -+ 钉钉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) ### 注意事项 diff --git a/pom.xml b/pom.xml index accc90aa..08351e1e 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.softeng dingtalk - 0.0.1-SNAPSHOT + 2.0.1-SNAPSHOT dingtalk Demo project for dingtalk mini program @@ -182,7 +182,7 @@ com.github.ulisesbocchio jasypt-spring-boot-starter - 2.0.0 + 3.0.5 diff --git a/settings.xml b/settings.xml new file mode 100644 index 00000000..375fd900 --- /dev/null +++ b/settings.xml @@ -0,0 +1,14 @@ + + + + + alimaven + aliyun maven + http://maven.aliyun.com/nexus/content/groups/public/ + central + + + + \ No newline at end of file diff --git a/src/main/java/com/softeng/dingtalk/DingtalkApplication.java b/src/main/java/com/softeng/dingtalk/DingtalkApplication.java index 84a69791..f50f6011 100644 --- a/src/main/java/com/softeng/dingtalk/DingtalkApplication.java +++ b/src/main/java/com/softeng/dingtalk/DingtalkApplication.java @@ -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; @@ -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 { diff --git a/src/main/java/com/softeng/dingtalk/aspect/ACBlockchainAspect.java b/src/main/java/com/softeng/dingtalk/aspect/ACBlockchainAspect.java index 01649f5f..09a9b0ba 100644 --- a/src/main/java/com/softeng/dingtalk/aspect/ACBlockchainAspect.java +++ b/src/main/java/com/softeng/dingtalk/aspect/ACBlockchainAspect.java @@ -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}") @@ -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(){ } diff --git a/src/main/java/com/softeng/dingtalk/aspect/AccessPermission.java b/src/main/java/com/softeng/dingtalk/aspect/AccessPermission.java new file mode 100644 index 00000000..fe212caf --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/aspect/AccessPermission.java @@ -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(); +} diff --git a/src/main/java/com/softeng/dingtalk/aspect/AuthAspect.java b/src/main/java/com/softeng/dingtalk/aspect/AuthAspect.java new file mode 100644 index 00000000..41b1e9a2 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/aspect/AuthAspect.java @@ -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()); + } + +} diff --git a/src/main/java/com/softeng/dingtalk/component/EncryptorComponent.java b/src/main/java/com/softeng/dingtalk/component/EncryptorComponent.java deleted file mode 100644 index b601d304..00000000 --- a/src/main/java/com/softeng/dingtalk/component/EncryptorComponent.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.softeng.dingtalk.component; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; -import org.springframework.security.crypto.encrypt.Encryptors; -import org.springframework.stereotype.Component; -import org.springframework.web.server.ResponseStatusException; - -import java.util.Map; - -/** - * @author zhanyeye - * @description 加密和解密的组件,用于token的加密和解密 - * @create 12/11/2019 10:08 AM - */ -@Component -public class EncryptorComponent { - @Value("${my.secretkey}") - private String secretKey; - @Value("${my.salt}") - private String salt; - - @Autowired - private ObjectMapper objectMapper; - - /** - * 加密: 将一个map序列化为字符串,并加密 - * @param payload - * @return - */ - public String encrypt(Map payload) { - try { - String json = objectMapper.writeValueAsString(payload); - return Encryptors.text(secretKey, salt).encrypt(json); - } catch (JsonProcessingException e) {} - return null; - } - - /** - * 解密: 将字符串反序列化为map, 并解密 - * @param encryptString - * @return - */ - public Map decrypt(String encryptString) { - try { - String json = Encryptors.text(secretKey, salt).decrypt(encryptString); - return objectMapper.readValue(json, Map.class); - } catch (Exception e) { - //若反序列化时抛异常,则说明 token 是伪造的,未登录! - throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "未登录"); - } - } -} diff --git a/src/main/java/com/softeng/dingtalk/component/Timer.java b/src/main/java/com/softeng/dingtalk/component/Timer.java index b9cf5751..0e248e13 100644 --- a/src/main/java/com/softeng/dingtalk/component/Timer.java +++ b/src/main/java/com/softeng/dingtalk/component/Timer.java @@ -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 @@ -54,6 +50,11 @@ public class Timer { @Autowired SystemService systemService; + @Resource + private PracticeRepository practiceRepository; + @Resource + private UserRepository userRepository; + /** * 每周周日23点扫描一次,给当天还未提交周报的博士、硕士发送提醒消息 */ @@ -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().minusDays(1)); + systemService.manualDeductedPointsUnSubmittedWeeklyReport(LocalDate.now().minusDays(1)); } //每天凌晨扫描一次,会议的AC结算 @@ -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 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); + }); + } + + /** + * 每年8月1日凌晨两点进行用户职位的变更 + */ + @Scheduled(cron = "0 0 2 1 8 ?") + public void updateUserPosition() { + log.info("每年8月1日进行用户职位的变更"); + userRepository.findAllValidUser() + .stream() +// 筛选出设置了学号的用户 + .filter((user -> user.getStuNum() != null)) + .forEach((user -> { + // 排除教师用户 + if(user.getPosition() == Position.TEACHER) return; + StuNumParser parser= StuNumParserFactory.generateParser(user.getStuNum().length()); + assert parser != null; + user.setPosition(parser.parse(user.getStuNum())); + userRepository.save(user); + })); + } + } diff --git a/src/main/java/com/softeng/dingtalk/component/UserContextHolder.java b/src/main/java/com/softeng/dingtalk/component/UserContextHolder.java new file mode 100644 index 00000000..e93c6ea5 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/UserContextHolder.java @@ -0,0 +1,72 @@ +package com.softeng.dingtalk.component; + +import com.softeng.dingtalk.component.encryptor.EncryptorComponent; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: LiXiaoKang + * @CreateTime: 2023-02-09 + * @Description: 拦截器保存用户信息,切面验证权限后销毁 + * @Version: 1.0 + */ + +@Slf4j +@Component +public class UserContextHolder { + + @Resource + EncryptorComponent encryptorComponent; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + @Accessors(chain = true) + public static class UserContext { + /** + * 对应user表的id字段 + */ + private Integer uid; + /** + * 这里的权限不仅包括permission表中的权限,还包括其他业务权限(例如评审,是否是是该组成员等) + */ + private List permissionIds; + + /** + * + * 用户角色,v2已弃用,设置主要是为了兼容v1 + */ + @Deprecated + private String role; + } + private final ThreadLocal userContext = new ThreadLocal<>(); + + public UserContext getUserContext() { + return userContext.get(); + } + + public void setUserContext(UserContext userContext) { + this.userContext.set(userContext); + } + + public void remove() { + this.userContext.remove(); + } + + public UserContext decrypt(String str) { + return encryptorComponent.decrypt(str, UserContextHolder.UserContext.class); + } + + public String encrypt(UserContext userContext) { + return encryptorComponent.encrypt(userContext); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/AbstractConvertorTemplate.java b/src/main/java/com/softeng/dingtalk/component/convertor/AbstractConvertorTemplate.java new file mode 100644 index 00000000..fc979f1a --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/AbstractConvertorTemplate.java @@ -0,0 +1,48 @@ +package com.softeng.dingtalk.component.convertor; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +/** + * @Author: LiXiaoKang + * @CreateTime: 2023-02-08 + * @Description: 对象转换器的模版类,实现init方法register特殊字段逻辑就可以使用 + * @Version: 1.0 + */ + +public abstract class AbstractConvertorTemplate implements CommonConvertorInterface { + + private final CommonConvertorHelper req2entityHelper; + private final CommonConvertorHelper entity2respHelper; + + public AbstractConvertorTemplate() { + // 被继承后可以获取自身类型参数 + Type[] types = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments(); + Class reqClass = (Class) types[0]; + Class respClass = (Class) types[1]; + Class entityClass = (Class) types[2]; + req2entityHelper = new CommonConvertorHelper<>(reqClass, entityClass); + entity2respHelper = new CommonConvertorHelper<>(entityClass, respClass); + req2EntityLogicRegister(req2entityHelper); + entity2RespLogicRegister(entity2respHelper); + } + + /** + * 留四个钩子,在这把四个helper的例外转换逻辑register进去 + * 没有特殊逻辑就不用管了 + */ + protected void req2EntityLogicRegister(CommonConvertorHelper helper) {} + protected void entity2RespLogicRegister(CommonConvertorHelper helper) {} + + + @Override + public ENTITY req2Entity(REQ req) { + return req2entityHelper.convert(req); + } + + + @Override + public RESP entity2Resp(ENTITY entity) { + return entity2respHelper.convert(entity); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/CommonConvertorHelper.java b/src/main/java/com/softeng/dingtalk/component/convertor/CommonConvertorHelper.java new file mode 100644 index 00000000..77bace40 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/CommonConvertorHelper.java @@ -0,0 +1,106 @@ +package com.softeng.dingtalk.component.convertor; + +import lombok.SneakyThrows; +import org.apache.commons.lang3.tuple.Triple; + +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: LiXiaoKang + * @CreateTime: 2023-02-08 + * @Description: 处理两个需要转换类的信息,调用方法进行转换 + * @Version: 1.0 + */ + +public class CommonConvertorHelper { + + /** + * 用户指定的转换 + */ + private final List>> fieldTriples = new ArrayList<>(); + + private final Class fromClass; + private final Class toClass; + + public CommonConvertorHelper(Class fromClass, Class toClass) { + this.fromClass = fromClass; + this.toClass = toClass; + // 存储可以直接转换的字段 名字相同 && 类型相同 + Field[] srcFields = fromClass.getDeclaredFields(); + Field[] tgtFields = toClass.getDeclaredFields(); + for (Field srcField : srcFields) { + for (Field tgtField : tgtFields) { + if (srcField.getName().equals(tgtField.getName()) && srcField.getType().equals(tgtField.getType())) { + fieldTriples.add(Triple.of(srcField, tgtField, FieldConvertor.SAME_FIELD_CONVERTOR)); + break; + } + } + } + } + + @SneakyThrows + public CommonConvertorHelper register(Field srcField, Field tgtField, FieldConvertor fieldConvertor) { + // 1. 参数校验 + assert fromClass.getDeclaredField(srcField.getName()).getType().equals(srcField.getType()) + && toClass.getDeclaredField(tgtField.getName()).getType().equals(tgtField.getType()); + ParameterizedType parameterizedType = (ParameterizedType) fieldConvertor.getClass().getGenericInterfaces()[0]; + assert parameterizedType.getActualTypeArguments()[0].equals(srcField.getType()) + && parameterizedType.getActualTypeArguments()[1].equals(tgtField.getType()); + // 2. 加入列表 + this.fieldTriples.add(Triple.of(srcField, tgtField, fieldConvertor)); + return this; + } + + @SneakyThrows + public CommonConvertorHelper register(String srcFieldName, String tgtFieldName, FieldConvertor fieldConvertor) { + return register(fromClass.getDeclaredField(srcFieldName), toClass.getDeclaredField(tgtFieldName), fieldConvertor); + } + + @SneakyThrows + public TO convert(FROM from) { + if (from == null) { + return null; + } + TO to = toClass.getDeclaredConstructor().newInstance(); + for (Triple> triple : fieldTriples) { + Field srcField = triple.getLeft(); + Field tgtField = triple.getMiddle(); + FieldConvertor fieldConvertor = triple.getRight(); + boolean srcAcc = srcField.canAccess(from); + boolean tgtAcc = tgtField.canAccess(to); + srcField.setAccessible(true); + tgtField.setAccessible(true); + tgtField.set(to, fieldConvertor.convert(srcField.get(from))); + srcField.setAccessible(srcAcc); + tgtField.setAccessible(tgtAcc); + } + return to; + } + + @FunctionalInterface + public interface FieldConvertor { + TO convert(FROM from); + + /** + * 不能写成lambda,否则获取不到泛型参数 + */ + FieldConvertor SAME_FIELD_CONVERTOR = from -> from; +// FieldConvertor STRING_CLASSIFIER_ENUM_FIELD_CONVERTOR = new FieldConvertor() { +// @Override +// public ClassifierEnum convert(String s) { +// return ClassifierEnum.fromString(s); +// } +// }; +// FieldConvertor CLASSIFIER_ENUM_STRING_FIELD_CONVERTOR = new FieldConvertor() { +// @Override +// public String convert(ClassifierEnum classifierEnum) { +// return classifierEnum.toString(); +// } +// }; + + } + +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/CommonConvertorInterface.java b/src/main/java/com/softeng/dingtalk/component/convertor/CommonConvertorInterface.java new file mode 100644 index 00000000..f9bf3250 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/CommonConvertorInterface.java @@ -0,0 +1,35 @@ +package com.softeng.dingtalk.component.convertor; + +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author: LiXiaokang + * @CreateTime: 2023-02-08 + * @Description: 微服务里四层对象转换器的接口 + * @Version: 1.0 + */ +public interface CommonConvertorInterface { + + ENTITY req2Entity(REQ req); + RESP entity2Resp(ENTITY entity); + + default List _batchTransfer(List froms, Function transferLogic) { + return CollectionUtils.isEmpty(froms) + ? new ArrayList<>() + : froms.stream().map(transferLogic).collect(Collectors.toList()); + } + + default List batchReq2Entity(List reqList) { + return _batchTransfer(reqList, this::req2Entity); + } + + default List batchEntity2Resp(List entities) { + return _batchTransfer(entities, this::entity2Resp); + } + +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/InternshipPeriodRecommendedConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/InternshipPeriodRecommendedConvertor.java new file mode 100644 index 00000000..3f390271 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/InternshipPeriodRecommendedConvertor.java @@ -0,0 +1,22 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.InternshipPeriodRecommendedReq; +import com.softeng.dingtalk.dto.resp.InternshipPeriodRecommendedResp; +import com.softeng.dingtalk.entity.InternshipPeriodRecommended; +import com.softeng.dingtalk.entity.User; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +@Component +public class InternshipPeriodRecommendedConvertor extends AbstractConvertorTemplate{ + @Override + public InternshipPeriodRecommended req2Entity(InternshipPeriodRecommendedReq internshipPeriodRecommendedReq) { + InternshipPeriodRecommended res = super.req2Entity(internshipPeriodRecommendedReq); + res.setAuthor(new User().setId(internshipPeriodRecommendedReq.getAuthorId())); +// 这里加上时间,因为News有release_time字段,且为null, +// 会让数据库表的default CURRENT_TIMESTAMP失效 + res.setReleaseTime(LocalDateTime.now()); + return res; + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/NewsConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/NewsConvertor.java new file mode 100644 index 00000000..73a5b729 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/NewsConvertor.java @@ -0,0 +1,32 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.NewsReq; +import com.softeng.dingtalk.dto.resp.NewsResp; +import com.softeng.dingtalk.entity.News; +import com.softeng.dingtalk.entity.User; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +@Component +public class NewsConvertor extends AbstractConvertorTemplate{ + + @Override + public News req2Entity(NewsReq newsReq) { + News res = super.req2Entity(newsReq); + res.setAuthor(new User().setId(newsReq.getAuthorId())); + res.setIsDeleted(0); + res.setIsShown(1); +// 这里加上时间,因为News有release_time字段,且为null, +// 会让数据库表的default CURRENT_TIMESTAMP失效 + res.setReleaseTime(LocalDateTime.now()); + return res; + } + + @Override + public NewsResp entity2Resp(News news) { + return super.entity2Resp(news) + .setAuthorName(news.getAuthor().getName()) + .setAuthorId(news.getAuthor().getId()); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/PatentConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/PatentConvertor.java new file mode 100644 index 00000000..21badf67 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/PatentConvertor.java @@ -0,0 +1,25 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.PatentReq; +import com.softeng.dingtalk.dto.resp.PatentResp; +import com.softeng.dingtalk.entity.Patent; +import com.softeng.dingtalk.utils.StreamUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class PatentConvertor extends AbstractConvertorTemplate { + @Resource + private UserConvertor userConvertor; + @Resource + private PatentDetailConvertor patentDetailConvertor; + + @Override + public PatentResp entity2Resp + (Patent patent) { + return super.entity2Resp(patent) + .setApplicant(userConvertor.entity2Resp(patent.getApplicant())) + .setPatentDetailList(StreamUtils.map(patent.getPatentDetailList(), patentDetail -> patentDetailConvertor.entity2Resp(patentDetail))); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/PatentDetailConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/PatentDetailConvertor.java new file mode 100644 index 00000000..fe9420bc --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/PatentDetailConvertor.java @@ -0,0 +1,19 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.PatentDetailReq; +import com.softeng.dingtalk.dto.resp.PatentDetailResp; +import com.softeng.dingtalk.entity.PatentDetail; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class PatentDetailConvertor extends AbstractConvertorTemplate { + @Resource + private UserConvertor userConvertor; + + @Override + public PatentDetailResp entity2Resp(PatentDetail patentDetail) { + return super.entity2Resp(patentDetail).setUser(userConvertor.entity2Resp(patentDetail.getUser())); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/PermissionConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/PermissionConvertor.java new file mode 100644 index 00000000..30ba30f7 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/PermissionConvertor.java @@ -0,0 +1,10 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.PermissionReq; +import com.softeng.dingtalk.dto.resp.PermissionResp; +import com.softeng.dingtalk.entity.Permission; +import org.springframework.stereotype.Component; + +@Component +public class PermissionConvertor extends AbstractConvertorTemplate { +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/PracticeConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/PracticeConvertor.java new file mode 100644 index 00000000..3cc45a29 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/PracticeConvertor.java @@ -0,0 +1,27 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dao.repository.UserRepository; +import com.softeng.dingtalk.dto.req.PracticeReq; +import com.softeng.dingtalk.dto.resp.PracticeResp; +import com.softeng.dingtalk.entity.Practice; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class PracticeConvertor extends AbstractConvertorTemplate { + @Resource + private UserConvertor userConvertor; + @Resource + private UserRepository userRepository; + + @Override + public PracticeResp entity2Resp(Practice practice) { + return super.entity2Resp(practice).setUser(userConvertor.entity2Resp(practice.getUser())); + } + + @Override + public Practice req2Entity(PracticeReq practiceReq) { + return super.req2Entity(practiceReq).setUser(userRepository.findById(practiceReq.getUserId()).get()); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/ReimbursementConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/ReimbursementConvertor.java new file mode 100644 index 00000000..0a549da3 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/ReimbursementConvertor.java @@ -0,0 +1,18 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.ReimbursementReq; +import com.softeng.dingtalk.dto.resp.ReimbursementResp; +import com.softeng.dingtalk.entity.Reimbursement; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class ReimbursementConvertor extends AbstractConvertorTemplate { + @Resource + private UserConvertor userConvertor; + @Override + public ReimbursementResp entity2Resp(Reimbursement reimbursement) { + return super.entity2Resp(reimbursement).setUser(userConvertor.entity2Resp(reimbursement.getUser())); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/TeamConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/TeamConvertor.java new file mode 100644 index 00000000..b20c1b5a --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/TeamConvertor.java @@ -0,0 +1,10 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.TeamReq; +import com.softeng.dingtalk.dto.resp.TeamResp; +import com.softeng.dingtalk.entity.Team; +import org.springframework.stereotype.Component; + +@Component +public class TeamConvertor extends AbstractConvertorTemplate { +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/UserConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/UserConvertor.java new file mode 100644 index 00000000..1e602ee5 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/UserConvertor.java @@ -0,0 +1,26 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.UserReq; +import com.softeng.dingtalk.dto.resp.UserResp; +import com.softeng.dingtalk.entity.User; +import com.softeng.dingtalk.service.PermissionService; +import com.softeng.dingtalk.service.TeamService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class UserConvertor extends AbstractConvertorTemplate { + + @Resource + private PermissionService permissionService; + @Resource + private TeamService teamService; + + @Override + public UserResp entity2Resp(User user) { + return super.entity2Resp(user) + .setPermissionList(permissionService.getPermissions(user.getId())) + .setTeamList(teamService.getTeams(user.getId())); + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/UserPermissionConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/UserPermissionConvertor.java new file mode 100644 index 00000000..93597408 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/UserPermissionConvertor.java @@ -0,0 +1,11 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.UserPermissionReq; +import com.softeng.dingtalk.dto.resp.UserPermissionResp; +import com.softeng.dingtalk.entity.UserPermission; +import org.springframework.stereotype.Component; + +@Component +public class UserPermissionConvertor extends AbstractConvertorTemplate { +} + diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/UserTeamConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/UserTeamConvertor.java new file mode 100644 index 00000000..b23a0b3d --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/UserTeamConvertor.java @@ -0,0 +1,10 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.UserTeamReq; +import com.softeng.dingtalk.dto.resp.UserTeamResp; +import com.softeng.dingtalk.entity.UserTeam; +import org.springframework.stereotype.Component; + +@Component +public class UserTeamConvertor extends AbstractConvertorTemplate { +} diff --git a/src/main/java/com/softeng/dingtalk/component/convertor/VMApplyConvertor.java b/src/main/java/com/softeng/dingtalk/component/convertor/VMApplyConvertor.java new file mode 100644 index 00000000..dfd8b884 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/convertor/VMApplyConvertor.java @@ -0,0 +1,19 @@ +package com.softeng.dingtalk.component.convertor; + +import com.softeng.dingtalk.dto.req.VMApplyReq; +import com.softeng.dingtalk.dto.resp.VMApplyResp; +import com.softeng.dingtalk.entity.VMApply; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class VMApplyConvertor extends AbstractConvertorTemplate { + @Resource + private UserConvertor userConvertor; + + @Override + public VMApplyResp entity2Resp(VMApply vmApply) { + return super.entity2Resp(vmApply).setUser(userConvertor.entity2Resp(vmApply.getUser())); + } +} diff --git a/src/main/java/com/softeng/dingtalk/api/BaseApi.java b/src/main/java/com/softeng/dingtalk/component/dingApi/BaseApi.java similarity index 99% rename from src/main/java/com/softeng/dingtalk/api/BaseApi.java rename to src/main/java/com/softeng/dingtalk/component/dingApi/BaseApi.java index 9d5b3db4..6327bf25 100644 --- a/src/main/java/com/softeng/dingtalk/api/BaseApi.java +++ b/src/main/java/com/softeng/dingtalk/component/dingApi/BaseApi.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.api; +package com.softeng.dingtalk.component.dingApi; import com.aliyun.dingtalkdrive_1_0.models.*; import com.aliyun.oss.ClientConfiguration; diff --git a/src/main/java/com/softeng/dingtalk/api/ContactsApi.java b/src/main/java/com/softeng/dingtalk/component/dingApi/ContactsApi.java similarity index 98% rename from src/main/java/com/softeng/dingtalk/api/ContactsApi.java rename to src/main/java/com/softeng/dingtalk/component/dingApi/ContactsApi.java index fbbf4787..9c8d65cb 100644 --- a/src/main/java/com/softeng/dingtalk/api/ContactsApi.java +++ b/src/main/java/com/softeng/dingtalk/component/dingApi/ContactsApi.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.api; +package com.softeng.dingtalk.component.dingApi; import com.dingtalk.api.request.OapiDepartmentListRequest; import com.dingtalk.api.request.OapiUserGetDeptMemberRequest; diff --git a/src/main/java/com/softeng/dingtalk/api/MessageApi.java b/src/main/java/com/softeng/dingtalk/component/dingApi/MessageApi.java similarity index 98% rename from src/main/java/com/softeng/dingtalk/api/MessageApi.java rename to src/main/java/com/softeng/dingtalk/component/dingApi/MessageApi.java index e698986f..23956c57 100644 --- a/src/main/java/com/softeng/dingtalk/api/MessageApi.java +++ b/src/main/java/com/softeng/dingtalk/component/dingApi/MessageApi.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.api; +package com.softeng.dingtalk.component.dingApi; import com.dingtalk.api.request.OapiChatSendRequest; import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request; diff --git a/src/main/java/com/softeng/dingtalk/api/OAApi.java b/src/main/java/com/softeng/dingtalk/component/dingApi/OAApi.java similarity index 87% rename from src/main/java/com/softeng/dingtalk/api/OAApi.java rename to src/main/java/com/softeng/dingtalk/component/dingApi/OAApi.java index ae36d6c6..321654c9 100644 --- a/src/main/java/com/softeng/dingtalk/api/OAApi.java +++ b/src/main/java/com/softeng/dingtalk/component/dingApi/OAApi.java @@ -1,19 +1,16 @@ -package com.softeng.dingtalk.api; +package com.softeng.dingtalk.component.dingApi; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiProcessInstanceTerminateRequest; -import com.dingtalk.api.request.OapiProcessWorkrecordCreateRequest; import com.dingtalk.api.request.OapiProcessinstanceCreateRequest; import com.dingtalk.api.request.OapiProcessinstanceGetRequest; import com.dingtalk.api.response.OapiProcessInstanceTerminateResponse; -import com.dingtalk.api.response.OapiProcessWorkrecordCreateResponse; import com.dingtalk.api.response.OapiProcessinstanceCreateResponse; import com.dingtalk.api.response.OapiProcessinstanceGetResponse; import com.softeng.dingtalk.entity.AbsentOA; import com.softeng.dingtalk.entity.User; import com.softeng.dingtalk.service.UserService; -import com.taobao.api.ApiException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -22,8 +19,6 @@ import org.springframework.web.server.ResponseStatusException; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; @Slf4j @@ -33,29 +28,29 @@ public class OAApi extends BaseApi{ UserService userService; @Value("${OA.askForLeaveProcessCode}") private String absentOAProcessCode; - public String createAbsentOA(AbsentOA absentOA) { + public String createAbsentOA(AbsentOA absentOAPO) { try { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/create"); OapiProcessinstanceCreateRequest request= new OapiProcessinstanceCreateRequest(); - request.setAgentId(BaseApi.AGENTID); + request.setAgentId(AGENTID); //设置process code request.setProcessCode(absentOAProcessCode); - request.setOriginatorUserId(userService.getUserid(absentOA.getUser().getId())); + request.setOriginatorUserId(userService.getUserid(absentOAPO.getUser().getId())); request.setDeptId(-1L); //设置表单内容 List form = new ArrayList<>(); OapiProcessinstanceCreateRequest.FormComponentValueVo type = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); form.add(type); type.setName("请假类型"); - type.setValue(absentOA.getType()); + type.setValue(absentOAPO.getType()); OapiProcessinstanceCreateRequest.FormComponentValueVo start = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); form.add(start); start.setName("开始时间"); - start.setValue(absentOA.getDingTalkSchedule().getStart().toString()); + start.setValue(absentOAPO.getDingTalkSchedule().getStart().toString()); OapiProcessinstanceCreateRequest.FormComponentValueVo end = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); form.add(end); end.setName("结束时间"); - end.setValue(absentOA.getDingTalkSchedule().getEnd().toString()); + end.setValue(absentOAPO.getDingTalkSchedule().getEnd().toString()); // OapiProcessinstanceCreateRequest.FormComponentValueVo dayNum = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); // form.add(dayNum); // dayNum.setName("结束时间"); @@ -63,13 +58,13 @@ public String createAbsentOA(AbsentOA absentOA) { OapiProcessinstanceCreateRequest.FormComponentValueVo reason = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); form.add(reason); reason.setName("请假缘由"); - reason.setValue(absentOA.getReason()); + reason.setValue(absentOAPO.getReason()); request.setFormComponentValues(form); //设置审批人 List processInstanceApproverVoList = new ArrayList<>(); OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo processInstanceApproverVo = new OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo(); processInstanceApproverVoList.add(processInstanceApproverVo); - request.setApprovers(absentOA.getDingTalkSchedule().getOrganizer().getUserid()); + request.setApprovers(absentOAPO.getDingTalkSchedule().getOrganizer().getUserid()); OapiProcessinstanceCreateResponse rsp = client.execute(request, getAccessToken()); return rsp.getProcessInstanceId(); } catch (Exception e) { diff --git a/src/main/java/com/softeng/dingtalk/api/ReportApi.java b/src/main/java/com/softeng/dingtalk/component/dingApi/ReportApi.java similarity index 98% rename from src/main/java/com/softeng/dingtalk/api/ReportApi.java rename to src/main/java/com/softeng/dingtalk/component/dingApi/ReportApi.java index 5967222b..811031a0 100644 --- a/src/main/java/com/softeng/dingtalk/api/ReportApi.java +++ b/src/main/java/com/softeng/dingtalk/component/dingApi/ReportApi.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.api; +package com.softeng.dingtalk.component.dingApi; import com.dingtalk.api.request.OapiReportListRequest; import com.dingtalk.api.response.OapiReportListResponse; diff --git a/src/main/java/com/softeng/dingtalk/api/ScheduleApi.java b/src/main/java/com/softeng/dingtalk/component/dingApi/ScheduleApi.java similarity index 99% rename from src/main/java/com/softeng/dingtalk/api/ScheduleApi.java rename to src/main/java/com/softeng/dingtalk/component/dingApi/ScheduleApi.java index 41b85455..40720efe 100644 --- a/src/main/java/com/softeng/dingtalk/api/ScheduleApi.java +++ b/src/main/java/com/softeng/dingtalk/component/dingApi/ScheduleApi.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.api; +package com.softeng.dingtalk.component.dingApi; import com.aliyun.dingtalkcalendar_1_0.models.*; import com.aliyun.tea.TeaConverter; diff --git a/src/main/java/com/softeng/dingtalk/encryption/Encryption.java b/src/main/java/com/softeng/dingtalk/component/encryptor/Encryption.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/encryption/Encryption.java rename to src/main/java/com/softeng/dingtalk/component/encryptor/Encryption.java index 7fad003e..1d86ca02 100644 --- a/src/main/java/com/softeng/dingtalk/encryption/Encryption.java +++ b/src/main/java/com/softeng/dingtalk/component/encryptor/Encryption.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.encryption; +package com.softeng.dingtalk.component.encryptor; import org.jasypt.util.text.BasicTextEncryptor; import org.springframework.beans.factory.annotation.Value; @@ -6,6 +6,7 @@ import org.springframework.stereotype.Component; @Component +@Deprecated public class Encryption { @Value("${encryption.key}") diff --git a/src/main/java/com/softeng/dingtalk/component/encryptor/EncryptorComponent.java b/src/main/java/com/softeng/dingtalk/component/encryptor/EncryptorComponent.java new file mode 100644 index 00000000..4030eac2 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/encryptor/EncryptorComponent.java @@ -0,0 +1,86 @@ +package com.softeng.dingtalk.component.encryptor; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.encrypt.Encryptors; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ResponseStatusException; + +import java.util.Map; + +/** + * @author LiXiaoKang + * @description 加密和解密的组件,用于token的加密和解密(与UserContentHolder结合使用) + * @create 2/20/2023 + */ +@Component +public class EncryptorComponent { + @Value("${my.secretkey}") + private String ENCRYPT_SECRET_KEY; + @Value("${my.salt}") + private String FIXED_SALT; + + public static final int DYNAMIC_SALT_LENGTH = 10; + + @Autowired + private ObjectMapper objectMapper; + + /** + * 加密: 将一个map序列化为字符串,并加密 + * @param payload + * @return + */ + public String encrypt(Map payload) { + try { + String json = objectMapper.writeValueAsString(payload); + return Encryptors.text(ENCRYPT_SECRET_KEY, FIXED_SALT).encrypt(json); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + /** + * 解密: 将字符串反序列化为map, 并解密 + * @param encryptString + * @return + */ + public Map decrypt(String encryptString) { + try { + String json = Encryptors.text(ENCRYPT_SECRET_KEY, FIXED_SALT).decrypt(encryptString); + return objectMapper.readValue(json, Map.class); + } catch (Exception e) { + //若反序列化时抛异常,则说明 token 是伪造的,未登录! + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "未登录"); + } + } + + + /** + * @description 用于ContextHolder的加解密 + */ + + public String encrypt(T obj) { + try { + String json = new ObjectMapper().writeValueAsString(obj); + String dynamicSalt = RandomStringUtils.randomAlphabetic(DYNAMIC_SALT_LENGTH); + return Encryptors + .text(ENCRYPT_SECRET_KEY, FIXED_SALT) + .encrypt(dynamicSalt + json); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public T decrypt(String str, Class tClass) { + try { + String plainText = Encryptors.text(ENCRYPT_SECRET_KEY, FIXED_SALT).decrypt(str); + return new ObjectMapper().readValue(plainText.substring(DYNAMIC_SALT_LENGTH), tClass); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/softeng/dingtalk/component/interceptor/LoginInterceptor.java b/src/main/java/com/softeng/dingtalk/component/interceptor/LoginInterceptor.java new file mode 100644 index 00000000..9348a570 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/component/interceptor/LoginInterceptor.java @@ -0,0 +1,60 @@ +package com.softeng.dingtalk.component.interceptor; + +import com.softeng.dingtalk.component.encryptor.EncryptorComponent; +import com.softeng.dingtalk.component.UserContextHolder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ResponseStatusException; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Optional; + +/** + * @author zhanyeye + * @description 登录拦截器 + * @date 12/8/2019 + */ +@Component +public class LoginInterceptor implements HandlerInterceptor { +// @Autowired +// private EncryptorComponent encryptorComponent; + @Resource + private UserContextHolder userContextHolder; + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { +// String tmp = request.getHeader("token"); + Optional.ofNullable(request.getHeader("token")) + .ifPresentOrElse(token -> { + // 如果token存在,则将token 解密后 里面的 uid 和 aid 塞入,request 请求中 + // 这个token 是在客户端第一次登录(向LoginController发请求),登录成功后 + // LoginController 封装 uid 和 aid 到repsonse响应,给客户端,用于后续客户端发送的请求的声明识别 + + /** + * @Deprecated: 废弃做法 + */ +// var token_map = encryptorComponent.decrypt(token); +// request.setAttribute("uid", token_map.get("uid")); //塞入 用户id +// request.setAttribute("aid", token_map.get("aid")); //塞入 用户权限值 + + + /** + * 改用userContextHolder保存登录信息(uid与permissionId) + */ + userContextHolder.setUserContext(userContextHolder.decrypt(token)); + request.setAttribute("uid", userContextHolder.getUserContext().getUid()); + }, () -> { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "未登录!"); + }); + return true; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + HandlerInterceptor.super.afterCompletion(request, response, handler, ex); + userContextHolder.remove(); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeng/dingtalk/config/CommonExceptionConfig.java b/src/main/java/com/softeng/dingtalk/config/CommonExceptionConfig.java new file mode 100644 index 00000000..580b3486 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/config/CommonExceptionConfig.java @@ -0,0 +1,38 @@ +package com.softeng.dingtalk.config; + +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.exception.CommonException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @Author: lilingj + * @CreateTime: 2023-01-14 19:31 + * @Description: 通用全局异常捕捉 + * @Version: 1.0 + */ + +@RestControllerAdvice +@Slf4j +public class CommonExceptionConfig { + + @ExceptionHandler(CommonException.class) + public CommonResult handleCommonException(CommonException e) { + log.error("CommonException", e); + return CommonResult.fail(e); + } + + @ExceptionHandler(RuntimeException.class) + public CommonResult handleRuntimeException(RuntimeException e) { + log.error("RuntimeException", e); + return CommonResult.fail(e); + } + + @ExceptionHandler(Exception.class) + public CommonResult handleException(Exception e) { + log.error("Exception", e); + return CommonResult.fail(e); + } + +} diff --git a/src/main/java/com/softeng/dingtalk/config/WebMvcConfig.java b/src/main/java/com/softeng/dingtalk/config/WebMvcConfig.java index 931544ad..523867c1 100644 --- a/src/main/java/com/softeng/dingtalk/config/WebMvcConfig.java +++ b/src/main/java/com/softeng/dingtalk/config/WebMvcConfig.java @@ -1,6 +1,6 @@ package com.softeng.dingtalk.config; -import com.softeng.dingtalk.interceptor.LoginInterceptor; +import com.softeng.dingtalk.component.interceptor.LoginInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -24,6 +24,8 @@ public void addInterceptors(InterceptorRegistry registry) { .addPathPatterns("/api/**") .excludePathPatterns("/api/login") .excludePathPatterns("/api/login_test/**") + .excludePathPatterns("/api/v2/login") + .excludePathPatterns("/api/v2/login_test/**") .excludePathPatterns("/wsapi"); } diff --git a/src/main/java/com/softeng/dingtalk/controller/ApplicationController.java b/src/main/java/com/softeng/dingtalk/controller/ApplicationController.java index 112f7645..7044be1a 100644 --- a/src/main/java/com/softeng/dingtalk/controller/ApplicationController.java +++ b/src/main/java/com/softeng/dingtalk/controller/ApplicationController.java @@ -1,7 +1,7 @@ package com.softeng.dingtalk.controller; import com.softeng.dingtalk.component.DateUtils; -import com.softeng.dingtalk.repository.DcSummaryRepository; +import com.softeng.dingtalk.dao.repository.DcSummaryRepository; import com.softeng.dingtalk.service.ApplicationService; import com.softeng.dingtalk.service.AuditService; import com.softeng.dingtalk.service.UserService; @@ -55,7 +55,7 @@ public int[] getDate(@RequestBody LocalDate date) { */ @PostMapping("/application") public void addApplication(@RequestAttribute int uid, @Valid @RequestBody ApplyVO vo) { - if (userService.isAuditor(uid) && uid == vo.getAuditorid()) { + if (uid == vo.getAuditorid()) { applicationService.addApplicationByAuditor(vo, uid); } else { applicationService.addApplication(vo, uid); @@ -69,7 +69,7 @@ public void addApplication(@RequestAttribute int uid, @Valid @RequestBody ApplyV */ @PutMapping("/application/{id}") public void updateApplication(@RequestAttribute int uid, @Valid @RequestBody ApplyVO vo) { - if (userService.isAuditor(uid) && uid == vo.getAuditorid()) { + if (uid == vo.getAuditorid()) { applicationService.updateApplicationByAuditor(vo, uid); } else { applicationService.updateApplication(vo, uid); diff --git a/src/main/java/com/softeng/dingtalk/controller/AuditController.java b/src/main/java/com/softeng/dingtalk/controller/AuditController.java index 4116a758..da12be75 100644 --- a/src/main/java/com/softeng/dingtalk/controller/AuditController.java +++ b/src/main/java/com/softeng/dingtalk/controller/AuditController.java @@ -1,8 +1,7 @@ package com.softeng.dingtalk.controller; import com.softeng.dingtalk.component.DateUtils; -import com.softeng.dingtalk.api.ReportApi; -import com.softeng.dingtalk.entity.DcRecord; +import com.softeng.dingtalk.component.dingApi.ReportApi; import com.softeng.dingtalk.service.AuditService; import com.softeng.dingtalk.service.NotifyService; import com.softeng.dingtalk.service.UserService; @@ -11,13 +10,11 @@ import com.softeng.dingtalk.vo.ToCheckVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.LocalTime; import java.util.List; import java.util.Map; diff --git a/src/main/java/com/softeng/dingtalk/controller/BugController.java b/src/main/java/com/softeng/dingtalk/controller/BugController.java index 8da4ee5a..49f103e8 100644 --- a/src/main/java/com/softeng/dingtalk/controller/BugController.java +++ b/src/main/java/com/softeng/dingtalk/controller/BugController.java @@ -1,7 +1,7 @@ package com.softeng.dingtalk.controller; import com.softeng.dingtalk.entity.Bug; -import com.softeng.dingtalk.repository.BugRepository; +import com.softeng.dingtalk.dao.repository.BugRepository; import com.softeng.dingtalk.service.BugService; import com.softeng.dingtalk.vo.BugCheckVO; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/softeng/dingtalk/controller/DingTalkScheduleController.java b/src/main/java/com/softeng/dingtalk/controller/DingTalkScheduleController.java index b1e6399c..074fa76d 100644 --- a/src/main/java/com/softeng/dingtalk/controller/DingTalkScheduleController.java +++ b/src/main/java/com/softeng/dingtalk/controller/DingTalkScheduleController.java @@ -1,7 +1,6 @@ package com.softeng.dingtalk.controller; import com.softeng.dingtalk.entity.AbsentOA; -import com.softeng.dingtalk.entity.DingTalkSchedule; import com.softeng.dingtalk.service.DingTalkScheduleService; import com.softeng.dingtalk.vo.AbsentOAVO; import com.softeng.dingtalk.vo.DingTalkScheduleVO; @@ -9,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Map; @Slf4j @@ -20,6 +18,7 @@ public class DingTalkScheduleController { DingTalkScheduleService dingTalkScheduleService; @PostMapping("/schedule") public void addSchedule(@RequestBody DingTalkScheduleVO dingTalkScheduleVO,@RequestAttribute int uid){ +// todo-有bug if(dingTalkScheduleVO.getId()==null) { dingTalkScheduleService.addSchedule(dingTalkScheduleVO,uid); } else { diff --git a/src/main/java/com/softeng/dingtalk/controller/EventPropertyController.java b/src/main/java/com/softeng/dingtalk/controller/EventPropertyController.java index fdf89748..1b3358ad 100644 --- a/src/main/java/com/softeng/dingtalk/controller/EventPropertyController.java +++ b/src/main/java/com/softeng/dingtalk/controller/EventPropertyController.java @@ -29,7 +29,7 @@ public EventProperty getEventInfo(@PathVariable int eventId){ @PostMapping("/event") public void addEventProperty(@RequestParam String eventPropertyJsonStr){ - EventProperty eventProperty= JSONObject.parseObject(eventPropertyJsonStr,EventProperty.class); + EventProperty eventProperty = JSONObject.parseObject(eventPropertyJsonStr, EventProperty.class); if(eventProperty.getId()==null){ eventPropertyService.addEventProperty(eventProperty); }else{ diff --git a/src/main/java/com/softeng/dingtalk/controller/ExcelController.java b/src/main/java/com/softeng/dingtalk/controller/ExcelController.java index c8fe5094..eddba868 100644 --- a/src/main/java/com/softeng/dingtalk/controller/ExcelController.java +++ b/src/main/java/com/softeng/dingtalk/controller/ExcelController.java @@ -20,6 +20,8 @@ public class ExcelController { @PostMapping("/excel/ac_data") public void downloadAcData(@RequestBody LocalDate date, HttpServletResponse response) throws IOException { +// response.setContentType("application/vnd.ms-excel;chartset=utf-8"); //文件扩展名为excel格式 +// response.setHeader("Content-Disposition", "attachment;filename=" + "fileName.xlsx"); excelService.writeAcDataByDate(date, response.getOutputStream()); } diff --git a/src/main/java/com/softeng/dingtalk/controller/InternshipPeriodRecommendedController.java b/src/main/java/com/softeng/dingtalk/controller/InternshipPeriodRecommendedController.java new file mode 100644 index 00000000..03d33ea4 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/controller/InternshipPeriodRecommendedController.java @@ -0,0 +1,30 @@ +package com.softeng.dingtalk.controller; + +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.InternshipPeriodRecommendedReq; +import com.softeng.dingtalk.dto.resp.InternshipPeriodRecommendedResp; +import com.softeng.dingtalk.service.InternshipPeriodRecommendedService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@Slf4j +@RestController +@RequestMapping("/api/v2") +public class InternshipPeriodRecommendedController { + + @Resource + private InternshipPeriodRecommendedService internshipPeriodRecommendedService; + + @PostMapping("/internshipPeriodRecommended") + public CommonResult addPeriod(@RequestBody InternshipPeriodRecommendedReq internshipPeriodRecommendedReq) { + internshipPeriodRecommendedService.addPeriod(internshipPeriodRecommendedReq); + return CommonResult.success("添加成功"); + } + + @GetMapping ("/internshipPeriodRecommended") + public CommonResult getNewestPeriod() { + return CommonResult.success(internshipPeriodRecommendedService.getNewestPeriod()); + } +} diff --git a/src/main/java/com/softeng/dingtalk/controller/LoginController.java b/src/main/java/com/softeng/dingtalk/controller/LoginController.java index a3846feb..db250cd3 100644 --- a/src/main/java/com/softeng/dingtalk/controller/LoginController.java +++ b/src/main/java/com/softeng/dingtalk/controller/LoginController.java @@ -1,15 +1,22 @@ package com.softeng.dingtalk.controller; -import com.softeng.dingtalk.component.EncryptorComponent; -import com.softeng.dingtalk.api.ContactsApi; +import com.softeng.dingtalk.component.encryptor.EncryptorComponent; +import com.softeng.dingtalk.component.dingApi.ContactsApi; +import com.softeng.dingtalk.component.UserContextHolder; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.resp.PermissionResp; import com.softeng.dingtalk.entity.User; +import com.softeng.dingtalk.service.PermissionService; import com.softeng.dingtalk.service.SystemService; import com.softeng.dingtalk.service.UserService; +import com.softeng.dingtalk.utils.StreamUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.util.List; import java.util.Map; /** @@ -21,7 +28,8 @@ @RestController @RequestMapping("/api") public class LoginController { - //为了防止伪造角色 + + //为了防止伪造角色, 已经废弃 private static final String USER_ROLE = "bb63e5f7e0f2ffae845c"; private static final String AUDITOR_ROLE = "pb53e2f7g0f2hfanp4sx"; private static final String ADMIN_ROLE = "6983f953b49c88210cb9"; @@ -31,15 +39,21 @@ public class LoginController { @Autowired UserService userService; @Autowired - EncryptorComponent encryptorComponent; - @Autowired SystemService systemService; + @Autowired + EncryptorComponent encryptorComponent; + @Resource + UserContextHolder userContextHolder; + @Resource + PermissionService permissionService; + /** - * 开发环境下登陆 + * 开发环境下登陆(废弃) * @param uid * @param response */ + @Deprecated @GetMapping("/login_test/{uid}") public void testlogin(@PathVariable int uid, HttpServletResponse response) { log.debug("测试登陆" + uid); @@ -52,13 +66,13 @@ public void testlogin(@PathVariable int uid, HttpServletResponse response) { response.setHeader("uid", uid + ""); } - /** - * @description 用户登录 + * @description 用户登录(废弃) * @param authcode:免登授权码 * @return java.util.Map * @date 9:17 AM 12/11/2019 **/ + @Deprecated @PostMapping("/login") public Map login(@RequestBody Map authcode, HttpServletResponse response) { //根据免登授权码获取userid @@ -77,6 +91,13 @@ public Map login(@RequestBody Map authcode, HttpServletResponse response) { String token = encryptorComponent.encrypt(map); // 在header创建自定义的权限 response.setHeader("token",token); + String role = getRole(user); + response.setHeader("role", role); + response.setHeader("uid", user.getId() + ""); + return Map.of("role", role, "uid", user.getId(), "token", token); + } + + private String getRole(User user) { String role = null; if (user.getAuthority() == User.NORMAL_AUTHORITY) { role = USER_ROLE; @@ -85,8 +106,69 @@ public Map login(@RequestBody Map authcode, HttpServletResponse response) { } else { role = ADMIN_ROLE; } + return role; + } + + /** + * 开发环境下登陆 + * @param uid + * @param response + */ + @GetMapping("/v2/login_test/{uid}") + public CommonResult> testlogin2(@PathVariable int uid, HttpServletResponse response) { + log.debug("测试登陆" + uid); + String role = userService.isAuditor(uid) ? AUDITOR_ROLE: USER_ROLE; + UserContextHolder.UserContext userContext = new UserContextHolder.UserContext() + .setUid(uid) + .setPermissionIds(StreamUtils.map( + permissionService.getPermissions(uid), + permission -> permission.getId() + )).setRole(role); + // 生成加密token + String token = userContextHolder.encrypt(userContext); + List permissionList = permissionService.getPermissions(uid); + // 在header创建自定义的权限 + response.setHeader("token",token); + response.setHeader("uid", uid + ""); response.setHeader("role", role); - response.setHeader("uid", user.getId() + ""); - return Map.of("role", role, "uid", user.getId(), "token", token); + return CommonResult.success(Map.of("token",token, "uid", uid, "permissionList", permissionList, "role", role)); + } + + + /** + * @description 用户登录 + * @param authcode:免登授权码 + * @return java.util.Map + * @date 9:17 AM 12/11/2019 + **/ + @PostMapping("/v2/login") + public CommonResult> login2(@RequestBody Map authcode, HttpServletResponse response) { + //根据免登授权码获取userid + log.debug(authcode.toString()); + String userid = contactsApi.getUserId((String) authcode.get("authCode")); + //去数据库查找用户 + + log.debug("userid:" + userid); + User user = userService.getUser(userid); + if (user == null) { + //如果用户不存在,调用钉钉API获取用户信息,将用户导入数据库 + user = systemService.addNewUser(userid); + } + int uid = user.getId(); + String role = getRole(user); + UserContextHolder.UserContext userContext = new UserContextHolder.UserContext() + .setUid(uid) + .setPermissionIds(StreamUtils.map( + permissionService.getPermissions(uid), + permission -> permission.getId() + )).setRole(role); + // 生成加密token + String token = userContextHolder.encrypt(userContext); + List permissionList = permissionService.getPermissions(uid); + // 在header创建自定义的权限 + response.setHeader("token",token); + response.setHeader("uid", uid + ""); + response.setHeader("role", role); + return CommonResult.success(Map.of( "uid", uid, "token", token, "permissionList", permissionList, "role", role)); } } diff --git a/src/main/java/com/softeng/dingtalk/controller/NewsController.java b/src/main/java/com/softeng/dingtalk/controller/NewsController.java new file mode 100644 index 00000000..bdf3b3fa --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/controller/NewsController.java @@ -0,0 +1,78 @@ +package com.softeng.dingtalk.controller; + +import com.softeng.dingtalk.aspect.AccessPermission; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.NewsReq; +import com.softeng.dingtalk.dto.resp.NewsResp; +import com.softeng.dingtalk.enums.PermissionEnum; +import com.softeng.dingtalk.service.NewsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +@Slf4j +@RestController +@RequestMapping("/api/v2/news") +public class NewsController { + + @Resource + private NewsService newsService; + + @GetMapping("/shownNews") + public CommonResult> getShownNews() { + List data = newsService.getShownNews(); + return CommonResult.success(data); + } + + @GetMapping("/AllNews/{page}/{size}") + @AccessPermission(PermissionEnum.EDIT_SCROLL_NEWS_BOARD) + public CommonResult> getAllNews(@PathVariable int page, @PathVariable int size) { + Map data = newsService.getAllNews(page, size); + return CommonResult.success(data); + } + + @GetMapping("/shownNews/{page}/{size}") + @AccessPermission(PermissionEnum.EDIT_SCROLL_NEWS_BOARD) + public CommonResult > getShownNews(@PathVariable int page, @PathVariable int size) { + Map data = newsService.getShownNews(page, size); + return CommonResult.success(data); + } + + @GetMapping("/notShownNews/{page}/{size}") + @AccessPermission(PermissionEnum.EDIT_SCROLL_NEWS_BOARD) + public CommonResult > getNotShownNews(@PathVariable int page, @PathVariable int size) { + Map data = newsService.getNotShownNews(page, size); + return CommonResult.success(data); + } + + @PostMapping("") + @AccessPermission(PermissionEnum.EDIT_SCROLL_NEWS_BOARD) + public CommonResult addNews(@RequestBody NewsReq newsReq) { + newsService.addNews(newsReq); + return CommonResult.success("添加成功"); + } + + @PutMapping ("/shownNews/{newsId}") + @AccessPermission(PermissionEnum.EDIT_SCROLL_NEWS_BOARD) + public CommonResult hideNews(@PathVariable int newsId) { + newsService.hideNews(newsId); + return CommonResult.success("隐藏成功"); + } + + @PutMapping ("/notShownNews/{newsId}") + @AccessPermission(PermissionEnum.EDIT_SCROLL_NEWS_BOARD) + public CommonResult showNews(@PathVariable int newsId) { + newsService.showNews(newsId); + return CommonResult.success("显示成功"); + } + + @DeleteMapping("/{newsId}") + @AccessPermission(PermissionEnum.EDIT_SCROLL_NEWS_BOARD) + public CommonResult deleteNews(@PathVariable int newsId) { + newsService.deleteNews(newsId); + return CommonResult.success("删除成功"); + } +} diff --git a/src/main/java/com/softeng/dingtalk/controller/PaperController.java b/src/main/java/com/softeng/dingtalk/controller/PaperController.java index be761f44..718aeda6 100644 --- a/src/main/java/com/softeng/dingtalk/controller/PaperController.java +++ b/src/main/java/com/softeng/dingtalk/controller/PaperController.java @@ -6,16 +6,15 @@ import com.softeng.dingtalk.entity.InternalPaper; import com.softeng.dingtalk.entity.Review; import com.softeng.dingtalk.entity.Vote; -import com.softeng.dingtalk.repository.ExternalPaperRepository; -import com.softeng.dingtalk.repository.InternalPaperRepository; -import com.softeng.dingtalk.repository.VoteRepository; +import com.softeng.dingtalk.dao.repository.ExternalPaperRepository; +import com.softeng.dingtalk.dao.repository.InternalPaperRepository; +import com.softeng.dingtalk.dao.repository.VoteRepository; import com.softeng.dingtalk.service.FileService; import com.softeng.dingtalk.service.PaperService; import com.softeng.dingtalk.service.VoteService; import com.softeng.dingtalk.vo.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/softeng/dingtalk/controller/PatentController.java b/src/main/java/com/softeng/dingtalk/controller/PatentController.java index e0633fad..874abf15 100644 --- a/src/main/java/com/softeng/dingtalk/controller/PatentController.java +++ b/src/main/java/com/softeng/dingtalk/controller/PatentController.java @@ -1,6 +1,8 @@ package com.softeng.dingtalk.controller; import com.alibaba.fastjson.JSON; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.PatentReq; import com.softeng.dingtalk.entity.Patent; import com.softeng.dingtalk.service.FileService; import com.softeng.dingtalk.service.PatentService; @@ -70,4 +72,8 @@ public void downloadPatentFile(@PathVariable int id, @PathVariable String type, } + @PostMapping("/v2/patent/{page}/{size}") + public CommonResult> queryPatentList(@PathVariable int page, @PathVariable int size, @RequestBody PatentReq patentReq) { + return CommonResult.success(patentService.queryPatentList(page, size, patentReq)); + } } diff --git a/src/main/java/com/softeng/dingtalk/controller/PermissionController.java b/src/main/java/com/softeng/dingtalk/controller/PermissionController.java new file mode 100644 index 00000000..b99e4048 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/controller/PermissionController.java @@ -0,0 +1,40 @@ +package com.softeng.dingtalk.controller; + +import com.softeng.dingtalk.component.UserContextHolder; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.resp.PermissionResp; +import com.softeng.dingtalk.service.PermissionService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/api/v2/permission") +public class PermissionController { + + @Resource + PermissionService permissionService; + @Resource + UserContextHolder userContextHolder; + /** + * 获取用户自身的权限信息 + * @return + */ + @GetMapping("") + public CommonResult> getPersonalPermissions(){ + return CommonResult.success(permissionService.getPermissions(userContextHolder.getUserContext().getUid())); + } + + /** + * 获取其他用户权限信息 + * @param uid + * @return + */ + @GetMapping("/{uid}") + public CommonResult> getOthersPermissions(@PathVariable int uid){ + return CommonResult.success(permissionService.getPermissions(uid)); + } +} diff --git a/src/main/java/com/softeng/dingtalk/controller/PracticeController.java b/src/main/java/com/softeng/dingtalk/controller/PracticeController.java index 7afd5431..1fd5b3c6 100644 --- a/src/main/java/com/softeng/dingtalk/controller/PracticeController.java +++ b/src/main/java/com/softeng/dingtalk/controller/PracticeController.java @@ -1,5 +1,7 @@ package com.softeng.dingtalk.controller; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.PracticeReq; import com.softeng.dingtalk.entity.Practice; import com.softeng.dingtalk.service.PracticeService; import com.softeng.dingtalk.vo.PracticeVO; @@ -8,6 +10,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; @Slf4j @RestController @@ -24,13 +27,30 @@ public void addPractice(@RequestBody PracticeVO practiceVO, @RequestAttribute in } } @GetMapping("/practice") - public List getPracticeList(@RequestAttribute int uid){ + public List getPracticeList(@RequestAttribute int uid) { return practiceService.getPracticeList(uid); } @DeleteMapping("/practice/{id}") - public void deletePractice(@PathVariable int id,@RequestAttribute int uid){ + public void deletePractice(@PathVariable int id,@RequestAttribute int uid) { practiceService.deletePractice(id,uid); } + + @PostMapping("/v2/practice/{page}/{size}") + public CommonResult> queryPracticeList(@PathVariable int page, @PathVariable int size, @RequestBody PracticeReq practiceReq) { + return CommonResult.success(practiceService.queryPracticeList(page, size, practiceReq)); + } + + @PostMapping("/v2/practice") + public CommonResult addPractice(@RequestBody PracticeReq practiceReq){ + practiceService.addPractice(practiceReq); + return CommonResult.success("新增实习申请成功"); + } + + @PutMapping("/v2/practice") + public CommonResult modifyPractice(@RequestBody PracticeReq practiceReq){ + practiceService.modifyPractice(practiceReq); + return CommonResult.success("编辑实习申请成功"); + } } diff --git a/src/main/java/com/softeng/dingtalk/controller/ProcessPropertyController.java b/src/main/java/com/softeng/dingtalk/controller/ProcessPropertyController.java index 82c801d3..41a51a68 100644 --- a/src/main/java/com/softeng/dingtalk/controller/ProcessPropertyController.java +++ b/src/main/java/com/softeng/dingtalk/controller/ProcessPropertyController.java @@ -1,6 +1,5 @@ package com.softeng.dingtalk.controller; import com.alibaba.fastjson.JSONObject; -import com.softeng.dingtalk.entity.ProcessProperty; import com.softeng.dingtalk.service.ProcessPropertyService; import com.softeng.dingtalk.vo.ProcessPropertyDetailVO; import com.softeng.dingtalk.vo.ProcessPropertyVO; diff --git a/src/main/java/com/softeng/dingtalk/controller/ReimburseController.java b/src/main/java/com/softeng/dingtalk/controller/ReimburseController.java index 84c8d309..48a37bb3 100644 --- a/src/main/java/com/softeng/dingtalk/controller/ReimburseController.java +++ b/src/main/java/com/softeng/dingtalk/controller/ReimburseController.java @@ -1,5 +1,7 @@ package com.softeng.dingtalk.controller; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.ReimbursementReq; import com.softeng.dingtalk.entity.Reimbursement; import com.softeng.dingtalk.service.ReimburseService; import com.softeng.dingtalk.vo.ReimbursementVO; @@ -64,4 +66,8 @@ public void downloadReimbursementFile(@PathVariable int id, HttpServletResponse reimburseService.downloadReimbursementFile(id,response); } + @PostMapping("/v2/reimbursement/{page}/{size}") + public CommonResult> queryReimbursementList(@PathVariable int page, @PathVariable int size, @RequestBody ReimbursementReq reimbursementReq) { + return CommonResult.success(reimburseService.queryReimbursementList(page, size, reimbursementReq)); + } } diff --git a/src/main/java/com/softeng/dingtalk/controller/SystemController.java b/src/main/java/com/softeng/dingtalk/controller/SystemController.java index 64ca0da6..1a227c5b 100644 --- a/src/main/java/com/softeng/dingtalk/controller/SystemController.java +++ b/src/main/java/com/softeng/dingtalk/controller/SystemController.java @@ -8,13 +8,10 @@ import com.softeng.dingtalk.vo.QueryUserVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.Date; import java.util.List; import java.util.Map; @@ -38,9 +35,10 @@ public class SystemController { * @return */ @PostMapping("/system/user/{page}") - public Map queryUser(@RequestBody QueryUserVO vo, @PathVariable int page) { - Page pages = systemService.multiQueryUser(page, 10, vo.getName(), vo.getPosition()); - return Map.of("content", pages.getContent(), "total", pages.getTotalElements()); + public Map queryUser(@RequestBody QueryUserVO vo, @PathVariable int page) { +// Page pages = systemService.multiQueryUser(page, 10, vo.getName(), vo.getPosition()); +// return Map.of("content", pages.getContent(), "total", pages.getTotalElements()); + return systemService.multiQueryUser(page, 10, vo.getName(), vo.getPosition()); } @@ -155,7 +153,7 @@ public List queryDisableUser() { */ @GetMapping("/system/updateperf/{yearmonth}") public void manulUpdatePerformance(@PathVariable int yearmonth) { - systemService.manulUpdatePerformance(yearmonth); + systemService.manualUpdatePerformance(yearmonth); } /** @@ -164,7 +162,7 @@ public void manulUpdatePerformance(@PathVariable int yearmonth) { @PostMapping("/system/weekreport/acrecord") public void manulDeductedPointsUnsubmittedWeeklyReport( @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startTime) { - systemService.manulDeductedPointsUnsubmittedWeeklyReport(startTime); + systemService.manualDeductedPointsUnSubmittedWeeklyReport(startTime); } /** diff --git a/src/main/java/com/softeng/dingtalk/controller/TeamController.java b/src/main/java/com/softeng/dingtalk/controller/TeamController.java new file mode 100644 index 00000000..0e8f2a58 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/controller/TeamController.java @@ -0,0 +1,32 @@ +package com.softeng.dingtalk.controller; + +import com.softeng.dingtalk.component.UserContextHolder; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.resp.TeamResp; +import com.softeng.dingtalk.service.TeamService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/api/v2/team") +public class TeamController { + + @Resource + TeamService teamService; + @Resource + UserContextHolder userContextHolder; + + @GetMapping("") + public CommonResult> getPersonalTeams(){ + return CommonResult.success(teamService.getTeams(userContextHolder.getUserContext().getUid())); + } + + @GetMapping("/{uid}") + public CommonResult> getOthersTeams(@PathVariable int uid){ + return CommonResult.success(teamService.getTeams(uid)); + } +} diff --git a/src/main/java/com/softeng/dingtalk/controller/TestController.java b/src/main/java/com/softeng/dingtalk/controller/TestController.java index f88245c3..5fd1c033 100644 --- a/src/main/java/com/softeng/dingtalk/controller/TestController.java +++ b/src/main/java/com/softeng/dingtalk/controller/TestController.java @@ -1,6 +1,6 @@ package com.softeng.dingtalk.controller; -import com.softeng.dingtalk.api.BaseApi; +import com.softeng.dingtalk.component.dingApi.BaseApi; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; diff --git a/src/main/java/com/softeng/dingtalk/controller/UserController.java b/src/main/java/com/softeng/dingtalk/controller/UserController.java index 79304a07..d84cfb4a 100644 --- a/src/main/java/com/softeng/dingtalk/controller/UserController.java +++ b/src/main/java/com/softeng/dingtalk/controller/UserController.java @@ -1,6 +1,8 @@ package com.softeng.dingtalk.controller; -import com.softeng.dingtalk.api.BaseApi; +import com.softeng.dingtalk.component.dingApi.BaseApi; +import com.softeng.dingtalk.aspect.AccessPermission; +import com.softeng.dingtalk.enums.PermissionEnum; import com.softeng.dingtalk.entity.Message; import com.softeng.dingtalk.service.NotifyService; import com.softeng.dingtalk.service.UserService; @@ -8,9 +10,7 @@ import com.softeng.dingtalk.vo.UserVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; import org.springframework.data.domain.Page; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -33,11 +33,11 @@ public class UserController { UserService userService; @Autowired NotifyService notifyService; - @Autowired BaseApi baseApi; + /** * 获取用户信息, 用户登录后调用 * @param uid @@ -99,6 +99,7 @@ public Map listUserMessage(@PathVariable int page, @PathVariable int size, @Requ * 更新用户权限 * @param map */ + @AccessPermission(PermissionEnum.EDIT_ANY_USER_INFO) @PostMapping("/updaterole") public void updateUserRole(@RequestBody Map map) { userService.updateRole((int) map.get("uid"), (int) map.get("authority")); @@ -130,6 +131,4 @@ public void saveLeaseContract(@RequestParam MultipartFile file, @RequestAttribut public void downloadLeaseContract(@RequestAttribute int uid, HttpServletResponse response) throws IOException { userService.downloadContractFile(uid,response); } - - } diff --git a/src/main/java/com/softeng/dingtalk/controller/UserPermissionController.java b/src/main/java/com/softeng/dingtalk/controller/UserPermissionController.java new file mode 100644 index 00000000..f9c2face --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/controller/UserPermissionController.java @@ -0,0 +1,34 @@ +package com.softeng.dingtalk.controller; + +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.UserPermissionReq; +import com.softeng.dingtalk.service.UserPermissionService; +import lombok.extern.slf4j.Slf4j; +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 javax.annotation.Resource; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/api/v2/userPermission") +public class UserPermissionController { + + @Resource + private UserPermissionService userPermissionService; + + @PostMapping("") + public CommonResult addUserPermission(@RequestBody UserPermissionReq userPermissionReq) { + userPermissionService.addUserPermission(userPermissionReq); + return CommonResult.success("添加权限成功"); + } + + @PostMapping("/batch") + public CommonResult UpdateUserPermissionListBatch(@RequestBody List userPermissionReqList) { + userPermissionService.updateUserPermissionList(userPermissionReqList); + return CommonResult.success("批量更新权限成功"); + } +} diff --git a/src/main/java/com/softeng/dingtalk/controller/UserTeamController.java b/src/main/java/com/softeng/dingtalk/controller/UserTeamController.java new file mode 100644 index 00000000..3d29c99a --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/controller/UserTeamController.java @@ -0,0 +1,31 @@ +package com.softeng.dingtalk.controller; + +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.UserPermissionReq; +import com.softeng.dingtalk.dto.req.UserTeamReq; +import com.softeng.dingtalk.service.UserTeamService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/api/v2/userTeam") +public class UserTeamController { + @Resource + private UserTeamService userTeamService; + + @PostMapping("") + public CommonResult addUserTeam(@RequestBody UserTeamReq userTeamReq) { + userTeamService.addUserTeam(userTeamReq); + return CommonResult.success("添加研究组成功"); + } + + @PostMapping("/batch") + public CommonResult UpdateUserPermissionListBatch(@RequestBody List userTeamReqList) { + userTeamService.updateUserPermissionList(userTeamReqList); + return CommonResult.success("批量更新研究组成功"); + } +} diff --git a/src/main/java/com/softeng/dingtalk/controller/VMApplyController.java b/src/main/java/com/softeng/dingtalk/controller/VMApplyController.java index 64135106..71442d6d 100644 --- a/src/main/java/com/softeng/dingtalk/controller/VMApplyController.java +++ b/src/main/java/com/softeng/dingtalk/controller/VMApplyController.java @@ -1,16 +1,13 @@ package com.softeng.dingtalk.controller; -import com.softeng.dingtalk.entity.User; +import com.softeng.dingtalk.dto.CommonResult; +import com.softeng.dingtalk.dto.req.VMApplyReq; import com.softeng.dingtalk.entity.VMApply; -import com.softeng.dingtalk.repository.UserRepository; -import com.softeng.dingtalk.repository.VMApplyRepository; import com.softeng.dingtalk.service.VMApplyService; import com.softeng.dingtalk.vo.VMApplyVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import org.springframework.web.server.ResponseStatusException; import java.util.List; import java.util.Map; @@ -86,4 +83,9 @@ public void setVMApplyResult(@PathVariable int id,@PathVariable boolean isPass,@ public void deleteVMApply(@PathVariable int id,@RequestAttribute int uid){ vmApplyService.deleteVMApply(id,uid); } + + @PostMapping("/v2/vmApply/page/{page}/{size}") + public CommonResult> queryVMApplyList(@PathVariable int page, @PathVariable int size, @RequestBody VMApplyReq vmApplyReq) { + return CommonResult.success(vmApplyService.queryVMApplyList(page, size, vmApplyReq)); + } } diff --git a/src/main/java/com/softeng/dingtalk/controller/VoteController.java b/src/main/java/com/softeng/dingtalk/controller/VoteController.java index 636b232e..5d863312 100644 --- a/src/main/java/com/softeng/dingtalk/controller/VoteController.java +++ b/src/main/java/com/softeng/dingtalk/controller/VoteController.java @@ -4,7 +4,7 @@ import com.softeng.dingtalk.entity.User; import com.softeng.dingtalk.entity.Vote; import com.softeng.dingtalk.entity.VoteDetail; -import com.softeng.dingtalk.repository.VoteRepository; +import com.softeng.dingtalk.dao.repository.VoteRepository; import com.softeng.dingtalk.service.PaperService; import com.softeng.dingtalk.service.VoteService; import com.softeng.dingtalk.vo.PollVO; @@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*; import java.io.IOException; -import java.time.LocalDateTime; import java.util.Map; /** diff --git a/src/main/java/com/softeng/dingtalk/mapper/AcRecordMapper.java b/src/main/java/com/softeng/dingtalk/dao/mapper/AcRecordMapper.java similarity index 67% rename from src/main/java/com/softeng/dingtalk/mapper/AcRecordMapper.java rename to src/main/java/com/softeng/dingtalk/dao/mapper/AcRecordMapper.java index eec4a70f..da199075 100644 --- a/src/main/java/com/softeng/dingtalk/mapper/AcRecordMapper.java +++ b/src/main/java/com/softeng/dingtalk/dao/mapper/AcRecordMapper.java @@ -1,10 +1,9 @@ -package com.softeng.dingtalk.mapper; +package com.softeng.dingtalk.dao.mapper; -import com.softeng.dingtalk.excel.AcData; +import com.softeng.dingtalk.dto.resp.excelData.AcData; import org.springframework.stereotype.Repository; import java.time.Month; -import java.time.Year; import java.util.List; @Repository diff --git a/src/main/java/com/softeng/dingtalk/mapper/DcRecordMapper.java b/src/main/java/com/softeng/dingtalk/dao/mapper/DcRecordMapper.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/mapper/DcRecordMapper.java rename to src/main/java/com/softeng/dingtalk/dao/mapper/DcRecordMapper.java index 1c86a6ed..683f8d76 100644 --- a/src/main/java/com/softeng/dingtalk/mapper/DcRecordMapper.java +++ b/src/main/java/com/softeng/dingtalk/dao/mapper/DcRecordMapper.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.mapper; +package com.softeng.dingtalk.dao.mapper; import com.softeng.dingtalk.vo.DcRecordVO; import com.softeng.dingtalk.vo.UserVO; diff --git a/src/main/java/com/softeng/dingtalk/mapper/DcSummaryMapper.java b/src/main/java/com/softeng/dingtalk/dao/mapper/DcSummaryMapper.java similarity index 65% rename from src/main/java/com/softeng/dingtalk/mapper/DcSummaryMapper.java rename to src/main/java/com/softeng/dingtalk/dao/mapper/DcSummaryMapper.java index 86d26aa9..1bd3f472 100644 --- a/src/main/java/com/softeng/dingtalk/mapper/DcSummaryMapper.java +++ b/src/main/java/com/softeng/dingtalk/dao/mapper/DcSummaryMapper.java @@ -1,6 +1,6 @@ -package com.softeng.dingtalk.mapper; +package com.softeng.dingtalk.dao.mapper; -import com.softeng.dingtalk.excel.DcSummaryData; +import com.softeng.dingtalk.dto.resp.excelData.DcSummaryData; import org.springframework.stereotype.Repository; import java.util.List; diff --git a/src/main/java/com/softeng/dingtalk/mapper/InternalPaperMapper.java b/src/main/java/com/softeng/dingtalk/dao/mapper/InternalPaperMapper.java similarity index 90% rename from src/main/java/com/softeng/dingtalk/mapper/InternalPaperMapper.java rename to src/main/java/com/softeng/dingtalk/dao/mapper/InternalPaperMapper.java index 5a4ea668..909789b9 100644 --- a/src/main/java/com/softeng/dingtalk/mapper/InternalPaperMapper.java +++ b/src/main/java/com/softeng/dingtalk/dao/mapper/InternalPaperMapper.java @@ -1,6 +1,7 @@ -package com.softeng.dingtalk.mapper; +package com.softeng.dingtalk.dao.mapper; import com.softeng.dingtalk.vo.PaperInfoVO; +import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/softeng/dingtalk/repository/AbsentOARepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/AbsentOARepository.java similarity index 89% rename from src/main/java/com/softeng/dingtalk/repository/AbsentOARepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/AbsentOARepository.java index 4e171e1d..9ebe893d 100644 --- a/src/main/java/com/softeng/dingtalk/repository/AbsentOARepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/AbsentOARepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.AbsentOA; import com.softeng.dingtalk.entity.DingTalkSchedule; diff --git a/src/main/java/com/softeng/dingtalk/repository/AcItemRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/AcItemRepository.java similarity index 94% rename from src/main/java/com/softeng/dingtalk/repository/AcItemRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/AcItemRepository.java index 3c0c1cc3..dad0292e 100644 --- a/src/main/java/com/softeng/dingtalk/repository/AcItemRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/AcItemRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.AcItem; import com.softeng.dingtalk.entity.DcRecord; diff --git a/src/main/java/com/softeng/dingtalk/repository/AcRecordRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/AcRecordRepository.java similarity index 94% rename from src/main/java/com/softeng/dingtalk/repository/AcRecordRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/AcRecordRepository.java index 73f93d86..000de97c 100644 --- a/src/main/java/com/softeng/dingtalk/repository/AcRecordRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/AcRecordRepository.java @@ -1,13 +1,10 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.AcRecord; -import com.softeng.dingtalk.excel.AcData; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import java.time.Month; -import java.time.Year; import java.util.List; import java.util.Map; diff --git a/src/main/java/com/softeng/dingtalk/repository/BugDetailRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/BugDetailRepository.java similarity index 93% rename from src/main/java/com/softeng/dingtalk/repository/BugDetailRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/BugDetailRepository.java index a10469fc..b2651f31 100644 --- a/src/main/java/com/softeng/dingtalk/repository/BugDetailRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/BugDetailRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.BugDetail; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/softeng/dingtalk/repository/BugRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/BugRepository.java similarity index 97% rename from src/main/java/com/softeng/dingtalk/repository/BugRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/BugRepository.java index 8fafcaf6..042c5055 100644 --- a/src/main/java/com/softeng/dingtalk/repository/BugRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/BugRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Bug; import org.springframework.data.jpa.repository.EntityGraph; diff --git a/src/main/java/com/softeng/dingtalk/repository/CustomizedRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/CustomizedRepository.java similarity index 91% rename from src/main/java/com/softeng/dingtalk/repository/CustomizedRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/CustomizedRepository.java index d2399bd6..65898895 100644 --- a/src/main/java/com/softeng/dingtalk/repository/CustomizedRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/CustomizedRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.NoRepositoryBean; diff --git a/src/main/java/com/softeng/dingtalk/repository/DcRecordRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/DcRecordRepository.java similarity index 99% rename from src/main/java/com/softeng/dingtalk/repository/DcRecordRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/DcRecordRepository.java index d9cbee69..ed587111 100644 --- a/src/main/java/com/softeng/dingtalk/repository/DcRecordRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/DcRecordRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.DcRecord; diff --git a/src/main/java/com/softeng/dingtalk/repository/DcSummaryRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/DcSummaryRepository.java similarity index 96% rename from src/main/java/com/softeng/dingtalk/repository/DcSummaryRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/DcSummaryRepository.java index 15c0db11..e44a22ed 100644 --- a/src/main/java/com/softeng/dingtalk/repository/DcSummaryRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/DcSummaryRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.DcSummary; import org.springframework.data.jpa.repository.Modifying; @@ -91,6 +91,7 @@ public interface DcSummaryRepository extends CustomizedRepository{ Page getDingTalkScheduleDetailsByUserEquals(User user, Pageable pageable); diff --git a/src/main/java/com/softeng/dingtalk/repository/DingTalkScheduleRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/DingTalkScheduleRepository.java similarity index 79% rename from src/main/java/com/softeng/dingtalk/repository/DingTalkScheduleRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/DingTalkScheduleRepository.java index b963463c..899494a1 100644 --- a/src/main/java/com/softeng/dingtalk/repository/DingTalkScheduleRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/DingTalkScheduleRepository.java @@ -1,9 +1,7 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.DingTalkSchedule; import com.softeng.dingtalk.entity.DingTalkScheduleDetail; -import com.softeng.dingtalk.entity.User; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; import java.util.List; diff --git a/src/main/java/com/softeng/dingtalk/repository/DissertationPropertyRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/DissertationPropertyRepository.java similarity index 89% rename from src/main/java/com/softeng/dingtalk/repository/DissertationPropertyRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/DissertationPropertyRepository.java index 7bcab336..03b9c185 100644 --- a/src/main/java/com/softeng/dingtalk/repository/DissertationPropertyRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/DissertationPropertyRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Dissertation; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/softeng/dingtalk/repository/EventFileRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/EventFileRepository.java similarity index 56% rename from src/main/java/com/softeng/dingtalk/repository/EventFileRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/EventFileRepository.java index 46769993..261bd2e5 100644 --- a/src/main/java/com/softeng/dingtalk/repository/EventFileRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/EventFileRepository.java @@ -1,8 +1,6 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.EventFile; -import com.softeng.dingtalk.entity.EventProperty; -import com.softeng.dingtalk.repository.CustomizedRepository; import org.springframework.stereotype.Repository; @Repository diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/EventPropertyRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/EventPropertyRepository.java new file mode 100644 index 00000000..2a940682 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/EventPropertyRepository.java @@ -0,0 +1,8 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.EventProperty; +import org.springframework.stereotype.Repository; + +@Repository +public interface EventPropertyRepository extends CustomizedRepository{ +} diff --git a/src/main/java/com/softeng/dingtalk/repository/ExternalPaperRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ExternalPaperRepository.java similarity index 96% rename from src/main/java/com/softeng/dingtalk/repository/ExternalPaperRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ExternalPaperRepository.java index 2960181b..565817ad 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ExternalPaperRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ExternalPaperRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.ExternalPaper; import com.softeng.dingtalk.entity.Vote; diff --git a/src/main/java/com/softeng/dingtalk/repository/InternalPaperRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/InternalPaperRepository.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/repository/InternalPaperRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/InternalPaperRepository.java index 55f26933..a4d2c994 100644 --- a/src/main/java/com/softeng/dingtalk/repository/InternalPaperRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/InternalPaperRepository.java @@ -1,10 +1,8 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.InternalPaper; import com.softeng.dingtalk.entity.Vote; import com.softeng.dingtalk.vo.PaperFileInfoVO; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/InternshipPeriodRecommendedRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/InternshipPeriodRecommendedRepository.java new file mode 100644 index 00000000..a1b57a36 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/InternshipPeriodRecommendedRepository.java @@ -0,0 +1,13 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.InternshipPeriodRecommended; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface InternshipPeriodRecommendedRepository extends CustomizedRepository{ + + @Query(value = "select * from internship_period_recommended i order by i.release_time desc limit 1", nativeQuery = true) + InternshipPeriodRecommended findTop(); + +} diff --git a/src/main/java/com/softeng/dingtalk/repository/IterationDetailRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/IterationDetailRepository.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/repository/IterationDetailRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/IterationDetailRepository.java index 42f4bf05..d0f7d7d1 100644 --- a/src/main/java/com/softeng/dingtalk/repository/IterationDetailRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/IterationDetailRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.IterationDetail; diff --git a/src/main/java/com/softeng/dingtalk/repository/IterationRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/IterationRepository.java similarity index 97% rename from src/main/java/com/softeng/dingtalk/repository/IterationRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/IterationRepository.java index ce086ded..308d8457 100644 --- a/src/main/java/com/softeng/dingtalk/repository/IterationRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/IterationRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Iteration; import org.springframework.data.jpa.repository.EntityGraph; diff --git a/src/main/java/com/softeng/dingtalk/repository/MessageRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/MessageRepository.java similarity index 88% rename from src/main/java/com/softeng/dingtalk/repository/MessageRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/MessageRepository.java index 17de128c..2732d9f1 100644 --- a/src/main/java/com/softeng/dingtalk/repository/MessageRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/MessageRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Message; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/NewsRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/NewsRepository.java new file mode 100644 index 00000000..788ad6b4 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/NewsRepository.java @@ -0,0 +1,35 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.News; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface NewsRepository extends CustomizedRepository{ + +// @Query("select n from News n where n.isDeleted = :isDeleted") + @Query(value = "select * from news n where n.is_deleted = :isDeleted", nativeQuery = true) + Page findAllByIsDeleted(@Param("isDeleted") int isDeleted, Pageable pageable); + +// @Query("select n from News n where n.isDeleted = :isDeleted and n.isShown = :isShown") + @Query(value = "select * from news n where n.is_deleted = :isDeleted and n.is_shown = :isShown", nativeQuery = true) + Page findAllByIsShownAndIsDeleted(@Param("isShown") int isShown, @Param("isDeleted") int isDeleted, Pageable pageable); + +// @Query("select n from News n where n.isDeleted = :isDeleted and n.isShown = :isShown") + @Query(value = "select * from news n where n.is_deleted = :isDeleted and n.is_shown = :isShown order by release_time desc ", nativeQuery = true) + List findAllByIsShownAndIsDeleted(@Param("isShown") int isShown, @Param("isDeleted") int isDeleted); + + @Modifying + @Query("update News set isShown = :isShown where id = :newsId") + void updateIsShown(@Param("newsId") int newsId, @Param("isShown") int isShown); + + @Modifying + @Query("update News set isDeleted = :isDeleted where id = :newsId") + void updateIsDeleted(@Param("newsId") int newsId, @Param("isDeleted") int isDeleted); +} diff --git a/src/main/java/com/softeng/dingtalk/repository/PaperDetailRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PaperDetailRepository.java similarity index 96% rename from src/main/java/com/softeng/dingtalk/repository/PaperDetailRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PaperDetailRepository.java index f12067eb..e8e03141 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PaperDetailRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PaperDetailRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.InternalPaper; import com.softeng.dingtalk.entity.PaperDetail; diff --git a/src/main/java/com/softeng/dingtalk/repository/PaperLevelRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PaperLevelRepository.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/repository/PaperLevelRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PaperLevelRepository.java index a64b755a..d17b53f6 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PaperLevelRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PaperLevelRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.PaperLevel; import com.softeng.dingtalk.enums.PaperType; diff --git a/src/main/java/com/softeng/dingtalk/repository/PatentDetailRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PatentDetailRepository.java similarity index 82% rename from src/main/java/com/softeng/dingtalk/repository/PatentDetailRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PatentDetailRepository.java index 56b0d918..a630b055 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PatentDetailRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PatentDetailRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.PatentDetail; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/softeng/dingtalk/repository/PatentLevelRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PatentLevelRepository.java similarity index 88% rename from src/main/java/com/softeng/dingtalk/repository/PatentLevelRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PatentLevelRepository.java index e2c52748..1e67d21d 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PatentLevelRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PatentLevelRepository.java @@ -1,7 +1,6 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.PatentLevel; -import com.softeng.dingtalk.enums.PaperType; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/com/softeng/dingtalk/repository/PatentRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PatentRepository.java similarity index 50% rename from src/main/java/com/softeng/dingtalk/repository/PatentRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PatentRepository.java index c8caf994..64a70c66 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PatentRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PatentRepository.java @@ -1,8 +1,9 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Patent; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; @Repository -public interface PatentRepository extends CustomizedRepository{ +public interface PatentRepository extends CustomizedRepository, JpaSpecificationExecutor { } diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/PermissionRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PermissionRepository.java new file mode 100644 index 00000000..ab5f3769 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PermissionRepository.java @@ -0,0 +1,16 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.Permission; +import org.springframework.stereotype.Repository; + +/** + * @author LiXiaoKang + * @description 操作Permission实体类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface PermissionRepository extends CustomizedRepository{ + + Permission findById(int id); +} diff --git a/src/main/java/com/softeng/dingtalk/repository/PracticeRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PracticeRepository.java similarity index 66% rename from src/main/java/com/softeng/dingtalk/repository/PracticeRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PracticeRepository.java index a598198f..e5d37d40 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PracticeRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PracticeRepository.java @@ -1,13 +1,14 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Practice; import com.softeng.dingtalk.entity.User; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; import java.util.List; @Repository -public interface PracticeRepository extends CustomizedRepository{ +public interface PracticeRepository extends CustomizedRepository, JpaSpecificationExecutor { List findAllByStateEquals(int state); List findAllByUserEquals(User user); } diff --git a/src/main/java/com/softeng/dingtalk/repository/PrizeRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PrizeRepository.java similarity index 80% rename from src/main/java/com/softeng/dingtalk/repository/PrizeRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PrizeRepository.java index e2fc215b..ef019db8 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PrizeRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PrizeRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Prize; import org.springframework.data.jpa.repository.Query; @@ -19,6 +19,6 @@ public interface PrizeRepository extends CustomizedRepository { * @param userId * @return */ - @Query(value = "select * from Prize pr where user_id=:userId and deleted = false ", nativeQuery = true) + @Query(value = "select * from prize pr where user_id=:userId and deleted = false ", nativeQuery = true) List findByUserId(int userId); } diff --git a/src/main/java/com/softeng/dingtalk/repository/ProcessFileRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ProcessFileRepository.java similarity index 81% rename from src/main/java/com/softeng/dingtalk/repository/ProcessFileRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ProcessFileRepository.java index 8d292a4b..257a07fd 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ProcessFileRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ProcessFileRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.ProcessFile; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/softeng/dingtalk/repository/ProcessPropertyRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ProcessPropertyRepository.java similarity index 82% rename from src/main/java/com/softeng/dingtalk/repository/ProcessPropertyRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ProcessPropertyRepository.java index 16785e97..dd288218 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ProcessPropertyRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ProcessPropertyRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.ProcessProperty; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/softeng/dingtalk/repository/ProjectPropertyFileRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ProjectPropertyFileRepository.java similarity index 83% rename from src/main/java/com/softeng/dingtalk/repository/ProjectPropertyFileRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ProjectPropertyFileRepository.java index 9476a687..7df4c4dd 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ProjectPropertyFileRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ProjectPropertyFileRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.ProjectPropertyFile; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/softeng/dingtalk/repository/ProjectPropertyRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ProjectPropertyRepository.java similarity index 71% rename from src/main/java/com/softeng/dingtalk/repository/ProjectPropertyRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ProjectPropertyRepository.java index 9d2437fb..5fa9c30c 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ProjectPropertyRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ProjectPropertyRepository.java @@ -1,6 +1,5 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; -import com.softeng.dingtalk.entity.Project; import com.softeng.dingtalk.entity.ProjectProperty; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/softeng/dingtalk/repository/ProjectRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ProjectRepository.java similarity index 97% rename from src/main/java/com/softeng/dingtalk/repository/ProjectRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ProjectRepository.java index d25da5d6..f49fcabf 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ProjectRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ProjectRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Project; import org.springframework.data.jpa.repository.Modifying; diff --git a/src/main/java/com/softeng/dingtalk/repository/PropertyRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/PropertyRepository.java similarity index 92% rename from src/main/java/com/softeng/dingtalk/repository/PropertyRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/PropertyRepository.java index aa7f4b0e..4ad147a8 100644 --- a/src/main/java/com/softeng/dingtalk/repository/PropertyRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/PropertyRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Property; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/softeng/dingtalk/repository/ReimbursementFileRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ReimbursementFileRepository.java similarity index 83% rename from src/main/java/com/softeng/dingtalk/repository/ReimbursementFileRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ReimbursementFileRepository.java index 563da4d5..0cb50e20 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ReimbursementFileRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ReimbursementFileRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.ReimbursementFile; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/ReimbursementRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ReimbursementRepository.java new file mode 100644 index 00000000..7e03d6a0 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ReimbursementRepository.java @@ -0,0 +1,10 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.Reimbursement; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface ReimbursementRepository extends CustomizedRepository, JpaSpecificationExecutor { + +} diff --git a/src/main/java/com/softeng/dingtalk/repository/ReviewRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/ReviewRepository.java similarity index 93% rename from src/main/java/com/softeng/dingtalk/repository/ReviewRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/ReviewRepository.java index ad2131ac..46a06c03 100644 --- a/src/main/java/com/softeng/dingtalk/repository/ReviewRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/ReviewRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Review; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/softeng/dingtalk/repository/SubsidyLevelRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/SubsidyLevelRepository.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/repository/SubsidyLevelRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/SubsidyLevelRepository.java index 8c176217..d9996300 100644 --- a/src/main/java/com/softeng/dingtalk/repository/SubsidyLevelRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/SubsidyLevelRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.SubsidyLevel; diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/TeamRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/TeamRepository.java new file mode 100644 index 00000000..ffea1868 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/TeamRepository.java @@ -0,0 +1,15 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.Team; +import org.springframework.stereotype.Repository; + +/** + * @author LiXiaoKang + * @description 操作Team表类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface TeamRepository extends CustomizedRepository{ + Team findById(int id); +} diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/UserPermissionRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/UserPermissionRepository.java new file mode 100644 index 00000000..88655b36 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/UserPermissionRepository.java @@ -0,0 +1,28 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.UserPermission; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author LiXiaoKang + * @description 操作UserPermission实体类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface UserPermissionRepository extends CustomizedRepository{ + + /** + * 获取用户的所有权限 + * @param userId 用户id + * @return 用户所有权限 + */ + List findAllByUserId(int userId); + + List findAllByPermissionId(int permissionId); + + + void deleteAllByUserId(int userId); +} diff --git a/src/main/java/com/softeng/dingtalk/repository/UserRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/UserRepository.java similarity index 96% rename from src/main/java/com/softeng/dingtalk/repository/UserRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/UserRepository.java index a5b8ca50..a502b8f6 100644 --- a/src/main/java/com/softeng/dingtalk/repository/UserRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/UserRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.User; import com.softeng.dingtalk.enums.Position; @@ -10,7 +10,6 @@ import org.springframework.stereotype.Repository; import java.time.LocalDateTime; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; @@ -62,6 +61,7 @@ public interface UserRepository extends CustomizedRepository, Jpa * 供用户提交审核申请时选择 * @return */ + @Deprecated @Query(value = "select id, name from user where authority = 1 and is_deleted = 0", nativeQuery = true) List> listAuditor(); @@ -137,7 +137,6 @@ public interface UserRepository extends CustomizedRepository, Jpa * 修改用户信息 * @param uid * @param stuName - * @param authority */ @Modifying @Query("update User set stuNum = :stunum, position = :position, authority = :authority where id = :uid") @@ -180,4 +179,7 @@ public interface UserRepository extends CustomizedRepository, Jpa @Query("select u.id from User u where u.deleted = true ") Set listDisableUserid(); + @Query(value = "select * from user u where u.is_deleted = false ", nativeQuery = true) + List findAllValidUser(); + } diff --git a/src/main/java/com/softeng/dingtalk/dao/repository/UserTeamRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/UserTeamRepository.java new file mode 100644 index 00000000..812d7d08 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dao/repository/UserTeamRepository.java @@ -0,0 +1,26 @@ +package com.softeng.dingtalk.dao.repository; + +import com.softeng.dingtalk.entity.UserTeam; +import com.softeng.dingtalk.entity.cpk.UserTeamCPK; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author LiXiaoKang + * @description 操作UserTeam实体类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface UserTeamRepository extends CustomizedRepository{ + + /** + * 获取用户所在的所有用户组 + * @param userId 用户id + * @return 用户所在的所有用户组 + */ + List findAllByUserId(int userId); + + void deleteAllByUserId(int userId); +} diff --git a/src/main/java/com/softeng/dingtalk/repository/VMApplyRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/VMApplyRepository.java similarity index 66% rename from src/main/java/com/softeng/dingtalk/repository/VMApplyRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/VMApplyRepository.java index 026f618b..fe48d57f 100644 --- a/src/main/java/com/softeng/dingtalk/repository/VMApplyRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/VMApplyRepository.java @@ -1,13 +1,14 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.User; import com.softeng.dingtalk.entity.VMApply; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; import java.util.List; @Repository -public interface VMApplyRepository extends CustomizedRepository{ +public interface VMApplyRepository extends CustomizedRepository, JpaSpecificationExecutor { List findAllByStateEquals(int state); List findAllByUserEquals(User user); } diff --git a/src/main/java/com/softeng/dingtalk/repository/VoteDetailRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/VoteDetailRepository.java similarity index 97% rename from src/main/java/com/softeng/dingtalk/repository/VoteDetailRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/VoteDetailRepository.java index 41d05180..cf09dca8 100644 --- a/src/main/java/com/softeng/dingtalk/repository/VoteDetailRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/VoteDetailRepository.java @@ -1,6 +1,5 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; -import com.google.gson.JsonElement; import com.softeng.dingtalk.entity.User; import com.softeng.dingtalk.entity.VoteDetail; import org.springframework.data.jpa.repository.EntityGraph; diff --git a/src/main/java/com/softeng/dingtalk/repository/VoteRepository.java b/src/main/java/com/softeng/dingtalk/dao/repository/VoteRepository.java similarity index 97% rename from src/main/java/com/softeng/dingtalk/repository/VoteRepository.java rename to src/main/java/com/softeng/dingtalk/dao/repository/VoteRepository.java index cbba1513..4d110698 100644 --- a/src/main/java/com/softeng/dingtalk/repository/VoteRepository.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/VoteRepository.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.repository; +package com.softeng.dingtalk.dao.repository; import com.softeng.dingtalk.entity.Vote; import org.springframework.data.jpa.repository.Modifying; diff --git a/src/main/java/com/softeng/dingtalk/repository/impl/CustomizedRepositoryImpl.java b/src/main/java/com/softeng/dingtalk/dao/repository/impl/CustomizedRepositoryImpl.java similarity index 91% rename from src/main/java/com/softeng/dingtalk/repository/impl/CustomizedRepositoryImpl.java rename to src/main/java/com/softeng/dingtalk/dao/repository/impl/CustomizedRepositoryImpl.java index 550f62fa..03142380 100644 --- a/src/main/java/com/softeng/dingtalk/repository/impl/CustomizedRepositoryImpl.java +++ b/src/main/java/com/softeng/dingtalk/dao/repository/impl/CustomizedRepositoryImpl.java @@ -1,6 +1,6 @@ -package com.softeng.dingtalk.repository.impl; +package com.softeng.dingtalk.dao.repository.impl; -import com.softeng.dingtalk.repository.CustomizedRepository; +import com.softeng.dingtalk.dao.repository.CustomizedRepository; import org.springframework.data.jpa.repository.support.JpaEntityInformation; import org.springframework.data.jpa.repository.support.SimpleJpaRepository; diff --git a/src/main/java/com/softeng/dingtalk/dto/CommonResult.java b/src/main/java/com/softeng/dingtalk/dto/CommonResult.java new file mode 100644 index 00000000..21f0eb0b --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/CommonResult.java @@ -0,0 +1,54 @@ +package com.softeng.dingtalk.dto; + +import com.softeng.dingtalk.exception.CommonException; +import lombok.Data; + +/** + * @Author: LiXiaoKang + * @CreateTime: 2023-02-10 + * @Description: 通用返回消息 + * @Version: 1.0 + */ + +@Data +public class CommonResult { + private T data; + private Integer code; + private String message; + + public static final int SUCCESS_CODE = 0; + public static final int UNKNOWN_FAIL_CODE = 1; + + public static final String EMPTY_DATA = ""; + public static final String SUCCESS_EMPTY_DATA = "success"; + + public static final String EMPTY_MESSAGE = ""; + + public CommonResult(T data, Integer code, String message) { + this.data = data; + this.code = code; + this.message = message; + } + + public static CommonResult success(T data) { + return new CommonResult<>(data, SUCCESS_CODE, EMPTY_MESSAGE); + } + + public static CommonResult success() { + return new CommonResult<>(SUCCESS_EMPTY_DATA, SUCCESS_CODE, EMPTY_MESSAGE); + } + + public static CommonResult fail(String msg) { + return new CommonResult<>(EMPTY_DATA, UNKNOWN_FAIL_CODE, msg); + } + + public static CommonResult fail(CommonException e) { + return new CommonResult<>(EMPTY_DATA, e.getCode(), e.getMessage()); + } + + public static CommonResult fail(Exception e) { + return fail(e.getMessage()); + } + +} + diff --git a/src/main/java/com/softeng/dingtalk/dto/req/InternshipPeriodRecommendedReq.java b/src/main/java/com/softeng/dingtalk/dto/req/InternshipPeriodRecommendedReq.java new file mode 100644 index 00000000..10e61f66 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/InternshipPeriodRecommendedReq.java @@ -0,0 +1,26 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="InternshipPeriodRecommendedReq对象", description="推荐实习周期请求对象") +public class InternshipPeriodRecommendedReq implements Serializable { + private int id; + + private LocalDate start; + + private LocalDate end; + + private LocalDateTime releaseTime; + + private int authorId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/NewsReq.java b/src/main/java/com/softeng/dingtalk/dto/req/NewsReq.java new file mode 100644 index 00000000..0e6b85cc --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/NewsReq.java @@ -0,0 +1,28 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="NewsReq对象", description="公告请求对象") +public class NewsReq implements Serializable { + + @ApiModelProperty(value = "公告标题") + private String title; + +// @ApiModelProperty(value = "公告链接") +// private String link; + + @ApiModelProperty(value = "公告发布者id") + private int authorId; + + @ApiModelProperty(value = "公告详情内容") + private String content; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/PatentDetailReq.java b/src/main/java/com/softeng/dingtalk/dto/req/PatentDetailReq.java new file mode 100644 index 00000000..2acb7184 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/PatentDetailReq.java @@ -0,0 +1,4 @@ +package com.softeng.dingtalk.dto.req; + +public class PatentDetailReq { +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/PatentReq.java b/src/main/java/com/softeng/dingtalk/dto/req/PatentReq.java new file mode 100644 index 00000000..9ce85283 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/PatentReq.java @@ -0,0 +1,32 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="PatentReq对象", description="专利申请请求对象") +public class PatentReq implements Serializable { + private int id; + private String name; + private String type; + private String year; + private String obligee; + private Integer applicantId; + private List inventorsIdList; + private String version; + private String filePath; + private String patentFileName; + private String patentFileId; + private String handlingFileName; + private String handlingFileId; + private String authorizationFileName; + private String authorizationFileId; + private int state; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/PermissionReq.java b/src/main/java/com/softeng/dingtalk/dto/req/PermissionReq.java new file mode 100644 index 00000000..68b97682 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/PermissionReq.java @@ -0,0 +1,6 @@ +package com.softeng.dingtalk.dto.req; + +import java.io.Serializable; + +public class PermissionReq implements Serializable { +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/PracticeReq.java b/src/main/java/com/softeng/dingtalk/dto/req/PracticeReq.java new file mode 100644 index 00000000..25ab88d4 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/PracticeReq.java @@ -0,0 +1,28 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDate; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="PracticeReq对象", description="实习申请请求对象") +public class PracticeReq { + private Integer id; + //实习单位 + private String companyName; + //实习部门 + private String department; + //开始时间 + private LocalDate start; + //结束时间 + private LocalDate end; + //状态 -1拒绝,0审核中,1通过 + private int state=0; + + private int userId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/ReimbursementReq.java b/src/main/java/com/softeng/dingtalk/dto/req/ReimbursementReq.java new file mode 100644 index 00000000..abbf0ea1 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/ReimbursementReq.java @@ -0,0 +1,20 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="ReimbursementReq对象", description="报销申请请求对象") +public class ReimbursementReq implements Serializable { + private int state; + private String name; + private String type; + private String path; + private int userId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/TeamReq.java b/src/main/java/com/softeng/dingtalk/dto/req/TeamReq.java new file mode 100644 index 00000000..02355bb6 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/TeamReq.java @@ -0,0 +1,7 @@ +package com.softeng.dingtalk.dto.req; + +import java.io.Serializable; + +public class TeamReq implements Serializable { + +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/UserPermissionReq.java b/src/main/java/com/softeng/dingtalk/dto/req/UserPermissionReq.java new file mode 100644 index 00000000..ebb1495b --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/UserPermissionReq.java @@ -0,0 +1,18 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="UserTeamReq对象", description="用户-研究组请求对象") +public class UserPermissionReq implements Serializable { + private int userId; + + private int permissionId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/UserReq.java b/src/main/java/com/softeng/dingtalk/dto/req/UserReq.java new file mode 100644 index 00000000..50884ae0 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/UserReq.java @@ -0,0 +1,6 @@ +package com.softeng.dingtalk.dto.req; + +import java.io.Serializable; + +public class UserReq implements Serializable { +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/UserTeamReq.java b/src/main/java/com/softeng/dingtalk/dto/req/UserTeamReq.java new file mode 100644 index 00000000..1df1ec8c --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/UserTeamReq.java @@ -0,0 +1,18 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="UserTeamReq对象", description="用户-研究组请求对象") +public class UserTeamReq implements Serializable { + private int userId; + + private int teamId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/req/VMApplyReq.java b/src/main/java/com/softeng/dingtalk/dto/req/VMApplyReq.java new file mode 100644 index 00000000..4c3797c8 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/req/VMApplyReq.java @@ -0,0 +1,25 @@ +package com.softeng.dingtalk.dto.req; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="VMApplyReq对象", description="虚拟机申请请求对象") +public class VMApplyReq implements Serializable { + + @ApiModelProperty(value = "申请项目组") + private String projectTeam; + + @ApiModelProperty(value = "申请当前状态") + private int state; + + @ApiModelProperty(value = "申请人id") + private int userId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/InternshipPeriodRecommendedResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/InternshipPeriodRecommendedResp.java new file mode 100644 index 00000000..d60dc210 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/InternshipPeriodRecommendedResp.java @@ -0,0 +1,27 @@ +package com.softeng.dingtalk.dto.resp; + +import com.softeng.dingtalk.entity.User; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="InternshipPeriodRecommendedResp对象", description="推荐实习周期响应对象") +public class InternshipPeriodRecommendedResp implements Serializable { + private int id; + + private LocalDate start; + + private LocalDate end; + + private LocalDateTime releaseTime; + + private User author; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/NewsResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/NewsResp.java new file mode 100644 index 00000000..1653489f --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/NewsResp.java @@ -0,0 +1,44 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @author LiXiaoKang + * @since 2023-03-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="NewsResp对象", description="公告响应对象") +public class NewsResp implements Serializable { + @ApiModelProperty(value = "newsId") + private int id; + + @ApiModelProperty(value = "公告标题") + private String title; + +// @ApiModelProperty(value = "公告链接") +// private String link; + + @ApiModelProperty(value = "公告发布者id") + private int authorId; + + @ApiModelProperty(value = "公告发布者名字") + private String authorName; + + @ApiModelProperty(value = "公告是否显示到首页") + private int isShown; + + @ApiModelProperty(value = "公告发布时间") + private LocalDateTime releaseTime; + + @ApiModelProperty(value = "公告详情内容") + private String content; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/PatentDetailResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/PatentDetailResp.java new file mode 100644 index 00000000..7444efcf --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/PatentDetailResp.java @@ -0,0 +1,18 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="PatentDetailResp对象", description="专利详情响应对象") +public class PatentDetailResp implements Serializable { + private int id; + private int num; + private UserResp user; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/PatentResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/PatentResp.java new file mode 100644 index 00000000..ca54d784 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/PatentResp.java @@ -0,0 +1,72 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="PatentResp对象", description="专利申请响应对象") +public class PatentResp implements Serializable { + private int id; + + //专利名字 + private String name; + + //权利人 + private String obligee; + + private UserResp applicant; + + //发明人 + private List patentDetailList; + + //年份 + private String year; + //类型 + private String type; + + //版本 + private String version; + + //文件目录 + private String filePath; + + //专利内审文件名字 + private String reviewFileName; + + //专利内审文件id + private String reviewFileId; + + //专利提交文件名字 + private String submissionFileName; + + //专利提交文件id + private String submissionFileId; + + //专利评论文件名字 + private String commentFileName; + + //专利评论文件id + private String commentFileId; + + //受理文件名 + private String handlingFileName; + + //受理文件id + private String handlingFileId; + + //授权文件名 + private String authorizationFileName; + + //授权文件id + private String authorizationFileId; + + //状态: 0待内审,1内审不通过,2内审通过,3专利授权,4专利驳回 + private int state; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/PermissionResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/PermissionResp.java new file mode 100644 index 00000000..414107b6 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/PermissionResp.java @@ -0,0 +1,28 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author LiXiaoKang + * @since 2023-02-10 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="PermissionResp对象", description="权限响应对象") +public class PermissionResp implements Serializable { + @ApiModelProperty(value = "权限id") + private int id; + + @ApiModelProperty(value = "权限名") + private String name; + + @ApiModelProperty(value = "权限描述") + private String description; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/PracticeResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/PracticeResp.java new file mode 100644 index 00000000..af875570 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/PracticeResp.java @@ -0,0 +1,29 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="PracticeResp对象", description="实习申请响应对象") +public class PracticeResp implements Serializable { + private Integer id; + + private UserResp user; + //实习单位 + private String companyName; + //实习部门 + private String department; + //开始时间 + private LocalDate start; + //结束时间 + private LocalDate end; + //状态 -1拒绝,0审核中,1通过 + private int state; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/ReimbursementResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/ReimbursementResp.java new file mode 100644 index 00000000..79b9e3b5 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/ReimbursementResp.java @@ -0,0 +1,26 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="ReimbursementResp对象", description="报销申请响应对象") +public class ReimbursementResp implements Serializable { + + private Integer id; + + private UserResp user; + + //审核状态: -1 未审核, 0 审核中,1 审核通过, 2 审核不通过 + private int state; + private String name; + // 差旅报销,国内会议报销,国际会议报销,办公用品报销 + private String type; + + private String path; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/TeamResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/TeamResp.java new file mode 100644 index 00000000..715bb440 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/TeamResp.java @@ -0,0 +1,25 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author LiXiaoKang + * @since 2023-02-10 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="TeamReq对象", description="用户研究组响应对象") +public class TeamResp implements Serializable { + @ApiModelProperty(value = "组id") + private int id; + + @ApiModelProperty(value = "组名") + private String name; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/UserPermissionResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/UserPermissionResp.java new file mode 100644 index 00000000..050a8457 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/UserPermissionResp.java @@ -0,0 +1,18 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="UserPermissionResp对象", description="用户-权限响应对象") +public class UserPermissionResp implements Serializable { + private int userId; + + private int permissionId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/UserResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/UserResp.java new file mode 100644 index 00000000..8fd16f0c --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/UserResp.java @@ -0,0 +1,77 @@ +package com.softeng.dingtalk.dto.resp; + +import com.softeng.dingtalk.enums.Position; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="UserResp对象", description="用户响应对象") +public class UserResp implements Serializable { + + @ApiModelProperty(value = "用户id") + private int id; + + @ApiModelProperty(value = "钉钉用户userID") + private String userid; + + @ApiModelProperty(value = "钉钉文档解释:员工在当前开发者企业账号范围内的唯一标识,系统生成,固定值,不会改变") + private String unionid; + + @ApiModelProperty(value = "用户姓名") + private String name; + + @ApiModelProperty(value = "用户头像") + private String avatar; + + @ApiModelProperty(value = "学号") + private String stuNum; + + @ApiModelProperty(value = "用户权限列表") + private List permissionList; + + @ApiModelProperty(value = "用户所在研究组列表") + private List teamList; + + @Deprecated + @ApiModelProperty(value = "用户权限(废弃)") + private int authority; + + @ApiModelProperty(value = "用户职(学)位") + private Position position; + + @ApiModelProperty(value = "本科学校") + private String undergraduateCollege; + + @ApiModelProperty(value = "硕士学校") + private String masterCollege; + + @ApiModelProperty(value = "身份证号") + private String idCardNo; + + @ApiModelProperty(value = "银行卡号") + private String creditCard; + + @ApiModelProperty(value = "开户行") + private String bankName; + + @ApiModelProperty(value = "住址") + private String address; + + @ApiModelProperty(value = "状态, true为在实习,false为在校") + private Boolean workState; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "电话号码") + private String tel; + +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/UserTeamResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/UserTeamResp.java new file mode 100644 index 00000000..7e2ec0c3 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/UserTeamResp.java @@ -0,0 +1,18 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="UserTeamResp对象", description="用户-研究组响应对象") +public class UserTeamResp implements Serializable { + private int userId; + + private int teamId; +} diff --git a/src/main/java/com/softeng/dingtalk/dto/resp/VMApplyResp.java b/src/main/java/com/softeng/dingtalk/dto/resp/VMApplyResp.java new file mode 100644 index 00000000..fd572b92 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/dto/resp/VMApplyResp.java @@ -0,0 +1,43 @@ +package com.softeng.dingtalk.dto.resp; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="VMApplyResp对象", description="虚拟机申请响应对象") +public class VMApplyResp implements Serializable { + private Integer id; + + private UserResp user; + //状态 -1审核不通过,0审核中,1审核通过 + private Integer state; + //项目组 + private String projectTeam; + //课题 + private String subject; + //email + private String email; + //开始时间 + private LocalDate start; + //结束时间 + private LocalDate end; + //申请用途 + private String purpose; + //CPU核心数 + private Integer coreNum; + //内存大小 GB为单位 + private Integer memory; + //硬盘容量 GB为单位 + private Integer capacity; + //操作系统 + private String operationSystem; + //申请日期 + private LocalDate applyDate; +} diff --git a/src/main/java/com/softeng/dingtalk/excel/AcData.java b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/AcData.java similarity index 93% rename from src/main/java/com/softeng/dingtalk/excel/AcData.java rename to src/main/java/com/softeng/dingtalk/dto/resp/excelData/AcData.java index 27aeee1c..0a421a4a 100644 --- a/src/main/java/com/softeng/dingtalk/excel/AcData.java +++ b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/AcData.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.excel; +package com.softeng.dingtalk.dto.resp.excelData; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.*; @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.apache.poi.ss.usermodel.HorizontalAlignment; -import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.VerticalAlignment; @Data diff --git a/src/main/java/com/softeng/dingtalk/excel/DcSummaryData.java b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/DcSummaryData.java similarity index 79% rename from src/main/java/com/softeng/dingtalk/excel/DcSummaryData.java rename to src/main/java/com/softeng/dingtalk/dto/resp/excelData/DcSummaryData.java index 4f020101..8ecc1a05 100644 --- a/src/main/java/com/softeng/dingtalk/excel/DcSummaryData.java +++ b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/DcSummaryData.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.excel; +package com.softeng.dingtalk.dto.resp.excelData; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; @@ -37,12 +37,24 @@ public class DcSummaryData { private double week4; @ExcelProperty("第五周DC") private double week5; + @ExcelProperty("学位") + private String position; + @ExcelProperty("是否上传租房合同") + private String hasLease; @ExcelProperty("总DC") private double total; @ExcelProperty("当前AC") private double ac; @ExcelProperty("Top-Up") private double topUp; + @ExcelProperty("本月AC相比上月变化") + private double acChanges; + + @ExcelProperty("AC 变化原因") + @ContentStyle(horizontalAlignment = HorizontalAlignment.LEFT) + @HeadStyle(horizontalAlignment = HorizontalAlignment.LEFT, + fillForegroundColor = 42, bottomBorderColor = 42, leftBorderColor = 42, rightBorderColor = 42) + private String acReasons; public DcSummaryData(String stuNum, String name, DcSummary dcSummary) { this.stuNum = stuNum; diff --git a/src/main/java/com/softeng/dingtalk/excel/UserPrizeData.java b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/UserPrizeData.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/excel/UserPrizeData.java rename to src/main/java/com/softeng/dingtalk/dto/resp/excelData/UserPrizeData.java index 0dfcdd40..8ebf5a66 100644 --- a/src/main/java/com/softeng/dingtalk/excel/UserPrizeData.java +++ b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/UserPrizeData.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.excel; +package com.softeng.dingtalk.dto.resp.excelData; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; @@ -11,8 +11,6 @@ import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; -import java.time.LocalDate; - @Data @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/com/softeng/dingtalk/excel/UserPropertyData.java b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/UserPropertyData.java similarity index 95% rename from src/main/java/com/softeng/dingtalk/excel/UserPropertyData.java rename to src/main/java/com/softeng/dingtalk/dto/resp/excelData/UserPropertyData.java index 040aa0b8..2903799b 100644 --- a/src/main/java/com/softeng/dingtalk/excel/UserPropertyData.java +++ b/src/main/java/com/softeng/dingtalk/dto/resp/excelData/UserPropertyData.java @@ -1,4 +1,4 @@ -package com.softeng.dingtalk.excel; +package com.softeng.dingtalk.dto.resp.excelData; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; @@ -11,8 +11,6 @@ import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; -import java.time.LocalDate; - @Data @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/com/softeng/dingtalk/entity/AbsentOA.java b/src/main/java/com/softeng/dingtalk/entity/AbsentOA.java index 8c5ae944..a728dc20 100644 --- a/src/main/java/com/softeng/dingtalk/entity/AbsentOA.java +++ b/src/main/java/com/softeng/dingtalk/entity/AbsentOA.java @@ -12,6 +12,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "absentoa") public class AbsentOA { @Id diff --git a/src/main/java/com/softeng/dingtalk/entity/AcItem.java b/src/main/java/com/softeng/dingtalk/entity/AcItem.java index 1380d841..f40bdafd 100644 --- a/src/main/java/com/softeng/dingtalk/entity/AcItem.java +++ b/src/main/java/com/softeng/dingtalk/entity/AcItem.java @@ -8,7 +8,6 @@ import lombok.ToString; import javax.persistence.*; -import java.time.LocalDateTime; /** * @author zhanyeye @@ -21,6 +20,7 @@ @NoArgsConstructor @ToString @Deprecated +@Table(name = "ac_item") public class AcItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/AcRecord.java b/src/main/java/com/softeng/dingtalk/entity/AcRecord.java index 2227902a..549f8f15 100644 --- a/src/main/java/com/softeng/dingtalk/entity/AcRecord.java +++ b/src/main/java/com/softeng/dingtalk/entity/AcRecord.java @@ -1,6 +1,5 @@ package com.softeng.dingtalk.entity; -import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import javax.persistence.*; @@ -18,6 +17,7 @@ @AllArgsConstructor @Builder @ToString +@Table(name = "ac_record") public class AcRecord { public static final int NORMAL = 0; diff --git a/src/main/java/com/softeng/dingtalk/entity/Bug.java b/src/main/java/com/softeng/dingtalk/entity/Bug.java index b2c2706b..a0e520e1 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Bug.java +++ b/src/main/java/com/softeng/dingtalk/entity/Bug.java @@ -18,6 +18,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "bug") @NamedEntityGraph(name="bug.graph",attributeNodes={@NamedAttributeNode("bugDetails")}) public class Bug { @Id diff --git a/src/main/java/com/softeng/dingtalk/entity/BugDetail.java b/src/main/java/com/softeng/dingtalk/entity/BugDetail.java index 0fb5e6dd..7aced35f 100644 --- a/src/main/java/com/softeng/dingtalk/entity/BugDetail.java +++ b/src/main/java/com/softeng/dingtalk/entity/BugDetail.java @@ -16,6 +16,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "bug_detail") public class BugDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/DcRecord.java b/src/main/java/com/softeng/dingtalk/entity/DcRecord.java index cb2b3140..21133270 100644 --- a/src/main/java/com/softeng/dingtalk/entity/DcRecord.java +++ b/src/main/java/com/softeng/dingtalk/entity/DcRecord.java @@ -24,6 +24,7 @@ @NoArgsConstructor @Builder @AllArgsConstructor +@Table(name = "dc_record") @NamedEntityGraph(name="dcRecord.graph",attributeNodes={@NamedAttributeNode("acItems"), @NamedAttributeNode("auditor")}) public class DcRecord { @Id diff --git a/src/main/java/com/softeng/dingtalk/entity/DcSummary.java b/src/main/java/com/softeng/dingtalk/entity/DcSummary.java index 6df78a49..f0e48d75 100644 --- a/src/main/java/com/softeng/dingtalk/entity/DcSummary.java +++ b/src/main/java/com/softeng/dingtalk/entity/DcSummary.java @@ -18,7 +18,7 @@ @Setter @Entity @NoArgsConstructor -@Table(uniqueConstraints = {@UniqueConstraint(columnNames={"user_id", "yearmonth"})}) +@Table(name = "dc_summary",uniqueConstraints = {@UniqueConstraint(columnNames={"user_id", "yearmonth"})}) public class DcSummary { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -47,6 +47,7 @@ public class DcSummary { private double salary; @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") private User user; diff --git a/src/main/java/com/softeng/dingtalk/entity/DingTalkSchedule.java b/src/main/java/com/softeng/dingtalk/entity/DingTalkSchedule.java index 6edaaa2e..135f42ea 100644 --- a/src/main/java/com/softeng/dingtalk/entity/DingTalkSchedule.java +++ b/src/main/java/com/softeng/dingtalk/entity/DingTalkSchedule.java @@ -12,6 +12,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "ding_talk_schedule") public class DingTalkSchedule { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -34,7 +35,7 @@ public class DingTalkSchedule { String location; String scheduleId; - @Column(name = "acCalculated") + @Column(name = "ac_calculated") boolean acCalculated =false; public DingTalkSchedule(String summary, LocalDateTime start, LocalDateTime end, boolean online, String location) { diff --git a/src/main/java/com/softeng/dingtalk/entity/DingTalkScheduleDetail.java b/src/main/java/com/softeng/dingtalk/entity/DingTalkScheduleDetail.java index 76612a2f..1c77efbe 100644 --- a/src/main/java/com/softeng/dingtalk/entity/DingTalkScheduleDetail.java +++ b/src/main/java/com/softeng/dingtalk/entity/DingTalkScheduleDetail.java @@ -11,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "ding_talk_schedule_detail") public class DingTalkScheduleDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/Dissertation.java b/src/main/java/com/softeng/dingtalk/entity/Dissertation.java index 3dfbf7de..cce45abd 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Dissertation.java +++ b/src/main/java/com/softeng/dingtalk/entity/Dissertation.java @@ -1,7 +1,5 @@ package com.softeng.dingtalk.entity; -import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.models.auth.In; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -12,6 +10,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "dissertation") public class Dissertation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -43,7 +42,7 @@ public void update(int state,String graduateYear){ this.graduateYear=graduateYear; } - public Dissertation(int state,String graduateYear,String filePath){ + public Dissertation(int state, String graduateYear, String filePath){ this.state=state; this.graduateYear=graduateYear; this.filePath=filePath; diff --git a/src/main/java/com/softeng/dingtalk/entity/EventFile.java b/src/main/java/com/softeng/dingtalk/entity/EventFile.java index e63b63cf..820a7041 100644 --- a/src/main/java/com/softeng/dingtalk/entity/EventFile.java +++ b/src/main/java/com/softeng/dingtalk/entity/EventFile.java @@ -1,7 +1,6 @@ package com.softeng.dingtalk.entity; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -12,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "event_file") public class EventFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -36,7 +36,7 @@ public EventFile(String fileName, String fileId, String fileType, EventProperty this.fileName=fileName; this.fileId=fileId; this.fileType=fileType; - this.eventProperty=eventProperty; + this.eventProperty = eventProperty; } } diff --git a/src/main/java/com/softeng/dingtalk/entity/EventProperty.java b/src/main/java/com/softeng/dingtalk/entity/EventProperty.java index 8f2d1ea7..a0a88558 100644 --- a/src/main/java/com/softeng/dingtalk/entity/EventProperty.java +++ b/src/main/java/com/softeng/dingtalk/entity/EventProperty.java @@ -1,6 +1,5 @@ package com.softeng.dingtalk.entity; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -12,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "event_property") public class EventProperty { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/ExternalPaper.java b/src/main/java/com/softeng/dingtalk/entity/ExternalPaper.java index 404e7f79..2458f84e 100644 --- a/src/main/java/com/softeng/dingtalk/entity/ExternalPaper.java +++ b/src/main/java/com/softeng/dingtalk/entity/ExternalPaper.java @@ -1,9 +1,7 @@ package com.softeng.dingtalk.entity; import lombok.Data; -import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import javax.persistence.*; import java.time.LocalDate; @@ -18,6 +16,7 @@ @Data @NoArgsConstructor @Deprecated +@Table(name = "external_paper") public class ExternalPaper implements Paper { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/InternalPaper.java b/src/main/java/com/softeng/dingtalk/entity/InternalPaper.java index f61bf06d..6be0ab29 100644 --- a/src/main/java/com/softeng/dingtalk/entity/InternalPaper.java +++ b/src/main/java/com/softeng/dingtalk/entity/InternalPaper.java @@ -2,14 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.softeng.dingtalk.enums.PaperType; -import com.sun.istack.Nullable; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.web.multipart.MultipartFile; import javax.persistence.*; -import java.io.File; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -24,6 +21,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "internal_paper") public class InternalPaper implements Paper { /** * 论文的投稿结果 @@ -54,7 +52,7 @@ public class InternalPaper implements Paper { private PaperType paperType; /** - * 投稿结果 + * 投稿结 */ private int result; @@ -185,7 +183,7 @@ public InternalPaper(int id) { } public InternalPaper(String title, String journal, PaperType paperType, LocalDate updateDate, - Boolean isStudentFirstAuthor, String firstAuthor,String path,String theme,String year) { + Boolean isStudentFirstAuthor, String firstAuthor, String path, String theme, String year) { this.title = title; this.journal = journal; this.paperType = paperType; diff --git a/src/main/java/com/softeng/dingtalk/entity/InternshipPeriodRecommended.java b/src/main/java/com/softeng/dingtalk/entity/InternshipPeriodRecommended.java new file mode 100644 index 00000000..0f4d408c --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/InternshipPeriodRecommended.java @@ -0,0 +1,34 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.*; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@Entity +@Table(name = "internship_period_recommended") +public class InternshipPeriodRecommended { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + private LocalDate start; + + private LocalDate end; + + @Column(columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP", updatable = false) + private LocalDateTime releaseTime; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "author_id") + private User author; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/Iteration.java b/src/main/java/com/softeng/dingtalk/entity/Iteration.java index 271f0276..6b1c3dfe 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Iteration.java +++ b/src/main/java/com/softeng/dingtalk/entity/Iteration.java @@ -18,6 +18,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "iteration") @NamedEntityGraph(name="iteration.graph",attributeNodes={@NamedAttributeNode("iterationDetails")}) public class Iteration { @Id diff --git a/src/main/java/com/softeng/dingtalk/entity/IterationDetail.java b/src/main/java/com/softeng/dingtalk/entity/IterationDetail.java index 160e4a6e..551a755d 100644 --- a/src/main/java/com/softeng/dingtalk/entity/IterationDetail.java +++ b/src/main/java/com/softeng/dingtalk/entity/IterationDetail.java @@ -16,6 +16,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "iteration_detail") public class IterationDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/Message.java b/src/main/java/com/softeng/dingtalk/entity/Message.java index c3193d40..d28cb647 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Message.java +++ b/src/main/java/com/softeng/dingtalk/entity/Message.java @@ -16,6 +16,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "message") public class Message { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/News.java b/src/main/java/com/softeng/dingtalk/entity/News.java new file mode 100644 index 00000000..ae4042c9 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/News.java @@ -0,0 +1,74 @@ +package com.softeng.dingtalk.entity; + +import lombok.*; +import org.hibernate.Hibernate; + +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.Objects; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@Entity +@Table(name = "news") +public class News { + /** + * newsId + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + /** + * 公告标题 + */ + private String title; + +// /** +// * 公告跳转链接 +// */ +// private String link; + + /** + * 公告发布作者 + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "author_id") + @ToString.Exclude + private User author; + + /** + * 公告是否被删除 + */ + private int isDeleted; + + /** + * 公告是否显示到首页 + */ + private int isShown; + + /** + * 公告发布时间 + */ + private LocalDateTime releaseTime; + + /** + * 公告详情内容 + */ + private String content; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false; + News news = (News) o; + return Objects.equals(id, news.id); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } +} diff --git a/src/main/java/com/softeng/dingtalk/entity/PaperDetail.java b/src/main/java/com/softeng/dingtalk/entity/PaperDetail.java index ecaa27ab..dd08379f 100644 --- a/src/main/java/com/softeng/dingtalk/entity/PaperDetail.java +++ b/src/main/java/com/softeng/dingtalk/entity/PaperDetail.java @@ -1,6 +1,5 @@ package com.softeng.dingtalk.entity; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Getter; import lombok.NoArgsConstructor; @@ -19,6 +18,7 @@ @Entity @NoArgsConstructor @ToString +@Table(name = "paper_detail") public class PaperDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/PaperLevel.java b/src/main/java/com/softeng/dingtalk/entity/PaperLevel.java index a1a0c219..5be834cb 100644 --- a/src/main/java/com/softeng/dingtalk/entity/PaperLevel.java +++ b/src/main/java/com/softeng/dingtalk/entity/PaperLevel.java @@ -17,6 +17,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "paper_level") public class PaperLevel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/Patent.java b/src/main/java/com/softeng/dingtalk/entity/Patent.java index ef247b1f..cd48edbf 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Patent.java +++ b/src/main/java/com/softeng/dingtalk/entity/Patent.java @@ -13,6 +13,7 @@ @Entity @NoArgsConstructor @Proxy(lazy = false) +@Table(name = "patent") public class Patent { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -80,7 +81,7 @@ public class Patent { int state=0; - public Patent(String name, String year,String type,String version, String obligee, String filePath) { + public Patent(String name, String year, String type, String version, String obligee, String filePath) { this.year=year; this.type=type; this.name = name; diff --git a/src/main/java/com/softeng/dingtalk/entity/PatentDetail.java b/src/main/java/com/softeng/dingtalk/entity/PatentDetail.java index e91d725b..0a6b18ad 100644 --- a/src/main/java/com/softeng/dingtalk/entity/PatentDetail.java +++ b/src/main/java/com/softeng/dingtalk/entity/PatentDetail.java @@ -1,20 +1,19 @@ package com.softeng.dingtalk.entity; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import javax.persistence.*; -import java.util.List; @Getter @Setter @Entity @NoArgsConstructor @ToString +@Table(name = "patent_detail") public class PatentDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -25,8 +24,8 @@ public class PatentDetail { private Patent patent; @ManyToOne private User user; - @OneToMany(cascade = CascadeType.REMOVE) - private List acRecordList; +// @OneToMany(cascade = CascadeType.REMOVE) +// private List acRecordList; public PatentDetail(int num, Patent patent, User user) { this.num = num; diff --git a/src/main/java/com/softeng/dingtalk/entity/PatentLevel.java b/src/main/java/com/softeng/dingtalk/entity/PatentLevel.java index ad003145..e7eccfd1 100644 --- a/src/main/java/com/softeng/dingtalk/entity/PatentLevel.java +++ b/src/main/java/com/softeng/dingtalk/entity/PatentLevel.java @@ -1,6 +1,5 @@ package com.softeng.dingtalk.entity; -import com.softeng.dingtalk.enums.PaperType; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -11,6 +10,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "patent_level") public class PatentLevel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -27,7 +27,7 @@ public class PatentLevel { @Column(columnDefinition="DECIMAL(10,3)") private double total; - public PatentLevel(String title, double total) { + public PatentLevel(String title, double total) { this.title = title; this.total = total; } diff --git a/src/main/java/com/softeng/dingtalk/entity/Permission.java b/src/main/java/com/softeng/dingtalk/entity/Permission.java new file mode 100644 index 00000000..28401d2b --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/Permission.java @@ -0,0 +1,35 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.*; + +/** + * @author LiXiaoKang + * @description 用户权限表类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +@Table(name = "permission") +public class Permission { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + /** + * 权限名 + */ + private String name; + + /** + * 权限描述 + */ + private String description; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/Practice.java b/src/main/java/com/softeng/dingtalk/entity/Practice.java index 05e22538..a0b9d3d2 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Practice.java +++ b/src/main/java/com/softeng/dingtalk/entity/Practice.java @@ -3,14 +3,17 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.experimental.Accessors; import javax.persistence.*; import java.time.LocalDate; +@Accessors(chain = true) @Getter @Setter @Entity @NoArgsConstructor +@Table(name = "practice") public class Practice { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/Prize.java b/src/main/java/com/softeng/dingtalk/entity/Prize.java index 47241018..96dc2891 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Prize.java +++ b/src/main/java/com/softeng/dingtalk/entity/Prize.java @@ -18,6 +18,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "prize") public class Prize { /** * 表示奖项级别的静态常量 diff --git a/src/main/java/com/softeng/dingtalk/entity/ProcessFile.java b/src/main/java/com/softeng/dingtalk/entity/ProcessFile.java index 8e6e3fb5..f8b4037c 100644 --- a/src/main/java/com/softeng/dingtalk/entity/ProcessFile.java +++ b/src/main/java/com/softeng/dingtalk/entity/ProcessFile.java @@ -11,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "process_file") public class ProcessFile { @Id diff --git a/src/main/java/com/softeng/dingtalk/entity/ProcessProperty.java b/src/main/java/com/softeng/dingtalk/entity/ProcessProperty.java index eff45b09..df171b34 100644 --- a/src/main/java/com/softeng/dingtalk/entity/ProcessProperty.java +++ b/src/main/java/com/softeng/dingtalk/entity/ProcessProperty.java @@ -3,9 +3,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; -import org.hibernate.annotations.Proxy; import javax.persistence.*; import java.util.List; @@ -14,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "process_property") public class ProcessProperty { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -49,11 +47,11 @@ public class ProcessProperty { @JoinColumn(name = "conference_photo_id") List conferencePhotoFileList; - public ProcessProperty(String conferenceName,String year,String filePath,User user){ + public ProcessProperty(String conferenceName, String year, String filePath, User user){ this.conferenceName=conferenceName; this.year=year; this.filePath=filePath; - this.user=user; + this.user = user; } public void update(String conferenceName,String year){ diff --git a/src/main/java/com/softeng/dingtalk/entity/Project.java b/src/main/java/com/softeng/dingtalk/entity/Project.java index df03f32f..5a26ab2b 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Project.java +++ b/src/main/java/com/softeng/dingtalk/entity/Project.java @@ -16,6 +16,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "project") public class Project { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/ProjectProperty.java b/src/main/java/com/softeng/dingtalk/entity/ProjectProperty.java index de97c86e..0505e5d1 100644 --- a/src/main/java/com/softeng/dingtalk/entity/ProjectProperty.java +++ b/src/main/java/com/softeng/dingtalk/entity/ProjectProperty.java @@ -11,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "project_property") public class ProjectProperty { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,7 +24,7 @@ public class ProjectProperty { @OneToMany(mappedBy = "projectProperty", fetch = FetchType.EAGER) List projectPropertyFileList; - public ProjectProperty(String name,String path){ + public ProjectProperty(String name, String path){ this.name=name; this.path=path; } diff --git a/src/main/java/com/softeng/dingtalk/entity/ProjectPropertyFile.java b/src/main/java/com/softeng/dingtalk/entity/ProjectPropertyFile.java index 5b210f56..86d28538 100644 --- a/src/main/java/com/softeng/dingtalk/entity/ProjectPropertyFile.java +++ b/src/main/java/com/softeng/dingtalk/entity/ProjectPropertyFile.java @@ -13,6 +13,7 @@ @Entity @NoArgsConstructor @AllArgsConstructor +@Table(name = "project_property_file") public class ProjectPropertyFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/Property.java b/src/main/java/com/softeng/dingtalk/entity/Property.java index cb29a6cb..8eac986c 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Property.java +++ b/src/main/java/com/softeng/dingtalk/entity/Property.java @@ -18,6 +18,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "property") public class Property { @Id @@ -60,7 +61,7 @@ public class Property { @Column(nullable = false) private boolean deleted = false; - public Property(User user, String name, String type, String preserver, String remark,LocalDate startTime) { + public Property(User user, String name, String type, String preserver, String remark, LocalDate startTime) { this.user = user; this.name = name; this.type = type; diff --git a/src/main/java/com/softeng/dingtalk/entity/Reimbursement.java b/src/main/java/com/softeng/dingtalk/entity/Reimbursement.java index c03f4a24..a024d996 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Reimbursement.java +++ b/src/main/java/com/softeng/dingtalk/entity/Reimbursement.java @@ -11,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "reimbursement") public class Reimbursement { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -31,7 +32,7 @@ public class Reimbursement { @OneToMany(mappedBy = "reimbursement",cascade = {CascadeType.REMOVE},fetch = FetchType.EAGER) List reimbursementFileList; - public Reimbursement(String name,String type, String path) { + public Reimbursement(String name, String type, String path) { this.name=name; this.type = type; this.path = path; diff --git a/src/main/java/com/softeng/dingtalk/entity/ReimbursementFile.java b/src/main/java/com/softeng/dingtalk/entity/ReimbursementFile.java index b015a5c2..1a7d3d86 100644 --- a/src/main/java/com/softeng/dingtalk/entity/ReimbursementFile.java +++ b/src/main/java/com/softeng/dingtalk/entity/ReimbursementFile.java @@ -11,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "reimbursement_file") public class ReimbursementFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/Review.java b/src/main/java/com/softeng/dingtalk/entity/Review.java index 697ef749..f34c4692 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Review.java +++ b/src/main/java/com/softeng/dingtalk/entity/Review.java @@ -16,6 +16,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "review") public class Review { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/SubsidyLevel.java b/src/main/java/com/softeng/dingtalk/entity/SubsidyLevel.java index f027b558..73ab16de 100644 --- a/src/main/java/com/softeng/dingtalk/entity/SubsidyLevel.java +++ b/src/main/java/com/softeng/dingtalk/entity/SubsidyLevel.java @@ -16,6 +16,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "subsidy_level") public class SubsidyLevel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/softeng/dingtalk/entity/Team.java b/src/main/java/com/softeng/dingtalk/entity/Team.java new file mode 100644 index 00000000..acb695a1 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/Team.java @@ -0,0 +1,30 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.*; + +/** + * @author LiXiaoKang + * @description 用户组实体类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +@Table(name = "team") +public class Team { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + /** + * 用户研究组名 + */ + private String name; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/User.java b/src/main/java/com/softeng/dingtalk/entity/User.java index 512519e3..43ddf3f3 100644 --- a/src/main/java/com/softeng/dingtalk/entity/User.java +++ b/src/main/java/com/softeng/dingtalk/entity/User.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; +import lombok.experimental.Accessors; import org.hibernate.annotations.SQLDelete; import javax.persistence.*; @@ -24,6 +25,8 @@ @Entity @NoArgsConstructor @ToString +@Accessors(chain = true) +@Table(name = "user") @SQLDelete(sql = "update `user` set is_deleted = 1 where id = ?") public class User { /** @@ -66,6 +69,7 @@ public class User { /** * 用户权限 */ + @Deprecated private int authority = NORMAL_AUTHORITY; /** @@ -151,12 +155,18 @@ public class User { */ private String remark; + /** + * 电话号码 + */ + private String tel; + /** * 获奖情况 */ @JsonIgnoreProperties("user") @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) + @ToString.Exclude private List allPrizes; diff --git a/src/main/java/com/softeng/dingtalk/entity/UserPermission.java b/src/main/java/com/softeng/dingtalk/entity/UserPermission.java new file mode 100644 index 00000000..49375cea --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/UserPermission.java @@ -0,0 +1,37 @@ +package com.softeng.dingtalk.entity; + +import com.softeng.dingtalk.entity.cpk.UserPermissionCPK; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.*; + +/** + * @author LiXiaoKang + * @description 用户-用户权限实体类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +// 设置联合主键的注解 +@IdClass(UserPermissionCPK.class) +@Table(name = "user_permission") +public class UserPermission { + + /** + * 对应用户表的id字段(int),而非钉钉的userid(string) + */ + @Id + private int userId; + + /** + * 权限id + */ + @Id + private int permissionId; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/UserTeam.java b/src/main/java/com/softeng/dingtalk/entity/UserTeam.java new file mode 100644 index 00000000..91e15f49 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/UserTeam.java @@ -0,0 +1,41 @@ +package com.softeng.dingtalk.entity; + + +import com.softeng.dingtalk.entity.cpk.UserTeamCPK; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.Table; + +/** + * @author LiXiaoKang + * @description 用户组表类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +// 设置联合主键的注解 +@IdClass(UserTeamCPK.class) +@Table(name = "user_team") +public class UserTeam { + + /** + * 对应用户表的id字段(int),而非钉钉的userid(string) + */ + @Id + private int userId; + + /** + * 用户组id + */ + @Id + private int teamId; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/VMApply.java b/src/main/java/com/softeng/dingtalk/entity/VMApply.java index 00c4b1f2..75267308 100644 --- a/src/main/java/com/softeng/dingtalk/entity/VMApply.java +++ b/src/main/java/com/softeng/dingtalk/entity/VMApply.java @@ -11,6 +11,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "vmapply") public class VMApply { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -19,7 +20,7 @@ public class VMApply { @JoinColumn(name = "user_id") User user; //状态 -1审核不通过,0审核中,1审核通过 - int state; + Integer state; //项目组 String projectTeam; //课题 @@ -33,11 +34,11 @@ public class VMApply { //申请用途 String purpose; //CPU核心数 - int coreNum; + Integer coreNum; //内存大小 GB为单位 - int memory; + Integer memory; //硬盘容量 GB为单位 - int capacity; + Integer capacity; //操作系统 String operationSystem; //申请日期 diff --git a/src/main/java/com/softeng/dingtalk/entity/Vote.java b/src/main/java/com/softeng/dingtalk/entity/Vote.java index 3ea9ec20..7404221f 100644 --- a/src/main/java/com/softeng/dingtalk/entity/Vote.java +++ b/src/main/java/com/softeng/dingtalk/entity/Vote.java @@ -19,6 +19,7 @@ @Setter @Entity @NoArgsConstructor +@Table(name = "vote") public class Vote { @Id @@ -28,7 +29,7 @@ public class Vote { /** * 投票最终结果, -1为未结束, 0为拒绝, 1为接受, 2为平票 */ - int result = -1; + Integer result = -1; /** * 平票后作者是否选择外投 @@ -38,12 +39,12 @@ public class Vote { /** * 支持人数 */ - int accept; + Integer accept; /** * 总投票人数 */ - int total; + Integer total; /** * 投票是否截止 @@ -80,7 +81,7 @@ public class Vote { private List voteDetails; - public Vote(LocalDateTime startTime ,LocalDateTime endTime, int pid) { + public Vote(LocalDateTime startTime , LocalDateTime endTime, int pid) { this.startTime = startTime; this.endTime = endTime; this.pid = pid; diff --git a/src/main/java/com/softeng/dingtalk/entity/VoteDetail.java b/src/main/java/com/softeng/dingtalk/entity/VoteDetail.java index b566540e..4bc696aa 100644 --- a/src/main/java/com/softeng/dingtalk/entity/VoteDetail.java +++ b/src/main/java/com/softeng/dingtalk/entity/VoteDetail.java @@ -17,17 +17,20 @@ @Entity @NoArgsConstructor @NamedEntityGraph(name="voteDetail.graph",attributeNodes={@NamedAttributeNode("acRecord")}) -@Table(uniqueConstraints = {@UniqueConstraint(columnNames={"vote_id", "user_id"})}) +//@Table(name = "vote_detail") +@Table(name = "vote_detail",uniqueConstraints = {@UniqueConstraint(columnNames={"vote_id", "user_id"})}) public class VoteDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; private boolean result; @JsonIgnoreProperties("voteDetails") @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "vote_id") private Vote vote; @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") private User user; /** diff --git a/src/main/java/com/softeng/dingtalk/entity/cpk/UserPermissionCPK.java b/src/main/java/com/softeng/dingtalk/entity/cpk/UserPermissionCPK.java new file mode 100644 index 00000000..897de616 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/cpk/UserPermissionCPK.java @@ -0,0 +1,38 @@ +package com.softeng.dingtalk.entity.cpk; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author LiXiaoKang + * @description 用户-权限表的联合主键(CompositePrimaryKey) + * @date 02/02/2023 + */ + +@Getter +@Setter +@NoArgsConstructor +@ToString +public class UserPermissionCPK implements Serializable { + + private int userId; + + private int permissionId; + + @Override + public boolean equals(Object obj){ + if(obj instanceof UserPermissionCPK){ + return userId == ((UserPermissionCPK) obj).userId && permissionId == ((UserPermissionCPK) obj).getPermissionId(); + } + return false; + } + + @Override + public int hashCode(){ + return userId * 10000 + permissionId; + } +} diff --git a/src/main/java/com/softeng/dingtalk/entity/cpk/UserTeamCPK.java b/src/main/java/com/softeng/dingtalk/entity/cpk/UserTeamCPK.java new file mode 100644 index 00000000..2b24cb58 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/cpk/UserTeamCPK.java @@ -0,0 +1,38 @@ +package com.softeng.dingtalk.entity.cpk; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author LiXiaoKang + * @description 用户-用户组表的联合主键(CompositePrimaryKey) + * @date 02/02/2023 + */ + +@Getter +@Setter +@NoArgsConstructor +@ToString +public class UserTeamCPK implements Serializable { + + private int userId; + + private int teamId; + + @Override + public boolean equals(Object obj){ + if(obj instanceof UserTeamCPK){ + return userId == ((UserTeamCPK) obj).userId && teamId == ((UserTeamCPK) obj).getTeamId(); + } + return false; + } + + @Override + public int hashCode(){ + return userId+teamId; + } +} diff --git a/src/main/java/com/softeng/dingtalk/enums/NewsState.java b/src/main/java/com/softeng/dingtalk/enums/NewsState.java new file mode 100644 index 00000000..fe9a6cf0 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/enums/NewsState.java @@ -0,0 +1,18 @@ +package com.softeng.dingtalk.enums; + +import lombok.Getter; + +@Getter +public enum NewsState { + IS_SHOWN(1), + IS_NOT_SHOWN(0), + IS_DELETED(1), + IS_NOT_DELETED(0) + ; + private int value; + + + NewsState(int value) { + this.value = value; + } +} diff --git a/src/main/java/com/softeng/dingtalk/enums/PermissionEnum.java b/src/main/java/com/softeng/dingtalk/enums/PermissionEnum.java new file mode 100644 index 00000000..40a28470 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/enums/PermissionEnum.java @@ -0,0 +1,47 @@ +package com.softeng.dingtalk.enums; + +import com.softeng.dingtalk.exception.CustomExceptionEnum; +import lombok.Getter; + +import java.util.Arrays; + +@Getter +public enum PermissionEnum { + + /** + * 超级管理员的特有权限 + */ + ALLOCATE_PERMISSION(1, "分配管理权限", "有权利分配各种权限"), + SET_INTERNSHIP_ALLOWED_PERIOD(2, "设置实习期", "有权利设置实习允许时间段"), + EDIT_ANY_USER_INFO(3, "编辑用户信息", "有权利修改任意用户信息(在读学位/学号/用户权限)"), + EDIT_SCROLL_NEWS_BOARD(4, "编辑滚动公告栏", "有权利编辑滚动公告栏"), + + REVIEW_INTERNSHIP_APPLICATION(5, "实习申请审核", "有权利通过/退回实习申请"), + REVIEW_PATENT_APPLICATION(6, "专利申请审核", "有权利通过/退回专利申请"), + REVIEW_REIMBURSE_APPLICATION(7, "报销申请审核", "有权利通过/退回报销申请"), + REVIEW_VM_DEVICE_APPLICATION(8, "虚拟机申请审核", "有权利通过/退回虚拟机申请"), + REVIEW_PERFORMANCE_APPLICATION(9, "绩效申请审核", "有权利通过/退回绩效申请审核"), + REVIEW_PAPER_APPLICATION(10, "论文申请审核", "有权利设置论文的录用结果"), + EDIT_STANDARD_PARAMETER(11, "编辑标准参数", "有权利编辑标准参数") + ; + +// @Getter + private final int code; +// @Getter + private final String name; +// @Getter + private final String description; + + PermissionEnum(int code, String name, String description) { + this.code = code; + this.name = name; + this.description = description; + } + + public static PermissionEnum fromCode(int code) { + return Arrays.stream(PermissionEnum.values()) + .filter(permissionEnum -> permissionEnum.getCode() == code) + .findAny() + .orElseThrow(CustomExceptionEnum.ENUM_NOT_FOUND::toException); + } +} diff --git a/src/main/java/com/softeng/dingtalk/enums/Position.java b/src/main/java/com/softeng/dingtalk/enums/Position.java index c5abba72..5ee22b89 100644 --- a/src/main/java/com/softeng/dingtalk/enums/Position.java +++ b/src/main/java/com/softeng/dingtalk/enums/Position.java @@ -13,7 +13,14 @@ public enum Position { ACADEMIC("学硕"), PROFESSIONAL("专硕"), UNDERGRADUATE("本科生"), - OTHER("待定"); + OTHER("待定"), + + /** + * @author LiXiaoKang + * @description todo-新增职位/学位 + * @create 2/4/2023 + */ + TEACHER("教师"); private String title; diff --git a/src/main/java/com/softeng/dingtalk/enums/PracticeStateEnum.java b/src/main/java/com/softeng/dingtalk/enums/PracticeStateEnum.java new file mode 100644 index 00000000..c4bef4a4 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/enums/PracticeStateEnum.java @@ -0,0 +1,14 @@ +package com.softeng.dingtalk.enums; + +import lombok.Getter; + +@Getter +public enum PracticeStateEnum { + REJECTED(-1), AUDITING(0), ACCEPTED(1); + + private int value; + + PracticeStateEnum(int value) { + this.value = value; + } +} diff --git a/src/main/java/com/softeng/dingtalk/exception/CommonException.java b/src/main/java/com/softeng/dingtalk/exception/CommonException.java new file mode 100644 index 00000000..dd01f406 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/exception/CommonException.java @@ -0,0 +1,20 @@ +package com.softeng.dingtalk.exception; + +import lombok.Getter; + +/** + * @Author: Li XiaoKang + * @CreateTime: 2023-01-10 14:51 + * @Description: 通用异常,错误码范围: [100000, 200000) + * @Version: 1.0 + */ +public class CommonException extends RuntimeException { + + @Getter + private Integer code; + + public CommonException(Integer code, String msg) { + super(msg); + this.code = code; + } +} diff --git a/src/main/java/com/softeng/dingtalk/exception/CustomExceptionEnum.java b/src/main/java/com/softeng/dingtalk/exception/CustomExceptionEnum.java new file mode 100644 index 00000000..e99c542a --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/exception/CustomExceptionEnum.java @@ -0,0 +1,58 @@ +package com.softeng.dingtalk.exception; + +public enum CustomExceptionEnum { + PARAM_NOT_NULL(100000, "参数不应该为空"), + ENUM_NOT_FOUND(100001, "枚举异常,找不到该类型"), + FIELD_CONVERT_ERROR(100002, "字段转化异常"), + PERMISSION_NOT_FOUND(100003, "没有访问权限"), + LOGIN_PLEASE(100004, "未登录"), +// PASSWORD_ERROR(100005, "密码错误"), + ACCESS_DENIED(100006, "权限不足,拒绝访问"), + + INTERNSHIP_APPLICATION_CONFLICT(100007, "与已有的实习申请中的时间段冲突"), + INTERNSHIP_APPLICATION_AUDITED_ALREADY(100008, "该实习申请已经审核,无需修改"), + INTERNSHIP_APPLICATION_DELETION_DENIED(100009, "无删除权限"), + + INTERNSHIP_PERIOD_UNSET(100010, "管理员未设置推荐实习时间段"), + + START_DATE_IS_AFTER_END_DATE(100011, "起始日期晚于截止日期"), + + WRONG_FORMAT_OF_STUDENT_NUMBER(100012, "错误的学号格式") + ; + + private static final int COMMON_EXCEPTION_CODE_BASE = 100000; + + private final int code; + private final String msg; + CustomExceptionEnum(int code, String msg) { + this.code = code; + this.msg = msg; + } + + private boolean isCommonException() { + return code >= COMMON_EXCEPTION_CODE_BASE && code < 200000; + } + + public RuntimeException toException() { + return toException(msg); + } + + private RuntimeException toException(String msg) { + if (isCommonException()) return new CommonException(code, msg); + return new RuntimeException("编码异常,联系开发"); + } + + public void throwIf(boolean condition) { + if (condition) { + throw toException(); + } + } + + public void throwWithMessage(String msg) { + throw toException(msg); + } + + public void throwDirectly() { + throw toException(); + } +} diff --git a/src/main/java/com/softeng/dingtalk/interceptor/LoginInterceptor.java b/src/main/java/com/softeng/dingtalk/interceptor/LoginInterceptor.java deleted file mode 100644 index 25e25fdc..00000000 --- a/src/main/java/com/softeng/dingtalk/interceptor/LoginInterceptor.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.softeng.dingtalk.interceptor; - -import com.softeng.dingtalk.component.EncryptorComponent; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Component; -import org.springframework.web.server.ResponseStatusException; -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.Optional; - -/** - * @author zhanyeye - * @description 登录拦截器 - * @date 12/8/2019 - */ -@Component -public class LoginInterceptor implements HandlerInterceptor { - @Autowired - private EncryptorComponent encryptorComponent; - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - Optional.ofNullable(request.getHeader("token")) - .ifPresentOrElse(token -> { - // 如果token存在,则将token 解密后 里面的 uid 和 aid 塞入,request 请求中 - // 这个token 是在客户端第一次登录(向LoginController发请求),登录成功后 - // LoginController 封装 uid 和 aid 到repsonse响应,给客户端,用于后续客户端发送的请求的声明识别 - var token_map = encryptorComponent.decrypt(token); - request.setAttribute("uid", token_map.get("uid")); //塞入 用户id - request.setAttribute("aid", token_map.get("aid")); //塞入 用户权限值 - }, () -> { - throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "未登录!"); - }); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/com/softeng/dingtalk/repository/EventPropertyRepository.java b/src/main/java/com/softeng/dingtalk/repository/EventPropertyRepository.java deleted file mode 100644 index f361b0d5..00000000 --- a/src/main/java/com/softeng/dingtalk/repository/EventPropertyRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.softeng.dingtalk.repository; - -import com.softeng.dingtalk.entity.EventProperty; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.Query; -import org.springframework.stereotype.Repository; - - -import java.util.List; - -@Repository -public interface EventPropertyRepository extends CustomizedRepository{ -} diff --git a/src/main/java/com/softeng/dingtalk/repository/ReimbursementRepository.java b/src/main/java/com/softeng/dingtalk/repository/ReimbursementRepository.java deleted file mode 100644 index f6bb1917..00000000 --- a/src/main/java/com/softeng/dingtalk/repository/ReimbursementRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.softeng.dingtalk.repository; - -import com.softeng.dingtalk.entity.Reimbursement; -import org.springframework.stereotype.Repository; - -@Repository -public interface ReimbursementRepository extends CustomizedRepository{ -} diff --git a/src/main/java/com/softeng/dingtalk/service/ApplicationService.java b/src/main/java/com/softeng/dingtalk/service/ApplicationService.java index 88541665..930ac7d3 100644 --- a/src/main/java/com/softeng/dingtalk/service/ApplicationService.java +++ b/src/main/java/com/softeng/dingtalk/service/ApplicationService.java @@ -4,10 +4,10 @@ import com.softeng.dingtalk.entity.AcItem; import com.softeng.dingtalk.entity.AcRecord; import com.softeng.dingtalk.entity.DcRecord; -import com.softeng.dingtalk.mapper.DcRecordMapper; -import com.softeng.dingtalk.repository.AcItemRepository; -import com.softeng.dingtalk.repository.AcRecordRepository; -import com.softeng.dingtalk.repository.DcRecordRepository; +import com.softeng.dingtalk.dao.mapper.DcRecordMapper; +import com.softeng.dingtalk.dao.repository.AcItemRepository; +import com.softeng.dingtalk.dao.repository.AcRecordRepository; +import com.softeng.dingtalk.dao.repository.DcRecordRepository; import com.softeng.dingtalk.vo.ApplyVO; import com.softeng.dingtalk.vo.DcRecordVO; import com.softeng.dingtalk.vo.UserVO; @@ -20,7 +20,6 @@ import org.springframework.web.server.ResponseStatusException; import java.time.LocalDate; -import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Map; diff --git a/src/main/java/com/softeng/dingtalk/service/AuditService.java b/src/main/java/com/softeng/dingtalk/service/AuditService.java index 3d17038c..814e91bc 100644 --- a/src/main/java/com/softeng/dingtalk/service/AuditService.java +++ b/src/main/java/com/softeng/dingtalk/service/AuditService.java @@ -1,7 +1,10 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.dao.repository.AcItemRepository; +import com.softeng.dingtalk.dao.repository.AcRecordRepository; +import com.softeng.dingtalk.dao.repository.DcRecordRepository; +import com.softeng.dingtalk.dao.repository.DcSummaryRepository; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.repository.*; import com.softeng.dingtalk.vo.CheckedVO; import com.softeng.dingtalk.vo.ToCheckVO; import com.softeng.dingtalk.vo.CheckVO; @@ -14,7 +17,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.swing.text.html.Option; import java.util.List; import java.util.Map; import java.util.Optional; diff --git a/src/main/java/com/softeng/dingtalk/service/BugService.java b/src/main/java/com/softeng/dingtalk/service/BugService.java index 8539519d..919ff075 100644 --- a/src/main/java/com/softeng/dingtalk/service/BugService.java +++ b/src/main/java/com/softeng/dingtalk/service/BugService.java @@ -1,10 +1,10 @@ package com.softeng.dingtalk.service; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.repository.AcRecordRepository; -import com.softeng.dingtalk.repository.BugDetailRepository; -import com.softeng.dingtalk.repository.BugRepository; -import com.softeng.dingtalk.repository.IterationDetailRepository; +import com.softeng.dingtalk.dao.repository.AcRecordRepository; +import com.softeng.dingtalk.dao.repository.BugDetailRepository; +import com.softeng.dingtalk.dao.repository.BugRepository; +import com.softeng.dingtalk.dao.repository.IterationDetailRepository; import com.softeng.dingtalk.vo.BugCheckVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/softeng/dingtalk/service/DingTalkScheduleService.java b/src/main/java/com/softeng/dingtalk/service/DingTalkScheduleService.java index 3a7117de..9cac1504 100644 --- a/src/main/java/com/softeng/dingtalk/service/DingTalkScheduleService.java +++ b/src/main/java/com/softeng/dingtalk/service/DingTalkScheduleService.java @@ -1,12 +1,12 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.api.OAApi; -import com.softeng.dingtalk.api.ScheduleApi; +import com.softeng.dingtalk.component.dingApi.OAApi; +import com.softeng.dingtalk.component.dingApi.ScheduleApi; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.repository.AbsentOARepository; -import com.softeng.dingtalk.repository.DingTalkScheduleDetailRepository; -import com.softeng.dingtalk.repository.DingTalkScheduleRepository; -import com.softeng.dingtalk.repository.UserRepository; +import com.softeng.dingtalk.dao.repository.AbsentOARepository; +import com.softeng.dingtalk.dao.repository.DingTalkScheduleDetailRepository; +import com.softeng.dingtalk.dao.repository.DingTalkScheduleRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; import com.softeng.dingtalk.vo.AbsentOAVO; import com.softeng.dingtalk.vo.DingTalkScheduleVO; import lombok.extern.slf4j.Slf4j; @@ -21,9 +21,7 @@ import org.springframework.web.server.ResponseStatusException; import java.util.LinkedList; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Service @Transactional @@ -42,12 +40,12 @@ public class DingTalkScheduleService { @Autowired AbsentOARepository absentOARepository; public void addSchedule(DingTalkScheduleVO dingTalkScheduleVO,int uid){ - DingTalkSchedule dingTalkSchedule=new DingTalkSchedule(dingTalkScheduleVO.getSummary(),dingTalkScheduleVO.getStart(),dingTalkScheduleVO.getEnd(), + DingTalkSchedule dingTalkSchedule =new DingTalkSchedule(dingTalkScheduleVO.getSummary(),dingTalkScheduleVO.getStart(),dingTalkScheduleVO.getEnd(), dingTalkScheduleVO.isOnline(),dingTalkScheduleVO.getLocation()); dingTalkSchedule.setOrganizer(userRepository.findById(uid).get()); dingTalkSchedule.setDingTalkScheduleDetailList(new LinkedList<>()); for(int id:dingTalkScheduleVO.getAttendeesIdList()){ - dingTalkSchedule.getDingTalkScheduleDetailList().add(new DingTalkScheduleDetail(userRepository.findById(id).get(),dingTalkSchedule)); + dingTalkSchedule.getDingTalkScheduleDetailList().add(new DingTalkScheduleDetail(userRepository.findById(id).get(), dingTalkSchedule)); } try { String scheduleId=scheduleApi.creatSchedule(dingTalkSchedule); @@ -59,14 +57,14 @@ public void addSchedule(DingTalkScheduleVO dingTalkScheduleVO,int uid){ } public void updateSchedule(DingTalkScheduleVO dingTalkScheduleVO){ - DingTalkSchedule dingTalkSchedule=dingTalkScheduleRepository.findById(dingTalkScheduleVO.getId()).get(); + DingTalkSchedule dingTalkSchedule =dingTalkScheduleRepository.findById(dingTalkScheduleVO.getId()).get(); dingTalkSchedule.update(dingTalkScheduleVO.getSummary(),dingTalkScheduleVO.getStart(),dingTalkScheduleVO.getEnd(), dingTalkScheduleVO.isOnline(),dingTalkScheduleVO.getLocation()); // dingTalkSchedule.setOrganizer(userRepository.findById(dingTalkScheduleVO.getOrganizerId()).get()); dingTalkScheduleDetailRepository.deleteAll(dingTalkSchedule.getDingTalkScheduleDetailList()); dingTalkSchedule.setDingTalkScheduleDetailList(new LinkedList<>()); for(int id:dingTalkScheduleVO.getAttendeesIdList()){ - dingTalkSchedule.getDingTalkScheduleDetailList().add(new DingTalkScheduleDetail(userRepository.findById(id).get(),dingTalkSchedule)); + dingTalkSchedule.getDingTalkScheduleDetailList().add(new DingTalkScheduleDetail(userRepository.findById(id).get(), dingTalkSchedule)); } try { scheduleApi.updateSchedule(dingTalkSchedule); @@ -78,14 +76,16 @@ public void updateSchedule(DingTalkScheduleVO dingTalkScheduleVO){ public Map getScheduleList(int page, int size, int uid){ Pageable pageable = PageRequest.of(page-1,size, Sort.by("id").descending()); - User user=userRepository.findById(uid).get(); - Page dingTalkScheduleDetails=dingTalkScheduleDetailRepository.getDingTalkScheduleDetailsByUserEquals(user,pageable); - List dingTalkScheduleList=dingTalkScheduleDetails.toList().stream().map(DingTalkScheduleDetail::getDingTalkSchedule).collect(Collectors.toList()); - return Map.of("list",dingTalkScheduleList,"total",dingTalkScheduleDetails.getTotalElements()); +// User user =userRepository.findById(uid).get(); +// Page dingTalkScheduleDetails=dingTalkScheduleDetailRepository.getDingTalkScheduleDetailsByUserEquals(user,pageable); +// List dingTalkScheduleList =dingTalkScheduleDetails.toList().stream().map(DingTalkScheduleDetail::getDingTalkSchedule).collect(Collectors.toList()); +// return Map.of("list", dingTalkScheduleList,"total",dingTalkScheduleDetails.getTotalElements()); + Page dingTalkSchedulePage = dingTalkScheduleRepository.findAll(pageable); + return Map.of("list", dingTalkSchedulePage.toList(), "total", dingTalkSchedulePage.getTotalElements()); } public void deleteSchedule(int id, int uid){ - DingTalkSchedule dingTalkSchedule=dingTalkScheduleRepository.findById(id).get(); + DingTalkSchedule dingTalkSchedule =dingTalkScheduleRepository.findById(id).get(); if(dingTalkSchedule.getOrganizer().getId()!=uid){ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"非日程组织者,无权限删除!"); } @@ -94,38 +94,38 @@ public void deleteSchedule(int id, int uid){ } public void addAbsentOA(int id, int uid, AbsentOAVO absentOAVO){ - DingTalkSchedule dingTalkSchedule=dingTalkScheduleRepository.findById(id).get(); + DingTalkSchedule dingTalkSchedule =dingTalkScheduleRepository.findById(id).get(); if(absentOARepository.getAbsentOAByUserAndDingTalkSchedule( userRepository.findById(id).get(), dingTalkSchedule)!=null){ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"已提交请假审核,请删除后添加!"); } - AbsentOA absentOA=new AbsentOA(absentOAVO.getType(),absentOAVO.getStart(),absentOAVO.getEnd(),absentOAVO.getDayNum(),absentOAVO.getReason()); - absentOA.setUser(userRepository.findById(uid).get()); - absentOA.setDingTalkSchedule(dingTalkSchedule); - absentOA.setProcessInstanceId(oaApi.createAbsentOA(absentOA)); - absentOARepository.save(absentOA); + AbsentOA absentOAPO =new AbsentOA(absentOAVO.getType(),absentOAVO.getStart(),absentOAVO.getEnd(),absentOAVO.getDayNum(),absentOAVO.getReason()); + absentOAPO.setUser(userRepository.findById(uid).get()); + absentOAPO.setDingTalkSchedule(dingTalkSchedule); + absentOAPO.setProcessInstanceId(oaApi.createAbsentOA(absentOAPO)); + absentOARepository.save(absentOAPO); } public AbsentOA getAbsentOADetail(int id, int uid){ - DingTalkSchedule dingTalkSchedule=dingTalkScheduleRepository.findById(id).get(); - AbsentOA absentOA = absentOARepository.getAbsentOAByUserAndDingTalkSchedule(userRepository.findById(uid).get(),dingTalkSchedule); - if(absentOA==null) return null; - if(absentOA.getProcessInstanceId()!=null){ - absentOA.setState(oaApi.getOAOutCome(absentOA.getProcessInstanceId())); - absentOARepository.save(absentOA); + DingTalkSchedule dingTalkSchedule =dingTalkScheduleRepository.findById(id).get(); + AbsentOA absentOAPO = absentOARepository.getAbsentOAByUserAndDingTalkSchedule(userRepository.findById(uid).get(), dingTalkSchedule); + if(absentOAPO ==null) return null; + if(absentOAPO.getProcessInstanceId()!=null){ + absentOAPO.setState(oaApi.getOAOutCome(absentOAPO.getProcessInstanceId())); + absentOARepository.save(absentOAPO); } - return absentOA; + return absentOAPO; } public void deleteAbsentOA(int id,int uid){ - AbsentOA absentOA=absentOARepository.findById(id).get(); - User user=userRepository.findById(uid).get(); - boolean isSuccess=oaApi.deleteAbsentOA(absentOA.getProcessInstanceId(),user); + AbsentOA absentOAPO =absentOARepository.findById(id).get(); + User user =userRepository.findById(uid).get(); + boolean isSuccess=oaApi.deleteAbsentOA(absentOAPO.getProcessInstanceId(), user); if(!isSuccess) throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"删除失败"); - else absentOARepository.delete(absentOA); + else absentOARepository.delete(absentOAPO); } } diff --git a/src/main/java/com/softeng/dingtalk/service/DissertationPropertyService.java b/src/main/java/com/softeng/dingtalk/service/DissertationPropertyService.java index 54fab63b..54e6b567 100644 --- a/src/main/java/com/softeng/dingtalk/service/DissertationPropertyService.java +++ b/src/main/java/com/softeng/dingtalk/service/DissertationPropertyService.java @@ -1,8 +1,8 @@ package com.softeng.dingtalk.service; import com.softeng.dingtalk.entity.Dissertation; -import com.softeng.dingtalk.repository.DissertationPropertyRepository; -import com.softeng.dingtalk.repository.UserRepository; +import com.softeng.dingtalk.dao.repository.DissertationPropertyRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; import com.softeng.dingtalk.vo.DissertationVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -18,8 +18,6 @@ import org.springframework.web.server.ResponseStatusException; import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.IOException; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -37,7 +35,7 @@ public class DissertationPropertyService { public void addDissertation(MultipartFile file, DissertationVO dissertationVO){ String fileId=fileService.addFileByPath(file,dissertationVO.getFilePath()+"/PreRejoin"); - Dissertation dissertation=new Dissertation(dissertationVO.getState(),dissertationVO.getGraduateYear(),dissertationVO.getFilePath()); + Dissertation dissertation =new Dissertation(dissertationVO.getState(),dissertationVO.getGraduateYear(),dissertationVO.getFilePath()); dissertation.setUser(userRepository.findById(dissertationVO.getUserId()).get()); dissertation.setPreRejoinFileName(file.getOriginalFilename()); dissertation.setPreRejoinFileId(fileId); @@ -45,7 +43,7 @@ public void addDissertation(MultipartFile file, DissertationVO dissertationVO){ } public void updateDissertation(DissertationVO dissertationVO){ - Dissertation dissertationRec=dissertationPropertyRepository.findById(dissertationVO.getId()).get(); + Dissertation dissertationRec =dissertationPropertyRepository.findById(dissertationVO.getId()).get(); dissertationRec.update(dissertationVO.getState(),dissertationVO.getGraduateYear()); dissertationPropertyRepository.save(dissertationRec); } @@ -53,27 +51,27 @@ public void updateDissertation(DissertationVO dissertationVO){ public Map getDissertation(int page, int size){ Pageable pageable = PageRequest.of(page-1,size, Sort.by("id").descending()); Page dissertations=dissertationPropertyRepository.findAll(pageable); - List dissertationList=dissertations.stream().collect(Collectors.toList()); - return Map.of("list",dissertationList,"total",dissertations.getTotalElements()); + List dissertationList =dissertations.stream().collect(Collectors.toList()); + return Map.of("list", dissertationList,"total",dissertations.getTotalElements()); } public Dissertation getDissertationDetail(@PathVariable int uid){ - Dissertation dissertationRec=dissertationPropertyRepository.findByUserId(uid); + Dissertation dissertationRec =dissertationPropertyRepository.findByUserId(uid); return dissertationRec; } public void deleteDissertation(int id){ - Dissertation dissertation=dissertationPropertyRepository.findById(id).get(); - if(dissertation.getPreRejoinFileId()!=null)fileService.deleteFileByPath(dissertation.getPreRejoinFileName(),dissertation.getPreRejoinFileId()); - if(dissertation.getReviewFileId()!=null)fileService.deleteFileByPath(dissertation.getReviewFileName(),dissertation.getReviewFileId()); - if(dissertation.getRejoinFileId()!=null)fileService.deleteFileByPath(dissertation.getRejoinFileName(),dissertation.getRejoinFileId()); - if(dissertation.getFinalFileId()!=null)fileService.deleteFileByPath(dissertation.getFinalFileName(),dissertation.getFinalFileId()); + Dissertation dissertation =dissertationPropertyRepository.findById(id).get(); + if(dissertation.getPreRejoinFileId()!=null)fileService.deleteFileByPath(dissertation.getPreRejoinFileName(), dissertation.getPreRejoinFileId()); + if(dissertation.getReviewFileId()!=null)fileService.deleteFileByPath(dissertation.getReviewFileName(), dissertation.getReviewFileId()); + if(dissertation.getRejoinFileId()!=null)fileService.deleteFileByPath(dissertation.getRejoinFileName(), dissertation.getRejoinFileId()); + if(dissertation.getFinalFileId()!=null)fileService.deleteFileByPath(dissertation.getFinalFileName(), dissertation.getFinalFileId()); dissertationPropertyRepository.deleteById(id); } public void addDissertationFile(MultipartFile file, String type, int id){ - Dissertation dissertation=dissertationPropertyRepository.findById(id).get(); - String fileId=this.fileService.addFileByPath(file,dissertation.getFilePath()+"/"+getFileTypeFolderName(type)); + Dissertation dissertation =dissertationPropertyRepository.findById(id).get(); + String fileId=this.fileService.addFileByPath(file, dissertation.getFilePath()+"/"+getFileTypeFolderName(type)); String fileName=file.getOriginalFilename(); switch (type){ case "preRejoinFile": @@ -107,34 +105,34 @@ private int getDissertationState(Dissertation dissertation){ return 0; } public void deleteDissertationFile(int id,String type){ - Dissertation dissertation=dissertationPropertyRepository.findById(id).get(); + Dissertation dissertation =dissertationPropertyRepository.findById(id).get(); String fileId=null; String fileName=null; switch (type){ case "preRejoinFile": - fileId=dissertation.getPreRejoinFileId(); - fileName=dissertation.getPreRejoinFileName(); + fileId= dissertation.getPreRejoinFileId(); + fileName= dissertation.getPreRejoinFileName(); dissertation.setPreRejoinFileName(null); dissertation.setPreRejoinFileId(null); dissertation.setState(0); break; case "reviewFile": - fileId=dissertation.getReviewFileId(); - fileName=dissertation.getReviewFileName(); + fileId= dissertation.getReviewFileId(); + fileName= dissertation.getReviewFileName(); dissertation.setReviewFileName(null); dissertation.setReviewFileId(null); dissertation.setState(0); break; case "rejoinFile": - fileId=dissertation.getRejoinFileId(); - fileName=dissertation.getRejoinFileName(); + fileId= dissertation.getRejoinFileId(); + fileName= dissertation.getRejoinFileName(); dissertation.setRejoinFileName(null); dissertation.setRejoinFileId(null); dissertation.setState(1); break; case "finalFile": - fileId=dissertation.getFinalFileId(); - fileName=dissertation.getFinalFileName(); + fileId= dissertation.getFinalFileId(); + fileName= dissertation.getFinalFileName(); dissertation.setFinalFileName(null); dissertation.setFinalFileId(null); dissertation.setState(2); @@ -157,25 +155,25 @@ public void downLoadDissertationFile(int id,String type,HttpServletResponse resp } private DissertationFileInfo getDissertationFileInfo(int id,String type){ - Dissertation dissertation=dissertationPropertyRepository.findById(id).get(); + Dissertation dissertation =dissertationPropertyRepository.findById(id).get(); String fileName=null; String fileId=null; switch (type){ case "preRejoinFile": - fileId=dissertation.getPreRejoinFileId(); - fileName=dissertation.getPreRejoinFileName(); + fileId= dissertation.getPreRejoinFileId(); + fileName= dissertation.getPreRejoinFileName(); break; case "reviewFile": - fileId=dissertation.getReviewFileId(); - fileName=dissertation.getReviewFileName(); + fileId= dissertation.getReviewFileId(); + fileName= dissertation.getReviewFileName(); break; case "rejoinFile": - fileId=dissertation.getRejoinFileId(); - fileName=dissertation.getRejoinFileName(); + fileId= dissertation.getRejoinFileId(); + fileName= dissertation.getRejoinFileName(); break; case "finalFile": - fileId=dissertation.getFinalFileId(); - fileName=dissertation.getFinalFileName(); + fileId= dissertation.getFinalFileId(); + fileName= dissertation.getFinalFileName(); break; } return new DissertationFileInfo(fileName, fileId); diff --git a/src/main/java/com/softeng/dingtalk/service/EventPropertyService.java b/src/main/java/com/softeng/dingtalk/service/EventPropertyService.java index f40d5575..41394fc1 100644 --- a/src/main/java/com/softeng/dingtalk/service/EventPropertyService.java +++ b/src/main/java/com/softeng/dingtalk/service/EventPropertyService.java @@ -1,8 +1,8 @@ package com.softeng.dingtalk.service; import com.softeng.dingtalk.entity.EventFile; import com.softeng.dingtalk.entity.EventProperty; -import com.softeng.dingtalk.repository.EventPropertyRepository; -import com.softeng.dingtalk.repository.EventFileRepository; +import com.softeng.dingtalk.dao.repository.EventPropertyRepository; +import com.softeng.dingtalk.dao.repository.EventFileRepository; import com.softeng.dingtalk.vo.EventPropertyInfoVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -45,7 +45,7 @@ public Map getEventInfoList(int page, int size){ Pageable pageable = PageRequest.of(page-1,size, Sort.by("id").descending()); Page eventProperties=eventPropertyRepository.findAll(pageable); List infoList=eventProperties.stream().map(eventProperty -> new EventPropertyInfoVO(eventProperty.getId(), - eventProperty.getName(),eventProperty.getYear(),eventProperty.getType())).collect(Collectors.toList()); + eventProperty.getName(), eventProperty.getYear(), eventProperty.getType())).collect(Collectors.toList()); return Map.of("list",infoList,"total",eventProperties.getTotalElements()); } @@ -73,8 +73,8 @@ public void addEventProperty(EventProperty eventProperty){ * @param eventProperty */ public void updateEventProperty(EventProperty eventProperty){ - EventProperty eventPropertyRec=eventPropertyRepository.findById(eventProperty.getId()).get(); - eventPropertyRec.update(eventProperty.getName(),eventProperty.getYear(),eventProperty.getType()); + EventProperty eventPropertyRec =eventPropertyRepository.findById(eventProperty.getId()).get(); + eventPropertyRec.update(eventProperty.getName(), eventProperty.getYear(), eventProperty.getType()); eventPropertyRepository.save(eventPropertyRec); } @@ -86,19 +86,19 @@ public void updateEventProperty(EventProperty eventProperty){ * @param eventId */ public void addEventPropertyFileList(List fileList, String type, int eventId){ - EventProperty eventProperty=eventPropertyRepository.findById(eventId).get(); - List eventFileList=saveFileList(fileList,eventProperty,eventProperty.getPath()+"/"+type,type); + EventProperty eventProperty =eventPropertyRepository.findById(eventId).get(); + List eventFileList =saveFileList(fileList, eventProperty, eventProperty.getPath()+"/"+type,type); switch (type){ case "Picture": - eventFileList=this.appendList(eventProperty.getPictureFileList(),eventFileList); + eventFileList =this.appendList(eventProperty.getPictureFileList(), eventFileList); eventProperty.setPictureFileList(eventFileList); break; case "Video": - eventFileList=this.appendList(eventProperty.getVideoFileList(),eventFileList); + eventFileList =this.appendList(eventProperty.getVideoFileList(), eventFileList); eventProperty.setVideoFileList(eventFileList); break; case "Doc": - eventFileList=this.appendList(eventProperty.getDocFileList(),eventFileList); + eventFileList =this.appendList(eventProperty.getDocFileList(), eventFileList); eventProperty.setDocFileList(eventFileList); break; } @@ -120,9 +120,9 @@ private List appendList(List headList, List app * @param type */ public void deleteEventPropertyFile(int eventId, int eventFileId, String type){ - EventProperty eventProperty=eventPropertyRepository.findById(eventId).get(); - EventFile eventFile=eventFileRepository.findById(eventFileId).get(); - fileService.deleteFileByPath(eventFile.getFileName(),eventFile.getFileId()); + EventProperty eventProperty =eventPropertyRepository.findById(eventId).get(); + EventFile eventFile =eventFileRepository.findById(eventFileId).get(); + fileService.deleteFileByPath(eventFile.getFileName(), eventFile.getFileId()); switch (type){ case "Picture": eventProperty.getPictureFileList().remove(eventFile); @@ -139,9 +139,9 @@ public void deleteEventPropertyFile(int eventId, int eventFileId, String type){ } public void downloadEventFile(int eventFileId, HttpServletResponse response){ - EventFile eventFile=eventFileRepository.findById(eventFileId).get(); + EventFile eventFile =eventFileRepository.findById(eventFileId).get(); try{ - fileService.downloadFile(eventFile.getFileName(),eventFile.getFileId(),response); + fileService.downloadFile(eventFile.getFileName(), eventFile.getFileId(),response); }catch (Exception e){ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); } @@ -155,12 +155,12 @@ public void downloadEventFile(int eventFileId, HttpServletResponse response){ * @param type * @return */ - private List saveFileList(List fileList,EventProperty eventProperty, String path,String type){ + private List saveFileList(List fileList, EventProperty eventProperty, String path, String type){ if(fileList!=null && fileList.size()!=0){ - List eventFileList=new ArrayList<>(); + List eventFileList =new ArrayList<>(); for(MultipartFile file:fileList){ String fileId=fileService.addFileByPath(file,path); - EventFile eventFile=new EventFile(file.getOriginalFilename(),fileId,type, eventProperty); + EventFile eventFile =new EventFile(file.getOriginalFilename(),fileId,type, eventProperty); eventFileList.add(eventFile); } eventFileRepository.saveBatch(eventFileList); @@ -176,13 +176,13 @@ private List saveFileList(List fileList,EventProperty * @param id */ public void deleteEventProperty(int id){ - EventProperty eventProperty=eventPropertyRepository.findById(id).get(); - List eventFileList=eventProperty.getDocFileList(); - if(eventFileList!=null)this.simpleDeleteFileList(eventFileList); - eventFileList=eventProperty.getVideoFileList(); - if(eventFileList!=null)this.simpleDeleteFileList(eventFileList); - eventFileList=eventProperty.getPictureFileList(); - if(eventFileList!=null)this.simpleDeleteFileList(eventFileList); + EventProperty eventProperty =eventPropertyRepository.findById(id).get(); + List eventFileList = eventProperty.getDocFileList(); + if(eventFileList !=null)this.simpleDeleteFileList(eventFileList); + eventFileList = eventProperty.getVideoFileList(); + if(eventFileList !=null)this.simpleDeleteFileList(eventFileList); + eventFileList = eventProperty.getPictureFileList(); + if(eventFileList !=null)this.simpleDeleteFileList(eventFileList); eventPropertyRepository.deleteById(id); } @@ -191,8 +191,8 @@ public void deleteEventProperty(int id){ * @param eventFileList */ private void simpleDeleteFileList(List eventFileList){ - for(EventFile eventFile: eventFileList){ - fileService.deleteFileByPath(eventFile.getFileName(),eventFile.getFileId()); + for(EventFile eventFile : eventFileList){ + fileService.deleteFileByPath(eventFile.getFileName(), eventFile.getFileId()); } } } diff --git a/src/main/java/com/softeng/dingtalk/service/ExcelService.java b/src/main/java/com/softeng/dingtalk/service/ExcelService.java index 076bb3df..9b9bc26a 100644 --- a/src/main/java/com/softeng/dingtalk/service/ExcelService.java +++ b/src/main/java/com/softeng/dingtalk/service/ExcelService.java @@ -2,14 +2,14 @@ import com.alibaba.excel.EasyExcel; import com.softeng.dingtalk.entity.Prize; -import com.softeng.dingtalk.excel.AcData; -import com.softeng.dingtalk.excel.DcSummaryData; -import com.softeng.dingtalk.excel.UserPrizeData; -import com.softeng.dingtalk.excel.UserPropertyData; -import com.softeng.dingtalk.mapper.AcRecordMapper; -import com.softeng.dingtalk.mapper.DcSummaryMapper; -import com.softeng.dingtalk.repository.PrizeRepository; -import com.softeng.dingtalk.repository.PropertyRepository; +import com.softeng.dingtalk.dto.resp.excelData.AcData; +import com.softeng.dingtalk.dto.resp.excelData.DcSummaryData; +import com.softeng.dingtalk.dto.resp.excelData.UserPrizeData; +import com.softeng.dingtalk.dto.resp.excelData.UserPropertyData; +import com.softeng.dingtalk.dao.mapper.AcRecordMapper; +import com.softeng.dingtalk.dao.mapper.DcSummaryMapper; +import com.softeng.dingtalk.dao.repository.PrizeRepository; +import com.softeng.dingtalk.dao.repository.PropertyRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/softeng/dingtalk/service/FileService.java b/src/main/java/com/softeng/dingtalk/service/FileService.java index d36f8369..875411cf 100644 --- a/src/main/java/com/softeng/dingtalk/service/FileService.java +++ b/src/main/java/com/softeng/dingtalk/service/FileService.java @@ -2,12 +2,11 @@ import com.aliyun.dingtalkdrive_1_0.models.AddFileResponseBody; import com.aliyun.dingtalkdrive_1_0.models.GetDownloadInfoResponseBody; -import com.softeng.dingtalk.api.BaseApi; +import com.softeng.dingtalk.component.dingApi.BaseApi; import com.softeng.dingtalk.vo.PaperFileDownloadInfoVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -16,9 +15,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.UUID; /** * @author RickyWu diff --git a/src/main/java/com/softeng/dingtalk/service/InitService.java b/src/main/java/com/softeng/dingtalk/service/InitService.java index 895b4337..b757e280 100644 --- a/src/main/java/com/softeng/dingtalk/service/InitService.java +++ b/src/main/java/com/softeng/dingtalk/service/InitService.java @@ -1,12 +1,12 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.dao.repository.*; import com.softeng.dingtalk.entity.DcSummary; import com.softeng.dingtalk.entity.PaperLevel; import com.softeng.dingtalk.entity.PatentLevel; import com.softeng.dingtalk.entity.SubsidyLevel; import com.softeng.dingtalk.enums.PaperType; import com.softeng.dingtalk.enums.Position; -import com.softeng.dingtalk.repository.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -76,6 +76,7 @@ public void initSubsidyLevel() { subsidyLevels.add(new SubsidyLevel(Position.PROFESSIONAL, 200)); subsidyLevels.add(new SubsidyLevel(Position.UNDERGRADUATE, 0)); subsidyLevels.add(new SubsidyLevel(Position.OTHER, 0)); + subsidyLevels.add(new SubsidyLevel(Position.TEACHER, 0)); subsidyLevelRepository.saveBatch(subsidyLevels); } } @@ -98,7 +99,7 @@ public void initDcSummary() { public void initPatentLevel(){ if(patentLevelRepository.count()==0){ - PatentLevel patentLevel=new PatentLevel(); + PatentLevel patentLevel =new PatentLevel(); patentLevel.setTitle("patent"); patentLevel.setTotal(40); patentLevelRepository.save(patentLevel); diff --git a/src/main/java/com/softeng/dingtalk/service/InternshipPeriodRecommendedService.java b/src/main/java/com/softeng/dingtalk/service/InternshipPeriodRecommendedService.java new file mode 100644 index 00000000..c7e81496 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/service/InternshipPeriodRecommendedService.java @@ -0,0 +1,35 @@ +package com.softeng.dingtalk.service; + +import com.softeng.dingtalk.component.convertor.InternshipPeriodRecommendedConvertor; +import com.softeng.dingtalk.dao.repository.InternshipPeriodRecommendedRepository; +import com.softeng.dingtalk.dto.req.InternshipPeriodRecommendedReq; +import com.softeng.dingtalk.dto.resp.InternshipPeriodRecommendedResp; +import com.softeng.dingtalk.exception.CustomExceptionEnum; +import com.softeng.dingtalk.entity.InternshipPeriodRecommended; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Service +@Transactional +@Slf4j +public class InternshipPeriodRecommendedService { + @Resource + private InternshipPeriodRecommendedRepository internshipPeriodRecommendedRepository; + @Resource + private InternshipPeriodRecommendedConvertor internshipPeriodRecommendedConvertor; + + + public InternshipPeriodRecommendedResp getNewestPeriod() { + InternshipPeriodRecommended res = internshipPeriodRecommendedRepository.findTop(); + CustomExceptionEnum.INTERNSHIP_PERIOD_UNSET.throwIf(res == null); + return internshipPeriodRecommendedConvertor.entity2Resp(res); + } + + public void addPeriod(InternshipPeriodRecommendedReq internshipPeriodRecommendedReq) { + internshipPeriodRecommendedRepository.save(internshipPeriodRecommendedConvertor.req2Entity(internshipPeriodRecommendedReq)); + } + +} diff --git a/src/main/java/com/softeng/dingtalk/service/IterationService.java b/src/main/java/com/softeng/dingtalk/service/IterationService.java index a708c091..e9bbb9dd 100644 --- a/src/main/java/com/softeng/dingtalk/service/IterationService.java +++ b/src/main/java/com/softeng/dingtalk/service/IterationService.java @@ -1,8 +1,8 @@ package com.softeng.dingtalk.service; import com.softeng.dingtalk.component.DateUtils; +import com.softeng.dingtalk.dao.repository.*; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.repository.*; import com.softeng.dingtalk.vo.IterateInfoVO; import com.softeng.dingtalk.vo.IterationVO; import lombok.extern.slf4j.Slf4j; @@ -131,6 +131,7 @@ public void updateIteration(IterationVO vo) { /** + * todo-有bug * 查询项目详细信息 * @param pid * @return diff --git a/src/main/java/com/softeng/dingtalk/service/NewsService.java b/src/main/java/com/softeng/dingtalk/service/NewsService.java new file mode 100644 index 00000000..a9137bad --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/service/NewsService.java @@ -0,0 +1,79 @@ +package com.softeng.dingtalk.service; + +import com.softeng.dingtalk.component.convertor.NewsConvertor; +import com.softeng.dingtalk.dao.repository.NewsRepository; +import com.softeng.dingtalk.dto.req.NewsReq; +import com.softeng.dingtalk.dto.resp.NewsResp; +import com.softeng.dingtalk.enums.NewsState; +import com.softeng.dingtalk.entity.News; +import com.softeng.dingtalk.utils.StreamUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +@Service +@Transactional +@Slf4j +public class NewsService { + @Resource + private NewsRepository newsRepository; + @Resource + private NewsConvertor newsConvertor; + + public Map getShownNews(int page, int size) { + Pageable pageable = PageRequest.of(page - 1, size, Sort.by("release_time").descending()); + Page newsPage = newsRepository.findAllByIsShownAndIsDeleted( + NewsState.IS_SHOWN.getValue(), + NewsState.IS_NOT_DELETED.getValue(), + pageable); + List newsList = StreamUtils.map(newsPage.toList(), news -> newsConvertor.entity2Resp(news)); + return Map.of("newsList", newsList, "total", newsPage.getTotalElements()); + } + + public Map getNotShownNews(int page, int size) { + Pageable pageable = PageRequest.of(page - 1, size, Sort.by("release_time").descending()); + Page newsPage = newsRepository.findAllByIsShownAndIsDeleted( + NewsState.IS_NOT_SHOWN.getValue(), + NewsState.IS_NOT_DELETED.getValue(), + pageable); + List newsList = StreamUtils.map(newsPage.toList(), news -> newsConvertor.entity2Resp(news)); + return Map.of("newsList", newsList, "total", newsPage.getTotalElements()); + } + + public List getShownNews() { + return StreamUtils.map(newsRepository.findAllByIsShownAndIsDeleted( + NewsState.IS_SHOWN.getValue(), + NewsState.IS_NOT_DELETED.getValue()), news -> newsConvertor.entity2Resp(news)); + } + + public Map getAllNews(int page, int size) { + Pageable pageable = PageRequest.of(page - 1, size, Sort.by("release_time").descending()); + Page newsPage = newsRepository.findAllByIsDeleted(NewsState.IS_NOT_DELETED.getValue(), pageable); + List newsList = StreamUtils.map(newsPage.toList(), news -> newsConvertor.entity2Resp(news)); + return Map.of("newsList", newsList, "total", newsPage.getTotalElements()); + } + + public void addNews(NewsReq newsReq) { + newsRepository.save(newsConvertor.req2Entity(newsReq)); + } + + public void hideNews(int newsId) { + newsRepository.updateIsShown(newsId, NewsState.IS_NOT_SHOWN.getValue()); + } + + public void showNews(int newsId) { + newsRepository.updateIsShown(newsId, NewsState.IS_SHOWN.getValue()); + } + + public void deleteNews(int newsId) { + newsRepository.updateIsDeleted(newsId, NewsState.IS_DELETED.getValue()); + } +} diff --git a/src/main/java/com/softeng/dingtalk/service/NotifyService.java b/src/main/java/com/softeng/dingtalk/service/NotifyService.java index b4a5c622..9db17420 100644 --- a/src/main/java/com/softeng/dingtalk/service/NotifyService.java +++ b/src/main/java/com/softeng/dingtalk/service/NotifyService.java @@ -1,7 +1,7 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.dao.repository.*; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.repository.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.*; diff --git a/src/main/java/com/softeng/dingtalk/service/PaperFileService.java b/src/main/java/com/softeng/dingtalk/service/PaperFileService.java index abbad84f..e4dff005 100644 --- a/src/main/java/com/softeng/dingtalk/service/PaperFileService.java +++ b/src/main/java/com/softeng/dingtalk/service/PaperFileService.java @@ -1,11 +1,11 @@ package com.softeng.dingtalk.service; import com.aliyun.dingtalkdrive_1_0.models.GetDownloadInfoResponseBody; -import com.softeng.dingtalk.api.BaseApi; +import com.softeng.dingtalk.component.dingApi.BaseApi; import com.softeng.dingtalk.entity.ExternalPaper; import com.softeng.dingtalk.entity.InternalPaper; -import com.softeng.dingtalk.repository.ExternalPaperRepository; -import com.softeng.dingtalk.repository.InternalPaperRepository; +import com.softeng.dingtalk.dao.repository.ExternalPaperRepository; +import com.softeng.dingtalk.dao.repository.InternalPaperRepository; import com.softeng.dingtalk.vo.PaperFileDownloadInfoVO; import com.softeng.dingtalk.vo.PaperFileInfoVO; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/softeng/dingtalk/service/PaperService.java b/src/main/java/com/softeng/dingtalk/service/PaperService.java index 20c14e32..780dfc00 100644 --- a/src/main/java/com/softeng/dingtalk/service/PaperService.java +++ b/src/main/java/com/softeng/dingtalk/service/PaperService.java @@ -1,11 +1,10 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.api.BaseApi; +import com.softeng.dingtalk.component.dingApi.BaseApi; +import com.softeng.dingtalk.dao.repository.*; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.mapper.InternalPaperMapper; - -import com.softeng.dingtalk.repository.*; +import com.softeng.dingtalk.dao.mapper.InternalPaperMapper; import com.softeng.dingtalk.vo.*; import lombok.extern.slf4j.Slf4j; @@ -13,14 +12,12 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.server.ResponseStatusException; -import java.io.File; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -126,6 +123,9 @@ public void addExternalPaper(ExternalPaperVO vo) { Vote vote = new Vote(vo.getStartTime(), vo.getEndTime(), true, externalPaper.getId()); externalPaper.setVote(vote); + vote.setTotal(0); + vote.setAccept(0); + voteRepository.save(vote); } diff --git a/src/main/java/com/softeng/dingtalk/service/PatentService.java b/src/main/java/com/softeng/dingtalk/service/PatentService.java index 7881b6e3..542f2818 100644 --- a/src/main/java/com/softeng/dingtalk/service/PatentService.java +++ b/src/main/java/com/softeng/dingtalk/service/PatentService.java @@ -1,7 +1,11 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.component.convertor.PatentConvertor; +import com.softeng.dingtalk.dao.repository.*; +import com.softeng.dingtalk.dto.req.PatentReq; +import com.softeng.dingtalk.dto.resp.PatentResp; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.repository.*; +import com.softeng.dingtalk.utils.StreamUtils; import com.softeng.dingtalk.vo.PatentVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -10,17 +14,20 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; +import javax.annotation.Resource; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; import javax.servlet.http.HttpServletResponse; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -41,6 +48,8 @@ public class PatentService { FileService fileService; @Autowired UserRepository userRepository; + @Resource + PatentConvertor patentConvertor; @Value("${patent.rank1Rate}") private double rank1Rate; @@ -50,21 +59,21 @@ public class PatentService { //将增加专利和修改合并 public void addPatent(MultipartFile file, PatentVO patentVO){ - Patent patent=null; + Patent patent =null; if(patentVO.getId()==null){ - patent=new Patent(patentVO.getName(),patentVO.getYear(),patentVO.getType(), + patent =new Patent(patentVO.getName(),patentVO.getYear(),patentVO.getType(), patentVO.getVersion(),patentVO.getObligee(),patentVO.getFilePath()); }else{ - patent=patentRepository.findById(patentVO.getId()).get(); + patent =patentRepository.findById(patentVO.getId()).get(); patent.update(patentVO.getName(),patentVO.getYear(),patentVO.getType(), patentVO.getVersion(),patentVO.getObligee(),patentVO.getFilePath()); } patent.setApplicant(userRepository.findById(patentVO.getApplicantId()).get()); if(file!=null){ if(patent.getReviewFileId()!=null){ - fileService.deleteFileByPath(patent.getReviewFileName(),patent.getReviewFileId()); + fileService.deleteFileByPath(patent.getReviewFileName(), patent.getReviewFileId()); } - String fileId=fileService.addFileByPath(file,patent.getFilePath()+"/Review"); + String fileId=fileService.addFileByPath(file, patent.getFilePath()+"/Review"); patent.setReviewFileName(file.getOriginalFilename()); patent.setReviewFileId(fileId); } @@ -72,10 +81,10 @@ public void addPatent(MultipartFile file, PatentVO patentVO){ //经过内审状态后,不可以再修改发明者名单 if(patent.getState()!=0)return; if(patentVO.getInventorsIdList()!=null){ - List patentDetailList=new LinkedList<>(); + List patentDetailList =new LinkedList<>(); int num=1; for(Integer id:patentVO.getInventorsIdList()){ - PatentDetail patentDetail=new PatentDetail(num,patent,userRepository.findById(id).get()); + PatentDetail patentDetail =new PatentDetail(num, patent,userRepository.findById(id).get()); patentDetailList.add(patentDetail); num++; } @@ -113,15 +122,15 @@ private double calculateAC(int signal,int rank,double sum){ //内审决定 public void decideAudit(int id,boolean isPass,int uid){ - Patent patent=patentRepository.findById(id).get(); + Patent patent =patentRepository.findById(id).get(); if(isPass){ double sum=patentLevelRepository.getValue("patent"); patent.getPatentDetailList().forEach(patentDetail -> { - double ac=calculateAC(1,patentDetail.getNum(),sum); + double ac=calculateAC(1, patentDetail.getNum(),sum); if(ac!=0){ - AcRecord acRecord=new AcRecord(patentDetail.getUser(),userRepository.findById(uid).get(),ac,"专利内审通过", AcRecord.Patent, LocalDateTime.now()); + AcRecord acRecord =new AcRecord(patentDetail.getUser(),userRepository.findById(uid).get(),ac,"专利内审通过", AcRecord.Patent, LocalDateTime.now()); acRecordRepository.save(acRecord); - patentDetail.getAcRecordList().add(acRecord); +// patentDetail.getAcRecordList().add(acRecord); } }); @@ -134,7 +143,7 @@ public void decideAudit(int id,boolean isPass,int uid){ } //授权决定 public void decideAuthorization(int id,boolean isPass,int uid){ - Patent patent=patentRepository.findById(id).get(); + Patent patent =patentRepository.findById(id).get(); int signal; String reason; if(isPass){ @@ -148,11 +157,11 @@ public void decideAuthorization(int id,boolean isPass,int uid){ } double sum=patentLevelRepository.getValue("patent"); patent.getPatentDetailList().forEach(patentDetail -> { - double ac=calculateAC(signal,patentDetail.getNum(),sum); + double ac=calculateAC(signal, patentDetail.getNum(),sum); if(ac!=0){ - AcRecord acRecord=new AcRecord(patentDetail.getUser(),userRepository.findById(uid).get(),ac,reason, AcRecord.Patent, LocalDateTime.now()); + AcRecord acRecord =new AcRecord(patentDetail.getUser(),userRepository.findById(uid).get(),ac,reason, AcRecord.Patent, LocalDateTime.now()); acRecordRepository.save(acRecord); - patentDetail.getAcRecordList().add(acRecord); +// patentDetail.getAcRecordList().add(acRecord); } }); @@ -161,25 +170,25 @@ public void decideAuthorization(int id,boolean isPass,int uid){ } public void addPatentFile(MultipartFile file, int id, String type){ - Patent patent=patentRepository.findById(id).get(); + Patent patent =patentRepository.findById(id).get(); PatentFileInfo patentFileInfo=getPatentFileInfo(patent,type); if(patentFileInfo.name!=null){ fileService.deleteFileByPath(patentFileInfo.name,patentFileInfo.id); } - String fileId=fileService.addFileByPath(file,patent.getFilePath()+"/"+getFileTypeFolderName(type)); + String fileId=fileService.addFileByPath(file, patent.getFilePath()+"/"+getFileTypeFolderName(type)); setPatentFileAttribute(patent,type,file.getOriginalFilename(),fileId); patentRepository.save(patent); } public void deletePatentFile(int id, String type){ - Patent patent=patentRepository.findById(id).get(); + Patent patent =patentRepository.findById(id).get(); PatentFileInfo patentFileInfo=getPatentFileInfo(patent,type); fileService.deleteFileByPath(patentFileInfo.name,patentFileInfo.id); setPatentFileAttribute(patent,type,null,null); } public void downloadPatentFile(int id, String type, HttpServletResponse response){ - Patent patent=patentRepository.findById(id).get(); + Patent patent =patentRepository.findById(id).get(); PatentFileInfo patentFileInfo=getPatentFileInfo(patent,type); try{ fileService.downloadFile(patentFileInfo.name,patentFileInfo.id,response); @@ -188,7 +197,7 @@ public void downloadPatentFile(int id, String type, HttpServletResponse response } } - private void setPatentFileAttribute(Patent patent,String type,String fileName,String fileId){ + private void setPatentFileAttribute(Patent patent, String type, String fileName, String fileId){ switch(type){ case "reviewFile": patent.setReviewFileName(fileName); @@ -215,28 +224,28 @@ private void setPatentFileAttribute(Patent patent,String type,String fileName,St } } - private PatentFileInfo getPatentFileInfo(Patent patent,String type){ + private PatentFileInfo getPatentFileInfo(Patent patent, String type){ PatentFileInfo patentFileInfo=new PatentFileInfo(); switch(type){ case "reviewFile": - patentFileInfo.name=patent.getReviewFileName(); - patentFileInfo.id=patent.getReviewFileId(); + patentFileInfo.name= patent.getReviewFileName(); + patentFileInfo.id= patent.getReviewFileId(); break; case "submissionFile": - patentFileInfo.name=patent.getSubmissionFileName(); - patentFileInfo.id=patent.getSubmissionFileId(); + patentFileInfo.name= patent.getSubmissionFileName(); + patentFileInfo.id= patent.getSubmissionFileId(); break; case "commentFile": - patentFileInfo.name=patent.getCommentFileName(); - patentFileInfo.id=patent.getCommentFileId(); + patentFileInfo.name= patent.getCommentFileName(); + patentFileInfo.id= patent.getCommentFileId(); break; case "handlingFile": - patentFileInfo.name=patent.getHandlingFileName(); - patentFileInfo.id=patent.getHandlingFileId(); + patentFileInfo.name= patent.getHandlingFileName(); + patentFileInfo.id= patent.getHandlingFileId(); break; case"authorizationFile": - patentFileInfo.name=patent.getAuthorizationFileName(); - patentFileInfo.id=patent.getAuthorizationFileId(); + patentFileInfo.name= patent.getAuthorizationFileName(); + patentFileInfo.id= patent.getAuthorizationFileId(); break; default: throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "未找到对应文件类型!"); @@ -258,4 +267,44 @@ static class PatentFileInfo{ } PatentFileInfo(){} } + + public Map queryPatentList(int page, int size, PatentReq patentReq) { + Pageable pageable = PageRequest.of(page - 1, size, Sort.by("id").descending()); + Specification patentSpecification = ((root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if(patentReq.getInventorsIdList().size() == 1) { +// 查询特定发明人的专利 + int userId = patentReq.getInventorsIdList().get(0); + + Subquery subQuery = criteriaQuery.subquery(PatentDetail.class); + Root subRoot = subQuery.from(PatentDetail.class); +// subQuery.where(criteriaBuilder.equal(subRoot.get("user").get("id"), userId)); +// subQuery.select(subRoot.get("id")); +// +// predicates.add(criteriaBuilder.exists(subQuery)); + + subQuery.select(subRoot.get("patent").get("id")); + subQuery.where(criteriaBuilder.equal(subRoot.get("user").get("id"), userId)); + + predicates.add(root.get("id").in(subQuery)); + } + if(!"".equals(patentReq.getYear())) { + predicates.add(criteriaBuilder.equal(root.get("year"), patentReq.getYear())); + } + if(patentReq.getState() != -2) { + predicates.add(criteriaBuilder.equal(root.get("state"), patentReq.getState())); + } + if(patentReq.getApplicantId() != 0) { + predicates.add(criteriaBuilder.equal(root.get("applicant").get("id"), patentReq.getApplicantId())); + } + Predicate[] arr = new Predicate[predicates.size()]; + return criteriaBuilder.and(predicates.toArray(arr)); + }); + + Page patentPage = patentRepository.findAll(patentSpecification, pageable); + List patentRespList = StreamUtils.map(patentPage.toList(), patent -> + patentConvertor.entity2Resp(patent) + ); + return Map.of("list", patentRespList, "total", patentPage.getTotalElements()); + } } diff --git a/src/main/java/com/softeng/dingtalk/service/PerformanceService.java b/src/main/java/com/softeng/dingtalk/service/PerformanceService.java index ab58fb13..8c42e585 100644 --- a/src/main/java/com/softeng/dingtalk/service/PerformanceService.java +++ b/src/main/java/com/softeng/dingtalk/service/PerformanceService.java @@ -1,15 +1,17 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.dao.repository.AcRecordRepository; +import com.softeng.dingtalk.dao.repository.BugRepository; +import com.softeng.dingtalk.dao.repository.DcSummaryRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; import com.softeng.dingtalk.entity.DcSummary; import com.softeng.dingtalk.enums.Position; -import com.softeng.dingtalk.repository.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Optional; @@ -93,7 +95,7 @@ public List> listUserAc(int uid) { */ public List> listDcSummaryVO(LocalDate date, boolean isDesc) { int yearmonth = date.getYear() * 100 + date.getMonthValue(); - systemService.manulUpdatePerformance(yearmonth); + systemService.manualUpdatePerformance(yearmonth); return isDesc ? dcSummaryRepository.listDcSummaryDesc(yearmonth) : dcSummaryRepository.listDcSummaryAsc(yearmonth); diff --git a/src/main/java/com/softeng/dingtalk/service/PermissionService.java b/src/main/java/com/softeng/dingtalk/service/PermissionService.java new file mode 100644 index 00000000..6dbf043b --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/service/PermissionService.java @@ -0,0 +1,38 @@ +package com.softeng.dingtalk.service; + +import com.softeng.dingtalk.component.convertor.PermissionConvertor; +import com.softeng.dingtalk.dao.repository.PermissionRepository; +import com.softeng.dingtalk.dao.repository.UserPermissionRepository; +import com.softeng.dingtalk.dto.resp.PermissionResp; +import com.softeng.dingtalk.entity.UserPermission; +import com.softeng.dingtalk.utils.StreamUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +@Service +@Transactional +@Slf4j +public class PermissionService { + @Resource + private UserPermissionRepository userPermissionRepository; + @Resource + private PermissionRepository permissionRepository; + @Resource + PermissionConvertor permissionConvertor; + /** + * 获得该用户的所有权限名 + * @param userId + * @return 所有权限名 + */ + public List getPermissions(int userId){ + List userPermissionList = userPermissionRepository.findAllByUserId(userId); + return StreamUtils.map( + userPermissionList, + userPermission -> permissionConvertor.entity2Resp(permissionRepository.findById(userPermission.getPermissionId())) + ); + } +} diff --git a/src/main/java/com/softeng/dingtalk/service/PracticeService.java b/src/main/java/com/softeng/dingtalk/service/PracticeService.java index 780bc6ce..77194a5f 100644 --- a/src/main/java/com/softeng/dingtalk/service/PracticeService.java +++ b/src/main/java/com/softeng/dingtalk/service/PracticeService.java @@ -1,18 +1,37 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.component.convertor.PracticeConvertor; +import com.softeng.dingtalk.dao.repository.InternshipPeriodRecommendedRepository; +import com.softeng.dingtalk.dto.req.PracticeReq; +import com.softeng.dingtalk.dto.resp.PracticeResp; +import com.softeng.dingtalk.enums.PracticeStateEnum; +import com.softeng.dingtalk.exception.CustomExceptionEnum; +import com.softeng.dingtalk.entity.InternshipPeriodRecommended; import com.softeng.dingtalk.entity.Practice; import com.softeng.dingtalk.entity.User; -import com.softeng.dingtalk.repository.PracticeRepository; -import com.softeng.dingtalk.repository.UserRepository; +import com.softeng.dingtalk.dao.repository.PracticeRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; +import com.softeng.dingtalk.utils.StreamUtils; import com.softeng.dingtalk.vo.PracticeVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.server.ResponseStatusException; +import javax.annotation.Resource; +import javax.persistence.criteria.Predicate; +import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; @Service @Transactional @@ -23,25 +42,45 @@ public class PracticeService { PracticeRepository practiceRepository; @Autowired UserRepository userRepository; + @Resource + private PracticeConvertor practiceConvertor; + @Resource + private InternshipPeriodRecommendedRepository internshipPeriodRecommendedRepository; + + @Deprecated public void addPractice(PracticeVO practiceVO,int uid){ - Practice practice=new Practice(userRepository.findById(uid).get(),practiceVO.getCompanyName(),practiceVO.getDepartment(),practiceVO.getStart(),practiceVO.getEnd(),practiceVO.getState()); + Practice practice =new Practice(userRepository.findById(uid).get(),practiceVO.getCompanyName(),practiceVO.getDepartment(),practiceVO.getStart(),practiceVO.getEnd(),practiceVO.getState()); practiceRepository.save(practice); } public void deletePractice(int id,int uid){ - Practice practice=practiceRepository.findById(id).get(); - User user=userRepository.findById(uid).get(); - if(practice.getUser().getId()!=uid && user.getAuthority()!=2){ - throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"无删除权限!"); + Practice practice =practiceRepository.findById(id).get(); + User applicant =practice.getUser(); +// if(practice.getUser().getId()!=uid){ +// throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"无删除权限!"); +// } + CustomExceptionEnum.INTERNSHIP_APPLICATION_DELETION_DENIED.throwIf(practice.getUser().getId()!=uid); + +// 如果删除的实习申请为审核通过状态,且当前正在实习期内,删除该申请前需要将用户的工作状态置为”在校“ + if(practice.getState() == PracticeStateEnum.ACCEPTED.getValue()) { + LocalDate cur = LocalDate.now(); + LocalDate start = practice.getStart(); + LocalDate end = practice.getEnd(); + if((cur.isAfter(start) || cur.isEqual(start)) && (cur.isBefore(end) || cur.isEqual(end))) { + applicant.setWorkState(false); + userRepository.save(applicant); + } } + practiceRepository.delete(practice); } + @Deprecated public void modifyPractice(PracticeVO practiceVO){ if(practiceRepository.findById(practiceVO.getId()).get().getState()==1){ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"审核已通过,无需修改!"); } - Practice practice=practiceRepository.findById(practiceVO.getId()).get(); + Practice practice =practiceRepository.findById(practiceVO.getId()).get(); practice.update(practiceVO.getCompanyName(),practiceVO.getDepartment(),practiceVO.getStart(),practiceVO.getEnd(),practiceVO.getState()); practiceRepository.save(practice); } @@ -57,7 +96,7 @@ public void modifyPractice(PracticeVO practiceVO){ // } public List getPracticeList(int uid){ - User user=userRepository.findById(uid).get(); + User user =userRepository.findById(uid).get(); if(user.getName().equals(adminUserName)){ return practiceRepository.findAllByStateEquals(0); } else { @@ -65,5 +104,85 @@ public List getPracticeList(int uid){ } } + public Map queryPracticeList(int page, int size, PracticeReq practiceReq) { + Pageable pageable = PageRequest.of(page - 1, size, Sort.by("id").descending()); + Specification practiceSpecification = ((root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if(practiceReq.getUserId() != 0) + predicates.add(criteriaBuilder.equal(root.get("user").get("id"), practiceReq.getUserId())); + if(practiceReq.getState() != -2) + predicates.add(criteriaBuilder.equal(root.get("state"), practiceReq.getState())); + Predicate[] arr = new Predicate[predicates.size()]; + return criteriaBuilder.and(predicates.toArray(arr)); + }); + Page practicePage = practiceRepository.findAll(practiceSpecification, pageable); + List practiceRespList = StreamUtils.map(practicePage.toList(), (practice -> practiceConvertor.entity2Resp(practice))); + return Map.of("list", practiceRespList, "total", practicePage.getTotalElements()); + } + + private boolean checkDateConflict(int uid, LocalDate start, LocalDate end) { + Specification practiceSpecification = ((root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + predicates.add(criteriaBuilder.equal(root.get("user").get("id"), uid)); + Predicate[] arr = new Predicate[predicates.size()]; + return criteriaBuilder.and(predicates.toArray(arr)); + }); + AtomicBoolean res = new AtomicBoolean(false); + practiceRepository.findAll(practiceSpecification).forEach(practice -> { + if(practice.getState() == PracticeStateEnum.REJECTED.getValue()) return; + if((start.isAfter(practice.getStart()) || start.isEqual(practice.getStart())) && (start.isBefore(practice.getEnd()) || start.isEqual(practice.getEnd())) + || (end.isAfter(practice.getStart()) || end.isEqual(practice.getStart())) && (end.isBefore(practice.getEnd()) || end.isEqual(practice.getEnd()))) { + res.set(true); + } + }); + return res.get(); + } + + public void addPractice(PracticeReq practiceReq){ + LocalDate start = practiceReq.getStart(); + LocalDate end = practiceReq.getEnd(); + + CustomExceptionEnum.START_DATE_IS_AFTER_END_DATE.throwIf(start.isAfter(end)); + + CustomExceptionEnum.INTERNSHIP_APPLICATION_CONFLICT + .throwIf(checkDateConflict(practiceReq.getUserId(), start, end)); + +// 如果申请中的时间段在推荐实习周期之内,直接通过该申请 + InternshipPeriodRecommended periodRecommended = internshipPeriodRecommendedRepository.findTop(); + LocalDate startRecommended = periodRecommended.getStart(); + LocalDate endRecommended = periodRecommended.getEnd(); + if((startRecommended.isBefore(start) || startRecommended.isEqual(start)) && (endRecommended.isAfter(end)) || endRecommended.isEqual(end)){ + practiceReq.setState(PracticeStateEnum.ACCEPTED.getValue()); + LocalDate cur = LocalDate.now(); + User applicant = userRepository.findById(practiceReq.getUserId()).get(); + if((cur.isAfter(start) || cur.isEqual(start)) && (cur.isBefore(end) || cur.isEqual(end))) { + applicant.setWorkState(false); + userRepository.save(applicant); + } + } + + + + Practice practice = practiceConvertor.req2Entity(practiceReq); + practiceRepository.save(practice); + } + + public void modifyPractice(PracticeReq practiceReq){ + CustomExceptionEnum.INTERNSHIP_APPLICATION_AUDITED_ALREADY + .throwIf(practiceRepository.findById(practiceReq.getId()).get().getState() != PracticeStateEnum.AUDITING.getValue()); + + if(practiceReq.getState() == PracticeStateEnum.ACCEPTED.getValue()) { + LocalDate cur = LocalDate.now(); + LocalDate start = practiceReq.getStart(); + LocalDate end = practiceReq.getEnd(); + if((cur.isAfter(start) || cur.isEqual(start)) && (cur.isBefore(end)) || cur.isEqual(start)) { + User user = userRepository.findById(practiceReq.getUserId()).get(); + user.setWorkState(true); + userRepository.save(user); + } + } + Practice practice = practiceConvertor.req2Entity(practiceReq); + practiceRepository.save(practice); + } } diff --git a/src/main/java/com/softeng/dingtalk/service/PrizeService.java b/src/main/java/com/softeng/dingtalk/service/PrizeService.java index 07269b4f..17b54539 100644 --- a/src/main/java/com/softeng/dingtalk/service/PrizeService.java +++ b/src/main/java/com/softeng/dingtalk/service/PrizeService.java @@ -2,7 +2,7 @@ import com.softeng.dingtalk.entity.Prize; import com.softeng.dingtalk.entity.User; -import com.softeng.dingtalk.repository.PrizeRepository; +import com.softeng.dingtalk.dao.repository.PrizeRepository; import com.softeng.dingtalk.vo.PrizeVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -39,8 +39,8 @@ public List findByUser(int userId){ * @param prizeVO * @return */ - public Prize addNewPrize(int userId,PrizeVO prizeVO){ - Prize prize=new Prize(new User(userId),prizeVO.getPrizeTime(),prizeVO.getPrizeName(),prizeVO.getLevel(),prizeVO.getRemark()); + public Prize addNewPrize(int userId, PrizeVO prizeVO){ + Prize prize =new Prize(new User(userId),prizeVO.getPrizeTime(),prizeVO.getPrizeName(),prizeVO.getLevel(),prizeVO.getRemark()); return prizeRepository.save(prize); } diff --git a/src/main/java/com/softeng/dingtalk/service/ProcessPropertyService.java b/src/main/java/com/softeng/dingtalk/service/ProcessPropertyService.java index dbeedc88..f8960e1a 100644 --- a/src/main/java/com/softeng/dingtalk/service/ProcessPropertyService.java +++ b/src/main/java/com/softeng/dingtalk/service/ProcessPropertyService.java @@ -1,12 +1,9 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.entity.EventFile; -import com.softeng.dingtalk.entity.EventProperty; import com.softeng.dingtalk.entity.ProcessFile; import com.softeng.dingtalk.entity.ProcessProperty; -import com.softeng.dingtalk.repository.ProcessFileRepository; -import com.softeng.dingtalk.repository.ProcessPropertyRepository; -import com.softeng.dingtalk.repository.UserRepository; -import com.softeng.dingtalk.vo.EventPropertyInfoVO; +import com.softeng.dingtalk.dao.repository.ProcessFileRepository; +import com.softeng.dingtalk.dao.repository.ProcessPropertyRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; import com.softeng.dingtalk.vo.ProcessPropertyDetailVO; import com.softeng.dingtalk.vo.ProcessPropertyVO; import lombok.extern.slf4j.Slf4j; @@ -18,15 +15,12 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; import javax.servlet.http.HttpServletResponse; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Service @Transactional @@ -43,13 +37,13 @@ public class ProcessPropertyService { public void addProcessProperty(MultipartFile file, ProcessPropertyVO processPropertyVO,int uid){ //1.保存文件 String fileId; - ProcessFile processFile=null; + ProcessFile processFile =null; if(file!=null){ fileId=fileService.addFileByPath(file,processPropertyVO.getFilePath()+"/PPT"); - processFile=new ProcessFile(file.getOriginalFilename(),"PPT",fileId); + processFile =new ProcessFile(file.getOriginalFilename(),"PPT",fileId); } //2.保存记录信息 - ProcessProperty processProperty=new ProcessProperty(processPropertyVO.getConferenceName(),processPropertyVO.getYear(), + ProcessProperty processProperty =new ProcessProperty(processPropertyVO.getConferenceName(),processPropertyVO.getYear(), processPropertyVO.getFilePath(),userRepository.findById(uid).get()); processProperty.setPPTFile(processFile); processPropertyRepository.save(processProperty); @@ -61,7 +55,7 @@ public Map getProcessProperty(int page, int size){ return Map.of("list",infoList,"total",processProperties.getTotalElements()); } public void updateProcessProperty(ProcessPropertyVO processPropertyVO){ - ProcessProperty processProperty=processPropertyRepository.findById(processPropertyVO.getId()).get(); + ProcessProperty processProperty =processPropertyRepository.findById(processPropertyVO.getId()).get(); processProperty.update(processPropertyVO.getConferenceName(),processPropertyVO.getYear()); processPropertyRepository.save(processProperty); } @@ -87,9 +81,9 @@ public void addProcessFile(MultipartFile file,String fileType,int id){ ProcessProperty pp=processPropertyRepository.findById(id).get(); String fileName=file.getOriginalFilename(); String fileId=fileService.addFileByPath(file,pp.getFilePath()+"/"+getFileTypeFolderName(fileType)); - ProcessFile processFile=new ProcessFile(fileName,fileType,fileId); + ProcessFile processFile =new ProcessFile(fileName,fileType,fileId); processFile.setProcessProperty(pp); - List processFileList=null; + List processFileList =null; switch (fileType){ case"invitationFile": pp.setInvitationFile(processFile); @@ -98,18 +92,18 @@ public void addProcessFile(MultipartFile file,String fileType,int id){ pp.setPPTFile(processFile); break; case "personalPhotoFile": - processFileList=pp.getPersonalPhotoFileList(); + processFileList =pp.getPersonalPhotoFileList(); if(pp.getPersonalPhotoFileList()==null){ - processFileList=new LinkedList(); + processFileList =new LinkedList(); } processFileList.add(processFile); processFileRepository.save(processFile); pp.setPersonalPhotoFileList(processFileList); break; case "conferencePhotoFile": - processFileList=pp.getConferencePhotoFileList(); + processFileList =pp.getConferencePhotoFileList(); if(pp.getConferencePhotoFileList()==null){ - processFileList=new LinkedList(); + processFileList =new LinkedList(); } processFileList.add(processFile); processFileRepository.save(processFile); @@ -146,15 +140,15 @@ public void deleteProcessFile(int processId, int fileId, String type){ * @param processFileList */ private void simpleDeleteFileList(List processFileList){ - for(ProcessFile processFile: processFileList){ - fileService.deleteFileByPath(processFile.getFileName(),processFile.getFileId()); + for(ProcessFile processFile : processFileList){ + fileService.deleteFileByPath(processFile.getFileName(), processFile.getFileId()); } } public void downloadProcessFile(int id, HttpServletResponse response) { - ProcessFile processFile=processFileRepository.findById(id).get(); + ProcessFile processFile =processFileRepository.findById(id).get(); try{ - fileService.downloadFile(processFile.getFileName(),processFile.getFileId(),response); + fileService.downloadFile(processFile.getFileName(), processFile.getFileId(),response); }catch (Exception e){ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); } diff --git a/src/main/java/com/softeng/dingtalk/service/ProjectPropertyService.java b/src/main/java/com/softeng/dingtalk/service/ProjectPropertyService.java index 3d5f9576..d6d3f23a 100644 --- a/src/main/java/com/softeng/dingtalk/service/ProjectPropertyService.java +++ b/src/main/java/com/softeng/dingtalk/service/ProjectPropertyService.java @@ -1,9 +1,8 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.entity.EventProperty; import com.softeng.dingtalk.entity.ProjectProperty; import com.softeng.dingtalk.entity.ProjectPropertyFile; -import com.softeng.dingtalk.repository.ProjectPropertyFileRepository; -import com.softeng.dingtalk.repository.ProjectPropertyRepository; +import com.softeng.dingtalk.dao.repository.ProjectPropertyFileRepository; +import com.softeng.dingtalk.dao.repository.ProjectPropertyRepository; import com.softeng.dingtalk.vo.ProjectPropertyFileVO; import com.softeng.dingtalk.vo.ProjectPropertyVO; import lombok.extern.slf4j.Slf4j; @@ -15,17 +14,11 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; import javax.servlet.http.HttpServletResponse; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Service @Transactional @@ -39,12 +32,12 @@ public class ProjectPropertyService { FileService fileService; public void addProjectProperty(ProjectPropertyVO projectPropertyVO){ - ProjectProperty projectProperty=new ProjectProperty(projectPropertyVO.getName(),projectPropertyVO.getPath()); + ProjectProperty projectProperty =new ProjectProperty(projectPropertyVO.getName(),projectPropertyVO.getPath()); projectPropertyRepository.save(projectProperty); } public void updateProjectProperty(ProjectPropertyVO projectPropertyVO){ - ProjectProperty projectProperty=projectPropertyRepository.findById(projectPropertyVO.getId()).get(); + ProjectProperty projectProperty =projectPropertyRepository.findById(projectPropertyVO.getId()).get(); projectProperty.update(projectPropertyVO.getName(),projectPropertyVO.getPath()); projectPropertyRepository.save(projectProperty); } @@ -57,10 +50,10 @@ public Map getProjectPropertyList(int page, int size){ public void addProjectPropertyVersion(MultipartFile codeFile, MultipartFile reportFile, String name, int id){ - ProjectProperty projectProperty=projectPropertyRepository.findById(id).get(); - String codeFileId=fileService.addFileByPath(codeFile,projectProperty.getPath()+"/"+name+"/Code"); - String reportFileId=fileService.addFileByPath(reportFile,projectProperty.getPath()+"/"+name+"/Report"); - ProjectPropertyFile projectPropertyFile=new ProjectPropertyFile(null,name,projectProperty,codeFile.getOriginalFilename(), + ProjectProperty projectProperty =projectPropertyRepository.findById(id).get(); + String codeFileId=fileService.addFileByPath(codeFile, projectProperty.getPath()+"/"+name+"/Code"); + String reportFileId=fileService.addFileByPath(reportFile, projectProperty.getPath()+"/"+name+"/Report"); + ProjectPropertyFile projectPropertyFile =new ProjectPropertyFile(null,name, projectProperty,codeFile.getOriginalFilename(), codeFileId,reportFile.getOriginalFilename(),reportFileId); projectPropertyFileRepository.save(projectPropertyFile); } @@ -69,20 +62,20 @@ public ProjectProperty getProjectPropertyDetail(int id){ return projectPropertyRepository.findById(id).get(); } public String addProjectPropertyFile(MultipartFile file,int id,String type){ - ProjectPropertyFile projectPropertyFile=projectPropertyFileRepository.findById(id).get(); - String fileId=fileService.addFileByPath(file,projectPropertyFile.getProjectProperty().getPath()+"/"+ + ProjectPropertyFile projectPropertyFile =projectPropertyFileRepository.findById(id).get(); + String fileId=fileService.addFileByPath(file, projectPropertyFile.getProjectProperty().getPath()+"/"+ projectPropertyFile.getVersion()+"/"+getFileTypeFolderName(type)); switch (type){ case "codeFile": if(projectPropertyFile.getCodeFileId()!=null){ - fileService.deleteFileByPath(projectPropertyFile.getCodeFileName(),projectPropertyFile.getCodeFileId()); + fileService.deleteFileByPath(projectPropertyFile.getCodeFileName(), projectPropertyFile.getCodeFileId()); } projectPropertyFile.setCodeFileId(fileId); projectPropertyFile.setCodeFileName(file.getOriginalFilename()); break; case"reportFile": if(projectPropertyFile.getReportFileId()!=null){ - fileService.deleteFileByPath(projectPropertyFile.getReportFileName(),projectPropertyFile.getReportFileId()); + fileService.deleteFileByPath(projectPropertyFile.getReportFileName(), projectPropertyFile.getReportFileId()); } projectPropertyFile.setReportFileId(fileId); projectPropertyFile.setReportFileName(file.getOriginalFilename()); @@ -93,15 +86,15 @@ public String addProjectPropertyFile(MultipartFile file,int id,String type){ } public void deleteProjectPropertyFile(int id,String type){ - ProjectPropertyFile projectPropertyFile=projectPropertyFileRepository.findById(id).get(); + ProjectPropertyFile projectPropertyFile =projectPropertyFileRepository.findById(id).get(); switch (type){ case "codeFile": - fileService.deleteFileByPath(projectPropertyFile.getCodeFileName(),projectPropertyFile.getCodeFileId()); + fileService.deleteFileByPath(projectPropertyFile.getCodeFileName(), projectPropertyFile.getCodeFileId()); projectPropertyFile.setCodeFileId(null); projectPropertyFile.setCodeFileName(null); break; case"reportFile": - fileService.deleteFileByPath(projectPropertyFile.getReportFileName(),projectPropertyFile.getReportFileId()); + fileService.deleteFileByPath(projectPropertyFile.getReportFileName(), projectPropertyFile.getReportFileId()); projectPropertyFile.setReportFileId(null); projectPropertyFile.setReportFileName(null); break; @@ -110,14 +103,14 @@ public void deleteProjectPropertyFile(int id,String type){ } public void downloadProjectPropertyFile(int id, String type, HttpServletResponse response){ - ProjectPropertyFile projectPropertyFile=projectPropertyFileRepository.findById(id).get(); + ProjectPropertyFile projectPropertyFile =projectPropertyFileRepository.findById(id).get(); try{ switch (type){ case "codeFile": - fileService.downloadFile(projectPropertyFile.getCodeFileName(),projectPropertyFile.getCodeFileId(),response); + fileService.downloadFile(projectPropertyFile.getCodeFileName(), projectPropertyFile.getCodeFileId(),response); break; case"reportFile": - fileService.downloadFile(projectPropertyFile.getReportFileName(),projectPropertyFile.getReportFileId(),response); + fileService.downloadFile(projectPropertyFile.getReportFileName(), projectPropertyFile.getReportFileId(),response); break; } }catch (Exception e){ @@ -127,14 +120,14 @@ public void downloadProjectPropertyFile(int id, String type, HttpServletResponse } public void updateProjectPropertyVersion(int id,ProjectPropertyFileVO projectPropertyFileVO){ - ProjectPropertyFile projectPropertyFile=projectPropertyFileRepository.findById(id).get(); + ProjectPropertyFile projectPropertyFile =projectPropertyFileRepository.findById(id).get(); projectPropertyFile.update(projectPropertyFileVO.getVersion()); projectPropertyFileRepository.save(projectPropertyFile); } public void deleteProjectPropertyVersion(int id){ - ProjectPropertyFile projectPropertyFile=projectPropertyFileRepository.findById(id).get(); + ProjectPropertyFile projectPropertyFile =projectPropertyFileRepository.findById(id).get(); if(projectPropertyFile.getCodeFileId()!=null) fileService.deleteFileByPath(projectPropertyFile.getCodeFileName(), projectPropertyFile.getCodeFileId()); if(projectPropertyFile.getReportFileId()!=null) fileService.deleteFileByPath(projectPropertyFile.getReportFileName(), @@ -143,9 +136,9 @@ public void deleteProjectPropertyVersion(int id){ } public void deleteProjectProperty(int id){ - ProjectProperty projectProperty=projectPropertyRepository.findById(id).get(); + ProjectProperty projectProperty =projectPropertyRepository.findById(id).get(); if(projectProperty.getProjectPropertyFileList()!=null){ - for(ProjectPropertyFile projectPropertyFile:projectProperty.getProjectPropertyFileList()){ + for(ProjectPropertyFile projectPropertyFile : projectProperty.getProjectPropertyFileList()){ this.deleteProjectPropertyVersion(projectPropertyFile.getId()); } } diff --git a/src/main/java/com/softeng/dingtalk/service/ProjectService.java b/src/main/java/com/softeng/dingtalk/service/ProjectService.java index ea497d4b..8b8d6100 100644 --- a/src/main/java/com/softeng/dingtalk/service/ProjectService.java +++ b/src/main/java/com/softeng/dingtalk/service/ProjectService.java @@ -1,8 +1,8 @@ package com.softeng.dingtalk.service; import com.softeng.dingtalk.component.DateUtils; +import com.softeng.dingtalk.dao.repository.*; import com.softeng.dingtalk.entity.*; -import com.softeng.dingtalk.repository.*; import com.softeng.dingtalk.vo.ProjectVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/softeng/dingtalk/service/PropertyService.java b/src/main/java/com/softeng/dingtalk/service/PropertyService.java index 35ec31ad..9b3262a6 100644 --- a/src/main/java/com/softeng/dingtalk/service/PropertyService.java +++ b/src/main/java/com/softeng/dingtalk/service/PropertyService.java @@ -2,7 +2,7 @@ import com.softeng.dingtalk.entity.Property; import com.softeng.dingtalk.entity.User; -import com.softeng.dingtalk.repository.PropertyRepository; +import com.softeng.dingtalk.dao.repository.PropertyRepository; import com.softeng.dingtalk.vo.PropertyVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -40,7 +40,7 @@ public List findByUser(int userId){ * @return */ public Property addNewProperty(int userId, PropertyVO propertyVO){ - Property property=new Property(new User(userId),propertyVO.getName(),propertyVO.getType(),propertyVO.getPreserver(),propertyVO.getRemark(),propertyVO.getStartTime()); + Property property =new Property(new User(userId),propertyVO.getName(),propertyVO.getType(),propertyVO.getPreserver(),propertyVO.getRemark(),propertyVO.getStartTime()); return propertyRepository.save(property); } diff --git a/src/main/java/com/softeng/dingtalk/service/ReimburseService.java b/src/main/java/com/softeng/dingtalk/service/ReimburseService.java index eb636212..ceee319e 100644 --- a/src/main/java/com/softeng/dingtalk/service/ReimburseService.java +++ b/src/main/java/com/softeng/dingtalk/service/ReimburseService.java @@ -1,10 +1,14 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.component.convertor.ReimbursementConvertor; +import com.softeng.dingtalk.dto.req.ReimbursementReq; +import com.softeng.dingtalk.dto.resp.ReimbursementResp; import com.softeng.dingtalk.entity.Reimbursement; import com.softeng.dingtalk.entity.ReimbursementFile; -import com.softeng.dingtalk.repository.ReimbursementFileRepository; -import com.softeng.dingtalk.repository.ReimbursementRepository; -import com.softeng.dingtalk.repository.UserRepository; +import com.softeng.dingtalk.dao.repository.ReimbursementFileRepository; +import com.softeng.dingtalk.dao.repository.ReimbursementRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; +import com.softeng.dingtalk.utils.StreamUtils; import com.softeng.dingtalk.vo.ReimbursementVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -12,15 +16,18 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; + +import javax.annotation.Resource; +import javax.persistence.criteria.Predicate; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -36,42 +43,44 @@ public class ReimburseService { UserRepository userRepository; @Autowired FileService fileService; + @Resource + ReimbursementConvertor reimbursementConvertor; public void addReimbursement(ReimbursementVO reimbursementVO,int id){ - Reimbursement reimbursement=new Reimbursement(reimbursementVO.getName(),reimbursementVO.getType(),reimbursementVO.getPath()); + Reimbursement reimbursement =new Reimbursement(reimbursementVO.getName(),reimbursementVO.getType(),reimbursementVO.getPath()); reimbursement.setUser(userRepository.findById(id).get()); reimbursementRepository.save(reimbursement); } public void updateReimbursement(ReimbursementVO reimbursementVO,int id){ - Reimbursement reimbursement=reimbursementRepository.findById(reimbursementVO.getId()).get(); + Reimbursement reimbursement =reimbursementRepository.findById(reimbursementVO.getId()).get(); reimbursement.setUser(userRepository.findById(id).get()); - reimbursement.update(reimbursementVO.getName(),reimbursementVO.getType(),reimbursement.getPath()); + reimbursement.update(reimbursementVO.getName(),reimbursementVO.getType(), reimbursement.getPath()); reimbursementRepository.save(reimbursement); } public void setState(int id,int state){ - Reimbursement reimbursement=reimbursementRepository.findById(id).get(); + Reimbursement reimbursement =reimbursementRepository.findById(id).get(); reimbursement.setState(state); reimbursementRepository.save(reimbursement); } public void addReimbursementFile(int id, MultipartFile file, String description){ - Reimbursement reimbursement=reimbursementRepository.findById(id).get(); - String fileId=fileService.addFileByPath(file,reimbursement.getPath()); - ReimbursementFile reimbursementFile=new ReimbursementFile(description,file.getOriginalFilename(),fileId,reimbursement); + Reimbursement reimbursement =reimbursementRepository.findById(id).get(); + String fileId=fileService.addFileByPath(file, reimbursement.getPath()); + ReimbursementFile reimbursementFile =new ReimbursementFile(description,file.getOriginalFilename(),fileId, reimbursement); reimbursementFileRepository.save(reimbursementFile); } public void deleteReimbursementFile(int id){ - ReimbursementFile reimbursementFile=reimbursementFileRepository.findById(id).get(); + ReimbursementFile reimbursementFile =reimbursementFileRepository.findById(id).get(); reimbursementFileRepository.delete(reimbursementFile); } public Map getReimbursementList(int page, int size){ Pageable pageable = PageRequest.of(page-1,size, Sort.by("id").descending()); Page reimbursements=reimbursementRepository.findAll(pageable); - List reimbursementList=reimbursements.toList(); - return Map.of("list",reimbursementList,"total",reimbursements.getTotalElements()); + List reimbursementList =reimbursements.toList(); + return Map.of("list", reimbursementList,"total",reimbursements.getTotalElements()); } public Reimbursement getReimbursementDetail(int id){ @@ -79,22 +88,40 @@ public Reimbursement getReimbursementDetail(int id){ } public void deleteReimbursement(int id){ - Reimbursement reimbursement=reimbursementRepository.findById(id).get(); + Reimbursement reimbursement =reimbursementRepository.findById(id).get(); if(reimbursement.getReimbursementFileList()!=null){ - for(ReimbursementFile reimbursementFile:reimbursement.getReimbursementFileList()){ - fileService.deleteFileByPath(reimbursementFile.getFileName(),reimbursement.getPath()); + for(ReimbursementFile reimbursementFile : reimbursement.getReimbursementFileList()){ + fileService.deleteFileByPath(reimbursementFile.getFileName(), reimbursement.getPath()); } } reimbursementRepository.delete(reimbursement); } public void downloadReimbursementFile(@PathVariable int id, HttpServletResponse response){ - ReimbursementFile reimbursementFile=reimbursementFileRepository.findById(id).get(); + ReimbursementFile reimbursementFile =reimbursementFileRepository.findById(id).get(); try { - fileService.downloadFile(reimbursementFile.getFileName(),reimbursementFile.getFileId(),response); + fileService.downloadFile(reimbursementFile.getFileName(), reimbursementFile.getFileId(),response); } catch (Exception e){ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,e.getMessage()); } + } + public Map queryReimbursementList(int page, int size, ReimbursementReq reimbursementReq) { + Pageable pageable = PageRequest.of(page - 1,size, Sort.by("id").descending()); + Specification reimbursementSpecification = ((root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if(reimbursementReq.getState() != -2) + predicates.add(criteriaBuilder.equal(root.get("state"), reimbursementReq.getState())); + if(!"".equals(reimbursementReq.getType())) + predicates.add(criteriaBuilder.equal(root.get("type"), reimbursementReq.getType())); + if(reimbursementReq.getUserId() != 0) + predicates.add(criteriaBuilder.equal(root.get("user").get("id"), reimbursementReq.getUserId())); + Predicate[] arr = new Predicate[predicates.size()]; + return criteriaBuilder.and(predicates.toArray(arr)); + }); + Page reimbursementPage = reimbursementRepository.findAll(reimbursementSpecification, pageable); + List reimbursementRespList = StreamUtils.map(reimbursementPage.toList(), + reimbursement -> reimbursementConvertor.entity2Resp(reimbursement)); + return Map.of("list", reimbursementRespList, "total", reimbursementPage.getTotalElements()); } } diff --git a/src/main/java/com/softeng/dingtalk/service/SystemService.java b/src/main/java/com/softeng/dingtalk/service/SystemService.java index c0052179..5c5dcfa6 100644 --- a/src/main/java/com/softeng/dingtalk/service/SystemService.java +++ b/src/main/java/com/softeng/dingtalk/service/SystemService.java @@ -1,12 +1,15 @@ package com.softeng.dingtalk.service; import com.dingtalk.api.response.OapiUserGetResponse; -import com.softeng.dingtalk.api.*; +import com.softeng.dingtalk.component.convertor.UserConvertor; +import com.softeng.dingtalk.component.dingApi.*; import com.softeng.dingtalk.component.AcAlgorithm; import com.softeng.dingtalk.constant.LocalUrlConstant; +import com.softeng.dingtalk.dao.repository.*; +import com.softeng.dingtalk.dto.resp.UserResp; import com.softeng.dingtalk.entity.*; import com.softeng.dingtalk.enums.Position; -import com.softeng.dingtalk.repository.*; +import com.softeng.dingtalk.utils.StreamUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -20,6 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import javax.persistence.criteria.Predicate; import java.time.LocalDate; import java.time.LocalDateTime; @@ -70,6 +74,9 @@ public class SystemService { @Autowired PatentLevelRepository patentLevelRepository; + @Resource + UserConvertor userConvertor; + @Value("${DingTalkSchedule.absentACPunishment}") double absentACPunishment; @@ -121,6 +128,7 @@ public User addNewUser(String userid) { case "学硕": position = Position.ACADEMIC; break; case "专硕": position = Position.PROFESSIONAL; break; case "博": position = Position.DOCTOR; break; +// todo- default: position = Position.OTHER; break; } @@ -169,11 +177,13 @@ public User addNewUser(String userid) { * @param position * @return */ - public Page multiQueryUser(int page, int size, String name, String position) { + public Map multiQueryUser(int page, int size, String name, String position) { Specification spec = (root, criteriaQuery, criteriaBuilder) -> { List predicates = new ArrayList<>(); predicates.add(criteriaBuilder.equal(root.get("deleted"), false)); - predicates.add(criteriaBuilder.notEqual(root.get("authority"), User.ADMIN_AUTHORITY)); +// todo-修改 + +// predicates.add(criteriaBuilder.notEqual(root.get("authority"), User.ADMIN_AUTHORITY)); if (!"".equals(name)) { // 根据姓名模糊查询 predicates.add(criteriaBuilder.like(root.get("name"), "%" + name + "%")); @@ -191,7 +201,10 @@ public Page multiQueryUser(int page, int size, String name, String positio }; Pageable pageable = PageRequest.of(page, size, Sort.by("id").descending()); - return userRepository.findAll(spec, pageable); +// return userRepository.findAll(spec, pageable); + Page userPage = userRepository.findAll(spec, pageable); + List userRespList = StreamUtils.map( userPage.toList(), user -> userConvertor.entity2Resp(user)); + return Map.of("content", userRespList, "total", userPage.getTotalElements()); } @@ -306,7 +319,7 @@ public List queryDisableUser() { * 当从数据库录入dc数据时,并不会触发更新 dcsummary * 所以需要调用该函数刷新 dcsummary */ - public void manulUpdatePerformance(int yearmonth) { + public void manualUpdatePerformance(int yearmonth) { // todo 拿到所有用户可用 uid List uidlist = userRepository.listUid(); // todo 根据用户id,和指定年月更新dcsummary @@ -322,7 +335,7 @@ public void manulUpdatePerformance(int yearmonth) { /** * 手动指定某天,当天未交周报的硕士博士扣除相应的分数 */ - public void manulDeductedPointsUnsubmittedWeeklyReport(LocalDate localDate) { + public void manualDeductedPointsUnSubmittedWeeklyReport(LocalDate localDate) { var start = localDate.atTime(0, 0, 0); var end = start.plusDays(1); var poorGuys = weeklyReportService.queryUnSubmittedWeeklyReportUser(start, end); @@ -333,6 +346,8 @@ public void manulDeductedPointsUnsubmittedWeeklyReport(LocalDate localDate) { log.info(start.toString() + "未提交周报扣分" + Arrays.toString(poorGuys.stream().map(User::getName).toArray())); acRecordRepository.saveAll( poorGuys.stream() + // 筛选出在校的用户(或者未设置工作状态的用户) + .filter(user -> user.getWorkState() == null || !user.getWorkState()) .map(user -> AcRecord.builder() .user(user) .ac(AcAlgorithm.getPointOfUnsubmittedWeekReport(user)) @@ -342,7 +357,8 @@ public void manulDeductedPointsUnsubmittedWeeklyReport(LocalDate localDate) { start.toLocalDate().toString() )) .createTime(end) - .build()) + .build() + ) .collect(Collectors.toList()) ); } @@ -359,14 +375,16 @@ public void manualReminderToSubmitWeeklyReport(LocalDate localDate) { LocalUrlConstant.FRONTEND_PERFORMANCE_URL, "您还未提交本周周报,请在周日24点前提交周报并随后申请绩效", weeklyReportService.queryUnSubmittedWeeklyReportUser(start, end).stream() + // 筛选出在校的用户(或者未设置工作状态的用户) + .filter(user -> user.getWorkState() == null || !user.getWorkState()) .map(User::getUserid) .collect(Collectors.toList()) ); } public void calculateScheduleAC() { - List dingTalkScheduleList=dingTalkScheduleRepository.getDingTalkSchedulesByAcCalculatedFalse(); - for(DingTalkSchedule dingTalkSchedule:dingTalkScheduleList){ + List dingTalkScheduleList =dingTalkScheduleRepository.getDingTalkSchedulesByAcCalculatedFalse(); + for(DingTalkSchedule dingTalkSchedule : dingTalkScheduleList){ LocalDateTime now=LocalDateTime.now(); if(now.compareTo(dingTalkSchedule.getEnd())>=0){ //获取改日程请假列表,并获取oa通过的同学的列表 @@ -380,11 +398,11 @@ public void calculateScheduleAC() { absentUserIdList.removeAll(osNotPassUserIdList); //进行扣分 if(absentUserIdList.size()!=0){ - List detailList=dingTalkSchedule.getDingTalkScheduleDetailList(); + List detailList= dingTalkSchedule.getDingTalkScheduleDetailList(); detailList.forEach(detail -> { boolean isContain = absentUserIdList .stream().anyMatch(x-> x.equals(detail.getUser().getUnionid())); if(isContain) { - AcRecord acRecord=new AcRecord(detail.getUser(), + AcRecord acRecord =new AcRecord(detail.getUser(), null, -1*absentACPunishment, detail.getDingTalkSchedule().getStart().toString()+"会议缺席", diff --git a/src/main/java/com/softeng/dingtalk/service/TeamService.java b/src/main/java/com/softeng/dingtalk/service/TeamService.java new file mode 100644 index 00000000..af30817c --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/service/TeamService.java @@ -0,0 +1,38 @@ +package com.softeng.dingtalk.service; + +import com.softeng.dingtalk.component.convertor.TeamConvertor; +import com.softeng.dingtalk.dao.repository.TeamRepository; +import com.softeng.dingtalk.dao.repository.UserTeamRepository; +import com.softeng.dingtalk.dto.resp.TeamResp; +import com.softeng.dingtalk.entity.UserTeam; +import com.softeng.dingtalk.utils.StreamUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +@Service +@Transactional +@Slf4j +public class TeamService { + @Resource + private TeamRepository teamRepository; + @Resource + private UserTeamRepository userTeamRepository; + @Resource + TeamConvertor teamConvertor; + /** + * 获得该用户所在的所有用户组名 + * @param userId + * @return + */ + public List getTeams(int userId){ + List userTeamList = userTeamRepository.findAllByUserId(userId); + return StreamUtils.map( + userTeamList, + userTeam -> teamConvertor.entity2Resp(teamRepository.findById(userTeam.getTeamId())) + ); + } +} diff --git a/src/main/java/com/softeng/dingtalk/service/UserPermissionService.java b/src/main/java/com/softeng/dingtalk/service/UserPermissionService.java new file mode 100644 index 00000000..5fab0cbd --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/service/UserPermissionService.java @@ -0,0 +1,34 @@ +package com.softeng.dingtalk.service; + +import com.softeng.dingtalk.component.convertor.UserPermissionConvertor; +import com.softeng.dingtalk.dao.repository.UserPermissionRepository; +import com.softeng.dingtalk.dto.req.UserPermissionReq; +import com.softeng.dingtalk.utils.StreamUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +@Service +@Transactional +@Slf4j +public class UserPermissionService { + @Resource + private UserPermissionRepository userPermissionRepository; + @Resource + private UserPermissionConvertor userPermissionConvertor; + + public void addUserPermission(UserPermissionReq userPermissionReq) { + userPermissionRepository.save(userPermissionConvertor.req2Entity(userPermissionReq)); + } + + public void updateUserPermissionList(List userPermissionReqList) { + int userId = userPermissionReqList.get(0).getUserId(); + userPermissionRepository.deleteAllByUserId(userId); + userPermissionRepository.saveBatch(StreamUtils.map(userPermissionReqList, + (userPermissionReq -> userPermissionConvertor.req2Entity(userPermissionReq)))); + } + +} diff --git a/src/main/java/com/softeng/dingtalk/service/UserService.java b/src/main/java/com/softeng/dingtalk/service/UserService.java index 8091a76b..22682ccb 100644 --- a/src/main/java/com/softeng/dingtalk/service/UserService.java +++ b/src/main/java/com/softeng/dingtalk/service/UserService.java @@ -1,10 +1,13 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.api.BaseApi; -import com.softeng.dingtalk.encryption.Encryption; -import com.softeng.dingtalk.entity.User; -import com.softeng.dingtalk.repository.AcRecordRepository; -import com.softeng.dingtalk.repository.UserRepository; +import com.softeng.dingtalk.component.dingApi.BaseApi; +import com.softeng.dingtalk.component.convertor.PermissionConvertor; +import com.softeng.dingtalk.dao.repository.*; +import com.softeng.dingtalk.component.encryptor.Encryption; +import com.softeng.dingtalk.dto.resp.PermissionResp; +import com.softeng.dingtalk.entity.*; +import com.softeng.dingtalk.enums.PermissionEnum; +import com.softeng.dingtalk.utils.StreamUtils; import com.softeng.dingtalk.vo.UserInfoVO; import com.softeng.dingtalk.vo.UserVO; import lombok.extern.slf4j.Slf4j; @@ -14,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; @@ -34,12 +38,20 @@ public class UserService { @Autowired private FileService fileService; @Autowired - BaseApi baseApi; + private BaseApi baseApi; @Autowired - Encryption encryption; + private Encryption encryption; + @Resource + private PermissionRepository permissionRepository; + @Resource + private UserPermissionRepository userPermissionRepository; + @Resource + private PermissionConvertor permissionConvertor; + @Value("${file.userLeaseContractFilePath}") private String userLeaseContractFilePath; + /** * 判断用户权限是否为审核人 * @param uid 用户id @@ -84,7 +96,11 @@ public User getUser(String userid) { * @return */ public Map getAuditorUser() { - return Map.of("auditorlist", userRepository.listAuditor()); + List userPermissionList = userPermissionRepository.findAllByPermissionId(PermissionEnum.REVIEW_PERFORMANCE_APPLICATION.getCode()); + List auditorList = StreamUtils.map(userPermissionList, userPermission -> + userRepository.findById(userPermission.getUserId()).get() + ); + return Map.of("auditorlist", auditorList); } @@ -95,12 +111,17 @@ public Map getAuditorUser() { */ public Map getUserInfo(int uid) { User u = userRepository.findById(uid).get(); + List userPermissionList = userPermissionRepository.findAllByUserId(uid); + List permissionRespList = StreamUtils.map( + userPermissionList, + userPermission -> permissionConvertor.entity2Resp(permissionRepository.findById(userPermission.getPermissionId())) + ); double ac = acRecordRepository.getUserAcSum(uid); baseApi.getJsapiTicket(); // 提前拿到jsapi ticket,避免需要时再去那减少时延 if (u.getAvatar() != null) { - return Map.of("name", u.getName(), "avatar", u.getAvatar(), "ac", ac, "userid", u.getUserid()); + return Map.of("name", u.getName(), "avatar", u.getAvatar(), "ac", ac, "userid", u.getUserid(), "permissionList", permissionRespList); } else { - return Map.of("name", u.getName(), "ac", ac, "userid", u.getUserid()); + return Map.of("name", u.getName(), "ac", ac, "userid", u.getUserid(), "permissionList", permissionRespList); } } @@ -122,7 +143,7 @@ public void updateRole(int uid, int authority) { */ public UserInfoVO getUserDetail(int uid) { User u = userRepository.findById(uid).get(); - return new UserInfoVO(u.getName(), u.getAvatar(), u.getPosition(), u.getStuNum(), u.getUndergraduateCollege(), u.getMasterCollege(), encryption.doDecrypt(u.getIdCardNo()), encryption.doDecrypt(u.getCreditCard()), u.getBankName(),u.getRentingStart(), u.getRentingEnd(), u.getAddress(), u.getWorkState(), u.getRemark(),u.getLeaseContractFileName(),u.getLeaseContractFilePath()); + return new UserInfoVO(u.getName(), u.getAvatar(), u.getPosition(), u.getStuNum(), u.getUndergraduateCollege(), u.getMasterCollege(), encryption.doDecrypt(u.getIdCardNo()), encryption.doDecrypt(u.getCreditCard()), u.getBankName(),u.getRentingStart(), u.getRentingEnd(), u.getAddress(), u.getWorkState(), u.getRemark(),u.getLeaseContractFileName(),u.getLeaseContractFilePath(), u.getTel()); } @@ -140,20 +161,21 @@ public void updateUserInfo(UserInfoVO userInfoVO, int uid) { u.setAddress(userInfoVO.getAddress()); u.setRentingEnd(userInfoVO.getRentingEnd()); u.setRentingStart(userInfoVO.getRentingStart()); + u.setTel(userInfoVO.getTel()); userRepository.save(u); } public void saveLeaseContractFile(MultipartFile file, int uid){ - User user=userRepository.findById(uid).get(); + User user =userRepository.findById(uid).get(); user.setLeaseContractFileName(file.getOriginalFilename()); - user.setLeaseContractFilePath(fileService.addFileByPath(file,userLeaseContractFilePath+user.getStuNum())); + user.setLeaseContractFilePath(fileService.addFileByPath(file,userLeaseContractFilePath+ user.getStuNum())); userRepository.save(user); } public void downloadContractFile(int uid, HttpServletResponse httpServletResponse) throws IOException { - User user=userRepository.findById(uid).get(); - String fileName=user.getLeaseContractFileName(); - String filePath=user.getLeaseContractFilePath(); + User user =userRepository.findById(uid).get(); + String fileName= user.getLeaseContractFileName(); + String filePath= user.getLeaseContractFilePath(); fileService.downloadFile(fileName,filePath,httpServletResponse); } diff --git a/src/main/java/com/softeng/dingtalk/service/UserTeamService.java b/src/main/java/com/softeng/dingtalk/service/UserTeamService.java new file mode 100644 index 00000000..cd75814c --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/service/UserTeamService.java @@ -0,0 +1,33 @@ +package com.softeng.dingtalk.service; + +import com.softeng.dingtalk.component.convertor.UserTeamConvertor; +import com.softeng.dingtalk.dao.repository.UserTeamRepository; +import com.softeng.dingtalk.dto.req.UserTeamReq; +import com.softeng.dingtalk.utils.StreamUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +@Service +@Transactional +@Slf4j +public class UserTeamService { + @Resource + private UserTeamRepository userTeamRepository; + @Resource + private UserTeamConvertor userTeamConvertor; + + public void addUserTeam(UserTeamReq userTeamReq) { + userTeamRepository.save(userTeamConvertor.req2Entity(userTeamReq)); + } + + public void updateUserPermissionList(List userTeamReqList) { + int userId = userTeamReqList.get(0).getUserId(); + userTeamRepository.deleteAllByUserId(userId); + userTeamRepository.saveBatch(StreamUtils.map(userTeamReqList, + (userTeamReq -> userTeamConvertor.req2Entity(userTeamReq)))); + } +} diff --git a/src/main/java/com/softeng/dingtalk/service/VMApplyService.java b/src/main/java/com/softeng/dingtalk/service/VMApplyService.java index 76906e35..19015997 100644 --- a/src/main/java/com/softeng/dingtalk/service/VMApplyService.java +++ b/src/main/java/com/softeng/dingtalk/service/VMApplyService.java @@ -1,9 +1,15 @@ package com.softeng.dingtalk.service; +import com.softeng.dingtalk.aspect.AccessPermission; +import com.softeng.dingtalk.component.convertor.VMApplyConvertor; +import com.softeng.dingtalk.dto.req.VMApplyReq; +import com.softeng.dingtalk.dto.resp.VMApplyResp; +import com.softeng.dingtalk.enums.PermissionEnum; import com.softeng.dingtalk.entity.User; import com.softeng.dingtalk.entity.VMApply; -import com.softeng.dingtalk.repository.UserRepository; -import com.softeng.dingtalk.repository.VMApplyRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; +import com.softeng.dingtalk.dao.repository.VMApplyRepository; +import com.softeng.dingtalk.utils.StreamUtils; import com.softeng.dingtalk.vo.VMApplyVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -11,14 +17,15 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestAttribute; import org.springframework.web.server.ResponseStatusException; -import java.time.LocalDate; +import javax.annotation.Resource; +import javax.persistence.criteria.Predicate; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -30,18 +37,22 @@ public class VMApplyService { VMApplyRepository vmApplyRepository; @Autowired UserRepository userRepository; + @Resource + VMApplyConvertor vmApplyConvertor; + public void addVMApply(VMApplyVO vmApplyVO,int uid){ - User user=userRepository.findById(uid).get(); + User user =userRepository.findById(uid).get(); vmApplyVO.setUser(user); VMApply vmApply =new VMApply(vmApplyVO.getUser(), vmApplyVO.getProjectTeam(), vmApplyVO.getSubject(), vmApplyVO.getEmail(), vmApplyVO.getStart(), vmApplyVO.getEnd(), vmApplyVO.getPurpose(), vmApplyVO.getCoreNum(), vmApplyVO.getMemory(), vmApplyVO.getCapacity(), vmApplyVO.getOperationSystem(), vmApplyVO.getApplyDate()); + vmApply.setState(0); vmApplyRepository.save(vmApply); } public void updateVMApply(VMApplyVO vmApplyVO,int uid){ - User user=userRepository.findById(uid).get(); - VMApply vmApply=vmApplyRepository.findById(vmApplyVO.getId()).get(); - if(user.getAuthority()!=2 && !vmApply.getUser().equals(user)) + User user =userRepository.findById(uid).get(); + VMApply vmApply =vmApplyRepository.findById(vmApplyVO.getId()).get(); + if(!vmApply.getUser().equals(user)) throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"无修改权限!"); vmApply.update(vmApplyVO.getProjectTeam(), vmApplyVO.getSubject(), vmApplyVO.getEmail(), vmApplyVO.getStart(), vmApplyVO.getEnd(), vmApplyVO.getPurpose(), vmApplyVO.getCoreNum(), @@ -52,8 +63,8 @@ public void updateVMApply(VMApplyVO vmApplyVO,int uid){ public Map getVMApplyList(int page, int size){ Pageable pageable = PageRequest.of(page-1,size, Sort.by("id").descending()); Page vmApplies=vmApplyRepository.findAll(pageable); - List vmApplyList=vmApplies.toList(); - return Map.of("list",vmApplyList,"total",vmApplies.getTotalElements()); + List vmApplyList =vmApplies.toList(); + return Map.of("list", vmApplyList,"total",vmApplies.getTotalElements()); } public List getAuditingVMApplyList(){ @@ -61,24 +72,44 @@ public List getAuditingVMApplyList(){ } public List getUserVMApplyList(int uid){ - User user=userRepository.findById(uid).get(); + User user =userRepository.findById(uid).get(); return vmApplyRepository.findAllByUserEquals(user); } + @AccessPermission(PermissionEnum.REVIEW_VM_DEVICE_APPLICATION) public void setVMApplyState(int id, boolean isPass,int uid){ - User user=userRepository.findById(uid).get(); - if(user.getAuthority()!=2) throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"无审核权限!"); - VMApply vmApply=vmApplyRepository.findById(id).get(); + User user =userRepository.findById(uid).get(); +// if(userPo.getAuthority()!=2) throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"无审核权限!"); + VMApply vmApply =vmApplyRepository.findById(id).get(); if(isPass) vmApply.setState(1); else vmApply.setState(-1); } + @AccessPermission(PermissionEnum.REVIEW_VM_DEVICE_APPLICATION) public void deleteVMApply(int id, int uid){ - User user=userRepository.findById(uid).get(); - VMApply vmApply=vmApplyRepository.findById(id).get(); - if(user.getAuthority()!=2 && !vmApply.getUser().equals(user)) - throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"无删除权限!"); + User user =userRepository.findById(uid).get(); + VMApply vmApply =vmApplyRepository.findById(id).get(); +// if(userPo.getAuthority()!=2 && !vmApply.getUser().equals(userPo)) +// throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"无删除权限!"); vmApplyRepository.delete(vmApply); } + public Map queryVMApplyList(int page, int size, VMApplyReq vmApplyReq) { + Pageable pageable = PageRequest.of(page - 1,size, Sort.by("id").descending()); + Specification vmApplySpecification = ((root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if(vmApplyReq.getState() != -2) + predicates.add(criteriaBuilder.equal(root.get("state"), vmApplyReq.getState())); + if(!"".equals(vmApplyReq.getProjectTeam())) + predicates.add(criteriaBuilder.equal(root.get("projectTeam"), vmApplyReq.getProjectTeam())); + if(vmApplyReq.getUserId() != 0) + predicates.add(criteriaBuilder.equal(root.get("user").get("id"), vmApplyReq.getUserId())); + Predicate[] arr = new Predicate[predicates.size()]; + return criteriaBuilder.and(predicates.toArray(arr)); + }); + Page vmApplyPage = vmApplyRepository.findAll(vmApplySpecification, pageable); + List vmApplyReqList = StreamUtils.map(vmApplyPage.toList(), vmApply -> vmApplyConvertor.entity2Resp(vmApply)); + return Map.of("list", vmApplyReqList, "total", vmApplyPage.getTotalElements()); + } + } diff --git a/src/main/java/com/softeng/dingtalk/service/VoteService.java b/src/main/java/com/softeng/dingtalk/service/VoteService.java index bd53dc98..20d65f28 100644 --- a/src/main/java/com/softeng/dingtalk/service/VoteService.java +++ b/src/main/java/com/softeng/dingtalk/service/VoteService.java @@ -2,11 +2,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.softeng.dingtalk.controller.WebSocketController; -import com.softeng.dingtalk.api.MessageApi; +import com.softeng.dingtalk.component.dingApi.MessageApi; +import com.softeng.dingtalk.dao.repository.*; import com.softeng.dingtalk.entity.*; import com.softeng.dingtalk.enums.Position; -import com.softeng.dingtalk.repository.*; import com.softeng.dingtalk.vo.VoteVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -19,14 +19,12 @@ import org.springframework.transaction.annotation.Transactional; import java.io.IOException; -import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.*; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * @author zhanyeye @@ -73,6 +71,43 @@ public class VoteService { @Value("${paper.flatRateDenominator}") private double flatRateDenominator; + + private static double doctorWeightForVote; + + private static double academicWeightForVote; + + private static double professionalWeightForVote; + + private static double teacherWeightForVote; + + private static double defaultWeightForVote; + + @Value("${paper.doctorWeight}") + public void setDoctorWeightForVote(double value) { + VoteService.doctorWeightForVote = value; + } + + @Value("${paper.academicWeight}") + public void setAcademicWeightForVote(double value) { + VoteService.academicWeightForVote = value; + } + + @Value("${paper.doctorWeight}") + public void setProfessionalWeightForVote(double value) { + VoteService.professionalWeightForVote = value; + } + + @Value("${paper.teacherWeight}") + public void setTeacherWeightForVote(double value) { + VoteService.teacherWeightForVote = value; + } + + @Value("${paper.defaultWeight}") + public void setDefaultWeightForVote(double value) { + VoteService.defaultWeightForVote = value; + } + + /** * 创建论文评审投票 * @@ -87,6 +122,10 @@ public Vote createVote(VoteVO vo) { if (voteRepository.isExisted(vo.getPaperid(), false) == 0) { // 如果投票还没有被创建 Vote vote = new Vote(LocalDateTime.now(), vo.getEndTime(), vo.getPaperid()); + + vote.setAccept(0); + vote.setTotal(0); + voteRepository.save(vote); internalPaperRepository.updatePaperVote(vo.getPaperid(), vote.getId()); sendVoteInfoCardToDingtalk(vo.getPaperid(), vo.getEndTime().toLocalTime()); @@ -213,25 +252,28 @@ public Map poll(int vid, int uid, VoteDetail voteDetail) { public static double getWeight(User user) { switch (user.getPosition()) { case DOCTOR: - return 2.0; + return doctorWeightForVote; case ACADEMIC: + return academicWeightForVote; case PROFESSIONAL: - return 1.0; + return professionalWeightForVote; + case TEACHER: + return teacherWeightForVote; default: - return 0.0; + return defaultWeightForVote; } } /** * 根据投接受票的投拒绝票的人加权后算出接受的百分比值 * - * @param acceptUserList 投接受的人的列表 - * @param rejectUserList 投拒绝的人的列表 + * @param acceptUserListPo 投接受的人的列表 + * @param rejectUserListPo 投拒绝的人的列表 * @return [0, 1) */ - public double calculatePercentageOfVotesAccepted(List acceptUserList, List rejectUserList) { - double acceptWeights = acceptUserList.stream().mapToDouble(VoteService::getWeight).sum(); - double rejectWeights = rejectUserList.stream().mapToDouble(VoteService::getWeight).sum(); + public double calculatePercentageOfVotesAccepted(List acceptUserListPo, List rejectUserListPo) { + double acceptWeights = acceptUserListPo.stream().mapToDouble(VoteService::getWeight).sum(); + double rejectWeights = rejectUserListPo.stream().mapToDouble(VoteService::getWeight).sum(); double totleWeights = acceptWeights + rejectWeights; return totleWeights == 0.0 ? 0.0 : acceptWeights / totleWeights; } @@ -281,28 +323,30 @@ public Map getVotingDetails(int vid, int uid) { // isOver 投票是否结束 Boolean isOver = vote.getEndTime().isBefore(LocalDateTime.now()); - List acceptUserList = new ArrayList<>(); - List rejectUserList = new ArrayList<>(); + List acceptUserListPo = new ArrayList<>(); + List rejectUserListPo = new ArrayList<>(); List unVoteNames = new ArrayList<>(); double acceptedPercentage = 0.0; if (isOver) { // 投票已结束 - acceptUserList = voteDetailRepository.listAcceptUserlist(vid); - rejectUserList = voteDetailRepository.listRejectUserlist(vid); + acceptUserListPo = voteDetailRepository.listAcceptUserlist(vid); + rejectUserListPo = voteDetailRepository.listRejectUserlist(vid); unVoteNames = voteDetailRepository.findUnVoteUsername(vid); - acceptedPercentage = calculatePercentageOfVotesAccepted(acceptUserList, rejectUserList); + acceptedPercentage = calculatePercentageOfVotesAccepted(acceptUserListPo, rejectUserListPo); } return Map.of( "vid", vid, "status", isOver, - "accept", acceptUserList.size(), - "reject", rejectUserList.size(), - "total", acceptUserList.size() + rejectUserList.size(), + "accept", acceptUserListPo.size(), + "reject", rejectUserListPo.size(), + "total", acceptUserListPo.size() + rejectUserListPo.size(), "myvote", myVote == null ? "unvote" : (myVote ? "accept" : "reject"), - "acceptnames", acceptUserList.stream().map(User::getName).collect(Collectors.toList()), - "rejectnames", rejectUserList.stream().map(User::getName).collect(Collectors.toList()), +// "acceptnames", acceptUserListPo.stream().map(User::getName).collect(Collectors.toList()), +// "rejectnames", rejectUserListPo.stream().map(User::getName).collect(Collectors.toList()), + "acceptUsers", acceptUserListPo, + "rejectUsers", rejectUserListPo, "unvotenames", unVoteNames, "acceptedPercentage", acceptedPercentage ); @@ -332,7 +376,7 @@ private AcRecord generateAcRecord(String title, User user, boolean voteDetail, i } return AcRecord.builder() .user(user) - // 论文投票AC变化,对于硕士生是1分,对于博士生是2分 + // todo- 论文投票AC变化,对于硕士生是1分,对于博士生是2分 .ac(coefficient * (user.getPosition() == Position.DOCTOR ? 2 : 1)) .classify(AcRecord.VOTE) .reason((coefficient == 0 ? "投稿中止:" : (coefficient == 1 ? "投票预测正确:" : "投票预测错误:") + title)) diff --git a/src/main/java/com/softeng/dingtalk/service/WeeklyReportService.java b/src/main/java/com/softeng/dingtalk/service/WeeklyReportService.java index 4aa023c2..f47db666 100644 --- a/src/main/java/com/softeng/dingtalk/service/WeeklyReportService.java +++ b/src/main/java/com/softeng/dingtalk/service/WeeklyReportService.java @@ -1,23 +1,16 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.api.ReportApi; +import com.softeng.dingtalk.component.dingApi.ReportApi; import com.softeng.dingtalk.component.DateUtils; import com.softeng.dingtalk.entity.User; -import com.softeng.dingtalk.repository.UserRepository; -import com.softeng.dingtalk.vo.UserVO; +import com.softeng.dingtalk.dao.repository.UserRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.Year; -import java.time.YearMonth; -import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; /** diff --git a/src/main/java/com/softeng/dingtalk/utils/StreamUtils.java b/src/main/java/com/softeng/dingtalk/utils/StreamUtils.java new file mode 100644 index 00000000..6b25f1e3 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/utils/StreamUtils.java @@ -0,0 +1,31 @@ +package com.softeng.dingtalk.utils; + +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author: LiXiaoKang + * @CreateTime: 2023-02-09 + */ + +public class StreamUtils { + + public static List map(List froms, Function transferLogic) { + return CollectionUtils.isEmpty(froms) + ? new ArrayList<>() + : froms.stream().map(transferLogic).collect(Collectors.toList()); + } + + public static void apply(List list, Consumer consumer) { + if (CollectionUtils.isEmpty(list)) { + return; + } + list.forEach(consumer); + } + +} diff --git a/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNum10bitsParser.java b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNum10bitsParser.java new file mode 100644 index 00000000..174ec675 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNum10bitsParser.java @@ -0,0 +1,36 @@ +package com.softeng.dingtalk.utils.stuNumUtils; + +import com.softeng.dingtalk.enums.Position; + +import java.time.LocalDate; + +public class StuNum10bitsParser extends StuNumParser{ + @Override + public Position parse(String stuNum) { + String studentTypeNo = stuNum.substring(0, 2); + int admissionYear = 2000 + Integer.parseInt(stuNum.substring(2, 4)); + Position position; + switch (studentTypeNo) { + case "MG": + position = Position.ACADEMIC; + break; + case "MF": + position = Position.PROFESSIONAL; + break; + case "DG": + position = Position.DOCTOR; + break; + case "DZ": + LocalDate cur = LocalDate.now(); + int curYear = cur.getYear(); +// 直博生前三年视作学硕,之后视为博士生 + if(curYear - admissionYear <= 3) position = Position.ACADEMIC; + else if(curYear - admissionYear > 3) position = Position.DOCTOR; + else position = Position.OTHER; + break; + default: + position = Position.OTHER; + } + return position; + } +} diff --git a/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNum12bitsParser.java b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNum12bitsParser.java new file mode 100644 index 00000000..169f9fbe --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNum12bitsParser.java @@ -0,0 +1,36 @@ +package com.softeng.dingtalk.utils.stuNumUtils; + +import com.softeng.dingtalk.enums.Position; + +import java.time.LocalDate; + +public class StuNum12bitsParser extends StuNumParser{ + @Override + public Position parse(String stuNum) { + int studentTypeNo = Integer.parseInt(stuNum.substring(0, 2)); + int admissionYear = Integer.parseInt(stuNum.substring(2, 6)); + Position position; + switch (studentTypeNo) { + case 50: case 51: + position = Position.ACADEMIC; + break; + case 52: case 53: + position = Position.PROFESSIONAL; + break; + case 60: case 61: case 62: case 63: + position = Position.DOCTOR; + break; + case 65: case 66: + LocalDate cur = LocalDate.now(); + int curYear = cur.getYear(); + // 直博生前三年视作学硕,之后视为博士生 + if(curYear - admissionYear <= 3) position = Position.ACADEMIC; + else if(curYear - admissionYear > 3) position = Position.DOCTOR; + else position = Position.OTHER; + break; + default: + position = Position.OTHER; + } + return position; + } +} diff --git a/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNumParser.java b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNumParser.java new file mode 100644 index 00000000..d255a13f --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNumParser.java @@ -0,0 +1,7 @@ +package com.softeng.dingtalk.utils.stuNumUtils; + +import com.softeng.dingtalk.enums.Position; + +public abstract class StuNumParser { + public abstract Position parse(String stuNum); +} diff --git a/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNumParserFactory.java b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNumParserFactory.java new file mode 100644 index 00000000..4747f27b --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/utils/stuNumUtils/StuNumParserFactory.java @@ -0,0 +1,15 @@ +package com.softeng.dingtalk.utils.stuNumUtils; + +import com.softeng.dingtalk.exception.CustomExceptionEnum; + +public class StuNumParserFactory { + public static StuNumParser generateParser(int stuNumLength){ + if(stuNumLength == 10) { + return new StuNum10bitsParser(); + } else if(stuNumLength == 12) { + return new StuNum12bitsParser(); + } + CustomExceptionEnum.WRONG_FORMAT_OF_STUDENT_NUMBER.throwDirectly(); + return null; + } +} diff --git a/src/main/java/com/softeng/dingtalk/vo/ApplingVO.java b/src/main/java/com/softeng/dingtalk/vo/ApplingVO.java index f8d5e610..dd188638 100644 --- a/src/main/java/com/softeng/dingtalk/vo/ApplingVO.java +++ b/src/main/java/com/softeng/dingtalk/vo/ApplingVO.java @@ -27,5 +27,5 @@ public class ApplingVO { /** * ac值申请列表 */ - private List acItems; + private List acItems; } diff --git a/src/main/java/com/softeng/dingtalk/vo/ReimbursementVO.java b/src/main/java/com/softeng/dingtalk/vo/ReimbursementVO.java index 0f81a178..f88eb7a2 100644 --- a/src/main/java/com/softeng/dingtalk/vo/ReimbursementVO.java +++ b/src/main/java/com/softeng/dingtalk/vo/ReimbursementVO.java @@ -1,5 +1,4 @@ package com.softeng.dingtalk.vo; -import com.softeng.dingtalk.entity.User; import lombok.Data; @Data diff --git a/src/main/java/com/softeng/dingtalk/vo/UserInfoVO.java b/src/main/java/com/softeng/dingtalk/vo/UserInfoVO.java index c3eb6280..2bdcbf08 100644 --- a/src/main/java/com/softeng/dingtalk/vo/UserInfoVO.java +++ b/src/main/java/com/softeng/dingtalk/vo/UserInfoVO.java @@ -32,4 +32,5 @@ public class UserInfoVO { private String remark; private String leaseContractFileName; private String leaseContractFilePath; + private String tel; } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 3c8f7a56..0aa3cd8b 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -72,13 +72,15 @@ patent.DefaultRate=0 #请假OA流程PROCESS CODE OA.askForLeaveProcessCode=PROC-D98D18C4-9BBF-4269-9615-DF64CAFCB80C DingTalkSchedule.absentACPunishment=0 -## 博士票权 -#paper.doctorWeight=2.0 -## 学硕票权 -#paper.academicWeight=1.0 -## 专硕票权 -#paper.professionalWeight=1.0 -## 默认票权 -#paper.defaultWeight=0.0 +# 博士票权 +paper.doctorWeight=2.0 +# 学硕票权 +paper.academicWeight=1.0 +# 专硕票权 +paper.professionalWeight=1.0 +# 教师票权 +paper.teacherWeight=2.0 +# 默认票权 +paper.defaultWeight=0.0 blockchain.service.enable=false \ No newline at end of file diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 8750ee51..90c946d4 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -67,13 +67,15 @@ patent.DefaultRate=0 #请假OA流程PROCESS CODE OA.askForLeaveProcessCode=${oa_ask_for_leave_process_code} DingTalkSchedule.absentACPunishment=0 -## 博士票权 -#paper.doctorWeight=2.0 -## 学硕票权 -#paper.academicWeight=1.0 -## 专硕票权 -#paper.professionalWeight=1.0 -## 默认票权 -#paper.defaultWeight=0.0 +# 博士票权 +paper.doctorWeight=2.0 +# 学硕票权 +paper.academicWeight=1.0 +# 专硕票权 +paper.professionalWeight=1.0 +# 教师票权 +paper.teacherWeight=2.0 +# 默认票权 +paper.defaultWeight=0.0 blockchain.service.enable=false \ No newline at end of file diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index 9dbd9215..1758af57 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -67,13 +67,15 @@ patent.DefaultRate=0 #请假OA流程PROCESS CODE OA.askForLeaveProcessCode=${oa_ask_for_leave_process_code} DingTalkSchedule.absentACPunishment=0 -## 博士票权 -#paper.doctorWeight=2.0 -## 学硕票权 -#paper.academicWeight=1.0 -## 专硕票权 -#paper.professionalWeight=1.0 -## 默认票权 -#paper.defaultWeight=0.0 +# 博士票权 +paper.doctorWeight=2.0 +# 学硕票权 +paper.academicWeight=1.0 +# 专硕票权 +paper.professionalWeight=1.0 +# 教师票权 +paper.teacherWeight=2.0 +# 默认票权 +paper.defaultWeight=0.0 blockchain.service.enable=false \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/AcRecordMapper.xml b/src/main/resources/mybatis/mapper/AcRecordMapper.xml index 5494e40c..1a472693 100644 --- a/src/main/resources/mybatis/mapper/AcRecordMapper.xml +++ b/src/main/resources/mybatis/mapper/AcRecordMapper.xml @@ -2,9 +2,9 @@ - + - SELECT u.stu_num as num, u.NAME as name, diff --git a/src/main/resources/mybatis/mapper/DcRecordMapper.xml b/src/main/resources/mybatis/mapper/DcRecordMapper.xml index d701ac44..adfeacac 100644 --- a/src/main/resources/mybatis/mapper/DcRecordMapper.xml +++ b/src/main/resources/mybatis/mapper/DcRecordMapper.xml @@ -2,7 +2,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/src/main/resources/mybatis/mapper/DcSummaryMapper.xml b/src/main/resources/mybatis/mapper/DcSummaryMapper.xml index 516af2b2..dbbf387c 100644 --- a/src/main/resources/mybatis/mapper/DcSummaryMapper.xml +++ b/src/main/resources/mybatis/mapper/DcSummaryMapper.xml @@ -2,9 +2,9 @@ - + - SELECT u.stu_num as stuNum, u.name, @@ -25,4 +25,56 @@ d.salary DESC + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/InternalPaperMapper.xml b/src/main/resources/mybatis/mapper/InternalPaperMapper.xml index ade08352..2193a918 100644 --- a/src/main/resources/mybatis/mapper/InternalPaperMapper.xml +++ b/src/main/resources/mybatis/mapper/InternalPaperMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/src/test/java/com/softeng/dingtalk/DingtalkApplicationTests.java b/src/test/java/com/softeng/dingtalk/DingtalkApplicationTests.java index cacdf831..d39fbea9 100644 --- a/src/test/java/com/softeng/dingtalk/DingtalkApplicationTests.java +++ b/src/test/java/com/softeng/dingtalk/DingtalkApplicationTests.java @@ -1,11 +1,10 @@ package com.softeng.dingtalk; -import com.softeng.dingtalk.component.EncryptorComponent; +import com.softeng.dingtalk.component.encryptor.EncryptorComponent; import com.softeng.dingtalk.entity.InternalPaper; import com.softeng.dingtalk.entity.Paper; -import com.softeng.dingtalk.entity.Vote; import com.softeng.dingtalk.enums.PaperType; -import com.softeng.dingtalk.repository.InternalPaperRepository; +import com.softeng.dingtalk.dao.repository.InternalPaperRepository; import com.softeng.dingtalk.service.VoteService; import lombok.extern.slf4j.Slf4j; import org.junit.Test; @@ -15,7 +14,6 @@ import org.springframework.test.context.junit4.SpringRunner; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.Map; @RunWith(SpringRunner.class) diff --git a/src/test/java/com/softeng/dingtalk/service/ApplicationServiceTests.java b/src/test/java/com/softeng/dingtalk/service/ApplicationServiceTests.java index cbcffb61..c794d754 100644 --- a/src/test/java/com/softeng/dingtalk/service/ApplicationServiceTests.java +++ b/src/test/java/com/softeng/dingtalk/service/ApplicationServiceTests.java @@ -3,10 +3,8 @@ import com.softeng.dingtalk.component.DateUtils; import com.softeng.dingtalk.entity.AcItem; import com.softeng.dingtalk.entity.DcRecord; -import com.softeng.dingtalk.repository.DcRecordRepository; import com.softeng.dingtalk.vo.ApplyVO; import lombok.extern.slf4j.Slf4j; -import org.checkerframework.checker.units.qual.A; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/com/softeng/dingtalk/service/AuditServiceTest.java b/src/test/java/com/softeng/dingtalk/service/AuditServiceTest.java index 02b1fa48..9e858400 100644 --- a/src/test/java/com/softeng/dingtalk/service/AuditServiceTest.java +++ b/src/test/java/com/softeng/dingtalk/service/AuditServiceTest.java @@ -2,8 +2,6 @@ import com.softeng.dingtalk.entity.AcItem; -import com.softeng.dingtalk.repository.AcItemRepository; -import com.softeng.dingtalk.repository.DcRecordRepository; import com.softeng.dingtalk.vo.CheckVO; import lombok.extern.slf4j.Slf4j; import org.junit.Test; @@ -12,7 +10,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; -import javax.transaction.Transactional; import java.util.ArrayList; import java.util.List; diff --git a/src/test/java/com/softeng/dingtalk/service/PaperServiceTest.java b/src/test/java/com/softeng/dingtalk/service/PaperServiceTest.java index acb70ef2..a100165f 100644 --- a/src/test/java/com/softeng/dingtalk/service/PaperServiceTest.java +++ b/src/test/java/com/softeng/dingtalk/service/PaperServiceTest.java @@ -1,6 +1,5 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.entity.ExternalPaper; import com.softeng.dingtalk.enums.PaperType; import com.softeng.dingtalk.vo.AuthorVO; import com.softeng.dingtalk.vo.ExternalPaperVO; diff --git a/src/test/java/com/softeng/dingtalk/service/PerformanceServiceTest.java b/src/test/java/com/softeng/dingtalk/service/PerformanceServiceTest.java index d23aa457..a23c394e 100644 --- a/src/test/java/com/softeng/dingtalk/service/PerformanceServiceTest.java +++ b/src/test/java/com/softeng/dingtalk/service/PerformanceServiceTest.java @@ -1,9 +1,9 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.excel.DcSummaryData; -import com.softeng.dingtalk.mapper.DcSummaryMapper; -import com.softeng.dingtalk.repository.DcSummaryRepository; -import com.softeng.dingtalk.repository.UserRepository; +import com.softeng.dingtalk.dto.resp.excelData.DcSummaryData; +import com.softeng.dingtalk.dao.mapper.DcSummaryMapper; +import com.softeng.dingtalk.dao.repository.DcSummaryRepository; +import com.softeng.dingtalk.dao.repository.UserRepository; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; @@ -12,7 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner; import java.util.List; -import java.util.stream.Collectors; /** * @author zhanyeye diff --git a/src/test/java/com/softeng/dingtalk/service/WeeklyReportServiceTest.java b/src/test/java/com/softeng/dingtalk/service/WeeklyReportServiceTest.java index 64d877a2..47bbc20c 100644 --- a/src/test/java/com/softeng/dingtalk/service/WeeklyReportServiceTest.java +++ b/src/test/java/com/softeng/dingtalk/service/WeeklyReportServiceTest.java @@ -1,10 +1,7 @@ package com.softeng.dingtalk.service; -import com.softeng.dingtalk.api.ReportApi; -import com.softeng.dingtalk.component.AcAlgorithm; -import com.softeng.dingtalk.component.Timer; -import com.softeng.dingtalk.entity.AcRecord; -import com.softeng.dingtalk.repository.AcRecordRepository; +import com.softeng.dingtalk.component.dingApi.ReportApi; +import com.softeng.dingtalk.dao.repository.AcRecordRepository; import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.junit.Test; @@ -14,9 +11,7 @@ import org.springframework.test.context.junit4.SpringRunner; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.Arrays; -import java.util.stream.Collectors; /** * @Author zhanyeye