Переглянути джерело

日志添加 以及部分优化

夏文涛 2 тижнів тому
батько
коміт
7e7efd8879
47 змінених файлів з 1416 додано та 148 видалено
  1. 0 6
      doc/update_0619.sql
  2. 0 2
      doc/update_0623.sql
  3. 0 8
      doc/update_0626.sql
  4. 1 1
      src/main/java/com/template/AutoCode.java
  5. 12 0
      src/main/java/com/template/annotation/AWelcomeLevelLog.java
  6. 12 0
      src/main/java/com/template/annotation/AWelcomeLog.java
  7. 12 0
      src/main/java/com/template/annotation/AWelcomeLogMode.java
  8. 12 0
      src/main/java/com/template/annotation/AWelcomeTypeLog.java
  9. 11 0
      src/main/java/com/template/annotation/UserTokenStatusCheck.java
  10. 105 0
      src/main/java/com/template/aop/LogAspect.java
  11. 1 1
      src/main/java/com/template/api/WelcomeBedControllerAPI.java
  12. 1 1
      src/main/java/com/template/api/WelcomeBuildControllerAPI.java
  13. 1 1
      src/main/java/com/template/api/WelcomeDormitoryControllerAPI.java
  14. 44 0
      src/main/java/com/template/common/utils/HttpContextUtil.java
  15. 68 0
      src/main/java/com/template/common/utils/IPUtil.java
  16. 13 1
      src/main/java/com/template/controller/LoginController.java
  17. 8 0
      src/main/java/com/template/controller/SystemSettingController.java
  18. 18 2
      src/main/java/com/template/controller/WelcomeAccountController.java
  19. 96 21
      src/main/java/com/template/controller/WelcomeBedController.java
  20. 52 10
      src/main/java/com/template/controller/WelcomeBuildController.java
  21. 83 31
      src/main/java/com/template/controller/WelcomeDormitoryController.java
  22. 8 0
      src/main/java/com/template/controller/WelcomeFileController.java
  23. 20 0
      src/main/java/com/template/controller/WelcomeLogController.java
  24. 20 0
      src/main/java/com/template/controller/WelcomePaySettingController.java
  25. 16 0
      src/main/java/com/template/controller/WelcomeRoleController.java
  26. 16 0
      src/main/java/com/template/controller/WelcomeSchoolController.java
  27. 62 16
      src/main/java/com/template/controller/WelcomeStudentController.java
  28. 20 4
      src/main/java/com/template/controller/WelcomeStudentDormitoryController.java
  29. 26 2
      src/main/java/com/template/controller/WelcomeVisitorController.java
  30. 11 0
      src/main/java/com/template/core/JwtAuthenticationInterceptor.java
  31. 21 0
      src/main/java/com/template/mapper/WelcomeLogMapper.java
  32. 62 0
      src/main/java/com/template/model/enumModel/eLogLevel.java
  33. 75 0
      src/main/java/com/template/model/enumModel/eLogType.java
  34. 42 0
      src/main/java/com/template/model/enumModel/eUserType.java
  35. 102 0
      src/main/java/com/template/model/pojo/WelcomeLog.java
  36. 44 0
      src/main/java/com/template/model/vo/LogVo.java
  37. 4 0
      src/main/java/com/template/model/vo/StudentPageVo.java
  38. 2 0
      src/main/java/com/template/services/WelcomeBedService.java
  39. 26 0
      src/main/java/com/template/services/WelcomeLogService.java
  40. 1 1
      src/main/java/com/template/services/WelcomeVisitorService.java
  41. 8 0
      src/main/java/com/template/services/impl/WelcomeBedServiceImpl.java
  42. 203 0
      src/main/java/com/template/services/impl/WelcomeLogServiceImpl.java
  43. 4 2
      src/main/java/com/template/services/impl/WelcomeVisitorServiceImpl.java
  44. 30 0
      src/main/resources/mapper/template/WelcomeLogMapper.xml
  45. 43 1
      src/main/resources/mapper/template/WelcomeStudentMapper.xml
  46. 0 37
      框架代码说明文档/template.sql
  47. BIN
      框架代码说明文档/自动生成代码说明.docx

+ 0 - 6
doc/update_0619.sql

@@ -1,8 +0,0 @@
-alter table welcome_visitor
-    add driver_name varchar(32) not null comment '司机名称' after name;
-
-alter table welcome_visitor
-    add school_id varchar(32) not null comment '校区id' after name;
-

+ 0 - 2
doc/update_0623.sql

@@ -1,3 +0,0 @@
-alter table welcome_visitor
-    add create_time varchar(32) not null comment '创建时间' after remark;

+ 0 - 8
doc/update_0626.sql

@@ -1,8 +0,0 @@
-alter table welcome_visitor
-    modify driver_name varchar(32) null comment '司机名称';
-
-alter table welcome_visitor
-    modify card_id varchar(255) null comment '证件号';
-
-alter table welcome_visitor
-    modify visitor_reason text null comment '访问事由';

+ 1 - 1
src/main/java/com/template/AutoCode.java

@@ -56,7 +56,7 @@ public class AutoCode {
         mpg.setPackageInfo(pc);
         //4、策略配置
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setInclude("welcome_pay_setting"); // 设置要映射的表名
+        strategy.setInclude("welcome_log"); // 设置要映射的表名
         strategy.setNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setEntityLombokModel(true); // 自动lombok;

+ 12 - 0
src/main/java/com/template/annotation/AWelcomeLevelLog.java

@@ -0,0 +1,12 @@
+package com.template.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(value = {ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AWelcomeLevelLog {
+    String value() default "";
+}

+ 12 - 0
src/main/java/com/template/annotation/AWelcomeLog.java

@@ -0,0 +1,12 @@
+package com.template.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(value = {ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AWelcomeLog {
+    String value() default "";
+}

+ 12 - 0
src/main/java/com/template/annotation/AWelcomeLogMode.java

@@ -0,0 +1,12 @@
+package com.template.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(value = {ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AWelcomeLogMode {
+    String value() default "";
+}

+ 12 - 0
src/main/java/com/template/annotation/AWelcomeTypeLog.java

@@ -0,0 +1,12 @@
+package com.template.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(value = {ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AWelcomeTypeLog {
+    String value() default "";
+}

+ 11 - 0
src/main/java/com/template/annotation/UserTokenStatusCheck.java

@@ -0,0 +1,11 @@
+package com.template.annotation;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface UserTokenStatusCheck {
+    String value() default "";
+    boolean required() default true;
+}

+ 105 - 0
src/main/java/com/template/aop/LogAspect.java

@@ -0,0 +1,105 @@
+package com.template.aop;
+
+import com.template.common.utils.IPUtil;
+import com.template.model.enumModel.eUserType;
+import com.template.model.pojo.WelcomeAccount;
+import com.template.model.pojo.WelcomeLog;
+import com.template.model.pojo.WelcomeStudent;
+import com.template.services.WelcomeAccountService;
+import com.template.services.WelcomeLogService;
+import com.template.services.WelcomeStudentService;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+
+import static com.template.common.utils.HttpContextUtil.getHttpServletRequest;
+
+/**
+ * @Author: xwt
+ * @Date: 2024/2/26 星期一 10:02
+ * @Description: com.template.aop
+ * @Version: 1.0
+ */
+
+//规定AOP的执行顺序
+//Order(1) 多个aop时可通过该注解来确定执行顺序
+@Slf4j
+@Aspect
+@Component
+public class LogAspect {
+    @Autowired
+    private WelcomeLogService welcomeLogService;
+    @Autowired
+    private WelcomeAccountService welcomeAccountService;
+    @Autowired
+    private WelcomeStudentService welcomeStudentService;
+
+    @Pointcut("@annotation(com.template.annotation.AWelcomeLog)")
+    public void pointcut() {
+    }
+
+    @Around("pointcut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable {
+
+        Object result = null;
+        long beginTime = System.currentTimeMillis();
+        // 执行方法
+        result = point.proceed();
+        HttpServletRequest request = getHttpServletRequest();
+
+        // 设置 IP地址
+        String ip = IPUtil.getIpAddr(request);
+        // 执行时长(毫秒)
+        long time = System.currentTimeMillis() - beginTime;
+        // 保存日志;(这里是自定义的获取登录用户信息的对象)
+        WelcomeLog log = new WelcomeLog();
+
+        if (request.getAttribute("userId") != null) {
+            String user_id = request.getAttribute("userId").toString();
+            Integer userId = Integer.valueOf(user_id);
+            if (userId.intValue() > 0) {
+                WelcomeAccount user = welcomeAccountService.getManageById(user_id);
+                if (user != null) {
+                    log.setUserName(user.getName());
+                    log.setAccountNum(user.getAccount());
+                }
+            }
+            log.setUserType(eUserType.Pcuser.getValue());
+            log.setUserId(userId);
+        } else if (request.getAttribute("studentCard") != null) {
+            String studentCard = request.getAttribute("studentCard").toString();
+            WelcomeStudent ws = welcomeStudentService.getByStudentCard(studentCard);
+            if(ws != null){
+                log.setUserName(ws.getName());
+                log.setAccountNum(ws.getAdmissNum());
+            }
+            log.setUserType(eUserType.Student.getValue());
+            log.setUserId(ws.getId());
+        }
+
+        log.setIp(ip);
+        log.setTime(new BigDecimal(time));
+        welcomeLogService.insertWelcomeLogP(point, log);
+        return result;
+    }
+
+    // 获取ServerWebExchange的方法
+    private ServerWebExchange getServerWebExchange(ProceedingJoinPoint point) {
+        // 方法1:从方法参数中查找
+        Object[] args = point.getArgs();
+        for (Object arg : args) {
+            if (arg instanceof ServerWebExchange) {
+                return (ServerWebExchange) arg;
+            }
+        }
+        return null;
+    }
+
+}

+ 1 - 1
src/main/java/com/template/api/WelcomeBedControllerAPI.java

@@ -72,7 +72,7 @@ public interface WelcomeBedControllerAPI {
 
     @PostMapping(value = "/checkIn")
     @ApiOperation(value = "入住", notes = "入住", httpMethod = "POST")
-    CommonResult checkIn(@RequestBody CheckInVo checkInVo);
+    CommonResult checkIn(@RequestBody CheckInVo checkInVo) throws Exception;
 
     @GetMapping(value = "/checkOutDormitory")
     @ApiOperation(value = "退宿", notes = "退宿", httpMethod = "GET")

+ 1 - 1
src/main/java/com/template/api/WelcomeBuildControllerAPI.java

@@ -20,7 +20,7 @@ public interface WelcomeBuildControllerAPI {
 
     @GetMapping(value = "/deleteBuild")
     @ApiOperation(value = "删除楼栋", notes = "删除楼栋", httpMethod = "GET")
-    CommonResult deleteBuild(@RequestParam Integer buildId);
+    CommonResult deleteBuild(@RequestParam Integer buildId) throws Exception;
 
 
     @PostMapping(value = "/updateBuild")

+ 1 - 1
src/main/java/com/template/api/WelcomeDormitoryControllerAPI.java

@@ -20,7 +20,7 @@ public interface WelcomeDormitoryControllerAPI {
 
     @GetMapping(value = "/deleteDormitory")
     @ApiOperation(value = "删除寝室", notes = "删除寝室", httpMethod = "GET")
-    CommonResult deleteDormitory(@RequestParam Integer dormitoryId);
+    CommonResult deleteDormitory(@RequestParam Integer dormitoryId) throws Exception;
 
 
     @PostMapping(value = "/updateDormitory")

+ 44 - 0
src/main/java/com/template/common/utils/HttpContextUtil.java

@@ -0,0 +1,44 @@
+package com.template.common.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.DefaultHostnameVerifier;
+import org.apache.http.conn.util.PublicSuffixMatcher;
+import org.apache.http.conn.util.PublicSuffixMatcherLoader;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>Title: HttpClientUtils</p>
+ * <p>Description: httpClient 工具类</p>
+ * @author fengyong
+ * @date 2018年9月7日
+ */
+@Slf4j
+public class HttpContextUtil {
+	private HttpContextUtil(){
+
+	}
+	public static HttpServletRequest getHttpServletRequest() {
+		return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+	}
+}

+ 68 - 0
src/main/java/com/template/common/utils/IPUtil.java

@@ -0,0 +1,68 @@
+package com.template.common.utils;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.MediaType;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/12/27 星期三 11:08
+ * @Description: com.template.common.utils
+ * @Version: 1.0
+ */
+@Slf4j
+public class IPUtil {
+    private static final String UNKNOWN = "unknown";
+    private static Logger logger = LoggerFactory.getLogger(IPUtil.class);
+
+    protected IPUtil() {
+
+    }
+
+    /**
+     * 获取客户端IP
+     *
+     * @param request 请求对象
+     * @return IP地址
+     */
+    public static String getIpAddr(HttpServletRequest request) {
+        String remoteHost = request.getRemoteHost();
+        logger.info("remoteHost:"+remoteHost);
+        String xfHeader = request.getHeader("X-Forwarded-For");
+        logger.info("xfHeader:"+xfHeader);
+        if (xfHeader != null) {
+            String xfHeaderStr = StringUtils.split(xfHeader, ",")[0].trim();
+            logger.info("xfHeaderStr:"+xfHeaderStr);
+            if(org.springframework.util.StringUtils.hasText(xfHeaderStr)){
+                return xfHeaderStr;
+            }
+        }
+        String clientIp = request.getHeader("x-forwarded-for");
+        logger.info("clientIp:"+clientIp);
+        String proxyClientIP = request.getHeader("Proxy-Client-IP");
+        logger.info("proxyClientIP:"+proxyClientIP);
+
+        String xRealIP = request.getHeader("X-Real-IP");
+        logger.info("xRealIP:{}:"+xRealIP);
+
+        String host = request.getHeader("Host");
+        logger.info("host:{}:"+host);
+
+        String remoteAddr = request.getRemoteAddr();
+        logger.info("remoteAddr:"+remoteAddr);
+        return remoteAddr;
+    }
+}

+ 13 - 1
src/main/java/com/template/controller/LoginController.java

@@ -3,7 +3,7 @@ package com.template.controller;
 import com.alibaba.fastjson.JSON;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
-import com.template.annotation.PassToken;
+import com.template.annotation.*;
 import com.template.api.LoginControllerAPI;
 import com.template.common.utils.*;
 import com.template.config.WxOpenidConfig;
@@ -81,6 +81,10 @@ public class LoginController implements LoginControllerAPI {
      */
     @Override
     @PassToken
+    @AWelcomeLog("登录系统")
+    @AWelcomeTypeLog("登录")
+    @AWelcomeLogMode("登录模块")
+    @AWelcomeLevelLog("信息")
     public CommonResult Login(@RequestBody loginRequest loginRequest, BindingResult bindingResult) {
         if (loginRequest == null) {
             return CommonResult.fail("请传递参数");
@@ -128,6 +132,10 @@ public class LoginController implements LoginControllerAPI {
      */
     @Override
     @Transactional(rollbackFor = {Exception.class})
+    @AWelcomeLog("修改密码")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("账号管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult ChangePassword(String userId, changePasswordRequest cpr, BindingResult bindingResult) throws Exception {
         ChangePasswordVO results = new ChangePasswordVO();
         if (bindingResult.hasErrors()) {
@@ -437,6 +445,10 @@ public class LoginController implements LoginControllerAPI {
 
     @Override
     @PassToken
+    @AWelcomeLog("登录系统")
+    @AWelcomeTypeLog("登录")
+    @AWelcomeLogMode("移动端登录模块")
+    @AWelcomeLevelLog("信息")
     public CommonResult mobileLogin(mobileLoginRequest mlr, BindingResult bindingResult) {
         if (mlr == null) {
             return CommonResult.fail("请传递参数");

+ 8 - 0
src/main/java/com/template/controller/SystemSettingController.java

@@ -1,6 +1,10 @@
 package com.template.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.SystemSettingControllerAPI;
 import com.template.common.utils.paramUtils;
 import com.template.model.pojo.WelcomeArriveSetting;
@@ -128,6 +132,10 @@ public class SystemSettingController implements SystemSettingControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("编辑系统设置")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("系统设置")
+    @AWelcomeLevelLog("信息")
     @Transactional(rollbackFor = {Exception.class})
     public CommonResult insertOrUpdateSettings(InsertOrUpdateSystemSettingRequest iussr, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {

+ 18 - 2
src/main/java/com/template/controller/WelcomeAccountController.java

@@ -2,6 +2,10 @@ package com.template.controller;
 
 
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeAccountControllerAPI;
 import com.template.common.utils.AesUtils;
 import com.template.model.pojo.WelcomeAccount;
@@ -42,6 +46,10 @@ public class WelcomeAccountController implements WelcomeAccountControllerAPI {
     WelcomeRoleService welcomeRoleService;
 
     @Override
+    @AWelcomeLog("新增用户管理")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("用户管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveAccount(WelcomeAccount welcomeAccount) {
         String account = welcomeAccount.getAccount();
 //        将密码加密
@@ -57,12 +65,20 @@ public class WelcomeAccountController implements WelcomeAccountControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("删除用户管理")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("用户管理")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteAccount(Integer accountId) {
-        welcomeAccountService.removeById(accountId);
-        return CommonResult.ok();
+        boolean result = welcomeAccountService.removeById(accountId);
+        return result ? CommonResult.ok() : CommonResult.fail();
     }
 
     @Override
+    @AWelcomeLog("编辑用户管理")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("用户管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateAccount(WelcomeAccount welcomeAccount) {
         String account = welcomeAccount.getAccount();
         //        将密码加密

+ 96 - 21
src/main/java/com/template/controller/WelcomeBedController.java

@@ -1,8 +1,13 @@
 package com.template.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeBedControllerAPI;
 import com.template.common.utils.BeanUtil;
 import com.template.common.utils.ExcelUtils;
@@ -25,6 +30,8 @@ import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -66,7 +73,13 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     @Autowired
     private WelcomeAccountService welcomeAccountService;
 
+    private static Logger logger = LoggerFactory.getLogger(WelcomeBedController.class);
+
     @Override
+    @AWelcomeLog("新增床位信息")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult insertBedInfo(InsertWelcomeBedRequest iwbr, BindingResult bindingResult) {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
@@ -134,6 +147,10 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("编辑床位信息")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateBedInfo(UpdateWelcomeBedRequest uwbr, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
@@ -227,12 +244,20 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("删除床位信息")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteBedInfo(int id) throws Exception {
         int result = welcomeBedService.deleteWelcomeBedById(id);
         return result > 0 ? CommonResult.ok() : CommonResult.fail();
     }
 
     @Override
+    @AWelcomeLog("导入床位信息")
+    @AWelcomeTypeLog("导入")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult importBedExcel(MultipartFile file) throws IOException, ParseException {
         System.out.println("导入床位信息");
         if (file.isEmpty() || file.getSize() == 0) {
@@ -767,6 +792,10 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("选宿舍")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("宿舍")
+    @AWelcomeLevelLog("信息")
     public CommonResult submit(String studentCard, WelcomeBed welcomeBed) {
         welcomeBed.setStudentCard(studentCard);
         //先判断是否已经提交
@@ -879,6 +908,10 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("批量开放或保留床位信息")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult batchOperationBed(BatchOperationBedVo batchOperationVo) {
         List<Integer> bedIds = batchOperationVo.getBedIds();
         LambdaQueryWrapper<WelcomeBed> wrapper = new LambdaQueryWrapper<>();
@@ -906,19 +939,25 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
                 for (WelcomeDormitory dormitory : dormitories) {
                     dormitory.setRetentionState(batchOperationVo.getRetentionState());
                 }
-                welcomeDormitoryService.updateBatchById(dormitories);
+                boolean result = welcomeDormitoryService.updateBatchById(dormitories);
+                if(!result){
+                    return CommonResult.fail("批量操作失败");
+                }
             } else {
 //                如果是保留则需要判断该寝室下的所有床位是否保留,是的话则需要更改
                 for (WelcomeDormitory dormitory : dormitories) {
-                    LambdaQueryWrapper<WelcomeBed> wrapperWB=new LambdaQueryWrapper<>();
-                    wrapperWB.eq(WelcomeBed::getDormitoryId,dormitory.getId())
-                                    .eq(WelcomeBed::getRetentionState,batchOperationVo.getRetentionState());
+                    LambdaQueryWrapper<WelcomeBed> wrapperWB = new LambdaQueryWrapper<>();
+                    wrapperWB.eq(WelcomeBed::getDormitoryId, dormitory.getId())
+                            .eq(WelcomeBed::getRetentionState, batchOperationVo.getRetentionState());
                     Integer count = welcomeBedService.count(wrapperWB);
-                    if (count>=dormitory.getBedNumber()) {
+                    if (count >= dormitory.getBedNumber()) {
                         dormitory.setRetentionState(batchOperationVo.getRetentionState());
                     }
                 }
-                welcomeDormitoryService.updateBatchById(dormitories);
+                boolean result = welcomeDormitoryService.updateBatchById(dormitories);
+                if(!result){
+                    return CommonResult.fail("批量操作失败");
+                }
 
             }
         }
@@ -927,8 +966,14 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("入住")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     @Transactional(rollbackFor = Exception.class)
-    public CommonResult checkIn(CheckInVo checkInVo) {
+    public CommonResult checkIn(CheckInVo checkInVo) throws Exception {
+        logger.info("管理端点击入住:"+checkInVo.getAdmissNum());
+
         List<WelcomeStudent> list = welcomeStudentService.getStudent(checkInVo);
         if (ObjectUtils.isEmpty(list)) {
             return CommonResult.fail("暂无该学生");
@@ -936,6 +981,12 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
             return CommonResult.fail("该录取号有多个学生,请检查修改后在试");
         }
         WelcomeStudent welcomeStudent = list.get(0);
+ //        判断当前学生是否已入住
+        WelcomeBed welcomeBed =  welcomeBedService.getBedByAdmissNum(checkInVo.getAdmissNum());
+        if (ObjectUtils.isNotEmpty(welcomeBed)) {
+            return CommonResult.fail("当前该学生已入住,无法重新入住");
+        }
+
         WelcomeBed bed = welcomeBedService.getBedById(checkInVo.getBedId());
         if (ObjectUtils.isEmpty(bed)) {
             return CommonResult.fail("不存在该床铺");
@@ -960,27 +1011,43 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
         bed.setName(welcomeStudent.getName());
         bed.setMajorId(welcomeStudent.getMajorId());
         bed.setMajor(welcomeStudent.getMajor());
-        welcomeBedService.updateWelcomeBed(bed);
+        try {
+            int updateBed = welcomeBedService.updateWelcomeBed(bed);
+            if (updateBed < 0) {
+                logger.error("入住失败,checkInVo参数:" + JSON.toJSON(checkInVo));
+                throw new Exception("入住失败!");
+            }
 
-//        修改寝室信息
-        WelcomeDormitory welcomeDormitory = welcomeDormitoryService.getById(bed.getDormitoryId());
-        if (ObjectUtils.isNotEmpty(welcomeDormitory)) {
-            Integer freeBedNumber = welcomeDormitory.getFreeBedNumber();
-            freeBedNumber = freeBedNumber - 1;
-            if (freeBedNumber > 0) {
-                welcomeDormitory.setFreeBedNumber(freeBedNumber);
-                welcomeDormitory.setStatus(3);
-            } else if (freeBedNumber == 0) {
-                welcomeDormitory.setFreeBedNumber(freeBedNumber);
-                welcomeDormitory.setStatus(1);
+            //修改寝室信息
+            WelcomeDormitory welcomeDormitory = welcomeDormitoryService.getById(bed.getDormitoryId());
+            if (ObjectUtils.isNotEmpty(welcomeDormitory)) {
+                Integer freeBedNumber = welcomeDormitory.getFreeBedNumber();
+                freeBedNumber = freeBedNumber - 1;
+                if (freeBedNumber > 0) {
+                    welcomeDormitory.setFreeBedNumber(freeBedNumber);
+                    welcomeDormitory.setStatus(3);
+                } else if (freeBedNumber == 0) {
+                    welcomeDormitory.setFreeBedNumber(freeBedNumber);
+                    welcomeDormitory.setStatus(1);
+                }
+                boolean result = welcomeDormitoryService.updateById(welcomeDormitory);
+                if (!result) {
+                    logger.error("入住失败2,checkInVo参数:" + JSON.toJSON(checkInVo));
+                    throw new Exception("入住失败!");
+                }
             }
-            welcomeDormitoryService.updateById(welcomeDormitory);
+        } catch (Exception e) {
+            logger.info("入住异常信息:" + e.getMessage());
+            throw new Exception("入住失败!");
         }
-
         return CommonResult.ok();
     }
 
     @Override
+    @AWelcomeLog("退宿")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     @Transactional(rollbackFor = Exception.class)
     public CommonResult checkOutDormitory(Integer bedId) {
         WelcomeBed bed = welcomeBedService.getBedById(bedId);
@@ -1013,6 +1080,10 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("更换床位")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     @Transactional(rollbackFor = Exception.class)
     public CommonResult changeBed(ChangeBedVo changeBedVo) {
         Integer sourceBedId = changeBedVo.getSourceBedId();
@@ -1088,6 +1159,10 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("床位对调")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("床位信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult replaceBed(ReplaceBedVo replaceBedVo) {
         Integer sourceBedId = replaceBedVo.getSourceBedId();
         Integer changeBedId = replaceBedVo.getChangeBedId();

+ 52 - 10
src/main/java/com/template/controller/WelcomeBuildController.java

@@ -3,6 +3,10 @@ package com.template.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeBuildControllerAPI;
 import com.template.common.utils.ExcelUtils;
 import com.template.model.enumModel.eFileType;
@@ -24,7 +28,10 @@ import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -58,9 +65,13 @@ public class WelcomeBuildController implements WelcomeBuildControllerAPI {
 
     @Autowired
     private WelcomeBedService welcomeBedService;
-
+    private static Logger logger = LoggerFactory.getLogger(WelcomeBuildController.class);
 
     @Override
+    @AWelcomeLog("新增楼栋信息")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("楼栋信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveBuild(WelcomeBuild welcomeBuild) {
         String build = welcomeBuild.getBuild();
         LambdaQueryWrapper<WelcomeBuild> wrapper = new LambdaQueryWrapper<>();
@@ -78,26 +89,53 @@ public class WelcomeBuildController implements WelcomeBuildControllerAPI {
     }
 
     @Override
-    public CommonResult deleteBuild(Integer buildId) {
+    @AWelcomeLog("删除楼栋信息")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("楼栋信息")
+    @AWelcomeLevelLog("警告")
+    @Transactional(rollbackFor = {Exception.class})
+    public CommonResult deleteBuild(Integer buildId) throws Exception {
 //        需同步删除寝室和床位
         WelcomeBuild byId = welcomeBuildService.getById(buildId);
         String schoolId = byId.getSchoolId();
         LambdaQueryWrapper<WelcomeBed> wrapperBed = new LambdaQueryWrapper<>();
         wrapperBed.eq(WelcomeBed::getSchoolId, schoolId)
                 .eq(WelcomeBed::getBuildId, buildId);
-        welcomeBedService.remove(wrapperBed);
+        try{
+            boolean resultB= welcomeBedService.remove(wrapperBed);
+            if(!resultB){
+                logger.info("删除楼栋床位失败");
+                throw new Exception("删除楼栋床位失败!");
+            }
 
-        LambdaQueryWrapper<WelcomeDormitory> wrapperDormitory=new LambdaQueryWrapper<>();
-        wrapperDormitory.eq(WelcomeDormitory::getSchoolId,schoolId)
-                        .eq(WelcomeDormitory::getBuildId,buildId);
-        welcomeDormitoryService.remove(wrapperDormitory);
+            LambdaQueryWrapper<WelcomeDormitory> wrapperDormitory=new LambdaQueryWrapper<>();
+            wrapperDormitory.eq(WelcomeDormitory::getSchoolId,schoolId)
+                    .eq(WelcomeDormitory::getBuildId,buildId);
+            boolean resultD = welcomeDormitoryService.remove(wrapperDormitory);
+            if(!resultD){
+                logger.info("删除楼栋寝室失败");
+                throw new Exception("删除楼栋寝室失败!");
+            }
+
+            boolean result = welcomeBuildService.removeById(buildId);
+            if(!result){
+                logger.info("删除楼栋失败");
+                throw new Exception("删除楼栋失败!");
+            }
+        }catch (Exception e){
+            logger.info("删除楼栋异常信息:" + e.getMessage());
+            throw new Exception("删除楼栋失败!");
+        }
 
-        boolean result = welcomeBuildService.removeById(buildId);
 
-        return result ? CommonResult.ok() : CommonResult.fail();
+        return CommonResult.ok();
     }
 
     @Override
+    @AWelcomeLog("编辑楼栋信息")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("楼栋信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateBuild(WelcomeBuild welcomeBuild) {
 
         //先查询是否有当前楼栋信息
@@ -114,7 +152,7 @@ public class WelcomeBuildController implements WelcomeBuildControllerAPI {
 
         }
 
-//        判断楼栋名称是否修改, 是的话需要修改宿舍床位表
+        //判断楼栋名称是否修改, 是的话需要修改宿舍床位表
         WelcomeBuild byId = welcomeBuildService.getById(welcomeBuild.getId());
         if (ObjectUtils.isNotEmpty(byId)) {
             if (!byId.getBuild().equals(welcomeBuild.getBuild()) || !byId.getSchoolId().equals(welcomeBuild.getSchoolId())) {
@@ -152,6 +190,10 @@ public class WelcomeBuildController implements WelcomeBuildControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("导入楼栋信息")
+    @AWelcomeTypeLog("导入")
+    @AWelcomeLogMode("楼栋信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult importBuildExcel(MultipartFile file) throws IOException, ParseException {
         System.out.println("导入楼栋信息");
         if (file.isEmpty() || file.getSize() == 0) {

+ 83 - 31
src/main/java/com/template/controller/WelcomeDormitoryController.java

@@ -3,6 +3,10 @@ package com.template.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeDormitoryControllerAPI;
 import com.template.common.utils.BeanUtil;
 import com.template.common.utils.ExcelUtils;
@@ -24,7 +28,10 @@ import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
@@ -65,7 +72,13 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
     @Autowired
     private WelcomeAccountService welcomeAccountService;
 
+    private static Logger logger = LoggerFactory.getLogger(WelcomeDormitoryController.class);
+
     @Override
+    @AWelcomeLog("新增寝室信息")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("寝室信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveDormitory(WelcomeDormitory welcomeDormitory) {
 
         WelcomeBuild byId = welcomeBuildService.getById(welcomeDormitory.getBuildId());
@@ -99,49 +112,72 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
         }
 
         //动态生成床位
-//        Integer bedNumber = welcomeDormitory.getBedNumber();
-//        ArrayList<WelcomeBed> welcomeBeds = new ArrayList<>();
-//        for (int i = 1; i <= bedNumber; i++) {
-//            WelcomeBed welcomeBed = new WelcomeBed();
-//            welcomeBed.setNumber(i);
-//            welcomeBed.setSchool(welcomeDormitory.getSchool());
-//            welcomeBed.setSchoolId(welcomeDormitory.getSchoolId());
-//            welcomeBed.setBuild(welcomeDormitory.getBuild());
-//            welcomeBed.setBuildId(welcomeDormitory.getBuildId());
-//            welcomeBed.setDormitory(welcomeDormitory.getDormitory());
-//            welcomeBed.setDormitoryId(welcomeDormitory.getId());
-//            welcomeBed.setSex(welcomeDormitory.getSex());
-//            welcomeBed.setCollege(welcomeDormitory.getCollege());
-//            welcomeBed.setCollegeId(welcomeDormitory.getCollegeId());
-//            welcomeBed.setGrade(welcomeDormitory.getGrade());
-//            welcomeBed.setIsCheck(0);
-//            welcomeBed.setRetentionState(welcomeDormitory.getRetentionState());
-//            welcomeBeds.add(welcomeBed);
-//        }
+        Integer bedNumber = welcomeDormitory.getBedNumber();
+        ArrayList<WelcomeBed> welcomeBeds = new ArrayList<>();
+        for (int i = 1; i <= bedNumber; i++) {
+            WelcomeBed welcomeBed = new WelcomeBed();
+            welcomeBed.setNumber(i);
+            welcomeBed.setSchool(welcomeDormitory.getSchool());
+            welcomeBed.setSchoolId(welcomeDormitory.getSchoolId());
+            welcomeBed.setBuild(welcomeDormitory.getBuild());
+            welcomeBed.setBuildId(welcomeDormitory.getBuildId());
+            welcomeBed.setDormitory(welcomeDormitory.getDormitory());
+            welcomeBed.setDormitoryId(welcomeDormitory.getId());
+            welcomeBed.setSex(welcomeDormitory.getSex());
+            welcomeBed.setCollege(welcomeDormitory.getCollege());
+            welcomeBed.setCollegeId(Integer.valueOf(welcomeDormitory.getCollegeId()));
+            welcomeBed.setGrade(welcomeDormitory.getGrade());
+            welcomeBed.setIsCheck(0);
+            welcomeBed.setRetentionState(welcomeDormitory.getRetentionState());
+            welcomeBeds.add(welcomeBed);
+        }
 
-//        if (welcomeBeds != null && welcomeBeds.size() > 0) {
-//            boolean insertBeds = welcomeBedService.saveBatch(welcomeBeds);
-//            if (!insertBeds) {
-//                return CommonResult.fail("新增失败");
-//            }
-//        }
+        if (welcomeBeds != null && welcomeBeds.size() > 0) {
+            boolean insertBeds = welcomeBedService.saveBatch(welcomeBeds);
+            if (!insertBeds) {
+                return CommonResult.fail("新增失败");
+            }
+        }
 
         return CommonResult.ok();
     }
 
     @Override
-    public CommonResult deleteDormitory(Integer dormitoryId) {
+    @AWelcomeLog("删除寝室信息")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("寝室信息")
+    @AWelcomeLevelLog("警告")
+    @Transactional(rollbackFor = {Exception.class})
+    public CommonResult deleteDormitory(Integer dormitoryId) throws Exception {
+
+        try {
+            boolean deleteD =welcomeDormitoryService.removeById(dormitoryId);
+            if(!deleteD){
+                logger.info("删除寝室失败!");
+                throw new Exception("删除寝室失败!");
+            }
+            //        动态删除床位
+            LambdaQueryWrapper<WelcomeBed> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(WelcomeBed::getDormitoryId, dormitoryId);
+            boolean result = welcomeBedService.remove(wrapper);
+            if(!result){
+                logger.info("删除寝室床位失败!");
+                throw new Exception("删除寝室床位失败!");
+            }
+        }catch (Exception e){
+            logger.info("删除寝室异常信息:" + e.getMessage());
+            throw new Exception("删除寝室失败!");
+        }
 
-        welcomeDormitoryService.removeById(dormitoryId);
-        //        动态删除床位
-        LambdaQueryWrapper<WelcomeBed> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(WelcomeBed::getDormitoryId, dormitoryId);
-        welcomeBedService.remove(wrapper);
 
         return CommonResult.ok();
     }
 
     @Override
+    @AWelcomeLog("编辑寝室信息")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("寝室信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateDormitory(WelcomeDormitory welcomeDormitory) {
 
         WelcomeBuild byId = welcomeBuildService.getById(welcomeDormitory.getBuildId());
@@ -361,6 +397,10 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
 
 
     @Override
+    @AWelcomeLog("导入寝室信息")
+    @AWelcomeTypeLog("导入")
+    @AWelcomeLogMode("寝室信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult importDormitoryExcel(MultipartFile file) throws IOException, ParseException {
         System.out.println("导入楼栋信息");
         if (file.isEmpty() || file.getSize() == 0) {
@@ -786,6 +826,10 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
     }
 
     @Override
+    @AWelcomeLog("批量操作寝室信息")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("寝室信息")
+    @AWelcomeLevelLog("信息")
     public CommonResult batchOperation(BatchOperationVo batchOperationVo) {
         List<Integer> dormitoryIds = batchOperationVo.getDormitoryIds();
         LambdaQueryWrapper<WelcomeDormitory> wrapper = new LambdaQueryWrapper<>();
@@ -821,6 +865,10 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
     }
 
     @Override
+    @AWelcomeLog("新增床位楼栋分组")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("床位楼栋分组")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveBedBuildGroup(Integer schoolId, Integer accountId) {
 
         WelcomeAccount account = welcomeAccountService.getById(accountId);
@@ -858,6 +906,10 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
     }
 
     @Override
+    @AWelcomeLog("新增寝室分组")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("寝室分组")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveBedDormitoryGroup(Integer schoolId, Integer buildId, Integer accountId) {
         WelcomeAccount account = welcomeAccountService.getById(accountId);
         if (ObjectUtils.isEmpty(account)) {

+ 8 - 0
src/main/java/com/template/controller/WelcomeFileController.java

@@ -2,6 +2,10 @@ package com.template.controller;
 
 
 import com.jcraft.jsch.*;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeFileControllerAPI;
 import com.template.model.result.CommonResult;
 import com.template.model.vo.UploadFileVo;
@@ -30,6 +34,10 @@ public class WelcomeFileController implements WelcomeFileControllerAPI {
      * @throws Exception
      */
     @Override
+    @AWelcomeLog("文件上传")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("文件上传")
+    @AWelcomeLevelLog("信息")
     public CommonResult uploadFile(MultipartFile file) throws Exception {
 
         UploadFileVo result = new UploadFileVo();

+ 20 - 0
src/main/java/com/template/controller/WelcomeLogController.java

@@ -0,0 +1,20 @@
+package com.template.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 操作日志表 前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2026-06-08
+ */
+@RestController
+public class WelcomeLogController {
+
+}
+

+ 20 - 0
src/main/java/com/template/controller/WelcomePaySettingController.java

@@ -1,6 +1,10 @@
 package com.template.controller;
 
 
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomePaySettingControllerAPI;
 import com.template.common.utils.ExcelUtils;
 import com.template.common.utils.paramUtils;
@@ -61,6 +65,10 @@ public class WelcomePaySettingController implements WelcomePaySettingControllerA
     }
 
     @Override
+    @AWelcomeLog("新增缴费设置")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("缴费设置")
+    @AWelcomeLevelLog("信息")
     public CommonResult insertPaySetting(insertPaySettingRequest psr, BindingResult bindingResult) {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
@@ -86,6 +94,10 @@ public class WelcomePaySettingController implements WelcomePaySettingControllerA
     }
 
     @Override
+    @AWelcomeLog("编辑缴费设置")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("缴费设置")
+    @AWelcomeLevelLog("信息")
     public CommonResult updatePaySetting(updatePaySettingRequest psr, BindingResult bindingResult) {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
@@ -115,12 +127,20 @@ public class WelcomePaySettingController implements WelcomePaySettingControllerA
     }
 
     @Override
+    @AWelcomeLog("删除缴费设置")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("缴费设置")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteDormitory(Integer id) {
         int result = welcomePaySettingService.deleteWelcomePaySettingById(id);
         return result < 0 ? CommonResult.fail("删除失败") : CommonResult.ok("删除成功");
     }
 
     @Override
+    @AWelcomeLog("导入缴费设置")
+    @AWelcomeTypeLog("导入")
+    @AWelcomeLogMode("缴费设置")
+    @AWelcomeLevelLog("信息")
     public CommonResult importPaySettingExcel(MultipartFile file) throws IOException, ParseException {
         if (file.isEmpty() || file.getSize() == 0) {
             return CommonResult.fail("导入文件不能为空");

+ 16 - 0
src/main/java/com/template/controller/WelcomeRoleController.java

@@ -3,6 +3,10 @@ package com.template.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeRoleControllerAPI;
 import com.template.model.pojo.WelcomeAccount;
 import com.template.model.pojo.WelcomeRole;
@@ -33,6 +37,10 @@ public class WelcomeRoleController implements WelcomeRoleControllerAPI {
     WelcomeAccountService welcomeAccountService;
 
     @Override
+    @AWelcomeLog("新增角色管理")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("角色管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveRole(WelcomeRole welcomeRole) {
         String roleName = welcomeRole.getRoleName();
         LambdaQueryWrapper<WelcomeRole> wrapper=new LambdaQueryWrapper<>();
@@ -45,6 +53,10 @@ public class WelcomeRoleController implements WelcomeRoleControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("删除角色管理")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("角色管理")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteRole(Integer roleId) {
 //          判断该角色是否还有账号在使用
         LambdaQueryWrapper<WelcomeAccount> wrapper=new LambdaQueryWrapper<>();
@@ -57,6 +69,10 @@ public class WelcomeRoleController implements WelcomeRoleControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("编辑角色管理")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("角色管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateRole(WelcomeRole welcomeRole) {
         String roleName = welcomeRole.getRoleName();
 

+ 16 - 0
src/main/java/com/template/controller/WelcomeSchoolController.java

@@ -1,6 +1,10 @@
 package com.template.controller;
 
 
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeSchoolControllerAPI;
 import com.template.model.pojo.WelcomeSchool;
 import com.template.model.result.CommonResult;
@@ -25,16 +29,28 @@ public class WelcomeSchoolController implements WelcomeSchoolControllerAPI {
 
 
     @Override
+    @AWelcomeLog("新增校区管理")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("校区管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveSchool(WelcomeSchool WelcomeSchool) {
         return welcomeSchoolService.save(WelcomeSchool)?CommonResult.ok():CommonResult.fail();
     }
 
     @Override
+    @AWelcomeLog("删除校区管理")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("校区管理")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteSchool(Integer schoolId) {
         return welcomeSchoolService.removeById(schoolId)?CommonResult.ok():CommonResult.fail();
     }
 
     @Override
+    @AWelcomeLog("编辑校区管理")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("校区管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateSchool(WelcomeSchool welcomeSchool) {
         return welcomeSchoolService.updateById(welcomeSchool)?CommonResult.ok():CommonResult.fail();
     }

+ 62 - 16
src/main/java/com/template/controller/WelcomeStudentController.java

@@ -7,6 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeStudentControllerAPI;
 import com.template.common.utils.*;
 import com.template.model.enumModel.eFileType;
@@ -106,6 +110,10 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     private static Logger logger = LoggerFactory.getLogger(WelcomeStudentController.class);
 
     @Override
+    @AWelcomeLog("新增学生信息管理")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("学生信息管理")
+    @AWelcomeLevelLog("信息")
     @Transactional(rollbackFor = {Exception.class})
     public CommonResult insertStudentInfo(InsertStudentRequest isr, BindingResult bindingResult) throws Exception {
 
@@ -285,6 +293,10 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("编辑学生信息管理")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("学生信息管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateStudentInfo(updateStudentRequest usr, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
@@ -478,7 +490,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
 
     @Override
-    public CommonResult queryPageStudents(String userId, int currentPage, int pageCount, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name, String fillStatus, Integer isRegistered,Integer isPay,Integer isCheck,String school,String batchValue,Integer carNumber) {
+    public CommonResult queryPageStudents(String userId, int currentPage, int pageCount, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name, String fillStatus, Integer isRegistered, Integer isPay, Integer isCheck, String school, String batchValue, Integer carNumber) {
         IPage<StudentPageVo> pages = new Page<>();
         PageUtils<StudentPageVo> result = new PageUtils<>(pages);
         WelcomeAccount wa = welcomeAccountService.getManageById(userId);
@@ -496,7 +508,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
                 collegeIds.add(String.valueOf(collegeId));
             }
         }
-        result = welcomeStudentService.queryStudentPageList(currentPage, pageCount, collegeIds, majorId, classstrId, trafficMethod, name, fillStatus, isRegistered,isPay,isCheck,school,batchValue,carNumber);
+        result = welcomeStudentService.queryStudentPageList(currentPage, pageCount, collegeIds, majorId, classstrId, trafficMethod, name, fillStatus, isRegistered, isPay, isCheck, school, batchValue, carNumber);
         return CommonResult.ok(result);
     }
 
@@ -623,6 +635,10 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("采集学生信息管理")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("学生信息管理")
+    @AWelcomeLevelLog("信息")
     @Transactional(rollbackFor = {Exception.class})
     public CommonResult infoCollection(InfoCollectionRequest icr, BindingResult bindingResult) throws Exception {
         logger.info("采集学生信息失败,icr参数:" + JSON.toJSON(icr));
@@ -804,6 +820,10 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("删除学生信息管理")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("学生信息管理")
+    @AWelcomeLevelLog("警告")
     @Transactional(rollbackFor = {Exception.class})
     public CommonResult deleteStudentInfo(int id) throws Exception {
         System.out.println("删除了学生信息:" + id);
@@ -867,6 +887,10 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("导入学生信息管理")
+    @AWelcomeTypeLog("导入")
+    @AWelcomeLogMode("学生信息管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult importStudentExcel(MultipartFile file) throws IOException, ParseException {
         System.out.println("导入学生信息");
         if (file.isEmpty() || file.getSize() == 0) {
@@ -1523,7 +1547,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
 
     @Override
-    public void welcomeStudentExport(String userId, HttpServletResponse response, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name, String fillStatus,Integer isRegistered,Integer isPay,Integer isCheck,String school,String batchValue,Integer carNumber) {
+    public void welcomeStudentExport(String userId, HttpServletResponse response, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name, String fillStatus, Integer isRegistered, Integer isPay, Integer isCheck, String school, String batchValue, Integer carNumber) {
         Workbook workbook = new XSSFWorkbook();
         Sheet sheet = workbook.createSheet("学生信息");
         WelcomeAccount wa = welcomeAccountService.getManageById(userId);
@@ -1542,8 +1566,10 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
             }
         }
 
-        List<StudentPageVo> result = welcomeStudentService.queryStudentList(collegeIds, majorId, classstrId, trafficMethod, name, fillStatus,isRegistered,isPay,isCheck,school,batchValue,carNumber);
+        List<StudentPageVo> result = welcomeStudentService.queryStudentList(collegeIds, majorId, classstrId, trafficMethod, name, fillStatus, isRegistered, isPay, isCheck, school, batchValue, carNumber);
         //导出
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
         Row headerRow = sheet.createRow(0);
         headerRow.createCell(0).setCellValue("序号");
@@ -1565,6 +1591,8 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
         headerRow.createCell(16).setCellValue("学生手机号");
         headerRow.createCell(17).setCellValue("家长名称");
         headerRow.createCell(18).setCellValue("家长手机号");
+        headerRow.createCell(19).setCellValue("到站日期");
+        headerRow.createCell(20).setCellValue("是否已报到");
 
         for (int i = 0; i < result.size(); i++) {
             StudentPageVo studentData = result.get(i);
@@ -1588,6 +1616,20 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
             dataRow.createCell(16).setCellValue(studentData.getPhone());
             dataRow.createCell(17).setCellValue(studentData.getFamilyName());
             dataRow.createCell(18).setCellValue(studentData.getFamilyPhone());
+            if (ObjectUtils.isNotEmpty(studentData.getArrvieDate())) {
+                String arrvieDate = LocalDateTime.parse(studentData.getArrvieDate(), dateTimeFormatter1).toLocalDate().format(dateTimeFormatter2);
+                dataRow.createCell(19).setCellValue(arrvieDate);
+            }
+            String registered="未报到";
+            if (ObjectUtils.isNotEmpty(studentData.getIsRegistered())) {
+                Integer isRegistered1 = studentData.getIsRegistered();
+                if (isRegistered1==1) {
+                    registered="已报到";
+                }else if (isRegistered1==2){
+                    registered="未报到";
+                }
+            }
+            dataRow.createCell(20).setCellValue(registered);
         }
         // 将工作簿写入文件
         ExcelUtils.excelDownload(workbook, "学生信息.xlsx", response);
@@ -1596,7 +1638,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     @Override
     public CommonResult studentOverview(Integer collegeId) {
 //        获取学生总数
-        int enrollmentTotal=welcomeStudentService.studentTotalCount(collegeId);
+        int enrollmentTotal = welcomeStudentService.studentTotalCount(collegeId);
         //        录取总数
         //        LambdaQueryWrapper<WelcomeStudent> queryWrapper=new LambdaQueryWrapper<>();
         //        queryWrapper.eq(WelcomeStudent::getIdenType,1);
@@ -1613,7 +1655,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
         LambdaQueryWrapper<WelcomeBed> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(WelcomeBed::getIsCheck, 1)
                 .eq(WelcomeBed::getRetentionState, 1)
-                .eq(ObjectUtils.isNotEmpty(collegeId),WelcomeBed::getCollegeId,collegeId);
+                .eq(ObjectUtils.isNotEmpty(collegeId), WelcomeBed::getCollegeId, collegeId);
         int checkInBedTotal = welcomeBedService.count(wrapper);
 
         //        报到率
@@ -1656,7 +1698,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     @Override
     public CommonResult studentRegister(Integer collegeId) {
 //        学生总数
-        int enrollmentTotal=welcomeStudentService.studentTotalCount(collegeId);
+        int enrollmentTotal = welcomeStudentService.studentTotalCount(collegeId);
         //        获取总数
         Integer count = welcomeStudentService.totalCount(collegeId);
 //        获取比例
@@ -1937,6 +1979,10 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("学生报到")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("学生信息管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult isRegistered(WelcomeStudent welcomeStudent) {
         boolean update = welcomeStudentService.updateById(welcomeStudent);
         return update ? CommonResult.ok() : CommonResult.fail();
@@ -1945,7 +1991,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     @Override
     public CommonResult levelRegister(Integer collegeId) {
 //        获取学生总数
-        int enrollmentTotal=welcomeStudentService.studentTotalCount(collegeId);
+        int enrollmentTotal = welcomeStudentService.studentTotalCount(collegeId);
 
         //        获取报到总数
         Integer count = welcomeStudentService.totalCount(collegeId);
@@ -1958,16 +2004,16 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
         vo.setRate(rate);
         vo.setTotalCount(enrollmentTotal);
 
-        String bk="本科";
-        String zsb="专升本";
-        String zk="专科";
+        String bk = "本科";
+        String zsb = "专升本";
+        String zk = "专科";
 
 //        获取总本科人数
-        Integer bkCount = welcomeStudentService.getLevelTotalCount(bk,collegeId);
+        Integer bkCount = welcomeStudentService.getLevelTotalCount(bk, collegeId);
 //        获取总专升本人数
-        Integer zsbCount = welcomeStudentService.getLevelTotalCount(zsb,collegeId);
+        Integer zsbCount = welcomeStudentService.getLevelTotalCount(zsb, collegeId);
 //        获取总专科人数
-        Integer zkCount = welcomeStudentService.getLevelTotalCount(zk,collegeId);
+        Integer zkCount = welcomeStudentService.getLevelTotalCount(zk, collegeId);
 
         List<StudentRegisterVo> vos = welcomeStudentService.levelRegister(collegeId);
         HashMap<String, StudentRegisterVo> map = new HashMap<>();
@@ -1978,12 +2024,12 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
                 String rate1 = String.format("%.2f", result1);
                 studentRegisterVo.setRate(rate1);
                 studentRegisterVo.setTotalCount(bkCount);
-            }else if (studentRegisterVo.getName().equals(zsb)){
+            } else if (studentRegisterVo.getName().equals(zsb)) {
                 Double result1 = ((double) count1 / zsbCount) * 100;
                 String rate1 = String.format("%.2f", result1);
                 studentRegisterVo.setRate(rate1);
                 studentRegisterVo.setTotalCount(zsbCount);
-            }else if (studentRegisterVo.getName().equals(zk)){
+            } else if (studentRegisterVo.getName().equals(zk)) {
                 Double result1 = ((double) count1 / zkCount) * 100;
                 String rate1 = String.format("%.2f", result1);
                 studentRegisterVo.setRate(rate1);

+ 20 - 4
src/main/java/com/template/controller/WelcomeStudentDormitoryController.java

@@ -3,6 +3,10 @@ package com.template.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeStudentDormitoryControllerAPI;
 import com.template.model.pojo.WelcomeDormitory;
 import com.template.model.pojo.WelcomeStudent;
@@ -40,6 +44,10 @@ public class WelcomeStudentDormitoryController implements WelcomeStudentDormitor
     WelcomeDormitoryService welcomeDormitoryService;
 
     @Override
+    @AWelcomeLog("添加学生住宿信息")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("学生住宿管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult saveStudentDormitory(WelcomeStudentDormitory welcomeStudentDormitory) {
         LambdaQueryWrapper<WelcomeStudentDormitory> wrapper=new LambdaQueryWrapper<>();
         wrapper.eq(WelcomeStudentDormitory::getStudentCard,welcomeStudentDormitory.getStudentCard());
@@ -47,19 +55,27 @@ public class WelcomeStudentDormitoryController implements WelcomeStudentDormitor
         if (ObjectUtils.isNotEmpty(one)) {
             return CommonResult.fail("该学生已有床位");
         }
-        welcomeStudentDormitoryService.save(welcomeStudentDormitory);
-        return CommonResult.ok();
+        boolean result = welcomeStudentDormitoryService.save(welcomeStudentDormitory);
+        return result ? CommonResult.ok() : CommonResult.fail();
     }
 
     @Override
+    @AWelcomeLog("删除学生住宿信息")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("学生住宿管理")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteStudentDormitory(Integer studentDormitoryId) {
-        welcomeStudentDormitoryService.removeById(studentDormitoryId);
-        return CommonResult.ok();
+        boolean result = welcomeStudentDormitoryService.removeById(studentDormitoryId);
+        return result ? CommonResult.ok() : CommonResult.fail();
     }
 
 
 
     @Override
+    @AWelcomeLog("提交学生住宿信息")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("学生住宿管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult submit(WelcomeStudentDormitory welcomeStudentDormitory) {
         String studentCard = welcomeStudentDormitory.getStudentCard();
         LambdaQueryWrapper<WelcomeStudentDormitory> wrapper=new LambdaQueryWrapper<>();

+ 26 - 2
src/main/java/com/template/controller/WelcomeVisitorController.java

@@ -2,6 +2,10 @@ package com.template.controller;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
 import com.template.api.WelcomeVisitorControllerAPI;
 import com.template.common.exception.MyCustomException;
 import com.template.common.result.ResponseStatusEnum;
@@ -29,6 +33,10 @@ public class WelcomeVisitorController implements WelcomeVisitorControllerAPI {
 
 
     @Override
+    @AWelcomeLog("新增访客信息")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("访客信息管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult addVisitor(String studentCard, WelcomeVisitorRequest visitorRequest) {
         welcomeVisitorService.addVisitor(studentCard, visitorRequest);
         return CommonResult.ok();
@@ -47,9 +55,13 @@ public class WelcomeVisitorController implements WelcomeVisitorControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("删除访客信息")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("访客信息管理")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteByCurUser(String studentCard) {
-        welcomeVisitorService.deleteByCurUser(studentCard);
-        return CommonResult.ok();
+        boolean result = welcomeVisitorService.deleteByCurUser(studentCard);
+        return result ? CommonResult.ok() : CommonResult.fail();
     }
 
     @Override
@@ -59,6 +71,10 @@ public class WelcomeVisitorController implements WelcomeVisitorControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("管理员新增访客信息")
+    @AWelcomeTypeLog("新增")
+    @AWelcomeLogMode("访客信息管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult addVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
         if (StrUtil.isBlank(visitorRequest.getStudentCard())) {
             throw new MyCustomException(ResponseStatusEnum.SEND_PARAMS);
@@ -70,6 +86,10 @@ public class WelcomeVisitorController implements WelcomeVisitorControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("管理员编辑访客信息")
+    @AWelcomeTypeLog("编辑")
+    @AWelcomeLogMode("访客信息管理")
+    @AWelcomeLevelLog("信息")
     public CommonResult updateVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
         if (ObjectUtil.isNull(visitorRequest.getId())) {
             throw new MyCustomException(ResponseStatusEnum.SEND_PARAMS);
@@ -80,6 +100,10 @@ public class WelcomeVisitorController implements WelcomeVisitorControllerAPI {
     }
 
     @Override
+    @AWelcomeLog("批量删除访客信息")
+    @AWelcomeTypeLog("删除")
+    @AWelcomeLogMode("访客信息管理")
+    @AWelcomeLevelLog("警告")
     public CommonResult deleteByIds(List<Long> ids) {
         int result = welcomeVisitorService.deleteData(ids);
         return result > 0 ? CommonResult.ok() : CommonResult.fail();

+ 11 - 0
src/main/java/com/template/core/JwtAuthenticationInterceptor.java

@@ -40,6 +40,17 @@ public class JwtAuthenticationInterceptor implements HandlerInterceptor {
         if (method.isAnnotationPresent(PassToken.class)) {
             PassToken passToken = method.getAnnotation(PassToken.class);
             if (passToken.requeired()) {
+                String token = request.getHeader("token");
+                Integer userId = 0;//匿名访问
+                if (StringUtils.hasText(token)) {
+                    Map<String, Claim> stringClaimMap = JWTUtil.verifyToken(token);
+                    if (ObjectUtils.isNotEmpty(stringClaimMap)) { // 登录
+                        userId = stringClaimMap.get("userId").asInt();
+                    }
+                }
+
+                request.setAttribute("userId", userId);
+
                 return true;
             }
         }

+ 21 - 0
src/main/java/com/template/mapper/WelcomeLogMapper.java

@@ -0,0 +1,21 @@
+package com.template.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.template.model.pojo.WelcomeLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.template.model.vo.LogVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 操作日志表 Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2026-06-08
+ */
+@Repository
+public interface WelcomeLogMapper extends BaseMapper<WelcomeLog> {
+    IPage<LogVo> queryLogPages(IPage<LogVo> page, @Param("userName") String userName, @Param("operMode") String operMode, @Param("olevelId") Integer olevelId, @Param("startTime") String startTime, @Param("endTime") String endTime);
+}

+ 62 - 0
src/main/java/com/template/model/enumModel/eLogLevel.java

@@ -0,0 +1,62 @@
+package com.template.model.enumModel;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/17 星期一 9:50
+ * @Description: com.template.model.enumModel
+ * @Version: 1.0
+ */
+public enum eLogLevel {
+    Info(1),//信息
+    Warning(2),//警告
+    Error(3);//错误
+
+    private int value;
+
+    eLogLevel(int value){
+        this.value = value;
+    }
+
+    public int getValue() {
+        return value;
+    }
+    public static eLogLevel valueOf(int value) {
+        switch (value) {
+            case 1:
+                return eLogLevel.Info;
+            case 2:
+                return eLogLevel.Warning;
+            case 3:
+                return eLogLevel.Error;
+            default:
+                return null;
+        }
+    }
+
+    public static String stringOf(Integer value) {
+        switch (value) {
+            case 1:
+                return "信息";
+            case 2:
+                return "警告";
+            case 3:
+                return "错误";
+            default:
+                return null;
+        }
+    }
+
+    public static Integer integerOf(String value) {
+        switch (value) {
+            case "信息":
+                return 1;
+            case "警告":
+                return 2;
+            case "错误":
+                return 3;
+            default:
+                return null;
+        }
+    }
+
+}

+ 75 - 0
src/main/java/com/template/model/enumModel/eLogType.java

@@ -0,0 +1,75 @@
+package com.template.model.enumModel;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/17 星期一 9:50
+ * @Description: com.template.model.enumModel
+ * @Version: 1.0
+ */
+public enum eLogType {
+    Del(1),//删除
+    Upd(2),//编辑
+    App(3),//审核
+    Ins(4),//新增
+    Login(5);//登录
+
+    private int value;
+
+    eLogType(int value){
+        this.value = value;
+    }
+
+    public int getValue() {
+        return value;
+    }
+    public static eLogType valueOf(int value) {
+        switch (value) {
+            case 1:
+                return eLogType.Del;
+            case 2:
+                return eLogType.Upd;
+            case 3:
+                return eLogType.App;
+            case 4:
+                return eLogType.Ins;
+            case 5:
+                return eLogType.Login;
+            default:
+                return null;
+        }
+    }
+
+    public static String stringOf(Integer value) {
+        switch (value) {
+            case 1:
+                return "删除";
+            case 2:
+                return "编辑";
+            case 3:
+                return "审核";
+            case 4:
+                return "新增";
+            case 5:
+                return "登录";
+            default:
+                return null;
+        }
+    }
+
+    public static Integer integerOf(String value) {
+        switch (value) {
+            case "删除":
+                return 1;
+            case "编辑":
+                return 2;
+            case "审核":
+                return 3;
+            case "新增":
+                return 4;
+            case "登录":
+                return 5;
+            default:
+                return null;
+        }
+    }
+}

+ 42 - 0
src/main/java/com/template/model/enumModel/eUserType.java

@@ -0,0 +1,42 @@
+package com.template.model.enumModel;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/17 星期一 9:50
+ * @Description: com.template.model.enumModel
+ * @Version: 1.0
+ */
+public enum eUserType {
+    Student(1),//学生
+    Pcuser(2);//管理员
+
+    private int value;
+
+    eUserType(int value){
+        this.value = value;
+    }
+
+    public int getValue() {
+        return value;
+    }
+    public static eUserType valueOf(int value) {
+        switch (value) {
+            case 1:
+                return eUserType.Student;
+            case 2:
+                return eUserType.Pcuser;
+            default:
+                return null;
+        }
+    }
+    public static String stringOf(Integer value) {
+        switch (value) {
+            case 1:
+                return "学生";
+            case 2:
+                return "管理员";
+            default:
+                return null;
+        }
+    }
+}

+ 102 - 0
src/main/java/com/template/model/pojo/WelcomeLog.java

@@ -0,0 +1,102 @@
+package com.template.model.pojo;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 操作日志表
+ * </p>
+ *
+ * @author ceshi
+ * @since 2026-06-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="WelcomeLog对象", description="操作日志表")
+public class WelcomeLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "日志ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "操作用户")
+    private String userName;
+
+    @ApiModelProperty(value = "操作用户")
+    private Integer userId;
+
+    @ApiModelProperty(value = "操作类型ID")
+    private Integer otypeId;
+
+    @ApiModelProperty(value = "操作类型")
+    private String otype;
+
+    @ApiModelProperty(value = "操作模块")
+    private String operMode;
+
+    @ApiModelProperty(value = "操作内容")
+    private String operation;
+
+    @ApiModelProperty(value = "日志级别ID")
+    private Integer olevelId;
+
+    @ApiModelProperty(value = "操作人员类型 学生1 管理员2")
+    private Integer userType;
+
+    @ApiModelProperty(value = "日志级别")
+    private String olevel;
+
+    @ApiModelProperty(value = "耗时")
+    private BigDecimal time;
+
+    @ApiModelProperty(value = "操作方法")
+    private String method;
+
+    @ApiModelProperty(value = "方法参数")
+    private String params;
+
+    @ApiModelProperty(value = "操作者IP")
+    private String ip;
+
+    @ApiModelProperty(value = "学号或者账号")
+    private String accountNum;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    @ApiModelProperty(value = "创建人员")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @ApiModelProperty(value = "更新人员")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @ApiModelProperty(value = "逻辑删除 未删除:0;删除:1")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleted;
+
+
+}

+ 44 - 0
src/main/java/com/template/model/vo/LogVo.java

@@ -0,0 +1,44 @@
+package com.template.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: xwt
+ * @Date: 2025/6/16 星期一 11:28
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class LogVo {
+    @ApiModelProperty(value = "日志ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "操作时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @ApiModelProperty(value = "账号或学号")
+    private String accountNum;
+
+    @ApiModelProperty(value = "操作用户")
+    private String userName;
+
+    @ApiModelProperty(value = "操作模块")
+    private String operMode;
+
+    @ApiModelProperty(value = "操作类型")
+    private String otype;
+
+    @ApiModelProperty(value = "操作内容")
+    private String operation;
+
+    @ApiModelProperty(value = "操作者IP")
+    private String ip;
+
+    @ApiModelProperty(value = "日志级别")
+    private String olevel;
+}

+ 4 - 0
src/main/java/com/template/model/vo/StudentPageVo.java

@@ -1,5 +1,6 @@
 package com.template.model.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -77,4 +78,7 @@ public class StudentPageVo {
     @ApiModelProperty(value = "家长手机号")
     private String familyPhone;
 
+    @ApiModelProperty(value = "到站日期")
+    private String arrvieDate;
+
 }

+ 2 - 0
src/main/java/com/template/services/WelcomeBedService.java

@@ -89,4 +89,6 @@ public interface WelcomeBedService extends IService<WelcomeBed> {
     List<BedInfosVo> queryBedList(String studentCard);
 
     void updateBuild(String schoolId, Integer buildId, String build,String school);
+
+    WelcomeBed getBedByAdmissNum(String admissNum);
 }

+ 26 - 0
src/main/java/com/template/services/WelcomeLogService.java

@@ -0,0 +1,26 @@
+package com.template.services;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.template.model.pojo.WelcomeLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.LogVo;
+import org.aspectj.lang.ProceedingJoinPoint;
+
+/**
+ * <p>
+ * 操作日志表 服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2026-06-08
+ */
+public interface WelcomeLogService extends IService<WelcomeLog> {
+    int insertWelcomeLogP(ProceedingJoinPoint point, WelcomeLog wl) throws JsonProcessingException;
+
+    int insertWelcomeLog(WelcomeLog wl);
+
+    int updateWelcomeLog(WelcomeLog wl);
+
+    PageUtils<LogVo> queryLogPages(int currentPage, int pageCount, String userName, String operMode, Integer olevelId, String startTime, String endTime);
+}

+ 1 - 1
src/main/java/com/template/services/WelcomeVisitorService.java

@@ -41,7 +41,7 @@ public interface WelcomeVisitorService extends IService<WelcomeVisitor> {
      * 删除当前用户的访客记录
      * @param studentCard 学生身份证号
      */
-    void deleteByCurUser(String studentCard);
+    boolean deleteByCurUser(String studentCard);
 
     /**
      * 管理员新增访客记录

+ 8 - 0
src/main/java/com/template/services/impl/WelcomeBedServiceImpl.java

@@ -462,4 +462,12 @@ public class WelcomeBedServiceImpl extends ServiceImpl<WelcomeBedMapper, Welcome
         welcomeBedMapper.updateBuild(schoolId,buildId,build,school);
     }
 
+    @Override
+    public WelcomeBed getBedByAdmissNum(String admissNum) {
+        QueryWrapper<WelcomeBed> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("card_num", admissNum);
+        WelcomeBed welcomeBed = welcomeBedMapper.selectOne(queryWrapper);
+        return welcomeBed;
+    }
+
 }

+ 203 - 0
src/main/java/com/template/services/impl/WelcomeLogServiceImpl.java

@@ -0,0 +1,203 @@
+package com.template.services.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.template.annotation.AWelcomeLevelLog;
+import com.template.annotation.AWelcomeLog;
+import com.template.annotation.AWelcomeLogMode;
+import com.template.annotation.AWelcomeTypeLog;
+import com.template.common.utils.AesUtils;
+import com.template.model.enumModel.eLogLevel;
+import com.template.model.enumModel.eLogType;
+import com.template.model.pojo.WelcomeAccount;
+import com.template.model.pojo.WelcomeLog;
+import com.template.mapper.WelcomeLogMapper;
+import com.template.model.pojo.WelcomeStudent;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.LogVo;
+import com.template.services.WelcomeAccountService;
+import com.template.services.WelcomeLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.template.services.WelcomeStudentService;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.*;
+
+/**
+ * <p>
+ * 操作日志表 服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2026-06-08
+ */
+@Service
+public class WelcomeLogServiceImpl extends ServiceImpl<WelcomeLogMapper, WelcomeLog> implements WelcomeLogService {
+    @Autowired
+    private WelcomeLogMapper welcomeLogMapper;
+    @Autowired
+    private WelcomeAccountService welcomeAccountService;
+    @Autowired
+    private WelcomeStudentService welcomeStudentService;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Override
+    public int insertWelcomeLogP(ProceedingJoinPoint point, WelcomeLog log) throws JsonProcessingException {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        Method method = signature.getMethod();
+
+        AWelcomeLog logAnnotation = method.getAnnotation(AWelcomeLog.class);
+        AWelcomeTypeLog logType = method.getAnnotation(AWelcomeTypeLog.class);
+        AWelcomeLogMode logMode = method.getAnnotation(AWelcomeLogMode.class);
+        AWelcomeLevelLog logLevel = method.getAnnotation(AWelcomeLevelLog.class);
+        if (logAnnotation != null) {
+            // 注解上的描述
+            log.setOperation(logAnnotation.value());
+            String typeStr = logType.value();
+            log.setOtype(typeStr);
+            log.setOtypeId(eLogType.integerOf(typeStr));
+            log.setOperMode(logMode.value());
+            log.setOlevel(logLevel.value());
+            log.setOlevelId(eLogLevel.integerOf(logLevel.value()));
+
+        }
+        // 请求的类名
+        String className = point.getTarget().getClass().getName();
+        // 请求的方法名
+        String methodName = signature.getName();
+        log.setMethod(className + "." + methodName + "()");
+        // 请求的方法参数值
+        Object[] args = point.getArgs();
+        // 请求的方法参数名称
+        LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
+        String[] paramNames = u.getParameterNames(method);
+        if (args != null && paramNames != null) {
+            StringBuilder params = new StringBuilder();
+            params = handleParams(params, args, Arrays.asList(paramNames));
+            log.setParams(params.toString());
+            if (methodName.equals("account")) {
+                int startIndex = log.getParams().indexOf("=") + 1;
+                int endIndex = log.getParams().lastIndexOf(", password=");
+                String account = log.getParams().substring(startIndex, endIndex);
+                if (StringUtils.hasText(account)) {
+                    WelcomeAccount accountData = welcomeAccountService.getDataByAccount(account);
+                    if (accountData != null) {
+                        log.setUserId(accountData.getId());
+                        log.setUserName(accountData.getName());
+                        log.setAccountNum(accountData.getAccount());
+                        int passwordstartIndex = log.getParams().indexOf("password=") + 9;
+                        int passwordendIndex = log.getParams().lastIndexOf(") bindingResult:");
+                        String password = log.getParams().substring(passwordstartIndex, passwordendIndex);
+                        String encPassword = AesUtils.encrypt(password);
+                        if (!encPassword.equals(accountData.getPassword())) {
+                            log.setOperation(log.getOperation()+"失败");
+                        }
+                    } else {
+                        log.setOperation(log.getOperation()+"失败");
+                        log.setUserName("未知用户");
+                        log.setOlevel(eLogLevel.stringOf(eLogLevel.Error.getValue()));
+                        log.setOlevelId(eLogLevel.Error.getValue());
+                    }
+                }
+            }else if(methodName.equals("admissNum")){
+                int startIndex = log.getParams().indexOf("=") + 1;
+                int endIndex = log.getParams().lastIndexOf(", cardId=");
+                String admissNum = log.getParams().substring(startIndex, endIndex);
+                if (StringUtils.hasText(admissNum)) {
+                    WelcomeStudent student = welcomeStudentService.getDataByNum(admissNum);
+                    if (student != null) {
+                        log.setUserId(student.getId());
+                        log.setUserName(student.getName());
+                        log.setAccountNum(student.getAdmissNum());
+                        int passwordstartIndex = log.getParams().indexOf("cardId=") + 9;
+                        int passwordendIndex = log.getParams().lastIndexOf(") bindingResult:");
+                        String password = log.getParams().substring(passwordstartIndex, passwordendIndex);
+                        if (!password.equals(student.getCardId())) {
+                            log.setOperation(log.getOperation()+"失败");
+                        }
+                    } else {
+                        log.setOperation(log.getOperation()+"失败");
+                        log.setUserName("未知用户");
+                        log.setOlevel(eLogLevel.stringOf(eLogLevel.Error.getValue()));
+                        log.setOlevelId(eLogLevel.Error.getValue());
+                    }
+                }
+            }
+        }
+        log.setCreateTime(new Date());
+        // 保存系统日志
+        int result = welcomeLogMapper.insert(log);
+        return result;
+    }
+
+    /**
+     * @param params
+     * @param args
+     * @param paramNames
+     * @description:设置参数
+     * @return: java.lang.StringBuilder
+     * @author: xxx
+     * @Date: 2020/10/19 15:59
+     */
+    private StringBuilder handleParams(StringBuilder params, Object[] args, List paramNames) throws JsonProcessingException {
+        for (int i = 0; i < args.length; i++) {
+            if (args[i] instanceof Map) {
+                Set set = ((Map) args[i]).keySet();
+                List<Object> list = new ArrayList<>();
+                List<Object> paramList = new ArrayList<>();
+                for (Object key : set) {
+                    list.add(((Map) args[i]).get(key));
+                    paramList.add(key);
+                }
+                return handleParams(params, list.toArray(), paramList);
+            } else {
+                if (args[i] instanceof Serializable) {
+                    Class<?> aClass = args[i].getClass();
+                    try {
+                        aClass.getDeclaredMethod("toString", new Class[]{null});
+                        // 如果不抛出 NoSuchMethodException 异常则存在 toString 方法 ,安全的 writeValueAsString ,否则 走 Object的 toString方法
+                        params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i]));
+                    } catch (NoSuchMethodException e) {
+                        params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i].toString()));
+                    }
+                } else if (args[i] instanceof MultipartFile) {
+                    MultipartFile file = (MultipartFile) args[i];
+                    params.append(" ").append(paramNames.get(i)).append(": ").append(file.getName());
+                } else {
+                    params.append(" ").append(paramNames.get(i)).append(": ").append(args[i]);
+                }
+            }
+        }
+        return params;
+    }
+
+    @Override
+    public int insertWelcomeLog(WelcomeLog al) {
+        int result = welcomeLogMapper.insert(al);
+        return al.getId();
+    }
+
+    @Override
+    public int updateWelcomeLog(WelcomeLog al) {
+        int result = welcomeLogMapper.updateById(al);
+        return result;
+    }
+
+    @Override
+    public PageUtils<LogVo> queryLogPages(int currentPage, int pageCount, String userName, String operMode, Integer olevelId, String startTime, String endTime) {
+        Page<LogVo> page = new Page<>(currentPage, pageCount);
+        IPage<LogVo> result = welcomeLogMapper.queryLogPages(page, userName, operMode, olevelId, startTime, endTime);
+        return new PageUtils(result);
+    }
+}

+ 4 - 2
src/main/java/com/template/services/impl/WelcomeVisitorServiceImpl.java

@@ -110,11 +110,13 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
     }
 
     @Override
-    public void deleteByCurUser(String studentCard) {
+    public boolean deleteByCurUser(String studentCard) {
         LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(WelcomeVisitor::getStudentCard, studentCard);
 
-        remove(queryWrapper);
+        boolean result = remove(queryWrapper);
+
+        return result;
     }
 
     @Override

+ 30 - 0
src/main/resources/mapper/template/WelcomeLogMapper.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.template.mapper.WelcomeLogMapper">
+    <resultMap type="com.template.model.vo.LogVo" id="LogPageMap">
+        <result property="id" column="id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="userName" column="user_name"/>
+        <result property="operMode" column="oper_mode"/>
+        <result property="otype" column="otype"/>
+        <result property="operation" column="operation"/>
+        <result property="ip" column="ip"/>
+        <result property="olevel" column="olevel"/>
+    </resultMap>
+    <select id="queryLogPages" resultType="com.template.model.vo.LogVo" resultMap="LogPageMap">
+        SELECT id,create_time,user_name,oper_mode,otype,operation,ip,olevel FROM `alumni_log`
+        where deleted = 0
+        <if test="userName != null and userName != ''">
+            and user_name like '%' #{userName} '%'
+        </if>
+        <if test="operMode != null and operMode != ''">
+            and oper_mode like '%' #{operMode} '%'
+        </if>
+        <if test="olevelId != null and olevelId != 0">
+            and olevel_id = #{olevelId}
+        </if>
+        <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+            and create_time BETWEEN #{startTime} AND #{endTime}
+        </if>
+    </select>
+</mapper>

+ 43 - 1
src/main/resources/mapper/template/WelcomeStudentMapper.xml

@@ -23,9 +23,19 @@
         select (select count(id) from welcome_accompany where student_card = ws.card_id and deleted = 0) as accompanyNum,
         ws.id,ws.admiss_num,ws.name,ws.card_id,ws.college,ws.major,ws.classstr,
         ws.traffic_method,ws.arrive,ws.amount_payable,ws.pay_amount,ws.fill_status,
-        CONCAT(wsd.build, '-', wsd.dormitory, '-', wsd.number) as dormitory,ws.sex,ws.is_registered as isRegistered
+        CONCAT(wsd.build, '-', wsd.dormitory, '-', wsd.number) as dormitory,ws.sex,ws.is_registered as isRegistered,wv.car_number as carNumber,ws.phone,wf.`name` as familyName,
+        wf.phone as familyPhone,ws.arrvie_date as arrvieDate
         from welcome_student ws
         left join welcome_bed wsd on wsd.deleted =0 and wsd.student_card = ws.card_id
+        left join welcome_visitor wv on wv.deleted =0 and wv.student_card = ws.card_id
+        left join (SELECT
+        f.*
+        FROM
+        welcome_family f
+        WHERE f.deleted=0
+        GROUP BY
+        f.student_card ) wf ON wf.deleted = 0
+        AND wf.student_card = ws.card_id
         where ws.deleted = 0
         <if test="collegeIds != null and collegeIds.size() > 0">
             and ws.college_id in
@@ -59,9 +69,35 @@
         <if test="isPay != null">
             and ws.is_pay = #{isPay}
         </if>
+        <if test="isCheck != null">
+            <if test="isCheck == 1">
+                and wsd.is_check = #{isCheck}
+            </if>
+            <if test="isCheck == 0">
+                and wsd.is_check is null
+            </if>
+        </if>
+        <if test="school != null and school != ''">
+            and ws.school = #{school}
+        </if>
+        <if test="batchValue != null and batchValue != ''">
+            and ws.batch_value = #{batchValue}
+        </if>
+        <if test="carNumber != null">
+            <if test="carNumber == 1">
+                and wv.car_number is not null
+            </if>
+            <if test="carNumber == 0">
+                and wv.car_number is null
+            </if>
+        </if>
         and ws.iden_type != 2
         order by ws.update_time desc
     </select>
+
+
+
+
     <select id="studentRegister" resultType="com.template.model.vo.StudentRegisterVo">
         SELECT count(ws.id) AS count,
 	           wo.`name`
@@ -85,6 +121,9 @@
             ws.deleted = 0
           AND ws.iden_type=1
           AND ws.fill_status = '已填报'
+        <if test="collegeId != null">
+            and ws.college_id = #{collegeId}
+        </if>
         GROUP BY
             traffic_method
     </select>
@@ -171,6 +210,9 @@
             ws.deleted = 0
           AND ws.iden_type=1
           AND ws.is_registered = 1
+         <if test="collegeId != null">
+            and ws.college_id = #{collegeId}
+         </if>
         GROUP BY
             ws.batch_value
     </select>

+ 0 - 37
框架代码说明文档/template.sql

@@ -1,40 +0,0 @@
-/*
- Navicat Premium Data Transfer
-
- Source Server         : localhost
- Source Server Type    : MySQL
- Source Server Version : 80028
- Source Host           : 192.168.161.220:3306
- Source Schema         : repair_report
-
- Target Server Type    : MySQL
- Target Server Version : 80028
- File Encoding         : 65001
-
- Date: 06/07/2023 16:43:22
-*/
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
-DROP TABLE IF EXISTS `repair_admin`;
-CREATE TABLE `repair_admin`  (
-  `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键UUID类型',
-  `account` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '账号',
-  `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
-  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '昵称',
-  `phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手机号',
-  `statu` int(0) NOT NULL COMMENT '状态 正常:0;冻结:1',
-  `create_time` datetime(0) NOT NULL COMMENT '创建时间',
-  `update_time` datetime(0) NOT NULL COMMENT '更新时间',
-  `create_user` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '创建人员',
-  `update_user` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '更新人员',
-  `deleted` int(0) NOT NULL COMMENT '逻辑删除 未删除:0;删除:1',
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `account_un`(`account`) USING BTREE COMMENT '账号唯一'
-) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-SET FOREIGN_KEY_CHECKS = 1;

BIN
框架代码说明文档/自动生成代码说明.docx